notes icon indicating copy to clipboard operation
notes copied to clipboard

如何确定MTU最佳值

Open lanlin opened this issue 6 years ago • 0 comments

背景

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 的最佳值非常有必要。

方法

  1. 宽带通信时 MTU 的简单构成(简单理解就好,并不严谨)
1500 =(PPPoE协议头信息及ID号,8字节)+ (数据包头信息,28字节)+ (数据包信息长度)

由此可见数据包实际的可用大小应该为,小于或等于 1500 - 8 - 28 = 1464字节。 也就是说,理论上宽带用户的系统 MTU 值设置为 1492 就可以,也就是说只需要刨除宽带协议头信息的那8个字节。

  1. 测试确定最佳的系统 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 值。

lanlin avatar May 20 '19 05:05 lanlin