IPフラグメンテーションとは
IPフラグメンテーション(IP分割)は、インターネットプロトコル(IP)において、
データグラムを小さな断片に分割するプロセスです。これは、ネットワークの最大転送単位(MTU)が、送信したい
データグラムのサイズよりも小さい場合に必要となります。分割された
データグラムは、受信側で再構築され、元の
データグラムに戻されます。
IPフラグメンテーションの仕組み
IPフラグメンテーションは、RFC 791で詳細に定義されており、
データグラムの分割と再構築の手順が規定されています。また、RFC 815では、よりシンプルな再構築アルゴリズムが示されています。
IPヘッダには、識別子、フラグ(禁止フラグと継続フラグ)が含まれており、これらを使用してIP
データグラムの分割と再構築が行われます。
IPv4では、
ルーターが次のホップのMTUよりも大きいパケットを受信した場合、パケットを破棄してICMPメッセージを送信元に返すか、パケットをフラグメンテーションして送信するかのいずれかの対応を取ります。一方、
IPv6では、
ルーターでのフラグメンテーションは禁止されており、送信元が事前にMTUを把握し、適切なサイズに分割してから送信する必要があります。
IPv6では、1280バイト以下のパケットはフラグメンテーションなしで伝送できることが保証されています。
再構築の必要性
フラグメンテーションされたパケットを受信した場合、上位層プロトコルにデータを渡す前に、元の
データグラムを再構築する必要があります。再構築は通常、受信ホストで行われますが、
ネットワークアドレス変換(NAT)などを行う
ルーターが再構築することもあります。
フラグメンテーションによる問題点と対策
フラグメンテーションされたパケットが失われると、TCPなどの信頼性の高いプロトコルでは、
データグラム全体の再送が必要になります。これにより、再送のオーバーヘッドが大きくなる可能性があります。このため、可能な限りフラグメンテーションを回避することが望ましく、以下の2つの方法が用いられます。
1. 送信側が最初のホップのMTUを基準に
データグラムサイズを決定する。
2. 経路MTU探索アルゴリズム(RFC 1191)を利用して、経路上の最小MTUを把握し、それに合わせて
データグラムサイズを調整する。
IPv4と
IPv6では、フラグメンテーションの仕組みに大きな違いがあります。
IPv4では、
ルーターがフラグメンテーションを行うことが許容されていますが、
IPv6では
ルーターでのフラグメンテーションが禁止されています。
IPv6では、送信元が事前にMTUを把握し、適切なサイズで送信する必要があります。
IPv4では、再構築後の
データグラムのサイズが576バイト(
IPv4の最小MTU)以下であれば、可能な限り再構築が行われます。しかし、576バイトを超える場合は、再構築せずに破棄しても良いとされています。
IPv6では、この閾値が1500バイトに引き上げられています。
ヘッダの形式は異なりますが、フラグメンテーションに関するフィールドは類似しており、フラグメンテーションと再構築のアルゴリズムは流用可能です。
まとめ
IPフラグメンテーションは、ネットワーク上でデータを効率的に転送するための重要なメカニズムです。しかし、フラグメンテーションは再送オーバーヘッドやパケット損失の問題を引き起こす可能性もあるため、可能な限り避けるように設計することが重要です。経路MTU探索などの技術を活用し、最適なパケットサイズでデータ転送を行うことが推奨されます。
参考資料:
JPRS用語辞典|IPフラグメンテーション(IP fragmentation)
福田 洋治、佐野 工・白石 善明・森井 昌克「QoSを考慮したインターネットセキュリティプロトコルの提案」
関連リンク:
IPフラグメンテーション @IT
What is packet fragmentation?
* The Never-Ending Story of IP Fragmentation