25

私は現在、ネットワーキングのスライドを読んでいますが、誰かが断片化と再構築の概念を手伝ってくれるかどうか疑問に思っていました.

ここに画像の説明を入力

それがどのように機能するか、つまり、ネットワーク リンクには MTU があるため、データグラムがどのように小さなチャンクに分割されるかを理解しています。ただし、写真の例は私を混乱させます。

これは MSU であるため、最初の 2 つのセクションは 1500 の長さを示していますが、これは、最後のセクションには 1040 ではなく 1000 (合計 4000 バイト) が必要であることを意味するのではないでしょうか? これらの余分な 40 バイトはどこから来たのでしょうか? 私の推測では、前の 2 つのフラグメントは両方とも 20 バイトのヘッダーを持っていたため、この余分な 40 バイトのデータはどこかに移動する必要があり、最後のフラグメントに到着するのでしょうか?

Fragflag は基本的に別のフラグメントがあることを意味するため、最後のフラグメントがゼロになることを除いて、すべてのフラグメントの Fragflag は 1 になります。ただし、オフセットとは何か、またはその計算方法はわかりません。最初のオフセットがゼロなのはなぜですか? 2 番目のオフセットを取得するために、データ フィールド (1480) のバイトを 8 で割ったのはなぜですか? この8はどこから来たのですか?それとは別に、各フラグメントのオフセットがこの値だけ増加すると仮定していますか?

たとえば、最初のフラグメントのオフセットは 0、2 番目は 185、3 番目は 370、4 番目は 555? になります。(370+185)

助けてくれてありがとう!

4

4 に答える 4

21

各パケットには 20 バイトのヘッダーがあります。したがって、元のパケットには 3,980 バイトのデータが含まれています。フラグメントには、1480、1480、および 1020 バイトのデータが含まれます。1480 + 1480 + 1020 = 3980

ヘッダーのすべてのビットが貴重です。オフセットを 8 で割ると、16 ビットではなく 13 ビットに収まるようになります。これは、最後のパケットを除くすべてのパケットに 8 の倍数のデータ バイト数が含まれている必要があることを意味しますが、これは問題ではありません。

于 2013-04-14T14:11:37.450 に答える
17

断片化と再構成は、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 フラグメントが許可されます。これはデータグラムの全長フィールドと一致していることに注意してください (もちろん、ヘッダーはフラグメントではなく全長にカウントされます)。

于 2014-07-22T06:32:05.117 に答える
2

IP ヘッダーのオフセット サイズは 13 ビットですが、最悪の場合は 16 ビットが必要です。したがって、8 の倍率、つまり (2^16/2^13) を使用します。

于 2013-04-23T15:42:47.200 に答える