目录
MTU(Maximum Transmission Unit)网络上传送的最大数据包大小。
MTU的单位是字节byte,主流网络是以太网(Ethernet)MTU是1500,以太网的相关网络设备MTU是1500。
MTU其实属于OSI参考模型第2层(数据链路层),目的是限定【MAC帧中数据部分(payload)的大小】的值,会影响到【第3层的整个IP封包的大小】,此大小包括IP数据包的包头;而最终IP数据包是要放进MAC帧。
28字节的大小,是 【IP包头的20字节】+ 【ICMP的包头8字节】。
1500 bytes (Ethernet mtu) – 20 byte (IP header) – 8 byte (ICMP header) = 1472 byte
实际测试
1、发送数据包正常响应
DF(Don't Fragment) 不做IP分片,1472 + 28 = 1500
[root@localhost 10:03:23 /home/test]# ping -s 1472 -M do 192.168.15.205
PING 192.168.15.205 (192.168.15.205) 1472(1500) bytes of data.
1480 bytes from 192.168.15.205: icmp_seq=1 ttl=64 time=0.307 ms
1480 bytes from 192.168.15.205: icmp_seq=2 ttl=64 time=0.381 ms
1480 bytes from 192.168.15.205: icmp_seq=3 ttl=64 time=0.461 ms
1480 bytes from 192.168.15.205: icmp_seq=4 ttl=64 time=0.378 ms
1480 bytes from 192.168.15.205: icmp_seq=5 ttl=64 time=0.422 ms
--- 192.168.15.205 ping statistics ---
5 packets transmitted, 5 received, 0% packet loss, time 3999ms
rtt min/avg/max/mdev = 0.307/0.389/0.461/0.057 ms
man ping
-s packetsize
Specifies the number of data bytes to be sent. The default is 56, which translates into 64 ICMP data bytes when
combined with the 8 bytes of ICMP header data.
-M pmtudisc_opt
Select Path MTU Discovery strategy. pmtudisc_option may be either do (prohibit fragmentation, even local one), want
(do PMTU discovery, fragment locally when packet size is large), or dont (do not set DF flag).
2、发送数据包超过MTU
DF(Don't Fragment) 不做IP分片,1473 + 28 = 1501
[root@localhost 10:03:35 /home/test]# ping -s 1473 -M do 192.168.15.205
PING 192.168.15.205 (192.168.15.205) 1473(1501) bytes of data.
ping: local error: Message too long, mtu=1500
ping: local error: Message too long, mtu=1500
ping: local error: Message too long, mtu=1500
ping: local error: Message too long, mtu=1500
ping: local error: Message too long, mtu=1500
--- 192.168.15.205 ping statistics ---
5 packets transmitted, 0 received, +5 errors, 100% packet loss, time 3999ms
扩展知识
Windows ping命令测试网络MTU
C:\Users\Administrator>ping -l 1472 -f 192.168.15.65
正在 Ping 192.168.15.65 具有 1472 字节的数据:
来自 192.168.15.65 的回复: 字节=1472 时间=3ms TTL=62
来自 192.168.15.65 的回复: 字节=1472 时间=2ms TTL=62
来自 192.168.15.65 的回复: 字节=1472 时间=3ms TTL=62
来自 192.168.15.65 的回复: 字节=1472 时间=3ms TTL=62
192.168.15.65 的 Ping 统计信息:
数据包: 已发送 = 4,已接收 = 4,丢失 = 0 (0% 丢失),
往返行程的估计时间(以毫秒为单位):
最短 = 2ms,最长 = 3ms,平均 = 2ms
C:\Users\Administrator>ping -l 1473 -f 192.168.15.65
正在 Ping 192.168.15.65 具有 1473 字节的数据:
需要拆分数据包但是设置 DF。
需要拆分数据包但是设置 DF。
需要拆分数据包但是设置 DF。
需要拆分数据包但是设置 DF。
192.168.15.65 的 Ping 统计信息:
数据包: 已发送 = 4,已接收 = 0,丢失 = 4 (100% 丢失),
查看ping命令帮助文档
C:\Users\Administrator>ping /?
用法:ping [-t] [-a] [-n count] [-l size] [-f] [-i TTL] [-v TOS]
[-r count] [-s count] [[-j host-list] | [-k host-list]]
[-w timeout] [-R] [-S srcaddr] [-4] [-6] target_name选项:
-t Ping 指定的主机,直到停止。
若要查看统计信息并继续操作 - 请键入 Control-Break;
若要停止 - 请键入 Control-C。
-a 将地址解析成主机名。
-n count 要发送的回显请求数。
-l size 发送缓冲区大小。
-f 在数据包中设置“不分段”标志(仅适用于 IPv4)。
-i TTL 生存时间。
-v TOS 服务类型(仅适用于 IPv4。该设置已不赞成使用,且
对 IP 标头中的服务字段类型没有任何影响)。
-r count 记录计数跃点的路由(仅适用于 IPv4)。
-s count 计数跃点的时间戳(仅适用于 IPv4)。
-j host-list 与主机列表一起的松散源路由(仅适用于 IPv4)。
-k host-list 与主机列表一起的严格源路由(仅适用于 IPv4)。
-w timeout 等待每次回复的超时时间(毫秒)。
-R 同样使用路由标头测试反向路由(仅适用于 IPv6)。
根据 RFC 5095,已弃用
此路由。如果使用此标头,某些系统可能丢弃
回显请求。
-S srcaddr 要使用的源地址。
-4 强制使用 IPv4。
-6 强制使用 IPv6。