断片化と再構成は、RFC 791 でのみ説明されています。インターネット プロトコル仕様 RFCを参照してください。RFC には、サンプルの断片化と再構成について説明するさまざまなセクションがあります。あなたの疑問や質問はすべて、十分に対応しています。
回答 1: パケットの長さについて: 元のパケットには 4000 バイトが含まれています。このパケットは完全な IP パケットであるため、IP ヘッダーも含まれています。したがって、ペイロードの長さは実際には 4000 - (IP ヘッダーの長さ、つまり 20 ) です。
実際のペイロードの長さ = 4000 - 20 = 3980
ここで、長さが MTU (1500 バイト) よりも大きいため、パケットはフラグメント化されます。
したがって、最初のパケットには、IP ヘッダー + ペイロード部分を含む 1500 バイトが含まれます。
1500 = 20 (IP ヘッダー) + 1480 (データ ペイロード)
他のパケットについても同様です。
3 番目のパケットには残りの残りのデータが含まれます ( 3980 - 1480 -1480 ) = 1020
したがって、パケットの長さは 20 (IP ヘッダー) + 1020 (ペイロード) = 1040 です。
回答 2: オフセットは、元のデータ ペイロードを参照してデータが始まるアドレスまたはロケーターです。IP の場合、データ ペイロードは、IP ヘッダーとオプション ヘッダーの後のすべてのデータで構成されます。したがって、システム/ルーターはペイロードを受け取り、それを小さな部分に分割し、元のパケットを参照してオフセットを追跡し、再構成を実行できるようにします。
RFCページ 12に記載されています。
"フラグメント オフセット フィールドは、元のデータグラム内のフラグメントの位置を受信者に伝えます。フラグメント オフセットと長さは、このフラグメントによってカバーされる元のデータグラムの部分を決定します。more-fragments フラグは、(リセットされることによって) 最後のフラグメントを示します。これらのフィールドは、データグラムを再構築するのに十分な情報を提供します。」
フラグメント オフセットは、それぞれ 8 バイト単位で測定されます。IP ヘッダーに 13 ビット フィールドがあります。RFCページ17で述べたように
"このフィールドは、このフラグメントが属するデータグラム内の場所を示します。フラグメントのオフセットは、8 オクテット (64 ビット) 単位で測定されます。最初のフラグメントのオフセットは 0 です。 "
したがって、この 8 はどこから来たのかという質問で尋ねたように、8 オクテットが 1 つの値として取得される IP プロトコル仕様で定義された標準です。これは、これを介して大きなパケットを送信するのにも役立ちます.
RFC の 28 ページには次のように書かれています。 *フラグメントは 8 オクテット単位でカウントされます。断片化戦略は、断片化されていないデータグラムの断片化情報がすべてゼロ (MF = 0、断片オフセット = 0) になるように設計されています。インターネット データグラムがフラグメント化されている場合、そのデータ部分は 8 オクテット境界で分割する必要があります。この形式では、合計 65,536 オクテットに対して、それぞれ 8 オクテットの 2**13 = 8192 フラグメントが許可されます。これはデータグラムの全長フィールドと一致していることに注意してください (もちろん、ヘッダーはフラグメントではなく全長にカウントされます)。