ネットワークの基本

フラグメンテーション ふらぐめんてーしょん

フラグメンテーションMTUパケット分割IPv4IPv6Path MTU Discovery
フラグメンテーションについて教えて

簡単に言うとこんな感じ!

大きすぎるデータをネットワーク上で分割して送る仕組みだよ。引越しで大きな家具をバラして小さいトラックで運んで、届いたら組み立て直すイメージ。IPv6では端末側だけが分割するルールに変わったんだよ!


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

フラグメンテーション(Fragmentation)は、IPパケットが経路上のMTU(最大転送単位)より大きい場合に分割して送る仕組みです。受信側ではバラバラになったパケットを番号順に並べて元のデータに再組み立て(Reassembly)します。

IPv4では、ルーターがパケットを分割することを認めています。ただし分割・再組み立てはCPU処理を消費するため、できるだけ行わないほうが効率的です。そのためPath MTU Discovery(PMTUD)という仕組みで経路上の最小MTUを事前に検出し、最初から適切なサイズで送ることが推奨されています。

IPv6では設計を見直し、ルーターによるフラグメンテーションを廃止しました。IPv6ではパケットが大きすぎる場合、ルーターはパケットを破棄してICMPv6の「Packet Too Big」エラーを送信者に返します。送信者側がサイズを調整して再送する責務を負います。


IPv4とIPv6のフラグメンテーション比較

項目IPv4IPv6
ルーターによる分割可能禁止
送信端末による分割可能可能(拡張ヘッダ使用)
分割禁止フラグDFビット(Don’t Fragment)で設定デフォルトで禁止
MTU超過時の動作ルーターが分割ICMPv6 Packet Too Bigを返して送信者に通知

歴史と背景

  • 1981年:RFC 791でIPv4フラグメンテーションが定義
  • 1995年:Path MTU Discoveryの重要性が認識される(RFC 1191)
  • 1998年:IPv6ではフラグメンテーションの設計を根本から見直し(RFC 2460)
  • 2000年代ファイアウォールICMPをブロックしPMTUDが機能しない「PMTUD Black Hole」問題が発生
  • 現在VPNトンネリング環境でのMTU設定ミスは今もよくあるトラブルの原因

フラグメンテーションの問題点

フラグメンテーションの発生と問題 元のパケット(2000バイト)→ MTU 1500バイトを超える! ルーターが分割(IPv4の場合) フラグメント① (1500バイト) フラグメント② (520バイト) 問題点:片方が欠けたら全部再送 / ヘッダオーバーヘッド増加 ファイアウォールで後続フラグメントが遮断されるリスクも

フラグメンテーションを避けるためのベストプラクティス

  • Path MTU Discoveryを機能させる:ICMPをファイアウォールでブロックしない
  • MSS Clampingを設定:ルーター・ファイアウォールでTCPのMSSを適切に制限
  • VPN設定でMTUを調整:トンネリングのヘッダ分(50〜100バイト)を差し引く

関連する規格・RFC

規格・RFC番号内容
RFC 791IPv4フラグメンテーションの仕様
RFC 1191Path MTU Discovery(IPv4)
RFC 8200IPv6仕様(ルーターによるフラグメンテーション禁止)
RFC 8201Path MTU Discovery(IPv6)

関連用語

  • MTU — フラグメンテーションが発生する閾値
  • ジャンボフレーム — MTUを大きくする拡張
  • ICMP — フラグメンテーション通知に使われるプロトコル
  • トンネリング — フラグメンテーション問題が起きやすい環境