Chapter 03

TCP/IP プロトコル

クボ太郎 | Kubota Hideya
クボ太郎 | Kubota Hideya
2020.09.30に更新

プロトコル

通信をするときには、送り手と受け手で同じルール を共有する必要があります。
人間で例えてみると、片方が日本語で話しかけたのに、もう一方が英語でお返事をしたのでは.コミュニケーションが成り立ちませんよね。
それと同じです。

ネットワークの分野では実際に通信を行う際に使われるルールをルールと呼ばず 「プロトコル」 と呼ぶのです。

TCP/IPモデル

ネットワークを勉強する際に、最初に理解しておかなければならない概念は「 TCP/IPモデル 」です。TCP/IPモデルは米国国防高等研究計画局(DARPA)がコンピュータの通信機能を階層構造に分けて整理したモデルです。正直、はじめのうちは「 頭の良い人たちが作った通信するときのプロトコルの集まり 」程度の認識でOKです。

TCP/IPでは, ネットワークを5つの段階に分けて 考えます。各段階を 層(レイヤー) といい、層を分けることを 階層化 と言います。
TCP/IPの階層化では、それぞれのレイヤーが全く違う役割を持ち、別々の動作 するようになっています。こうすることにより、あるレイヤーが 他のレイヤーに影響に及ぼすことがないようにする ことはもちろん、システムに何らかの以上が発生した際に レイヤーごとに検証を行なっていくこと が可能です。

TCP/IPの具体的な構成

TCP/IPはこのような5つの階層に別れており、上に行くほどユーザーに、下に行くほど機器に近い作業を担当します。

階層名 役割 プロトコル例
アプリケーション層 特定のアプリケーションの通信を可能にする HTTP, SMTP, POP3
トランスポート層 データを通信に適した形に変換する TCP, UDP
ネットワーク層 他のコンピュータデータを送るための経路の決定する IP
データリンク層 回線やネットワークで物理的に接続された機器同士のデータの送受信を管理する イーサネット
物理層 データを電気信号や光信号に変換する 通信媒体に依存

TCP/IPではプロトコルの組み合わせを変更することにより、様々なアプリケーションに対応できるようになっています。
例えば、電子メールの送信なら「SMTP+TCP+IP+イーサネット」, 受信なら「POP3+TCP+IP+イーサネット」など 「何をするか」によって利用するプロトコルの組み合わせが変わります

データリンク層と物理層を合わせて、「ネットワークインターフェース層」 ということもあります。

階層同士の連絡方法

ネットワークの通信ではTCP/IPモデルのレイヤーを越えるたびにデータを付加したり、取り除いたりします。データを送り出すサーバーでは、 通信に必要なデータを付加する「カプセル化」 が行われ、データを受け取るクライアント側では、不要になったデータを取り除く「非カプセル化」 が行われます。

難しく書いていますが、「カプセル化は各階層のデータの前(または後ろ)に通信に必要な情報を取り付ける」と「非カプセル化は前(または後ろ)に取り付けたデータを外す」という認識でOKです。

また、ここで データの前(または後ろ)に取り付けられる通信に必要なデータのことを「ヘッダ」 と呼びます。(下の図では緑色の部分がヘッダに該当します)

サーバーで行われる処理「カプセル化」

サーバーでは、 レイヤーの上位から下位に向かって、カプセル化 の処理を行い、転送用のデータを作成します。

工程 行う処理
工程1 【 アプリケーション層 】\\・送信したいデータに {\bf 通信を行う際に必要な情報を付加} する。\\・このデータをトランスポート層へ渡す。
工程2 【 トランポート層 】\\・アプリケーションデータを {\bf 一定の大きさに分割} する。\\・分割したデータに {\bf 再度組み立てるための情報を付加} する。\\・このデータを {\bf セグメント} と呼ぶ。\\・生成したセグメントをネットワーク層に渡す。
工程3 【 ネットワーク層 】\\・セグメントに {\bf 送信先のコンピュータのアドレス(IPアドレス)} などを記載する。\\・このデータを {\bf 「パケット」} と呼ぶ。\\・データリンク層に渡す。
工程4 【 データリンク層 】\\・パケットに {\bf 宛先のコンピュータの識別番号(MACアドレス)} などを記載する。\\・これを {\bf 「フレーム」} と呼ぶ。\\・フレームを物理層に渡す。
工程5 【 物理層 】\\・フレームを信号に乗せやすい {\bf ビット(1と0のみのデータ)に変換} する。\\・それを電気信号や光信号にして送る。

少々、難解なので具体例を見ていきましょう。
例えば、インターネットでサイトを見に行ったとします。すると、次のような要求がネットワークを通して行くようになります。

  1. ブラウザがリクエストメッセージを作成する
  2. OSのTCP/IP処理ソフトがトランスポート層と呼ばれるところにデータを渡す
  3. トランスポート層のTCPというプロトコルでTCPヘッダが付けられる(データの先頭にそういうデータがくっつく)
  4. 続いて、ネットワーク層というところにデータは送られ、ここでIPヘッダ(行き先などのデータ)がくっつく
  5. 次にデータリンク層MACヘッダなどのヘッダ情報がさらにくっつき、LANアダプタからデータが送られる

まぁ、このあたりはデータの頭に随時色々なものをくっつけてから送信するという認識OKです。

クライアントで行われる「非カプセル化」

クライアントではサーバーとは逆に レイヤーの下流から上流に向かって非カプセル化 の処理を行い、受け取った通信用のデータからオリジナルのアプリケーションデータを取り出してます。

工程 行う処理
工程1 【 物理層 】\\・電気信号や光信号ををビットに変換した\\・それを {\bf フレームに変換して}、データリンク層に渡す。
工程2 【 データリンク層 】\\・{\bf フレームからパケットを取り出して}、ネットワーク層に渡す。
工程3 【 ネットワーク層 】\\・パケットのヘッダーに書き込まれた宛先が正しいのかを確認する。\\・{\bf パケットからセグメントを取り出して}、データリンク層に渡す。
工程4 【 トランポート層 】\\・セグメントのヘッダーを確認して、{\bf データを順番通りに並べて組み立てる}。\\・データに問題があればプロトコルに従って対応する。\\・アプリケーション層に{\bf組み上げたデータをアプリケーションデータ}として送る。
工程5 【 アプリケーション層 】\\・アプリケーションデータの\\ {\bf ヘッダーに記載されたプロトコル(HTTP,SMTPなど)に従って}、\\ クライアントアプリケーションに渡す。

これを要約すると「非カプセル化」は 各層で必要なデータをヘッダから取り出して、その際に使用したヘッダを取り除いて、上の層に渡すという行為を繰り返し、復元しつつ、復元できた元々のデータを対応するアプリケーションまで届ける ということになります。

パケット通信

トランスポート層には「データを通信に適した形に変換する」という役割があります。その具体的な内容は「アプリケーションデータの分割」です。
一度に送るデータの大きさが大きすぎると、そのデータが1つの回線をずっと使い続けてしまい、同時に様々なデータが送られる場合にそれらを並列処理することが出来ません。

その為、TCP/IPではアプリケーションデータを 一定の大きさに分割 して送受信する パケット交換 という方法でデータのやり取りを行います。
また、このような通信方法を パケット通信 といいます。

まとめ

  • プロトコル = 「ルール」
  • TCP/IPモデルは ネットワークのプロトコル集まり
  • アプリケーション層は 特定のアプリケーションの通信を可能にする役割 を持つ。
  • トランスポート層は データを通信に適した形に変換する役割 を持つ。
  • ネットワーク層は 他のコンピュータデータを送るための経路の決定する役割 を持つ。
  • データリンク層は 回線やネットワークで物理的に接続された機器同士のデータの送受信を管理する役割 を持つ。
  • 物理層は データを電気信号や光信号に変換する役割 を持つ。
  • カプセル化は 各階層のデータの前と後ろに情報を取り付ける こと。
  • 非カプセル化は 前と後ろに取り付けたデータを外す こと。
  • トランスポート層ではアプリケーションデータを 一定の大きさ(パケット)に分割 する。