把本機的MTU設成比網關的MTU小或相同,就可以減少丟包。如果本機的MTU比網關的MTU大,大的數據包就會被拆開來傳送,這樣會產生很多數據包碎片,增加丟包率;
如果檢測到網關的MTU值是1500,從1400到1472之間多試幾次,就能找到合適的數據包長度了;把數據包長度加上數據包頭28字節,就得到MTU的值。
當包是1472字節並且不拆包,能夠傳送正確;
[root@rhmn ~]# ping -c 3 -s 1472 -M do 10.1.0.230
PING 10.1.0.230 (10.1.0.230) 1472(1500) bytes of data.
1480 bytes from 10.1.0.230: icmp_seq=1 ttl=64 time=0.345 ms
1480 bytes from 10.1.0.230: icmp_seq=2 ttl=64 time=0.303 ms
1480 bytes from 10.1.0.230: icmp_seq=3 ttl=64 time=0.314 ms
--- 10.1.0.230 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2000ms
rtt min/avg/max/mdev = 0.303/0.320/0.345/0.027 ms
當包是1473字節並且不拆包,加上28字節的包頭,大於設定值1500,發生錯誤。
[root@rhmn ~]# ping -c 3 -s 1473 -M do 10.1.0.230
PING 10.1.0.230 (10.1.0.230) 1473(1501) bytes of data.
From 10.1.34.1 icmp_seq=1 Frag needed and DF set (mtu = 1500)
From 10.1.34.1 icmp_seq=1 Frag needed and DF set (mtu = 1500)
From 10.1.34.1 icmp_seq=1 Frag needed and DF set (mtu = 1500)
--- 10.1.0.230 ping statistics ---
0 packets transmitted, 0 received, +3 errors