複数の転送プロトコルを組み合わせる

データを送受信する通信の主体はアプリケーションです。そして、アプリケーションのデータをネットワーク経由で適切な宛先まで転送します。そのために、以下の転送プロトコルを組み合わせて利用します。

階層プロトコル概要
トランスポート層TCP/UDP 適切なアプリケーションへ振り分ける(ポート番号)
インターネット層 IP アプリケーションが動作しているホストまで転送する(IPアドレス)
ネットワークインタフェース層 イーサネット、無線LAN(Wi-Fi)など 同じネットワーク内のインタフェース間で物理信号を送り届ける(MACアドレスなど)
表 転送プロトコル

適切なアプリケーションへ振り分ける(TCP/UDP)

PCやサーバで動作しているアプリケーションは1つだけとは限りません。届いたデータがどのアプリケーションのデータであるかを識別して、適切なアプリケーションへデータを振り分ける必要があります。そのために、TCPまたはUDPを利用しています。アプリケーションを識別するために、ポート番号を割り当てています。TCP/UDPヘッダには宛先/送信元ポート番号が指定されています。

例として、Webサイトのアクセスについて考えます。Webブラウザのデータには、HTTPヘッダが付加されます。HTTPヘッダが付加されたデータをTCPで転送することになります。TCPヘッダの宛先/送信元ポート番号でWebブラウザとWebサーバアプリケーションをきちんと識別できるようにしています。そのため、TCPヘッダを付加する(カプセル化)ということは、WebブラウザとWebサーバアプリケーションが仮想的に直結されるようなイメージです。宛先/送信元ポート番号に関係のないアプリケーションにデータが振り分けられることはありません。

図 適切なアプリケーションへ振り分ける
WebブラウザからのリクエストでGETメソッドの場合、データ(エンティティボディ)には何も入っていません。
例として、WebブラウザからWebサーバアプリケーションへの片方向のみを取り上げています。同様のプロセスなので省略しますが、通信は双方向であることは必ず意識してください。
UDPの場合もUDPヘッダでカプセル化することでアプリケーション間が直結されるイメージです。

関連記事

ポート番号、TCP、UDPについては以下の記事をご覧ください。

アプリケーションが動作しているホストまで転送する(IP)

アプリケーションのデータは、アプリケーションが動作しているPC/サーバなどのホストまで転送しなければいけません。アプリケーションが動作しているホストまで転送するためにIPを利用しています。

IPにとってのデータは、TCPヘッダでカプセル化されているアプリケーションのデータです。ホストを識別する(正確にはホストのインタフェース)ために、ホストにはIPアドレスを割り当てています。IPヘッダに宛先/送信元IPアドレスを指定して、IPヘッダでカプセル化してIPパケットとします。IPヘッダでカプセル化することで、送信元ホストと宛先ホストの間が仮想的につながるようなイメージです。IPヘッダに宛先/送信元IPアドレスを指定しているので、まったく関係ないホストにデータが転送されることはありません。そして、ホスト間が仮想的につながっている中にデータを通していきます。これは、実際には経路上に存在するルータ/レイヤ3スイッチが適切なルーティングを行うことで実現しています。

図 アプリケーションが動作しているホストまで転送する

関連記事

IPについては以下の記事をご覧ください。

また、IPアドレスについては、以下の記事からさらに詳細な解説記事をご覧いただけます。

同じネットワークのインタフェース間で物理信号を送り届ける(イーサネットなど)

TCP/UDPおよびIPは、物理的なデータの送信を行いません。ネットワーク上でデータを転送するとは、「0」「1」のビットを電気信号などの物理信号に変換して、その物理信号を適切なインタフェースまで送り届けることです。そのために、イーサネット/Wi-Fiなどのネットワークインタフェース層のプロトコルを利用します。

イーサネットでは、イーサネットインタフェースを識別するためにMACアドレスを割り当てています。イーサネットで転送するためには、宛先/送信元MACアドレスを指定したイーサネットヘッダでカプセル化します。イーサネットにとってのデータはIPヘッダまでカプセル化している部分です。

イーサネットヘッダでのカプセル化は、送信元インタフェースと宛先インタフェース間が仮想的につながるイメージです。ヘッダに宛先/送信元MACアドレスを指定しているので、関係のないインタフェースはデータを受信しません。(イーサネットフレームがフラッディングされると関係ないインタフェースに物理信号が流れることはあります)

宛先と送信元インタフェース間の仮想的なつながりの中にデータを通していきます。これは、具体的にはレイヤ2スイッチが転送しています。イーサネットをはじめとするネットワークインタフェース層のプロトコルは、同じネットワーク内だけです。ルータを越えてネットワークが異なるときには、新しいヘッダでカプセル化されることになります。

図 同じネットワークのインタフェース間で物理信号を送り届ける
物理信号に変換している様子は図には示していません。

以上のように、アプリケーションのデータを転送するためには、トランスポート層、インターネット層、ネットワークインタフェース層の3つの階層にわたる転送プロトコルを組み合わせています。

アプリケーションのデータに各転送プロトコルのヘッダでカプセル化してネットワークに送り出すデータを作り上げています。これにより、ネットワークを構成するルータ/レイヤ3スイッチやレイヤ2スイッチが転送の判断をして、適切な宛先までデータを表している物理信号が送り届けられるようにしています。

他のプロトコルも必要

各転送プロトコルのヘッダをつけるために、他のプロトコルも必要です。TCP/UDPヘッダのポート番号は特に意識して求める必要はありません。サーバアプリケーションのポート番号はあらかじめ決められているウェルノウンポート番号を利用し、クライアントアプリケーションはダイナミックにポート番号を割り当てるからです。

IPアドレスはそうはいきません。送信元IPアドレスは簡単にわかりますが、IPヘッダの宛先IPアドレスを求めるために、DNSが必要です。そして、MACアドレスも求めるための仕組みが必要です。イーサネットヘッダの宛先MACアドレスを求めるためには、ARPを利用します。

関連記事

DNSとARPについて、以下の記事をご覧ください。

TCP/IP