ICMP 与 MTU、最小数据长度

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

相关推荐

鲍伊猎刀(★) | 森林 DDPAT (久经沙场)
365sport365中文版

鲍伊猎刀(★) | 森林 DDPAT (久经沙场)

📅 07-08 👁️ 3359
老駞的意思
365bet备用器下载

老駞的意思

📅 07-13 👁️ 2342
汽车倒车影像如何布线?
365sport365中文版

汽车倒车影像如何布线?

📅 07-04 👁️ 2562