MTU探测方法

什么是MTU?

网络层发送数据包是有最大长度的,网络层从传输层接收到要发送的数据包时,它要判断向本地哪个接口发送数据,并查询该接口获得其最大传输单元MTU(MaximumTransmissionUnit),网络层把MTU值与要发送的IP数据包长度进行比较,如果IP数据包的长度比MTU值大,那么IP数据包就需要进行分片,分片后的数据包长度小于等于MTU(包括IP层头部,大小单位:byte)

MTU不一致经常引起的故障现象:

1、在网络中,由于不同厂商,甚至同一厂商不同型号的设备,对MTU的定义和MTU分片机制不尽相同,常出现MTU引起的网络问题,常表现为游戏卡、部分网站或链接打不开,Email无法发送附件,部分网页或对话框无法打开等。遇到此类问题时,建议先检查是否接口MTU不匹配导致。
此外,OSPF、IS-IS、L2VPN、VPLS等协议邻居关系无法建立,也可能是链路两端MTU值不一致导致。

2、速率无法达到预期

解决方法:

调整机器MTU

如何测试MTU?

Linux主机中: 执行ping x.x.x.x -s 1422 -M do  //x.x.x.x是目标地址
-s指明icmp报文的数据部分大小(不包含icmp 8字节头部)
-M do 表示不允许分片。多试几次,找到临界点。以mtu为1450为例,1450 = 20字节IP头 + 8字节icmp头 + 1422数据,则-s指定为1422可以正常通过

Windows主机中: 执行ping x.x.x.x -l 1472 -f   //x.x.x.x是目标地址
-l指明icmp报文的数据部分大小(不包含icmp 8字节头部)
-f表示不允许分片。

traceroute --mtu www.baidu.com

traceroute to www.baidu.com (14.215.177.39), 30 hops max, 65000 byte packets
1 192.168.109.1 (192.168.109.1) 3.063 ms F=1500 2.908 ms *
2 192.168.98.36 (192.168.98.36) 1.686 ms 1.422 ms *
3 113.98.59.57 (113.98.59.57) 7.075 ms 7.544 ms 5.851 ms

参考:

ping -s 1400 -M do www.baidu.com
PING www.a.shifen.com (153.3.238.102) 1400(1428) bytes of data.    //1400+28字节报文头
ping: local error: Message too long, mtu=1418
ping: local error: Message too long, mtu=1418
ping: local error: Message too long, mtu=1418
^C
--- www.a.shifen.com ping statistics ---
3 packets transmitted, 0 received, +3 errors, 100% packet loss, time 2052ms

为什么mtu值是探测出来的值加上28?

因为ping使用icmp协议,你指定的探测值是数据包数据净荷的长度,还需要加上20字节的ip头部,和8字节的icmp封装。

其他解决方法

-j TCPMSS --set-mss mut-vaue

用法:iptables -A FORWARD -p tcp --tcp-flags SYN,RST SYN -jTCPMSS --set-mss 128
这条规则的目的是设置MSS为128,人工设置为定值

赞(0) 打赏
未经允许不得转载:IT火车 » MTU探测方法

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

1元打赏送给作者

非常感谢你的打赏,我们将继续给力更多优质内容,让我们一起创建更加美好的网络世界!

支付宝扫一扫打赏

微信扫一扫打赏