フラグメントオフセット

フラグメントオフセット

 IPパケットがフラグメント化されると、オリジナルのパケットはフラグメントと呼ばれる複数の小さなパケットに分割されます。これらのフラグメントは、それぞれが独立したIPパケットとして扱われますが、オリジナルのパケットからの相対位置を保持する必要があります。この相対位置を表すのが「フラグメントオフセット」と呼ばれるフィールドです。

 フラグメントオフセットは、フラグメントがオリジナルのパケットのどこから始まるかを示すオフセット値です。オリジナルのパケットは、IPヘッダとペイロード(通常はトランスポート層のデータ)から構成されています。フラグメントオフセットは、オリジナルのパケットの最初のバイトからのオフセットを示し、8バイト単位で表現されます。つまり、フラグメントの開始位置を示すバイト数を8で割った値がフラグメントオフセットになります。

 たとえば、オリジナルのパケットが1500バイトで、MTUが1000バイトのネットワークでフラグメント化が必要な場合、最初のフラグメントは1000バイト、2番目のフラグメントは500バイトのサイズになる可能性があります。最初のフラグメントのフラグメントオフセットは0であり、2番目のフラグメントのフラグメントオフセットは125(1000を8で割った値)になります。

 フラグメントオフセットは、IPヘッダの13〜15ビットの位置にあり、16ビットの値を持ちます。フラグメントオフセットを使って、受信側はフラグメントを正しい順序で再構築することができます。ただし、フラグメントオフセットは8バイト単位で表現されるため、フラグメントサイズが8バイト未満の場合は、フラグメントオフセットが0であっても、そのフラグメントはオリジナルのパケットの最初のバイトからではなく、直前のフラグメントの終わりから始まることになります。

 また、フラグメントオフセットには最後のフラグメントであることを示すフラグメントフラグ(MF)も含まれます。MFビットが1の場合、そのフラグメントが最後のフラグメントでないことを示し、次のフラグメントが続くことを示します。MFビットが0の場合、そのフラグメントが最後のフラグメントであることを示し、次のフラグメントは存在しないことを示します。

 フラグメントオフセットとMFビットは、IPパケットのフラグメント化と再構築に必要な情報を提供します。受信側のホストは、これらの情報を使用して、フラグメントを正しい順序で再構築し、元のデータグラムを正しく受信することができます。しかし、フラグメント化されたパケットは、ネットワーク上を送信するために追加のネットワーク帯域幅を消費するため、可能な限り回避すべきです。そのため、IPフラグメンテーションを行う前に、MTU(Maximum Transmission Unit)などの条件を確認し、パケットサイズを適切に調整することが望ましいです。