华为网络基础 | 数据包帧字节——图例详解

  • 内容
  • 相关

通信过程中,每层协议都要加上一个数据首部(header),称为封装(Encapsulation),如下图所示

接下来,我们将对以太帧进行适当的分析和了解,以期望为后续的学习奠定一定的基础!!!


 一、以太帧格式


(1)其中的源地址和目的地址是指网卡的硬件地址(也叫MAC 地址),长度是48 位,是在网卡出厂时固化的。

(2)网卡芯片收到的数据就是如上所示的一长串数据;其中包括以太网帧头、IP报报头、传输层协议段头、应用层所需数据。

(3)以太网帧中的数据长度规定最小46 字节,最大1500 字节(如果数据部分不足46字节,则用填充位来填充这个数据帧),ARP 和RARP 数据包的长度不够46 字节,要在后面补填充位。最大值1500 称为以太网的最大传输单元(MTU),不同的网络类型有不同的MTU,如果一个数据包从以太网路由到拨号链路上,数据包度大于拨号链路的MTU了,则需要对数据包进行分片fragmentation)。ifconfig 命令的输出中也有“MTU:1500”。

注意,MTU 个概念指数据帧中有效载荷的最大长度,不包括帧首部的长度。


二、数据包最大帧(1526字节)

根据rfc894的说明,以太网封装IP数据包的最大长度是1500字节,也就是说以太网最大帧长应该是以太网“7字节的前导同步码和1字节的帧开始定界符”加上“首部”,再加上1500,最后加上“帧校验序列”。具体就是:7字节前导同步码 + 1字节帧开始定界符 + 6字节的目的MAC + 6字节的源MAC + 2字节的帧类型 + 1500 + 4字节的FCS

                                                  前导码的定义

按照上述,最大帧应该是1526字节,但是实际上我们抓包得到的最大帧是1514字节,为什么不是1526字节呢?

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


三、数据包最小帧(64字节)

以太网规定,以太网帧数据域部分最小为46字节,也就是以太网帧最小是 6 + 6 + 2 + 46 + 4 = 64。除去4个字节的FCS,因此,抓包时就是60字节。当数据字段的长度小于46字节时,MAC子层就会在数据字段的后面填充以满足数据帧长不小于64 字节。由于填充数据是由MAC子层负责,也就是设备驱动程序。

不同的抓包程序和设备驱动程序所处的优先层次可能不同,抓包程序的优先级可能比设备驱动程序更高,也就是说,我们的抓包程序可能在设备驱动程序还没有填充不到64字节帧的时候,已经捕获了数据。因此不同的抓包工具抓到的数据帧的大小可能不同,相同的抓包工具不同版本抓到的数据帧的大小也可能不同。

学习应该是终身的事儿,活到老,学到老,不断的充实~

 您阅读这篇文章共花了:

上一篇:Linux 7 | 运维必备命令

下一篇:闲谈 | 没有自学能力,你还是转行吧

本文标签:    

版权声明:本文依据CC-BY-NC-SA 3.0协议发布,若无特殊注明,本文皆为《fishyoung》原创,转载请保留文章出处。

本文链接:华为网络基础 | 数据包帧字节——图例详解 - http://www.fishyoung.com/post-131.html