ICMP 与 MTU、最小数据长度

帧的数据字段的最小长度位46字节。如果IP数据报小于46字节,数据报必须被填充到46字节。当采用填充时,传递到网络层的数据包括IP数据报和填充部分。网络层使用IP数据报首部中的长度字段来去除填充部分。

当数据帧到达网卡时,在物理层上网卡要先去掉前导同步码和帧开始定界符,然后对帧进行CRC检验,如果帧校验和出错,就丢弃此帧。如果校验和正确,就判断帧的目的硬件地址是否符合自己的接收条件(目的地址是自己的物理硬件地址、广播地址、可接收的多播硬件地址等),如果符合,将帧交给设备驱动程序做进一步处理,帧的数据字段的内容传递给网络层。这时我们抓包的软件才能抓到数据,因此,抓包软件抓到的是去掉前导同步码、帧开始分界符、FCS之外的数据。

 

以太网中,IP数据报长度最小为46字节,负载不足46字节,在数据帧的末尾补0,但是补充的0属于以太网层,不属于数据部分。所以wireshark显示的数据帧最小长度是14字节 + 46字节 = 60 字节。

对于ICMP报文,当ICMP 请求报文的 payload 小于 18 字节时,ICMP响应报文会填充0, 但是它们有效负载的长度还是相同的.

计算方法: 46 - IP首部(20字节)-ICMP首部(8字节) = 18 字节。

 

最大传输单元(MTU):指由IP包头和数据部分组成的IP数据报长度。

以太网中, MTU 设置为 1500。所以ICMP负载长度最大值为

MTU(1500字节) - IP首部长度(20字节)-ICMP首部长度(8字节) = 1472 字节

当ICMP负载长度超过1472字节,ICMP 报文会被分片。如下图所示:

其中,帧354的负载大小为1480字节,等于ICMP最大负载长度(1472字节) + ICMP首部长度(8字节)

分片前 ICMP报文长度为1513字节 = 1480字节 + 33 字节

对应的数据帧:

帧354的长度1514 = 以太网帧首部(14字节) + IP首部(20字节) + ICMP首部(8字节)+ ICMP 负载长度(1472字节)

帧355的长度67字节 = 以太网帧首部(14字节) + IP首部(20字节) + 负载长度(33字节)

可见,帧355的长度67字节中不包含ICMP首部,使用scapy解析该数据包时找不到ICMP首部。

参考:

wireshark捕获IP分片数据包实践

ping 包长度及 MTU

  • 3
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值