ネットワークの教科書NETWORK

第1章 ネットワークの全体像1-4コース全体 19回中4本目

入門読了 約8分

カプセル化 ― データが層を降りるたびに封筒が増える

送信側は下の層へ降りるたびにヘッダを1枚足し、受信側は逆順に1枚ずつはがす。カプセル化の往復の対称性と、各層で足されるヘッダの中身を確認します。

結論

層を1つ降りるたびに、ヘッダが1枚増える

送信側では、データがアプリケーション層から物理層へ降りていくあいだに、ヘッダを足す層(トランスポート層・ネットワーク層・データリンク層)を通るたびに包みが1枚ずつ 増えていきます。これをカプセル化と呼びます。手紙を封筒に入れ、さらに配送用の箱に入れるように、 外側の包みが1段ずつ増えるイメージです。

この記事の核心受信側では、届いたフレームに対してまったく逆の順番でヘッダが1枚ずつはがされます(非カプセル化)。 「降りるときは足す、昇るときははがす」。この往復の対称性さえ分かれば、カプセル化の理解はほぼ完成です。

この記事は1つの区間(1ホップ)の中で、データがどう包まれるかに絞って解説します。 PCからサーバまで複数のルータを経由するときに何が書き換わるかは、2-1 MACアドレスとIPアドレスの違いで扱います。

体験

カプセル化を1段ずつ見る

ブラウザがWebサーバへHTTPリクエストを送るときを例に、データが層を降りながら包まれていく様子を 1段ずつ確認してください。

STEP 1 / 5
HTTPリクエストアプリのデータ
アプリケーション層 — データ
ブラウザが GET /index.html HTTP/1.1 というHTTPリクエストを作りました。この時点ではまだ「文章」でしかなく、どこへどう届くかの情報は何も付いていません。
中身

各層で何が足されるか

足されるヘッダの中身を層ごとに整理すると、次のとおりです。TCPヘッダとIPヘッダのサイズはオプションが付かない場合の値です (オプションが付くと最大60バイトまで伸びます)。一方Ethernetヘッダは固定14バイト(VLANタグが付くと18バイト)、 末尾のFCSも固定4バイトです。

追加されるヘッダ/トレーラサイズの目安主な情報
トランスポート層TCPヘッダ20バイト送信元/宛先ポート番号、シーケンス番号など
ネットワーク層IPヘッダ20バイト送信元/宛先IPアドレス、TTLなど
データリンク層Ethernetヘッダ(先頭)+ FCS(末尾のトレーラ)14バイト + 4バイト宛先/送信元MACアドレス、上位プロトコルの種別(EtherType)、誤り検査(FCS)

宛先の粒度は、層ごとに違う

3つのヘッダはどれも「宛先」の情報を持ちますが、指し示す範囲の細かさ(粒度)がまったく違います。

データリンク層 / MACアドレスこの区間で、次に渡す相手

意味を持つのは同じネットワーク内だけ。区間が変われば、渡す相手も変わります。

ネットワーク層 / IPアドレス世界のどこにある、どの機器か

ネットワークをまたいでも変わらない、最終目的地までの住所です。

トランスポート層 / ポート番号その機器の中の、どのアプリか

機器に届いたあと、Webサーバ・SSHなどどのアプリに渡すかを決めます。

MACアドレスが区間ごとに書き換わる話(複数ルータを経由するケース)は、2-1 MACアドレスとIPアドレスの違いで詳しく扱います。
逆順

受信側は逆順(非カプセル化)

受信側では、届いたフレームに対してカプセル化とまったく逆の順番でヘッダがはがされ、 1つ上の層へ渡されていきます。

  1. 1

    Ethernetヘッダを確認するデータリンク層

    まず末尾のFCSで壊れていないかを検査し、壊れていれば破棄します。問題なければ宛先MACアドレスが自分宛かを確認し、 Ethernetヘッダとトレーラ(FCS)を外して中身(IPパケット)を上の層へ渡します。

  2. 2

    IPヘッダを確認するネットワーク層

    宛先IPアドレスが自分宛かを確認します。自分宛ならIPヘッダを外し、中身(TCPセグメント)を上の層へ渡します。

  3. 3

    TCPヘッダを確認するトランスポート層

    宛先ポート番号を確認し、TCPヘッダを外して、該当するアプリケーションにデータを渡します。

  4. 4

    データを処理するアプリケーション層

    最後に残ったデータ(今回はHTTPリクエスト)を、Webサーバのアプリケーションが処理します。

カプセル化で「データ → TCP → IP → Ethernet」の順に足されたヘッダが、非カプセル化では 「Ethernet → IP → TCP → データ」の順にはがされます。足す順序と、はがす順序はちょうど逆です。
用語

PDUの呼び名が層ごとに変わる理由

「セグメント」「パケット」「フレーム」は、どれもデータの単位(PDU:Protocol Data Unit)を指す言葉ですが、 中身のデータそのものは同じです。どこまでヘッダが付いた状態かによって、呼び名だけが変わります。

PDU(呼び名)足されているヘッダ/トレーラ
アプリケーション層メッセージ(データ)なし(まだ元のデータのまま)
トランスポート層セグメント(UDPはデータグラム)TCPヘッダ(UDPならUDPヘッダ)
ネットワーク層パケットIPヘッダ
データリンク層フレームEthernetヘッダ + FCS
物理層ビットなし(電気信号・電波に変換されるだけ)
「パケットを送る」と言うとき、正確にはIPヘッダまで付いた状態を指しています。ヘッダが付く前のデータや、 Ethernetヘッダまで付いたあとの状態を「パケット」と呼ぶのは、厳密には層を混同した言い方です。
補足

MTUとフラグメンテーション

1つのフレームには、運べるデータ量に上限があります。この上限をMTU(Maximum Transmission Unit)と呼び、 Ethernetでは通常1500バイトです。送りたいIPパケットがMTUを超える場合、ネットワーク層でIPパケット自体が 複数に分割(フラグメンテーション)され、それぞれが別のフレームで送られたあと、最終的な宛先で 元の1つのデータに再構成されます。

練習

練習問題(全5問)

選んでから「採点する」を押すと、解説つきで答え合わせができます。

Q1カプセル化でヘッダが足される順番として正しいものは?
Q2TCPヘッダに入っていて、「どのアプリ宛か」を示す情報はどれ?
Q3受信側が非カプセル化するとき、届いたフレームに対して最初に確認するヘッダはどれ?
Q4TCPヘッダが付いた状態のデータは、PDU(データの単位)として何と呼ばれる?
Q5Ethernetの標準的なMTU(1500バイト)を超えるサイズのIPパケットを送ろうとすると、どうなる?
次の回

コースを読み進める