或者直接用:
traceroute -F xx.xx.xx.xx 1473
-F 表示不分片。
关于TCP/IP的MTU(转载)
1: 什么是MTU? MTU是Maximum Transmission Unit的缩写。意思是网络上传送的最大数据包。MTU的单位是字节。 大部分网络设备的MTU都是1500。如果本机的MTU比网关的MTU大,大的数据包就会被拆开来传送,这样会产生很多数据包碎片,增加丢包率,降低网络速度。把本机的MTU设成比网关的MTU小或相同,就可以减少丢包。
2: 如何检测网关的MTU?
执行: ping -f -l 1472 192.168.0.1
其中192.168.0.1是网关IP地址,1472是数据包的长度。
请注意,上面的参数是“-l”(小写的L),而不是“-1”。 如果能ping通,表示数据包不需要拆包,可以通过网关发送出去。 如果出现: Packet needs to be fragmented but DF set. 表示数据包需要拆开来发送。此时,减少数据包长度,再执行上面的ping命令。从1400到1472之间多试几次,就能找到合适的数据包长度了。把数据包长度加上数据包头28字节,就得到MTU的值。 如果检测到网关的MTU值是1500,不需要修改。 如果网关有防火墙ping不通,可以试试直接把MTU设为1400。
3: 如何修改本机的MTU? 修改方法如下:
3.1: 运行regedit
3.2: 浏览到: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\Interfaces
3.3: Interfaces下有多个子项,每个子项对应一个网卡。请按如下方法选择网卡:
a: 确定本机用来连接Internet的网卡或拨号连接的IP,如192.168.0.19;
b: 用鼠标点击Interfaces上的子项,查看键值列表中的IPAddress项;
c: 如果IPAddress的键值与a中的IP相同,即192.168.0.19,则该子项就是要找的网卡;
3.4: 进入该子项,在右边的窗口里按鼠标右键,选择“新建”->“双字节值”,输入名称“MTU”,按回车。再用鼠标双击“MTU”,弹出修改窗口: 如图3: 填入MTU的值。填写前请先把基数设为十进制。 设置好后,需要重启机器才能生效。
範例三:找出最大的 MTU 數值 [root@linux ~]# ping -c 2 -s 1000 -M do 192.168.10.10 PING 192.168.10.10 (192.168.10.10) 1000(1028) bytes of data. 1008 bytes from 192.168.10.10: icmp_seq=1 ttl=64 time=0.424 ms # 如果有回應,那就是可以接受這個封包,如果無回應,那就表示這個 MTU 太大了。 [root@linux ~]# ping -c 2 -s 8000 -M do 192.168.10.10 PING 192.168.10.10 (192.168.10.10) 8000(8028) bytes of data. ping: local error: Message too long, mtu=1500 # 這個錯誤訊息是說,本地端的 MTU 才到 1500 而已,你要偵測 8000 的 MTU # 根本就是無法達成的!那要如何是好?用前一小節介紹的 ip link 來進行 MTU 設定吧! |
不過這個 MTU 不要隨便調整啊!除非真的有問題。通常調整 MTU 的時間是在這個時候:
- 因為全部的主機群都是在內部的區網,例如叢集架構 (cluster) 的環境下, 由於內部的網路節點都是我們可以控制的,因此可以透過修改 MTU 來增進網路效能;
- 因為作業系統預設的 MTU 與您的網域不符,導致某些網站可以順利連線,某些網站則無法連線。 以 Windows 作業系統作為連線分享的主機時,在 Client 端挺容易發生這個問題;
另外,其實每種連線方式都有不同的 MTU 值,常見的各種介面的 MTU 值分別為︰
網路介面 | MTU |
Ethernet | 1500 |
PPPoE | 1492 |
Dial-up(Modem) | 576 |