mtu测试

耗尽温柔 提交于 2019-12-05 19:37:25

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/jeromezmzx007/article/details/90600344

MTU实测

ip报头20字节,icmp报头8字节
目的:通过发送长度大于1500的icmp包详细分析分片与总长度的关系
情景:
ip地址为10.60.30.100/16的PC发送大小为2000的ICMP包至10.60.10.252/16,它们处于同一网段,即window命令提示符下输入:
ping 10.60.10.252 –l 2000

图1.第一个icmp request用ethereal抓包截图的各字段,请注意蓝色部分

 

 


图1
图1分析:因为长度是2000,大于1500,所以会分片发送,如图1,IP字段头部长为20bytes,total length为1372bytes,偏移量为0;icmp字段头部长度为8bytes
请注意第一个包total length不一定就是MTU 1500,和操作系统协议栈实现有关.
图2: 第一个icmp request分片包

 

图2分析:
IP字段的identification为0x90dd(2525)与图1的identification相同,说明是图1包的分片包.
偏移量fragment offset为1352,注意是相对第一个包,即图1的偏移量
注意此处分片包并没有icmp字段,因为已经不需要了,到达目的10.60.10.252可以根据偏移重组成完整的icmp包.
由图2 计算icmp包长度:
图2分片包的total length为676,偏移量fragment offset为1352,则第一个icmp包由IP封装,IP总长度为676+1352=2028bytes
ICMP长度为2028-20=2008; 减去的20bytes为IP头部长度
ICMP数据长度为2008-8=2000bytes; 减去的8bytes为ICMP头部长度
2000bytes正是发送的数据长度!!!
注意:”ping 10.60.10.252 -l 2000”中的2000指的是icmp数据的长度,即不包括IP头部,ICMP头部
MTU的1500指的是IP头部长+IP数据部分总共的长度,对ICMP而言, icmp的数据长度为1500-20-8=1472 ( 减去的20为IP头部长,8为icmp头部长)为临界长度,若icmp数据部分大于1472bytes则会分片,正如ping 10.60.10.252 -l 2000一样;如果有IP option部分,则临界长度小于1472bytes.

 

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!