TCP/UDP/IPプロトコルの各レイヤーで処理しているパケットの情報

L2のリンク層、L3のインターネット層、L4のトランスポート層で処理している役割を、各レイヤーのパケットに含まれるヘッダ情報を整理することで理解します。

リンク層(L2)

インターネット層(L3)

  • 機能
    • IPアドレスでデータを送受信
    • リンク層のMTUに収まるようにフラグメント化
  • IPパケットに含まれるもの
    • IPバージョン
    • IPヘッダサイズ
      • 固定長と可変長の合計
    • IPパケットサイズ
      • ヘッダとペイロードの合計
      • 最大 64Kbytes - 1byte
      • フラグメント化されている場合はフラグメント後のサイズ
    • ID
      • 16bitのランダムな値
      • フラグメント化されている場合は同じIPパケットがすべて同じ値
      • 送信先コンピュータはIDだけでなくIPアドレスなども見て同一IPパケットかどうかを判断する
    • フラグメントフラグ
      • フラグメント化された後続のフラグメントがまだある場合は1
      • 送信先コンピュータがフラグメント化されたIPパケットを復元する際に利用する
    • フラグメント禁止フラグ
      • 低スペック機器向けなどでフラグメント化されたパケットの扱いが困難な場合にこれを1にする
    • フラグメントオフセット
      • 送信先コンピュータはこれを見てフラグメント化されたIPパケットを元のIPパケットに復元する
      • 送信先コンピュータは一定時間内にフラグメント化されたパケットがそろわない場合はIPパケット全体を破棄する
    • TTL
      • パケットの寿命
      • ルータ通過回数の上限
    • プロトコル番号
    • IPヘッダチェックサム
      • データのチェックサムがないのはフラグメント化されると困難なため
      • データのチェックはリンク層やTCP/UDPでも行われる
    • 送信元IPアドレス
    • 送信先IPアドレス
    • オプション
      • 追加機能
      • 可変長
      • あまり使われない
    • ペイロード
      • TCP / UDP / ICMP のセグメント
      • 最大サイズは 64Kbytes - 1byte - 20Byte(IPヘッダの最小サイズ)

トランスポート層(L4)

ICMP

  • ICMPパケットに含まれるもの
    • タイプ
      • ICMPメッセージの種類
      • 1byte
    • コード
      • タイプに依る
      • 1byte
    • チェックサム
      • 2bytes
    • データ
      • 可変長

UDP

  • 機能
  • UDPパケットに含まれるもの
    • 送信元ポート番号
      • 返信が不要なパケットでは0となっている場合もある
    • 送信先ポート番号
    • 長さ
      • ヘッダとデータの合計
    • チェックサム
    • ペイロード
      • 最大サイズは 64Kbytes - 1byte - 20Byte(IPヘッダの最小サイズ) - 8Byte(UDPヘッダサイズ)

TCP

  • 機能
    • ポート番号でアプリケーション多重化
    • データのチェックサム
    • 双方向のストリーム型の通信
      • パケットの到達保証、順序保証
  • 用語
    • ACK
      • TCPパケットを受信したら自動でACK返信
      • 送信側はACKを受信しなかったらTCPパケットを自動で再送
    • SYN
      • TCP接続の要求
  • TCPパケットに含まれるもの
    • 送信元ポート番号
      • UDPと違い、必ず0以外の値
    • 送信先ポート番号
    • シーケンス番号
      • 32bitでbyte単位、最大4GBでラップアラウンドする
      • 初期値はランダムが推奨されているが実装次第
      • ランダムな初期値をお互いに交換するのがTCP接続確立時の主な処理
    • ACK番号
      • データ受信側の応答パケットでセットされる
      • 受信したシーケンス番号+データサイズ+1
    • TCPヘッダサイズ
      • データオフセットという名前だが実質はTCPヘッダサイズを表す
    • URGフラグ
      • 「緊急」
      • あまり使われない
    • ACKフラグ
      • TCP接続確立時の接続要求側の最初のTCPパケット(SYN)以外はすべて1
      • ACK番号が有効であることを示す
    • PSHフラグ
      • 受信側に対してバッファリングせずに直ちにアプリケーションに渡すことを指示
      • このフラグによらず直ちにアプリケーションに渡している実装が今は多く、あまり意味がない
    • RSTフラグ
      • 接続拒否
    • SYNフラグ
      • 新しくTCP接続を要求する場合
      • 双方から送信される最初のパケットのみ
    • FINフラグ
      • データが終了したことを意味し、TCP接続が終了する
    • ウィンドウサイズ
      • 受信できるサイズ
      • 0はバッファがいっぱいなどで一時的に受信できないから送信を一時中断してほしい、という意味
        • MSSの整数倍が望ましい
      • 16bit、最大64Kbyte-1byte
    • チェックサム
      • ヘッダとデータ
    • 緊急ポインタ
      • URGフラグで利用
    • オプション
      • 可変長
      • オプションの例
        • MSS
          • SYNパケットで使用頻度が高いオプション
          • TCPパケットのデータの最大サイズ
          • IPパケットのフラグメンテーションを防ぐため
            • パケットの分割はTCPでも行うためIPでも分割されてしまうのは効率が悪い
    • ペイロード
      • Keep-aliveやウィンドウサイズ通知のみなど、ペイロードのないパケットも多い