如何确定MTU最佳值
背景
MTU 最大传输单元(Maximum Transmission Unit)是指一种通信协议的某一层上面所能通过的最大数据包大小(以字节为单位)。
常见链路层协议 MTU 默认值:
FDDI协议:4352字节 以太网(Ethernet)协议:1500字节 PPPoE(ADSL)协议:1492字节 X.25协议(Dial Up/Modem):576字节 Point-to-Point:4470字节
以太网的 MTU 值为 1500 字节,一般来说操作系统不论是 Windows 还是 Linux 等,默认的 MTU 值也是 1500。但是 ADSL(宽带) 使用的 PPPoE 略小于这个数值,一般为1492。
如果不对系统的 MTU 值进行修改,就会导致网速慢,丢包严重,网站打不开等问题。 不论是 PC 机上安装的 PPPoE 软件或者是内置在 Modem 的 PPPoE 软件,在使用中都有可能遇到这个问题。
因此,确定 MTU 的最佳值非常有必要。
方法
- 宽带通信时 MTU 的简单构成(简单理解就好,并不严谨)
1500 =(PPPoE协议头信息及ID号,8字节)+ (数据包头信息,28字节)+ (数据包信息长度)
由此可见数据包实际的可用大小应该为,小于或等于 1500 - 8 - 28 = 1464字节。 也就是说,理论上宽带用户的系统 MTU 值设置为 1492 就可以,也就是说只需要刨除宽带协议头信息的那8个字节。
- 测试确定最佳的系统 MTU 值
在步骤1中得到只是理论数值,但是实际的情况由于路由器等中间环节的影响,可能会变的更小。 通过以下方法进行测试,测定值加上28(数据包头信息固定28字节长度)即为最佳 MTU 值。
其中 14xx 为 1400 - 1492 的取值范围内,自己反复尝试。值过大,ping 不到结果,会显示超时等,值小的时候正常。我们要做的就是,多试几次,直到确定那个最大的值。
Windows 的测定:
ping www.baidu.com -l 14xx
Linux 的测定:
ping www.baidu.com -s 14xx
设置 MTU
14xx 为测试中得到的最大值加上28后的数值。 比如,测试到的最大值为 1464,那么 MTU 的最终值应该为 1464 + 28 = 1492
Windows(管理员身份运行 cmd.exe):
netsh interface ipv4 set subinterface "本地连接" mtu=14xx store=persistent
netsh interface ipv4 set subinterface "无线网络连接" mtu=14xx store=persistent
CentOS / RHEL / Fedora Linux:
vim /etc/sysconfig/network-scripts/ifcfg-eth0
# 增加如下内容(最终MTU值)
MTU=14xx
# 保存后重启网卡生效
service network restart
Debian / Ubuntu Linux:
vim /etc/network/interfaces
# 增加如下值(最终MTU值)
mtu 14xx
# 保存后,重启网络生效
/etc/init.d/networking restart
总结
关于 MTU 的更多详细解释,请自行参考其他文章。 这里只简单介绍其构成,和如何快速确定系统最佳 MTU 值。