web-dev-qa-db-ja.com

MTU設定はJavaループバックのソケットによって無視されます

Mtuに問題があります。私は次のことをしました:

[email protected]:/home/sa# ifconfig lo mtu 1500
[email protected]:/home/sa# ifconfig lo
lo        Link encap:Lokale Schleife  
          inet Adresse:127.0.0.1  Maske:255.0.0.0
          inet6-Adresse: ::1/128 Gültigkeitsbereich:Maschine
          UP LOOPBACK RUNNING  MTU:1500  Metrik:1
          RX packets:143 errors:0 dropped:0 overruns:0 frame:0
          TX packets:143 errors:0 dropped:0 overruns:0 carrier:0
          Kollisionen:0 Sendewarteschlangenlänge:0 
          RX bytes:58028 (58.0 KB)  TX bytes:58028 (58.0 KB)

[email protected]:/home/sa# ip route flush cache

このようなパケットを取得するにはどうすればよいですか:(Wiresharkを使用してキャプチャ)

15  0.028587    127.0.0.1   127.0.0.1   TCP 10005 > 49152 [ACK]
    Seq=4717 Ack=53 Win=14600 Len=1608

TCPパケットはJavaソケットによって生成されます-関連性がある場合。

なぜ私がloでMTUを変更したいのか尋ねないでください-私はこれをしなければなりません。

3
Simon Ottenhaus

誤ってすべてのUnixライクなOSが似ていると誤解して申し訳ありませんが、カーネルがループバックインターフェイスがTCPセグメンテーションオフロード(TSO)をサポートしていると考える可能性はありますか?

Mac OS X(「BSD」と考えてください)では、パケットを送信しているのと同じマシンでパケットキャプチャを実行すると、非常に大きなTCPフレームがカードに送信されていることがわかります。スタックは、カードがTSOを実行して1500バイトのチャンクに切り刻むことを認識しています。MacOSXでは、Sudo sysctl -w net.inet.tcp.tso=0を使用して無効にできます。

Linuxでは、イーサネットインターフェイスの場合、Sudo ethtool -K eth0 tso offを実行できるように見えます。ただし、それが(ethXではなく)ループバックインターフェイスで機能するかどうかはわかりません。

3
Spiff