UDP で小さなパケットをたくさん送信すると、より多くのリソース (CPU、zlib による圧縮など) が必要になります。私はここで、UDP で ~65kBYTE の大きなパケットを 1 つ送信するとおそらく失敗することを読んだので、小さなパケットをたくさん送信するとより頻繁に成功すると考えられますが、より多くの処理能力を使用することによる計算上のオーバーヘッドが発生します (または、少なくともそれは私が仮定しています)。問題は基本的にこれです。成功した最大のパケットを送信し、計算を最小限に抑えるための最良のシナリオは何ですか? ほとんどの場合に機能する特定のサイズはありますか? サーバーには Erlang を、クライアントには Enet を使用しています (c++ で記述)。Zlib 圧縮も使用して、同じパケットをすべてのクライアントに送信します (ブロードキャストは私が推測する用語です)。
35164 次
4 に答える
31
その最大サイズはUDP payload
、ほとんどの場合、IP フラグメンテーションを引き起こしません。
MTU size of the host handling the PDU (most of the case it will be 1500) -
size of the IP header (20 bytes) -
size of UDP header (8 bytes)
1500 MTU - 20 IP hdr - 8 UDP hdr = 1472 bytes
@EJP は534
バイトについて話しましたが、私はそれを に修正し508
ます。ホストが設定できる最小 MTU サイズは576であり、(508 = 576 MTU - 60 IP - 8 UDP)になる可能性があるため、これは確実に断片化を引き起こさないバイト数です。IP header max size
60 bytes
ちなみに、標準で十分な値である1472
ため、バイトを使用してみます。1500
接続を通過する場合は、計算1492
の代わりに使用します。1500
PPPoE
于 2013-02-21T13:36:41.887 に答える
5
534バイト。それは断片化せずに送信する必要があります。もちろん、それでも完全に失われる可能性があります。失われたパケットの再送信によるオーバーヘッドとネットワークオーバーヘッド自体は、CPUコストよりも数桁重要です。
于 2013-02-21T01:32:58.633 に答える
-17
間違ったプロトコルを使用している可能性があります。 ほとんどの場合、UDP は、送信したいデータには適していません。その上にシーケンシング、再試行、整合性ロジックを重ねると、TCP ができあがります。
于 2013-02-21T12:09:01.787 に答える