通过调整 MTU 可以改善网络转发效率
MTU简介
通信术语 最大传输单元(Maximum Transmission Unit,MTU)是指一种通信协议的某一层上面所能通过的最大数据包大小(以字节为单位)。最大传输单元这个参数通常与通信接口有关(网络接口卡、串口等)。
探测 MTU 最佳值
- 在 Windows 下 探测 MTU 值- 执行 ping –l 1452 –f www.baidu.com查看结果
- 其中 -l指定了包的大小-f通知操作系统 不修改包大小
- 正常情况下是下列返回结果1 
 2
 3
 4
 5
 6
 7
 8
 9
 10
 11C:\Users\Administrator>ping -l 1452 -f www.baidu.com 
 正在 Ping www.a.shifen.com [61.135.169.125] 具有 1452 字节的数据:
 来自 61.135.169.125 的回复: 字节=1452 时间=43ms TTL=54
 来自 61.135.169.125 的回复: 字节=1452 时间=38ms TTL=54
 来自 61.135.169.125 的回复: 字节=1452 时间=41ms TTL=54
 来自 61.135.169.125 的回复: 字节=1452 时间=38ms TTL=54
 61.135.169.125 的 Ping 统计信息:
 数据包: 已发送 = 4,已接收 = 4,丢失 = 0 (0% 丢失),
 往返行程的估计时间(以毫秒为单位):
 最短 = 38ms,最长 = 43ms,平均 = 40ms
- 你可以逐步增加包的大小 直到显示 需要拆分数据包但是设置 DF。
- 取上一次正常的值
 
- 执行 
- 在 Linux 下 探测 MTU 值- 执行 ping -c 2 -s 1452 www.baidu.com查看结果1 
 2
 3
 4
 5
 6
 7
 8root@LEDE:/mnt/pi/ssd/ipk/Installed# ping -c 2 -s 1452 www.baidu.com 
 PING www.baidu.com (115.239.211.112): 1452 data bytes
 1460 bytes from 115.239.211.112: seq=1 ttl=57 time=7.140 ms
 1460 bytes from 115.239.211.112: seq=2 ttl=57 time=7.740 ms
 --- www.baidu.com ping statistics ---
 2 packets transmitted, 2 packets received, 0% packet loss
 round-trip min/avg/max = 7.140/7.645/8.040 ms
 
- 执行 
- 最后计算 MTU的值 把测量的结果 加上8(ICMP回显示请求和回显应答报文格式长度) 加上20(IP首部) 就是最终的MTU值
- 我测出来的是 1452所以最终的结果是1452+8+20等于1480
设置 MTU 值
- Windows 下设置 MTU 值- 用 netsh interface ipv4 show subinterface查看当前网卡的MTU值1 
 2
 3
 4
 5
 6
 7PS C:\WINDOWS\system32> netsh interface ipv4 show subinterface 
 MTU MediaSenseState 传入字节 传出字节 接口
 ------ --------------- --------- --------- -------------
 1500 1 1748040736 355087634 以太网
 1200 1 15402 144109 以太网 2
 4294967295 1 0 210812 Loopback Pseudo-Interface 1
- 执行 netsh interface ipv4 set subinterface "以太网" mtu=1480 store=persistent设置MTU值- "以太网"是就是上一个命令看到的接口名称
 
 
- 用 
- Linux 下设置 MTU 值- 用 ifconfig查看网卡信息1 
 2
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18[root@localhost ~]# ifconfig 
 enp2s0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
 inet 192.168.2.200 netmask 255.255.252.0 broadcast 192.168.3.255
 inet6 fe80::1e1b:dff:fe02:201b prefixlen 64 scopeid 0x20<link>
 ether 1c:1b:0d:02:20:1b txqueuelen 1000 (Ethernet)
 RX packets 4047615 bytes 2282357446 (2.1 GiB)
 RX errors 0 dropped 385083 overruns 0 frame 0
 TX packets 4003783 bytes 2450580381 (2.2 GiB)
 TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
 lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
 inet 127.0.0.1 netmask 255.0.0.0
 inet6 ::1 prefixlen 128 scopeid 0x10<host>
 loop txqueuelen 0 (Local Loopback)
 RX packets 1503762 bytes 1305871099 (1.2 GiB)
 RX errors 0 dropped 0 overruns 0 frame 0
 TX packets 1503762 bytes 1305871099 (1.2 GiB)
 TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
- 这里以 enp2s0接口为例
- 执行 ifconfig enp2s0 mtu 1480 up即可修改 MTU 值 重启后失效
- 永修修改 MTU值- CentOs 修改 /etc/sysconfig/network-scripts/ifcfg-enp2s0- 添加一行 MTU=1480
 
- 添加一行 
- Debian 修改 /etc/network/interfaces- 添加一行 mtu 9000
 
- 添加一行 
 
- CentOs 修改 
- 重启网络生效
 
- 用