Ethernet帧MTU最大值验证方法
Ethernet帧MTU最大值验证方法
最大传输单元MTU(Maximum Transmission Unit),是指网络能够传输的最大数据包大小,以字节为单位。
MTU是数据链路层的概念,指数据链路层对数据帧长度的限制。不同链路介质类型的网络有不同的默认MTU值,以下是一些常见网络的默认值:
以太网最大的数据帧是1518字节,这样刨去帧头14字节和帧尾CRC校验部分4字节,那么剩下承载上层IP报文的地方最大就只有1500字节,这个值就是以太网的默认MTU值。这个MTU就是网络层协议非常关心的地方,因为网络层协议比如IP协议会根据这个值来决定是否把上层传下来的数据进行分片,如果单个IP报文长度大于MTU,则会在发送出接口前被分片,被切割为小于或等于MTU长度的IP包。
MTU示意图
超过MTU的报文如何进行分片?
以太网缺省MTU=1500字节,这是以太网接口对IP层的约束,如果IP层有<=1500字节需要发送,只需要一个IP包就可以完成发送任务;如果IP层有>1500字节数据需要发送,需要分片才能完成发送。
以主机发送一个数据载荷长度为2000字节的报文为例说明其分片的过程(假设出接口的MTU值为1500)。在网络层会对报文进行封装,其结构组成:IP头部20字节+数据载荷长度2000字节,报文封装后,整个报文长度为2020字节。在出接口进行转发的时候,发现IP报文的长度超过了MTU的值1500,因此要进行分片处理,详情见下图。
IP分片示意图
如何判定一个链路的MTU大小
ping -f -l <包大小> <对端IP>
ping -f -l 1472 198.87.177.4
使用ping工具可以检测本设备到某个对端设备之间链路的MTU大小
ping 命令的-f 参数可以控制发送数据包不能使用分片的方法,只能发送单个包
ping命令的 -l参数能够控制发送每个包的大小,
ping命令是基于ICMP协议,报文封装如下图所示
由上图可知Ping命令的ICMP消息封装在IP数据包中,ICMP消息头部占8个字节,IP头部占20个字节,故在默认MTU值为1500字节的网络中,Ping命令的最大字节数是1472字节(1500-8-20=1472),实际验证如下图:
下图1472字节,Ping测试成功
下图1473字节,Ping测试失败,提示需要拆分数据包