0

私はUDPクライアントとUDPサーバーを書いています。

2000 ~ 3000 の大きな UDP ペイロードがあります。簡単なテストをいくつか試しました。UDP クライアントにデータグラムで 2000 バイトを送信させ、tcpdumpパケットのキャプチャに使用しました。発信パケットが 1 つしかなく、UDP パケットに解析されていないことに気付きましたが、1514 バイトの IP パケットです。これは、約 500 バイトが失われていることを意味します。

すべてのペイロードを同じ UDP パケットに入れることは可能ですか (ペイロードを 2 つの部分に分割し、受信アプリケーション層でそれらを組み立てるには多少の労力がかかります)、IP に各 UDP パケットのフラグメントを複数の IP フラグメントにスタックさせることは可能ですか? . サーバー側では、IP スタックが IP フラグメントを組み立て、それらを UDP サーバーに処理します。

可能であれば、IP フラグメンテーションを有効にする方法を教えてください。

4

1 に答える 1

0

それがデフォルトで起こるべきことです。これに関する問題は、フラグメントが到着しない場合、IP レベルで再送信を引き起こすものがないため、データグラム全体が失われることです。一般に、UDP では、パス MTU よりも小さいデータグラムを使用するのが最善です。それを検出できる場合は、それ以外の場合は 534 バイトです。これは、すべてのホストがこのレベル以下にフラグメント化されないようにする必要があるためです。

于 2013-05-21T00:35:19.003 に答える