MTU问题
MTU
Maximum Transmission Unit,最大传输单元,指的是数据链路层的最大payload,由硬件网卡设置MTU,是一个硬性限制。
现象一
最近使用ssh工具在VPN环境下连接一个生产环境的Linux主机的时候,发现经常出现输入命令后卡死的情况。最开始以为是Linux主机的问题,问了一些老同事之后发现原来是我自己电脑的最大传输单元MTU和服务器端接受的最大传输单元不匹配导致连接不通畅,换用其它电脑连接就不会出现这样的情况。在前辈的提示之后在网上搜索了一些查看和修改MTU值的方法,动手修改后成功解决了这个问题。
现象二
通过光猫拨号的<-->光猫内网作为路由器WAN地址<-->设备接入路由器DHCP获取路由器分配的IP地址
光猫MTU和路由器的MTU保持一。家用路由器,MTU值推荐是1480=1472+28.
现象三
ssh远程登录linux服务器,隔几分钟就超时掉线.
参考
路由器中填写的MTU值是包含28字节包头的。
例如电脑上ping:ping -f -l 1460 www.baidu.com ,ping试验得到的最佳包大小为1460字节时,再加上28,将路由器的MTU设为1488。
计算机本地MTU值是1500,路由器MTU值默认1480,最大不可超过1492,进入路由设置了1.168.192。
如果是ADSL拨号上网的话,就设置成1492,如果是宽带上网或者是光纤上网,就设置成1500,mtu值没有明确规定必须是多少,要根据使用的网络环境决定。一般设备出厂时都默认是1500。
这个28字节的大小,【ICMP的包头8字节】+【IP包头的20字节】,最后再加上实际的数据大小,就是MTU的大小了
网上案例
xx移动光猫拨号路由方式时MTU值是1492,路由器一直是1500,导致APP无法正常使用,其他应用未见异常,今天将路由器MTU值也改为1492后,APP能够正常使用了。
Windows查看本机和修改MTU
# 查看MTU
netsh interface ipv4 show subinterfaces
# 测试最大MTU,不通需要返回DF字样。路由器上MTU,该值需要1472+28=1480
ping -f -l 1472 10.1.252.254
# 修改
netsh interface ipv4 set subinterface "网卡名称" mtu=1492 store=persistent
Linux查看和修改MTU
# 测试MTU
ping -c 2 -M do -s 1472 192.168.86.2
# 查看MTU值
cat /sys/class/net/enp129s0f0/mtu
# 临时修改
ifconfig eth0 mtu 1472
# 永久修改MTU值
echo '1472' > /sys/class/net/enp129s0f0/mtu