6

私は、UDP 上でストップ アンド ウェイト プロトコルを使用して LAN および WAN 経由でパケットを送信するプログラムを作成しています。最近、自分のプログラムをテストしていて、大きなパケット (64k バイトに近づく) ほどパケット損失率が高いことに気付きました。これは直感的には理にかなっていますが、これの実際の理由は何ですか?

4

3 に答える 3

8

それらを伝送するネットワークのMTU サイズより大きい UDP パケットは、自動的に複数のパケットに分割され、受信者によって再構成されます。これらの複数のサブパケットのいずれかがドロップされると、受信者は残りのサブパケットもドロップします。

たとえば、63k UDP パケットを送信してイーサネット経由で送信すると、47 個以上の小さな「フラグメント」パケットに分割されます (イーサネットの MTU は 1500 バイトですが、それらの一部は UDP ヘッダーなどに使用されるため、そのため、UDP パケットで使用可能なユーザー データ領域の量はそれよりも小さくなります)。受信者は、47 個以上のフラグメント パケットすべてが正常に通過した場合にのみ、その UDP パケットを「見る」ことができます。これらのフラグメント パケットの 1 つだけがドロップされると、操作全体が失敗します。

于 2012-04-27T18:46:20.393 に答える
0

まあ、データ ネットワークは信頼できるものとはほど遠いものです。パケットは常にドロップされます。ルーターの過負荷、バッファーの満杯、パケットの破損などが原因の一部です。UDP にはフロー制御機能がないため、受信側が過負荷になった場合などに速度が低下することはありません。

Jeremy が説明したように、ペイロードが大きくなればなるほど、分割されるパケットが増えるため、それらの一部が失われる可能性が高くなります。

UDP は、ここでドロップされたパケットが何にも影響しない場合、または時間内に到達するために何かが必要な場合、またはまったく影響しない場合に使用されます。(VOIP、ストリーミングビデオなど)

于 2012-04-28T22:24:19.210 に答える
-1

IP フラグメンテーションと最適化がすべてです。MTU を超えるパケットはフラグメント化され、最終ホストで最適化する必要があります。フラグメントがパス上で再度フラグメント化される可能性もあり、これが再び遅延を追加する可能性があります。一部の N/W 要素がレイヤー 4 フィルタリング用に構成されている場合、デフラグ (最終ホストではない) がルールを適用してから、再びフラグメントを適用して転送します。これが、パフォーマンスを必要とするアプリケーションが常にサイズ <= (MTU-ETHHDR-IPHDR) のデータを送信しようとする理由です。

于 2012-06-22T16:40:57.127 に答える