TCP/UDP/IPプロトコルの各レイヤーで処理しているパケットの情報
L2のリンク層、L3のインターネット層、L4のトランスポート層で処理している役割を、各レイヤーのパケットに含まれるヘッダ情報を整理することで理解します。
リンク層(L2)
インターネット層(L3)
- 機能
- IPアドレスでデータを送受信
- リンク層のMTUに収まるようにフラグメント化
- IPパケットに含まれるもの
- IPバージョン
- IPヘッダサイズ
- 固定長と可変長の合計
- IPパケットサイズ
- ヘッダとペイロードの合計
- 最大 64Kbytes - 1byte
- フラグメント化されている場合はフラグメント後のサイズ
- ID
- フラグメントフラグ
- フラグメント化された後続のフラグメントがまだある場合は1
- 送信先コンピュータがフラグメント化されたIPパケットを復元する際に利用する
- フラグメント禁止フラグ
- 低スペック機器向けなどでフラグメント化されたパケットの扱いが困難な場合にこれを1にする
- フラグメントオフセット
- TTL
- パケットの寿命
- ルータ通過回数の上限
- プロトコル番号
- IPヘッダチェックサム
- 送信元IPアドレス
- 送信先IPアドレス
- オプション
- 追加機能
- 可変長
- あまり使われない
- ペイロード
トランスポート層(L4)
ICMP
- ICMPパケットに含まれるもの
- タイプ
- ICMPメッセージの種類
- 1byte
- コード
- タイプに依る
- 1byte
- チェックサム
- 2bytes
- データ
- 可変長
- タイプ
UDP
TCP
- 機能
- ポート番号でアプリケーション多重化
- データのチェックサム
- 双方向のストリーム型の通信
- パケットの到達保証、順序保証
- 用語
- TCPパケットに含まれるもの
- 送信元ポート番号
- UDPと違い、必ず0以外の値
- 送信先ポート番号
- シーケンス番号
- 32bitでbyte単位、最大4GBでラップアラウンドする
- 初期値はランダムが推奨されているが実装次第
- ランダムな初期値をお互いに交換するのがTCP接続確立時の主な処理
- ACK番号
- データ受信側の応答パケットでセットされる
- 受信したシーケンス番号+データサイズ+1
- TCPヘッダサイズ
- データオフセットという名前だが実質はTCPヘッダサイズを表す
- URGフラグ
- 「緊急」
- あまり使われない
- ACKフラグ
- PSHフラグ
- 受信側に対してバッファリングせずに直ちにアプリケーションに渡すことを指示
- このフラグによらず直ちにアプリケーションに渡している実装が今は多く、あまり意味がない
- RSTフラグ
- 接続拒否
- SYNフラグ
- 新しくTCP接続を要求する場合
- 双方から送信される最初のパケットのみ
- FINフラグ
- データが終了したことを意味し、TCP接続が終了する
- ウィンドウサイズ
- 受信できるサイズ
- 0はバッファがいっぱいなどで一時的に受信できないから送信を一時中断してほしい、という意味
- MSSの整数倍が望ましい
- 16bit、最大64Kbyte-1byte
- チェックサム
- ヘッダとデータ
- 緊急ポインタ
- URGフラグで利用
- オプション
- 可変長
- オプションの例
- MSS
- SYNパケットで使用頻度が高いオプション
- TCPパケットのデータの最大サイズ
- IPパケットのフラグメンテーションを防ぐため
- パケットの分割はTCPでも行うためIPでも分割されてしまうのは効率が悪い
- MSS
- ペイロード
- Keep-aliveやウィンドウサイズ通知のみなど、ペイロードのないパケットも多い
- 送信元ポート番号