
IPフラグメンテーションとは、インターネットプロトコル(IP)のプロセスの一つで、パケットをより小さな断片(フラグメント)に分割し、元のパケットサイズよりも小さい最大伝送単位(MTU)のリンクを通過できるようにするものです。フラグメントは受信側のホストによって再構成されます。
IPv4とIPv6では、フラグメンテーションのメカニズムの詳細、およびフラグメンテーションに対する全体的なアーキテクチャのアプローチが異なります。
RFC 791は、 IPパケットのフラグメンテーション、送信、および再構成の手順を記述しています。[ 1 ] RFC 815は、簡略化された再構成アルゴリズムを記述しています。[ 2 ] IPヘッダーのIdentificationフィールド、外部およびローカルのインターネットアドレス、プロトコルID、Fragment offsetフィールド、 Don't Fragmentフラグ、およびMore Fragmentsフラグは、IPパケットのフラグメンテーションと再構成に使用されます。[ 1 ] : 24 [ 2 ] : 9
受信ホストが断片化された IP パケットを受信した場合、パケットを再構成して上位のプロトコル層に渡す必要があります。再構成は受信ホストで行われることを想定していますが、実際には中間ルーターによって行われる場合もあります。たとえば、ネットワーク アドレス変換(NAT)は、データ ストリームを変換するために断片を再構成する必要がある場合があります。 [ 3 ]


IPv4では、次のホップのMTUよりも大きいネットワークパケットを受信したルータには、2つの選択肢があります。パケットのヘッダーにDon't Fragment (DF)フラグビットが設定されている場合はパケットを破棄し、フラグメンテーションが必要(タイプ3、コード4)の状態を示すインターネット制御メッセージプロトコル(ICMP)メッセージを送信するか、パケットをフラグメント化して、より小さいMTUのリンク経由で送信します。発信元はフラグメント化されたパケットを生成する可能性がありますが、IPv6ルータにはそれ以上のフラグメント化のオプションはありません。代わりに、ネットワーク機器は1280バイト以下のIPv6パケットまたはパケットフラグメントを配信する必要があり、IPv6ホストはパケットを送信する前にパスMTU検出によって最適なMTUを決定する必要があります。
IPv4とIPv6ではヘッダー形式は異なりますが、フラグメンテーションには類似のフィールドが使用されるため、IPv4とIPv6のフラグメンテーションと再構成には同じアルゴリズムを再利用できます。
IPv4では、ホストは、合計再構成サイズが最大576バイトまでの断片化されたIPパケットを再構成するために最善を尽くす必要があります。576バイトを超える断片化されたIPパケットの再構成を試みることも可能ですが、そのような大きなパケットを黙って破棄することも許可されています。アプリケーションは、リモートホストがそれらを受信または再構成できることを事前に知っている場合を除き、576バイトを超えるパケットを送信しないことが推奨されます。[ 1 ] : 12
IPv6では、ホストは、再構成後の合計サイズが最大1500バイト(IPv6の最小MTUである1280バイトを超える)の断片化されたパケットを再構成するために最善を尽くす必要があります。[ 4 ] 再構成後の合計サイズが1500バイトを超える断片化されたパケットは、オプションで黙って破棄される場合があります。IPv6の断片化を利用してパスMTUの制限を克服するアプリケーションは、送信元で明示的にパケットを断片化する必要がありますが、リモートホストが再構成可能であることを事前に知っている場合を除き、合計サイズが1500バイトを超える断片化されたパケットを送信しようとすべきではありません。
ネットワークに複数の並列パスが存在する場合、LAGやCEFといった技術はハッシュアルゴリズムに基づいてトラフィックをパス間で分割します。このアルゴリズムの目的の一つは、同じフローに属するすべてのパケットが同じパスから送信されるようにすることで、不要なパケットの順序変更を最小限に抑えることです。
IPフラグメンテーションは、フラグメントがパケット損失に遭遇すると過剰な再送信を引き起こす可能性があり、TCPなどの信頼性の高いプロトコルは、単一のフラグメントの損失から回復するためにすべてのフラグメントを再送信する必要があります。[ 5 ]そのため、送信者は通常、ネットワーク経由で送信するIPパケットのサイズを決定するために2つのアプローチを使用します。1つ目は、送信ホストが送信元と宛先のペアの最初のホップのMTUと同じサイズのIPパケットを送信することです。2つ目は、パスMTU検出アルゴリズム[ 6 ]を実行して、2つのIPホスト間のパスMTUを決定し、IPフラグメンテーションを回避することです。
2020年現在IPフラグメンテーションは、セキュリティへの影響から脆弱で望ましくないと考えられています。[ 7 ]