あるホストが別のホストにデータを送信する場合、データは複数のルーティング層を介して転送される必要があります。ルーティング層での IP の転送プロセスは比較的複雑ですが、宛先ホストから送信されたデータグラムをどのように処理するか?
まず、データグラムの形式を理解する必要があります。
IP 転送と制御は、IP データグラムのヘッダーによって決まります
4 桁のヘッダー長の値は 4 バイトに基づいています。最小値は 5 です。 は、最小ヘッダー長が 4x5=20 バイトであることを意味します。
は、ヘッダーの長さが 4 バイトに基づいていないことを意味します。どのオプションの IP ヘッダーでも、4 ビット テーブルで表される最大値は 15 です。これは、ヘッダーの最大長が 60 バイトであることを意味します。
8 ビット TOS フィールドには、優先順位を指定する 3 ビットがあります。 IP データグラム (現在は廃止されています) には、サービス タイプの最小遅延、最大スループット、最大信頼性、最小コストを含むオプションの
を示す 4 ビットがあり、合計ビットは常に 0 です。
合計 16 ビットの長さは、データグラム全体 (IP ヘッダーと IP 層ペイロードを含む) のバイト数です。
IP データグラムが送信されるたびに、16 ビット識別子は 1 ずつ増加します。 は、データグラムの断片化と再構築に使用できます。
3 ビットのフラグと 13 ビットのスライス オフセットがスライスに使用されます。
TTL (生存時間) は次のように使用されます :送信元ホストはデータ パケットの生存時間を 64 などに設定し、ルーターを通過するたびにパケットを送信します。
値が 1 減算され、0 になった場合は、経路が長すぎて宛先ホストのネットワークが見つからないため、パケットが破棄されることを意味します。
この生存時間は秒数ではなく、ホップ数です。
プロトコル フィールドは、上位層プロトコルが TCP、UDP、ICMP、または IGMP のいずれであるかを示します。
次に、チェックサムがあります。これは IP ヘッダーのみを検証し、上位層のプロトコルがデータの検証を担当します。
IPv4 の IP アドレスの長さは 32 ビットです。
IP データグラムでは、フィールドの合計長は 16 ビットで、データグラムの最大長は 2^16-1 です。データグラムをできるだけ長くすると伝送効率が向上しますが、1500 バイトを超えることはほとんどありません。 ; そのため、1500 バイトを超える限り、データグラムは断片化されているとみなされます。 IP データグラムがフラグメント化された後、各フラグメントは IP ヘッダーを持つパケットを形成し、独立してルーティングされます。宛先ホストに到着すると、宛先ホストの IP 層は、受信したすべてのフラグメントを処理してから、トランスポート層に送信します。データグラムに再組み立てされます。
1.IP フラグメンテーション
1.IP フラグメンテーションの原則:
フラグメンテーションと再構成のプロセスは、トランスポート層に対して透過的です。なぜなら、IP データグラムはフラグメンテーション後にのみ可能であるためです。フラグメント化されたデータグラムは、必要に応じて再度フラグメント化できます;
IP フラグメンテーション フラグメントと完全なパケットは、ほぼ同じ IP ヘッダーを持ちます。また、ID フィールドはアメリカとイギリスのフラグメントで一貫しているため、組み立て中に同じ IP データ パケット フラグメントを識別できます。 IP ヘッダーでは、16 ビットの識別番号が IP パケットの ID を一意に記録し、同じ ID を持つ IP フラグメントが再組み立てされます。13 ビットのフラグメント オフセットは、パケット全体に対する IP フラグメントの位置を記録します。 . ; これら 2 つのテーブルの中央にある 3 ビットのフラグは、このフラグメントの背後に新しいフラグメントがあるかどうかをマークします。受信者は、これら 3 つのフィールドに提供された情報を使用して IP データを再構成できます。これらの情報はすべて、IP フラグメンテーションを構成する情報です。
(1) フラグフィールドの役割
0 DF MF
フラグフィールドは合計 3 桁で、最上位ビットは 0 です。この値はコピーする必要があります。すべてのグループに
Do not Fragment (DF) 値をコピーする必要があります。 DF=1 は、受信ホストがパケットをフラグメント化できないことを意味します。パケットをフラグメント化できないが、その長さが MTU を超えている場合、パケットは破棄することしかできず、送信元ホストに通知するために ICMP エラー メッセージを使用する必要があります。 DF=0、フラグメンテーションが可能であることを示します。
フラグメンテーション (MF) は、フラグメンテーションが最後のフラグメンテーションであるかどうかを示します。MF=1 は、受け入れられたフラグメンテーションが最後のフラグメンテーションではないことを示します。MF=0 は、フラグメンテーションがいつ行われるかを示します。受け入れられました 最後のフラグメントです
すべての IP フラグメントではなく一部の IP フラグメントを意図的に送信すると、ターゲット ホストはフラグメントの消費を常に待機し、システム リソースを占有します。
2. MTU (最大伝送単位) の原則
2 つのリモート CP が相互接続されている場合、そのデータは相手に到達するために多くのルーターとさまざまなネットワーク メディアを通過する必要があります。 ##、ネットワーク内のさまざまな媒体の MTU は異なります。ちょうど水道管の長いセクションが異なる太さ (異なる MTU) の水道管で構成されているのと同じです。水道管のこのセクションを通過する水の最大量が決定されます。真ん中の一番細い水道管で決めます。
ネットワーク層の上位プロトコル(ここではTCP/IPプロトコルクラスタを例に挙げます)では、水道管の太さはネットワークの問題だと考えているため、気にしません。ネットワーク層では、IP プロトコルが上位層プロトコルから送信された各データ パケットのサイズを検出し、マシンの MTU サイズに基づいて断片化する必要があるかどうかを判断します。シャーディングの最大のデメリットは、転送パフォーマンスが低下することと、一度で完了するタスクを複数のプロセスに分割する必要があることです。したがって、ネットワークの上位層 (トランスポート層の実装) は、多くの場合これに注意を払います。これは、一部の上位層では、何らかの理由でパケットを断片化できないことが必要な場合があり、インデックスによって IP ヘッダーにラベルが追加されるためです。 datagram. :DF IP データ パケットが大規模なネットワーク セグメント上で送信される場合、MTU がデータ パケットより小さい場合、転送デバイスは状況に応じてデータ パケットをドロップします。その後、送信者にエラー メッセージが返され、これにより通信の問題が発生することがよくありますが、幸いなことに、ほとんどのネットワーク リンクの MTU は 1500 以上です。
UDP の場合、プロトコル自体は役に立ちません。接続プロトコルは、データ パケットの到着順序は正しいため、一般に UDP にはフラグメンテーションの要件はあまりありません。
TCP の場合は異なります。このプロトコルは接続指向のプロトコルです。TCP の場合、データ パケットの到着順序が非常に重要です。データ パケット
# および送信プロセス中にエラーが発生したかどうかを確認するため、一部の TCP アプリケーションにはフラグメンテーションの要件があります --- フラグメント化できません#3.MSS (最大 (メッセージ セグメント長) 原則
MSS は、TCP パケットで毎回送信できる最大データ セグメントです。最高の送信パフォーマンスを達成するために、TCP プロトコルは通常、接続を確立するときに双方の MSS 値をネゴシエートします。この値は次のとおりです。 TCP プロトコルの実装時に MTU に置き換えられるため (IP パケットのヘッダー サイズ 20 バイトと TCP データ セグメントのヘッダー サイズ 20 バイトを差し引く)、MSS サイズは多くの場合 1460 になります。両当事者は、次の情報に基づいてこの接続の MSS を決定します。指定された最小 MSS 値 最大値
#2. IP フラグメンテーション ステップ
# フラグメント化されていないデータグラムのフラグメンテーション情報フィールドはすべて 0、つまり複数のフラグメンテーション フラグが 0 で、オフセットは0、データグラムの断片化には次の手順が必要です
(1) DF フラグ ビットをチェックして、断片化が許可されているかどうかを確認します。このビットが設定されている場合、データグラムは破棄され、ICMP エラーが返されます。ソース
(2) MTU 値に基づいて、データ フィールドを 2 つまたはペアの部分に分割します。最後のデータ部分を除き、新しく作成されたすべてのデータ オプションの長さは 8 バイトの倍数である必要があります。
(3) 各データは IP データグラムに入れられ、これらのデータグラムのヘッダーは元のヘッダーからわずかに変更されます
(4) 最後のデータグラム フラグメントを除くすべての各フラグメント複数のフラグメンテーション フラグが設定されています
(5) 各フラグメントのフラグメント オフセット フィールドは、元のデータグラムのこのデータ部分が占める位置に設定されます。この位置は、元のフラグメント化されていないデータグラムの先頭を基準にしています。
(6) 元のデータグラムにオプションが含まれている場合、オプション タイプ バイトの上位バイトによって、この情報がすべての断片化されたデータグラムにコピーされるか、最初のデータグラムのみにコピーされるかが決まります。(7) 新しいデータグラムのヘッダフィールドと全長フィールドを設定します。
(8) メッセージ ヘッダーのチェックサム フィールドを再計算します。
現時点では、これらの断片化されたデータグラムは、完全な IP データグラムのように転送されます。IP は、各データグラム フラグメントを個別に処理します。データグラム フラグメントは、異なるルートを通じて宛先に到達できます。より小さい MTU を指定するルートを通過した後、さらに断片化することができます。
宛先ホスト上で、データは元のデータグラムに再構築され、送信側ホストによって設定された識別フィールドはデータグラム内のものと同じになります。元 IP アドレスは一緒に使用されます。フラグメント化プロセスでは、このフィールドは変更されません
3. 再アセンブリ
これらのデータグラムのフラグメントを再構築するために、受信ホストは、ストレージ バッファが割り当てられるときに、スライスが到着。このホストはタイマーも開始します。データグラムの後続のフラグメントが到着すると、データはバッファ メモリのフラグメント オフセットで指定された場所にコピーされ、すべてのフラグメントが到着すると、完全な、フラグメント化されていない元のデータグラムが復元されます。
タイマーが期限切れになり、シャードが未承認の状態のままである場合、データは保持されません。このタイマーの初期値は IP データグラムのライフタイム値であり、実装に依存しており、一部の実装では設定可能です。
再構築ステップ
受信側では、送信者によって送信された元のデータ IP パケットは、上位層プロトコルに送信される前にすべてのフラグメントを再構築します。それぞれが再構築された IP になります。データグラムは ipq 構造で表されます。
フラグメントのアセンブリを効果的に改善するには、フラグメントの保存に使用される構造が次の点を達成する必要があります。
(1) 迅速な位置決めあるデータグラム
#(2) あるデータグラムに属するフラグメントのグループに新しいフラグメントを素早く挿入する#(3) データグラムを効果的に判断する すべてのフラグメントを受信したかどうか
(4) 再構築タイムアウト機構を備えており、再構築が完了する前にタイムアウトがオーバーフローした場合、データグラムの内容はすべて削除されます。
以上がIP データグラムの断片化と組み立ての原理は何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。