カプセル化からフレーム送出までの送信処理を追ってL2とL3の役割を理解する
IPとMACの違いを含め、送信データがどのようにパケット/フレームへ組み立てられて送出されるのかを、十分に言語化できていませんでした。
本記事では、カプセル化・ルーティング・ARPを軸に送出までの処理を整理し、L2/L3の役割分担を明確にします。
各ヘッダーの役割
アプリケーションが送信したいデータは、TCP/IPスタックの中で順にヘッダーが付与され、最終的に イーサネットフレーム(L2) としてNICから送出されます。
送出までの流れを追う前に、混同しやすいIPヘッダーとMACヘッダーの違いについてまとめておきます。
-
IPヘッダー(L3 / ネットワーク層)
- 「最終的な行き先」を示す
- ヘッダー内容物:宛先IP、送信元IP、TTL、プロトコル(TCP/UDP)など
-
MACヘッダー(L2 / データリンク層:Ethernet)
- 「次に渡す相手(次ホップ)」を示す
- ヘッダー内容物:宛先MAC、送信元MAC、EtherType(IPv4/IPv6)など
重要なのは、IPヘッダーの宛先は“最終目的地” である一方で、MACヘッダーの宛先は“次ホップ” である点です。
そのため、ルータを越えるたびに MACヘッダーは付け替えられますが、IPヘッダー(宛先IP)は基本的に維持されます(※NAT等を除く)。

送信処理の流れ:ヘッダー付与と次ホップ解決
以降の章では、上述のアプリから受け取った送信データに対して、IPヘッダー・MACヘッダーが付与され、NICからフレームを送出するまでの流れを、レイヤーに沿ってまとめていきます。
1. L4(TCP)がデータをセグメント化し、TCPヘッダーを付与する
アプリケーションから渡された送信データは、TCPによって必要に応じて分割され、TCPセグメントとして扱われます。TCPヘッダーには以下のような情報が入ります。
- 送信元ポート / 宛先ポート
- シーケンス番号、ACK番号
- フラグ(SYN/ACK/FINなど)
- ウィンドウサイズ(フロー制御) など
ここまでできた時点では「TCPセグメント」であり、まだネットワーク上に出すための宛先(IP/MAC)情報は付いていません。
TCPについて深く知りたい方は以下の記事を参考にしてください。
2. L3(IP)がIPヘッダーを付与し、IPパケットを作成する
TCPセグメント(データの断片にTCPヘッダーを付加したもの)がL3(IP担当部分)に渡されます。
受け取ったら、最終目的地情報を格納したIPヘッダーを付与します。
3. 次に渡す相手(次ホップ)」をルーティングテーブルで決める
IPパケットの宛先IPが決まっても、L2で送るためには最終目的地に向かうための「次の行き先」が必要です。
そこでOSは、宛先IPとルーティングテーブルを照合し、次のどちらかを判断します。
- 宛先IPが同一サブネット内
→ 次ホップ = 宛先ホスト - 宛先IPが別サブネット(インターネット等)
→ 次ホップ = デフォルトゲートウェイ(通常はルータ)
ルーティングテーブルの考え方は、下記の解説が分かりやすいです。
4. ARPで「次ホップIP → 次ホップMAC」を解決する(IPv4の場合)
次ホップのIPが判明した後は、ARPによって「そのIPに対応するMACアドレス」を調べます。
ARPはイーサネットにあるブロードキャストという仕組みを使って、つながっているすべての機器にパケットを届けます。その中に転送先IPの機器がいたら、そのMACアドレスを応答で受け取ります。
ARPについては下記の解説がわかりやすいです。
5. MACヘッダーを付与して「イーサネットフレーム」として送出する
ARPで次ホップMACが分かったら、NICから送出するために MACヘッダー(Ethernetヘッダー) を付与し、最終的に イーサネットフレーム になります。
最後に、完成したフレームがNICから送出されます。
まとめ
- IPは最終目的地、MACは次ホップを指す。IPヘッダーは(NAT等を除き)エンドツーエンドで基本維持される一方、MACヘッダーはホップごとに付け替えられる。
- 送信データは TCPセグメント → IPパケット → イーサネットフレーム の順にカプセル化され、NICから送出される。
- 送出直前に ルーティングで次ホップIPを決定し、ARPで次ホップIP→MACに変換する。ARP結果はARPキャッシュに保持され、毎回ブロードキャストしないよう最適化されている。
Discussion