第1章 ネットワークの全体像|1-4|コース全体 19回中4本目
カプセル化 ― データが層を降りるたびに封筒が増える
送信側は下の層へ降りるたびにヘッダを1枚足し、受信側は逆順に1枚ずつはがす。カプセル化の往復の対称性と、各層で足されるヘッダの中身を確認します。
層を1つ降りるたびに、ヘッダが1枚増える
送信側では、データがアプリケーション層から物理層へ降りていくあいだに、ヘッダを足す層(トランスポート層・ネットワーク層・データリンク層)を通るたびに包みが1枚ずつ 増えていきます。これをカプセル化と呼びます。手紙を封筒に入れ、さらに配送用の箱に入れるように、 外側の包みが1段ずつ増えるイメージです。
この記事は1つの区間(1ホップ)の中で、データがどう包まれるかに絞って解説します。 PCからサーバまで複数のルータを経由するときに何が書き換わるかは、2-1 MACアドレスとIPアドレスの違いで扱います。
カプセル化を1段ずつ見る
ブラウザがWebサーバへHTTPリクエストを送るときを例に、データが層を降りながら包まれていく様子を 1段ずつ確認してください。
ブラウザが GET /index.html HTTP/1.1 というHTTPリクエストを作りました。この時点ではまだ「文章」でしかなく、どこへどう届くかの情報は何も付いていません。
TCPヘッダが付きます。送信元ポート52310 / 宛先ポート80、シーケンス番号、ACK番号などが入り、「相手のどのアプリ宛か」「何番目のデータか」が分かるようになりました。
IPヘッダが付きます。送信元 192.168.10.25 / 宛先 93.184.216.34 とTTLが入り、ルータはこれを見て世界中のどこへ転送するかを決められるようになりました。
Ethernetヘッダと、末尾に誤り検査用のFCSが付きます。宛先MACアドレスは最終目的地ではなく、次に渡す相手(自宅ルータ)のものです。ここが混乱しやすい点です。
完成したフレームが 0 と 1 の列になり、電気信号や電波としてケーブルへ流れ出ます。受信側はこの逆順に、ヘッダを1枚ずつはがしながら上の層へ渡していきます(非カプセル化)。
各層で何が足されるか
足されるヘッダの中身を層ごとに整理すると、次のとおりです。TCPヘッダとIPヘッダのサイズはオプションが付かない場合の値です (オプションが付くと最大60バイトまで伸びます)。一方Ethernetヘッダは固定14バイト(VLANタグが付くと18バイト)、 末尾のFCSも固定4バイトです。
| 層 | 追加されるヘッダ/トレーラ | サイズの目安 | 主な情報 |
|---|---|---|---|
| トランスポート層 | TCPヘッダ | 20バイト | 送信元/宛先ポート番号、シーケンス番号など |
| ネットワーク層 | IPヘッダ | 20バイト | 送信元/宛先IPアドレス、TTLなど |
| データリンク層 | Ethernetヘッダ(先頭)+ FCS(末尾のトレーラ) | 14バイト + 4バイト | 宛先/送信元MACアドレス、上位プロトコルの種別(EtherType)、誤り検査(FCS) |
宛先の粒度は、層ごとに違う
3つのヘッダはどれも「宛先」の情報を持ちますが、指し示す範囲の細かさ(粒度)がまったく違います。
意味を持つのは同じネットワーク内だけ。区間が変われば、渡す相手も変わります。
ネットワークをまたいでも変わらない、最終目的地までの住所です。
機器に届いたあと、Webサーバ・SSHなどどのアプリに渡すかを決めます。
受信側は逆順(非カプセル化)
受信側では、届いたフレームに対してカプセル化とまったく逆の順番でヘッダがはがされ、 1つ上の層へ渡されていきます。
- 1
Ethernetヘッダを確認するデータリンク層
まず末尾のFCSで壊れていないかを検査し、壊れていれば破棄します。問題なければ宛先MACアドレスが自分宛かを確認し、 Ethernetヘッダとトレーラ(FCS)を外して中身(IPパケット)を上の層へ渡します。
- 2
IPヘッダを確認するネットワーク層
宛先IPアドレスが自分宛かを確認します。自分宛ならIPヘッダを外し、中身(TCPセグメント)を上の層へ渡します。
- 3
TCPヘッダを確認するトランスポート層
宛先ポート番号を確認し、TCPヘッダを外して、該当するアプリケーションにデータを渡します。
- 4
データを処理するアプリケーション層
最後に残ったデータ(今回はHTTPリクエスト)を、Webサーバのアプリケーションが処理します。
PDUの呼び名が層ごとに変わる理由
「セグメント」「パケット」「フレーム」は、どれもデータの単位(PDU:Protocol Data Unit)を指す言葉ですが、 中身のデータそのものは同じです。どこまでヘッダが付いた状態かによって、呼び名だけが変わります。
| 層 | PDU(呼び名) | 足されているヘッダ/トレーラ |
|---|---|---|
| アプリケーション層 | メッセージ(データ) | なし(まだ元のデータのまま) |
| トランスポート層 | セグメント(UDPはデータグラム) | TCPヘッダ(UDPならUDPヘッダ) |
| ネットワーク層 | パケット | IPヘッダ |
| データリンク層 | フレーム | Ethernetヘッダ + FCS |
| 物理層 | ビット | なし(電気信号・電波に変換されるだけ) |
MTUとフラグメンテーション
1つのフレームには、運べるデータ量に上限があります。この上限をMTU(Maximum Transmission Unit)と呼び、 Ethernetでは通常1500バイトです。送りたいIPパケットがMTUを超える場合、ネットワーク層でIPパケット自体が 複数に分割(フラグメンテーション)され、それぞれが別のフレームで送られたあと、最終的な宛先で 元の1つのデータに再構成されます。
練習問題(全5問)
選んでから「採点する」を押すと、解説つきで答え合わせができます。
正解:TCPヘッダ → IPヘッダ → Ethernetヘッダ の順に足される
データは上の層から下の層へ降りながら包まれます。トランスポート層でTCPヘッダ、ネットワーク層でIPヘッダ、データリンク層でEthernetヘッダの順に足されます。
正解:ポート番号
ポート番号はTCPヘッダ(トランスポート層)に入っており、宛先の機器の中の「どのアプリ宛か」を示します。機器そのものを示すのはIPアドレス、区間内の相手を示すのはMACアドレスです。
正解:Ethernetヘッダの宛先MACアドレス
非カプセル化はカプセル化の逆順で、一番外側(最後に足された)ヘッダから先にはがします。一番外側はEthernetヘッダなので、まずここの宛先MACアドレスを確認します。
正解:セグメント
トランスポート層でTCPヘッダが付いた状態は「セグメント」(UDPの場合は「データグラム」)と呼びます。IPヘッダが付くと「パケット」、Ethernetヘッダが付くと「フレーム」になります。
正解:IPパケットが複数に分割(フラグメンテーション)されて送られ、宛先で再構成される
MTUを超える場合、ネットワーク層でIPパケット自体が複数に分割(フラグメンテーション)されてから送られます。分割されたパケットは、最終的な宛先で元の1つのデータに再構成されます。