按照教材上对应用最广泛的以太网V2的定义,以太网封装IP数据包的最大长度是1500字节,也就是说以太网最大帧长应该是以太网首部加上1500,再加上7字节的前导同步码和1字节的帧开始定界符,具体就是:7字节前导同步码+1字节帧开始定界符+6字节的目的MAC+6字节的源MAC+2字节的帧类型+1500+4字节的CRC校验。如图:

以太网MAC帧格式

按照上述,物理层的最大帧应该是1526字节,但是实际上我用wireshark捕捉到的最大帧却是1514字节,原因是当数据帧到达网卡时,在物理层上网卡要先去掉前导同步码和帧开始定界符,然后对帧进行CRC检验,如果帧校验和错,就丢弃此帧。如果校验和正确,就判断帧的目的硬件地址是否符合自己的接收条件(目的地址是自己的物理硬件地址、广播地址、可接收的多播硬件地址等),如果符合,就将帧交“设备驱动程序”做进一步处理。这时我们的抓包软件才能抓到数据,因此,抓包软件抓到的是去掉前导同步码、帧开始分界符、CRC校验之外的数据,其最大值是6+6+2+1500=1514

而真正的传输数据也就是 Payload在TCP报文中还要减去IP首部的20字节和以太网帧多余的14字节。ICMP报文还要额外减去ICMP首部的8字节。所以当实验中我使用ping -l 3807(3500+学号后三位) 指定发送3807字节的payload后 wireshark收到的总共字节为3807+20×3+14×3+8=3917
ping -l 3807


部分内容转自