12

UDP データグラムを送受信するアプリケーションを備えた 2 台のコンピューターを使用しています。フロー制御はなく、ICMP は無効になっています。アプリケーションを介して UDP データグラムとしてファイルを送信すると、2 つのパケットの順序が変更されるため、パケットが失われることがよくあります。

ファイアウォールの一種を無効にしており、コンピューター間にハードウェア スイッチが接続されていません (コンピューターは直接配線されています)。

Winsocksend()がパケットを同じ方法で送信することを確認する方法はありますか?

それともOSがそうしているのでしょうか?

または、ネットワーク デバイスの構成が必要ですか?

4

5 に答える 5

12

UDPは軽量のプロトコルであり、設計上、パケットシーケンスなどを処理しません。堅牢なパケット配信とシーケンス処理が必要な場合は、TCPの方が適しています。

UDPは一般に、パケット損失が許容可能であるか、TCPがパケットを再要求する必要があるときに発生する遅延よりも好ましいアプリケーション向けに設計されています。したがって、UDPは一般的にメディアストリーミングに使用されます。

UDPの使用に制限されている場合は、シーケンス外のパケットを識別して再シーケンスする方法を開発する必要があります。

于 2010-09-19T09:22:14.250 に答える
8

UDP は、パケットが順番に到着することを保証しません。(パケットがまったく到着することを保証するものではありません。) そのレベルの堅牢性が必要な場合は、TCP を使用することをお勧めします。別の方法として、データグラムにシーケンス マーカーを追加し、反対側でそれらを再配置することもできますが、なぜ車輪を再発明するのでしょうか?

于 2010-09-19T09:48:13.997 に答える
6
winsock と send() がそこに到達したのと同じ方法でパケットを送信することを確認する方法はありますか?

TCPといいます。

または、 UDTなどの信頼できる UDP プロトコルを試してください。小さな組み込みプラットフォームを使用している可能性があるため、Bell Lab のRUDPのようなよりコンパクトなプロトコルが必要だと思います。

于 2010-09-20T13:33:02.347 に答える
0

フロー制御がありません(ICMPが無効)

UDPを使用して独自のフロー制御を実装できます。

  • 1つ以上のUDPパケットを送信する
  • 確認応答を待ちます(受信者から送信者に別のUDPパケットとして送信されます)
  • 上記のように繰り返します

詳細については、スライディングウィンドウプロトコルを参照してください。

[これは、送信するパケットにシーケンス番号を含めることに加えて行われます。]

于 2010-10-03T19:53:56.087 に答える