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 |
这个是最通用的方法,对所有的linux 发行版本都有效。缺点就是重启后失效,需要在开机项中加载。
2、修改配置文件
CentOS / RHEL / Fedora Linux 下
1 2 3 4 5 6 7 8 9 | # vi /etc/sysconfig/network-scripts/ifcfg-eth0 #增加如下内容 MTU="9000" #保存后重启网卡生效 # service network restart #启用IPv6地址的,修改IPv6 mtu的参数为 IPV6_MTU="1280" |
Debian / Ubuntu Linux 下
1 2 3 4 5 6 | # vi /etc/network/interfaces #增加如下值 mtu 9000 #保存后,重启网络生效 # /etc/init.d/networking restart |
修改 Win7 MTU 值
查询目前系统的 MTU 值:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | netsh interface ipv4 show subinterfaces PS C:\Users\lhrxxt> netsh interface ipv4 show subinterface MTU MediaSenseState 输入字节 输出字节 接口 ---------- --------------- ------------ ------------ ------------- 4294967295 1 0 34520 Loopback Pseudo-Interface 1 1500 2 1656830019 301945766 WLAN 1500 1 2137774662 135941823 以太网 1500 5 0 0 本地连接* 1 1500 1 39261891 278352342 本地连接* 10 1500 5 0 0 蓝牙网络连接 1500 1 0 282856 VMware Network Adapter VMnet1 1500 1 0 282159 VMware Network Adapter VMnet2 1500 1 2359731 1059944 vEthernet (WSL) 1290 1 891911 640090 edge88 1500 1 0 280521 VMware Network Adapter VMnet3 1500 1 0 280521 VMware Network Adapter VMnet4 1500 1 0 280287 VMware Network Adapter VMnet5 1500 1 0 278181 VMware Network Adapter VMnet6 1500 1 0 277947 VMware Network Adapter VMnet7 1500 1 0 277245 VMware Network Adapter VMnet8 1500 1 0 274437 VMware Network Adapter VMnet9 1500 1 0 269055 VMware Network Adapter VMnet11 |
修改:
1 | netsh interface ipv4 set subinterface "本地连接" mtu=1492 store=persistent |
至此,Win7 MTU 值修改完毕(不要忘了修改路由的 MTU 值)。