3

ホスト A とホスト B の 2 つのホストがあり、ホスト A が 1500 バイトのパケットを B に送信し、それらの間に 2 つのルーターがあり、最初のリンクの MTU が 800 バイトで、2 番目のリンクの MTU が 500 バイトであるとします。彼ら。

私が理解しているように、パケットは両方ともフラグメント化する必要があります。パケットは 3 つのパケット (2 つの同じサイズのパケットと 1 つの小さいパケット) にフラグメント化する必要があります。

次に、この 2 番目のルーターに到達すると、最初の 2 つのフラグメント化されたパケットがそれぞれもう一度フラグメント化されます。最初の 2 つの元のフラグメントは、1 つの大きなフラグメント (500 バイトに近い) と、1 つの小さなフラグメントを生成します。

これは私が混乱しているところです。

「More Fragment」ビットは、パケットが「More Fragment」が 0 に設定された次のパケットまでのフラグメントの一部であることを示す最後のものを除いて、最初の 3 つのフラグメントすべてで 1 に設定する必要があることを知っています。ただし、 、フラグメントの 2 番目のセットについては、よくわかりません。パケットが初めてフラグメント化された場合、最後のフラグメントの「More Fragment」は 0 になりますが、これは実際には元のメッセージの途中にあるフラグメントにすぎないため、1 である必要があると感じています。

より多くの経験を持つ誰かが私のためにこれに光を当ててくれることを願っています. 「More Fragment」ビットは再構成に使用されますか? もしそうなら、フラグメントがフラグメント化されたときに、最後のフラグメントを 0 に設定しないと想像できます。

したがって、アルゴリズムは次のようになります。

If fragmenting a packet with 'More Fragment' set to 0, 
    then set 'More Fragment' to 1 in all fragmented packets except the last.
Else If fragmenting a packet with 'More Fragment' set to 1, 
    then set 'More Fragment' to 1 in all of the fragmented packets.

ここでの私の仮定は正しいですか?

4

1 に答える 1

5

あなたは多かれ少なかれ正しいです。MF (より多くのフラグメント) フラグを追加する以外のルーターは、さらに処理を行っています。

長いインターネット パケットをフラグメント化/セグメント化するために、ルーター (下図の R1) は新しい IP パケットを作成し、IP ヘッダー フィールドの内容を長いパケットから新しい IP ヘッダーにコピーします。その後、長いパケットのデータは 8 バイト (64 ビット) 境界で 2 つの部分に分割されるため、最初のパケットは発信インターフェイスの MTU よりも小さくなります。最初のパケットの more-fragments フラグ (MF) が 1 に設定されます (このパケットのフラグメントがさらに続くことを示します)。このパケットが別のシステムによってすでにフラグメント化されている場合は、このパケットに More Flag がすでに設定されている可能性があります。このパケットは転送されます。

次に、2 番目に作成された新しいパケットが処理されます。パケット ヘッダー フィールドは、元のパケットと同じです (元のパケットのパケット ID、全長フィールド、モア フラグメント フラグ (MF)、およびフラグメント オフセット フィールドの同じ値を含む)。パケット ヘッダー フィールドは、最初のフラグメントで送信されたペイロード バイト数を追加することにより、新しいオフセット フィールドで更新されます。この新しいパケットが許可されたリンク MTU よりも大きい場合、パケットは再びフラグメント化されます。

つまり、すでにフラグメント化されたパケットの場合、IP ヘッダー全体が新しいパケット (フラグメントのより小さいフラグメント) にコピーされます。これは、IP パケットに MF が設定されている場合、最後のフラグメント化されたパケットにもコピーされることを意味します。オフセットとパケット ID を変更することで、フラグメント化されたパケットを受信するホストはそれらを再構成できるようになります。

于 2012-11-07T13:01:28.893 に答える