通过调整 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 修改
- 重启网络生效
- 用