网络MTU分析
文章目录
1.各类的报文说明
ping报文中,MTU 1500 = IP 首部(20byte) +ICMP头部(8byte) + 负载(1472byte最大)
IP 首部(20byte) | ICMP头部(8byte) | 负载(1472byte最大) |
---|
TCP 报文中,MTU 1500 = IP 首部(20byte) + TCP 首部(20byte) + 负载(1460byte最大)
IP 首部(20byte) | TCP 首部(20byte) | 负载(1460byte最大) |
---|
TCP 报文中(传输通过GRE 隧道),MTU 1500 = IP 首部(20byte) + GRE 头部(24byte) + TCP 首部(20byte) + 负载(1436byte最大)
IP 首部(20byte) | GRE 头部(24byte) | TCP 首部(20byte) | 负载(1436byte最大) |
---|
2.MTU注意事项
使用IPsec、GRE、OSPF、IS-IS、L2VPN、VPLS等隧道协议需要注意,会给报文添加隧道标头,导致包长大于MTU,会导致数据包分片,回导致丢包或者传输速度变慢。
(1) MTU值大于所转发数据包大小
设备能够直接转发数据包,而不需要分片。
(2) MTU值小于所转发数据包大小且允许分片
设备对数据包进行拆分并转发。
(3) MTU值小于所转发数据包大小,且设置禁止分片。
设备直接丢弃数据包,不转发。此时,若想正常传送数据包,就需要上调网关MTU值,或者下调本地网卡的MTU值。
2.1 使用隧道要求:
要确定隧道的头部占用的大小,例如GRE 隧道头部为24byte。
AODS的网络MTU <= CPE的网络MTU+GRE 头部(24byte)
电脑的MTU设置为1200。
路由器的MTU设置为1280。
则,满足1200 <= 1280-24
2.2 使用要求:
AODS的网络MTU <= CPE的网络MTU
电脑的MTU设置为1200。
路由器的MTU设置为1280。
则,满足1200 <= 1280
2.3 各种网络类型的MTU最大值
网络类型 | MTU(byte) |
---|---|
以太网 | 1500 |
IEEE 802.4 | 8166 |
IEEE 802.3 | 1492 |
FDDI | 4352 |
Token Ring(16Mbps) | 17914 |
Token Ring(4Mbps) | 4464 |
X2.5 | 576 |
PPP | 296 |
2.4 MTU需要满足的条件
网络类型MTU最大值 ≥ 路由器的MTU+隧道头标长度(不使用隧道,则加0) ≥ 电脑的MTU
三者相等为最佳
3.测试最大值MTU
3.1 win 命令:
ping [要ping的IP] -l [MTU数值-ICMP头部(8byte) - IP 首部(20byte)] -f
有隧道:
ping [要ping的IP] -l [MTU数值-ICMP头部(8byte) - IP 首部(20byte)- GRE 头部(24byte)] -f
-f为禁止分片
3.2 Linux 命令:
ping -c 4 -M do -s [MTU数值-ICMP头部(8byte) - IP 首部(20byte)] [要ping的IP]
有隧道:
ping -c 4 -M do -s [MTU数值-ICMP头部(8byte) - IP 首部(20byte)- GRE 头部(24byte)] [要ping的IP]
-M do为禁止分片
4.设置Ubuntu的MTU
命令:
ifconfig [网卡名] mtu [MTU数值] up
ifconfig命令重启后会失效,需要写在启动脚本里面