Mtuに問題があります。私は次のことをしました:
root@sa-headend:/home/sa# ifconfig lo mtu 1500
root@sa-headend:/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)
root@sa-headend:/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を変更したいのか尋ねないでください-私はこれをしなければなりません。
誤ってすべての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ではなく)ループバックインターフェイスで機能するかどうかはわかりません。