ネットワーク層であるルーターから別のルーターにパケットを送信し、パケット サイズがルーターの MTU (最大転送可能単位) より大きい場合、パケットをフラグメント化する必要があります。私の質問は次のとおりです。最後のフラグメントにパディング ビットを追加する必要があるとします。次に、パディング ビットをどこ (LSB または MSB) に追加し、宛先ルーターはパケット ビットまたはパディング ビットをどのように区別しますか?
2 に答える
事前に次のことを考慮していただきたい。
- IP データグラムの最大サイズの制限は、データ リンク プロトコルによって課されます。
- IP は、ルーターとホストの両方に実装される最上位層のプロトコルです。
- 元のデータグラムの再構築は、宛先ホストでのみ行われます。これにより、ネットワーク コアに存在するルーターが実行する必要のある余分な作業が不要になります。
ここで、パケットの最初の長さは 2400 バイトで、1000 バイトの MTU 制限に従ってフラグメント化する必要があります。
フラグメント オフセットに使用できるのは 13 ビットのみで、オフセットは 8 バイトの倍数として指定されます。これが、1 番目と 2 番目のフラグメントのデータ フィールドのサイズが 976 バイトである理由です (これは 8 で割り切れる最大数であり、1000 - 20 バイトより小さい)。これにより、合計サイズが 996 バイトの最初と 2 番目のフラグメントが作成されます。最後のフラグメントには、ペイロードの残りの 428 バイト (合計 448 バイト) が含まれます。
オフセットは 0 として計算できます。976/8 = 122 および 1952/8 = 244。
これらのフラグメントが宛先ホストに到達したら、再構成を行う必要があります。ホストは、このタスクの識別、フラグ、およびフラグメンテーション オフセットを使用します。どのフラグメントがどのデータグラムに属しているかを確認するために、ホストは送信元アドレス、宛先アドレス、および ID を使用してそれらを一意に識別します。オフセット値と追加のフラグメント ビットを使用して、すべてのフラグメントが到着したかどうかを判断します。
ご質問への回答
ペイロードを 8 の倍数に分割する必要があるのは、最後のフラグメント以外の場合のみです。8 で割るオフセットを使用する理由は、ホストが次のフラグメントの開始アドレスを識別するのに役立ちます。最後のフラグメントに遭遇した場合、ホストは次のフラグメントのアドレスを必要としません。したがって、最後のフラグメントの場合、ペイロードが 8 の倍数になることを心配する必要はありません。ホストは more fragment フラグをチェックして、最後のフラグメントを識別します。
少し追加情報: データグラムの配信を保証するのは、ネットワーク層の責任ではありません。1 つまたは複数のフラグメントが到着していないことが判明した場合は、単にデータグラム全体を破棄します。ネットワーク層の上で動作するトランスポート層は、TCP を使用している場合、ソースにデータの再送信を要求することで、このことを処理します。
参考文献: コンピュータ ネットワーキング - トップダウン アプローチ、James F. Kurose、Keith W. Ross (第 5 版)
パディング ビットを追加する必要はありません。フレーム全体が送信されるまで、すべてのビットがルートにプッシュされます。