1

次のコマンドを発行して、Linux ホストからサーバーへの mtu 値を見つけます。

ping -s 1312 my.sever.com  --> 100% successful
ping -s 1313 my.sever.com  --> 100% failed

したがって、最大 MTU は 1340 (1312 + 28) であると想定しています。

ただし、Java クライアントからそのサーバーへの http 投稿をキャプチャすると、wireshark でサイズ1354の tcp パッケージが表示され、要求/応答全体が成功します。

4 0.054168000 my.ip -> server.ip TCP 1354 80 59060  [TCP segment of a reassembled PDU]

パッケージサイズ>最大MTUサイズでどのように成功できるのか疑問に思っていましたか?

ありがとう、

4

2 に答える 2

2

インターネット プロトコルはデータグラム フラグメンテーションを実装し、それをより小さな断片に分割します。これにより、元のデータグラム サイズよりも小さい最大転送単位でノードを通過できるパケットが形成される可能性があります。ルータがネクスト ホップのMTUより大きいプロトコル データ ユニットを受信した場合、ルータには 2 つのオプションがあります。PDUをドロップして、状態パケットが大きすぎることを示すICMPメッセージを送信するか、 IPパケットをフラグメント化します。

見る

于 2014-02-15T09:02:00.450 に答える
0

サーバーでパケットをキャプチャしている場合、TCP が MTU よりも大きなセグメントを送信しているのを確認できます。ただし、ネットワーク上のパケットは MTU サイズのみです。これは、ネットワーク デバイス (スイッチ) などでキャプチャすることで確認できます。または、リモート (クライアント) マシンでパケットをキャプチャすると、各パケットが <= MTU であることがわかります。

この動作は、TSO/GSO が有効になっていると、TCP セグメントが NIC ハードウェアによって MTU サイズのパケットに分割されるためです。tcpdump はソフトウェア層でキャプチャするため、さらに転送するために NIC カードに送信される MTU よりも大きなセグメントを認識します。

NIC の tso/gso を無効にすると、すべての発信パケットが MTU サイズ以下 (pMTU サイズの可能性が高い) になることがわかります。

于 2014-09-23T11:03:01.770 に答える