UDP 最大セグメントサイズ

UDP 最大セグメントサイズ

環境: UDP クライアント サーバー アプリケーションを作成しています。クライアントとサーバー間のパス MTU は 1500 バイトです (両者の間にはワイヤレス リンクのみがあるため、この値は非常に安定しています)。私のシステムでは、デフォルトでフラグメント禁止ビットが設定されており、クライアントとサーバーの両方で、SO_SENDBUF は 16384、SO_RECVBUF は 87380 です。

質問: クライアントは sendto を使用して一度に 8192 バイトをサーバーに送信します。Wireshark を使用して、これらの 8192 バイトが多数のパケットでどのように送信されるかを確認したところ、各パケットには最大 1023 バイトの UDP データしか含まれないことがわかりました。しかし、パス MTU が 1500 の場合、各パケットで 1500-20(IP ヘッダー)-8(UDP ヘッダー) = 1472 バイトのデータを送信できるのではないでしょうか。TCP で同じことを行うと、結果は予想どおりになります。各 TCP パケットは最大 1448 バイトを保持できます。これは、1500-20(IP ヘッダー)-32(タイムスタンプ オプション付き TCP ヘッダー) です。私の質問は、UDP が各パケットに 1023 バイトではなく 1472 バイトを入れないのはなぜかということです。これは単なる実装の詳細ですか。それとも、システム制限を見落としましたか。

注: 同じマシン (ループバック インターフェイスの 127.0.0.1) で実験を行った場合でも、同じ結果が観察されます。

答え1

レイヤー L4 (UDP) と L3 (IP) のオーバーヘッドを差し引いているだけです。残りは、プリアンブル、MAC アドレス、タイプ フィールド、チェックサムを含むイーサネット フレーム (L2) のオーバーヘッドで説明できると思いますか?

http://www.doc.ic.ac.uk/~nd/surprise_97/journal/vol4/mhl/ether01.gif

関連情報