1

すべてを次々に送信するのではなく、複数のUDPパケットを1つに結合することには利点がありますか?大きなパケットが破損した場合、私はそれらをすべて失うことを知っていますが、それらをすべて1つに送信することにはおそらくいくつかの利点がありますか?大きなものが失われる可能性が低いなど?

4

4 に答える 4

0

それは送信アプリケーションの裁量になります。

大きなパケットは、基盤となるネットワークのMTUによって制限されることに注意してください。たとえば、UDPパケットの理論上のサイズは64kですが、イーサネットフレームはわずか約1500バイトです。したがって、これは実用的な機能ではないと思います。

于 2012-10-09T16:58:42.827 に答える
0

一般に、ネットワーク チャネルは、1 秒あたりに送信できるパケットのレートが制限されます。したがって、1 秒あたり数百万のメッセージを送信したい場合は、通常、大きなパケット損失なしで実行するために、より少ない数のパケットに結合する必要があります。

過度の一般化として、Windows は UDP で 1 秒あたり 10,000 パケットを超えることを好みませんが、大きな MTU パケットでギガビット ネットワークを飽和させることができます。

于 2012-10-09T20:43:09.387 に答える
0

複数の UDP パケットを次々に送信するのではなく、複数の UDP パケットを 1 つに結合する利点はありますか?

データグラムあたり 8 バイトの UDP ヘッダーを節約できるため、ネットワーク経由で送信されるデータの量を減らすことができます。IPレイヤーでのフラグメント化を避けるために、MTU sans IPおよびUDPヘッダーサイズを超えて送信しないようにしてください。

また、標準の POSIX ソケット API では、send/sendto/sendmsg()1 つのデータグラムを送受信するために 1 つのシステム コールが必要です。そのため、送信するデータグラムが少ないほどシステム コールが少なくなり、全体的なレイテンシが減少します (コールあたり数マイクロ秒程度)。3.0 以降の Linux カーネルは、1 つのシステム コールで複数のデータグラムを送受信する機能を提供sendmsg()します。recvmmsg()

大きなパケットが破損した場合、すべてのパケットが失われることを知っています

真実。ただし、プロトコルが UDP データグラムの損失にまったく対処できない場合は、それほど問題にならない可能性があります。1 つのデータグラムが失われるとすぐに、いずれにせよ破損します。

于 2012-10-09T21:20:45.413 に答える
0

パケット サイズが小さい (100 バイト未満) 場合に重要です。IP/UDP ヘッダーは 28 バイト以上です。

サーバーへのストリーミング接続があり、各パケットに 50 バイトが含まれ、ソフトウェアが 1 秒あたり 1000 パケットのレートでパケットを送信するとします。

実際のペイロードは、1000 * 50 bytes = 50000 bytes.ヘッダーのオーバーヘッドの1000 * 28 = 28000 bytes合計バイト数です:50000 + 28000 = 87000 ==> 87 KBps

3 つの UDP パケットをそれぞれ 1 つのパケットに結合できると想像してください。

ヘッダーのオーバーヘッド1000 / 3 * 28 = 9333総バイト数:50000 + 9333 ===> 60 KBps

これにより、一部のアプリケーションでは、帯域幅のかなりの部分が節約されます。

于 2014-11-11T14:50:25.640 に答える