TCP/IPの通信の流れ

TCP/IPの4階層構造のネットワークアーキテクチャでどのようにアプリケーションのデータを送受信するかについて見ていきます。例として、Webサイトを見る場合を考えます。Webサイトを見る場合は、WebブラウザとWebサーバアプリケーション間でのデータのやり取りです。そのために利用するプロトコルは、以下の組み合わせです。

  • アプリケーション層:HTTP
  • トランスポート層:TCP
  • インターネット層:IP
  • ネットワークインタフェース層:イーサネット
ネットワークインタフェース層のプロトコルは自由に選ぶことができますが、例としてイーサネットを利用するものとします。

以降で、クライアントPCのWebブラウザからWebサーバのWebサーバアプリケーションへのデータの送信と転送、そして受信の様子を考えていきます。基本的にはOSI参照モデルの場合と同じ流れです。

データの送信側

Webブラウザのデータは、まず、HTTPヘッダでカプセル化されてTCPへ引き渡されます。そして、さらにTCPヘッダが付加され、IPヘッダが付加されます。最後にイーサネットヘッダとFCSが付加されて、ネットワーク上へ送信するデータの全体ができあがります。TCP/IPの上位の階層のプロトコルから下位の階層のプロトコルのヘッダがどんどんカプセル化されていくことになります。

そして、利用しているイーサネットの規格に応じた物理的な信号に変換して、伝送媒体へと送り出していきます。

図 Webブラウザからのデータの送信
FCS(Frame Check Sequence)は、イーサネットのエラーチェック用のトレーラです。

データの転送

伝送媒体へ送り出された物理的な信号は、宛先のWebサーバまでのさまざまなネットワーク機器によって転送されます。ネットワーク機器は、受信した物理的な信号をいったん「0」と「1」のデータに戻します。そして、それぞれのネットワーク機器の動作に応じたヘッダを参照してデータの転送を行っていきます。

図 データの転送

データの受信

Webサーバアプリケーションが動作しているWebサーバまで物理的な信号が送り届けられてくると、「0」と「1」のデータに変換します。そして、イーサネットヘッダを参照して自分宛てのデータであることを確認します。また、FCSによってデータにエラーがないかを確認します。自分宛てのデータであることがわかったら、イーサネットヘッダとFCSを外して、IPへデータの処理を引き渡します。IPでは、IPヘッダを参照して自分宛てのデータであることを確認します。自分宛てのデータであれば、IPヘッダを外してTCPへデータの処理を引き渡します。次にTCPはTCPヘッダを参照して、どのアプリケーションのデータであるかを確認します。TCPはTCPヘッダを外してWebサーバアプリケーションへデータの処理を引き渡します。こうしてWebサーバのWebサーバアプリケーションまでデータが届けられHTTPヘッダやそのあとのデータの部分の処理を行います。

図 Webサーバアプリケーションのデータの受信

TCP/IPの通信の場合も、送信側と受信側は必ず決まっているわけではありません。このあとは、Webサーバアプリケーションがデータの送信側となり、Webブラウザがデータの受信側になります。通信は原則として双方向で行われるということをあらためて意識してください。