web-dev-qa-db-ja.com

UDPIPフラグメンテーションとMTU

UDPパケットの送信に関連して見られるいくつかの動作を理解しようとしています。

2つの小さなJavaプログラムがあります。1つはUDPパケットを送信し、もう1つはそれらを受信します。1つのスイッチを介して接続された2台のコンピューター間のネットワーク上でローカルに実行しています。

MTU設定(/ sbin/ifconfigによって報告される)は、両方のネットワークアダプターで1500です。

  • サイズが1500未満のパケットを送信すると、受信します。期待されます。
  • 1500 <サイズ<24258のパケットを送信すると受信します。期待されます。私はwiresharkを介して、IP層がそれらを断片化していることを確認しました。
  • サイズが24258を超えるパケットを送信すると、失われます。 予期されていません。受信側でwiresharkを実行すると、これらのパケットは表示されません。

Ping-sでも同様の動作を確認できました。

ping -s 24258 hostA動作しますが、

ping -s 24259 hostA失敗します。

誰かが何が起こっているのか理解していますか、または私が何を探すべきかについての考えを持っていますか?

どちらのコンピューターもCentOS564ビットを実行しています。 1.6 JDKを使用していますが、プログラミングの問題ではなく、ネットワークの問題か、OSの問題である可能性があります。

15
wolfcastle

IPプロトコルの実装は、任意の大きなパケットを処理できる必要はありません。理論的には、可能な最大IPパケットサイズは65,535オクテットですが、標準では、実装が少なくとも576オクテットをサポートすることのみが要求されています。

ホストの実装は576をはるかに超える最大サイズをサポートしているように見えますが、それでも理論上の最大サイズである65,535よりも大幅に小さくなっています。 (スイッチはデフラグを実行する必要がないため、問題になるとは思われません。IP層でも動作していません)。

IP標準では、受信側のホストがより大きなパケットサイズを処理できることが確実でない限り、ホストが576バイトを超えるパケットを送信しないことをさらに推奨しています。プログラムがより小さなパケットサイズを送信する方がよいかどうかを検討する必要があります。 24,529は私にはひどく大きいようです。多くのホストがそれほど大きなパケットを処理しない可能性があると思います。

これらのパケットサイズの制限は、MTU(データリンク層プロトコルでサポートされる最大フレームサイズ)とは完全に別個であることに注意してください。

10
Dan Moulding

私は興味があるかもしれない以下を見つけました:

ダンの答えは役に立ちますが、ヘッダーの後は実際には65507バイトに制限されていることに注意してください。

5
Kaleb Pederson