关于wire shark抓到以太网包小于64字节讨论,如抓到了54字节、60字节。
用wire shark 抓网络包时,经常能看到一些数据包小于64字节。如TCP连接与断链时候就有60字节与54字节的出现。
以太网规定,以太网帧数据域部分最小为46字节,也就是以太网帧最小是 6 + 6 + 2 + 46 + 4 = 64。当数据字段的长度小于46字节时,MAC子层就会在数据字段的后面填充以满足数据帧长不小于64 字节。由于填充数据是由MAC子层负责,也就是设备驱动程序。
当数据帧到达网卡时,在物理层上网卡要先去掉前导同步码和帧开始定界符,然后对帧进行CRC检验,如果帧校验和出错,就丢弃此帧。如果校验和正确,就判断帧的目的硬件地址是否符合自己的接收条件(目的地址是自己的物理硬件地址、广播地址、可接收的多播硬件地址等),如果符合,就将帧交给“设备驱动程序”做进一步处理。这时我们抓包的软件才能抓到数据.
因此,抓包软件抓到的是去掉前导同步码、帧开始分界符、FCS之外的数据,其最大值是6 + 6 + 2 + 1500 = 1514;最小是 6 + 6 + 2 + 46 + 4 = 64。
以上讲了除去4个字节的FCS,因此,抓包时最小就是60字节。
所以抓包抓到60字节是正常的,而且可以看到第二章图中尾部两个字节的填充是mac层做的。符合书上的知识。
【注1】在wireshark中,捕捉到的ARP数据包的长度,很多时候是42bytes,有时候是60bytes。
这个长度决定发送ARP请求端的操作系统的ARP包编码方式
【是否在ARP数据包末端添加18个0x00的padding】
【注2】有的TCP或UDP数据包的长度也可能小于60bytes。
结论:偏向于3
1.wireshark 滤掉了后面padding的0;
但是60字节的那个padding却没有滤。//所以应该不是这个。
2.发送方没有进行填充。
因为前面说的60字节是服务器端发来的,本地客户端可能没有填充。//应该也不是。
3.发送方没来得及填充就已经被抓包了。
#参考
https://blog.csdn.net/ellle_welcome/article/details/111591481
https://blog.csdn.net/shenwansangz/article/details/52858897