合 Windows和Linux下的MTU查看和修改
MTU(Maximum Transmission Unit,最大传输单元)
网络上传输的并非连续的数据流,而是一个个的数据包,MTU的值限定了这个数据包的最大值。
如果电信运营商设定的数据包最大值为1480字节,而你的电脑通过路由器上网,默认是使用1500字节(如果是直连Modem,则会自动采用电信提供的 MTU值),那么你发送的数据包将超过电信的规定,而被退回,于是系统只好重新组成符合电信要求的数据包来发送,这样就浪费了时间,增加了处理工序,甚至有人因此网络非常不稳定,打开网页龟速。
最好的做法就是将自己电脑和路由器的 MTU 设置成电信允许的限值。
为什么MTU最大值为9000字节
从理论上计算,4 bytes的CRC最大支持12000 bytes大小的字节,超过了就没有办法检查了。另外还有其他一些协议如NFS等的限制。
最后需要注意的是,在经过交换网络设备时,仅仅修改主机端的MTU值是不行的,还需要交换网络设备上开启jumbo frames功能。
测试电信 MTU 值
以管理员身份运行命令提示符,“局域网”的MTU值默认为1500,“宽带”的MTU值则各地区不同,可通过尝试来获取所在地的MTU值,方法如下:
1 | ping www.sina.com.cn -f -l 1500 |
"-f" 在数据包中设置“不分段”标志。强制系统将数据包一次性发送出去。
"-l 1500" 代表 length 长度,1500 代表数据包长度为 1500 个字节。
返回结果是:需要拆分数据包。
修改 length 值,直到找出最大可传输数据包的长度(例如本机是 1464)。
上面得到的值并不能直接用于本地设置上(因为这里得到的其实是 MSS 而非 MTU),还应在此基础上加上 28(包头大小),因此最终的 MTU 值为:1464 + 28 = 1492
修改linux MTU值
修改MTU(Maximum Transmission Unit)值,即修改最大传输单元。修改方法如下:
1、ifconfig命令修改
1 2 3 4 | ifconfig edge88 mtu 1100 -- 或 echo "1100" > /sys/class/net/edge88/mtu |