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

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

階層

プロトコル

概要

トランスポート層

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アドレスについては、以下の記事からさらに詳細な解説記事をご覧いただけます。

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

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

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

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

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

MACアドレスなどイーサネットについては、以下のリンクからさらに詳細な解説をまとめています。


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

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

他のプロトコルも必要

各転送プロトコルのヘッダをつけるために、他のプロトコルも必要です。TCP/UDPヘッダのポート番号は特に気にしなくてかまいません。IPヘッダの宛先IPアドレスを求めるために、DNSが必要です。そして、イーサネットヘッダの宛先MACアドレスを求めるためには、ARPが必要になります。


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