注:本文为 “以太网数据帧(802.3)解析” 相关文章合辑。
未整理,未校。
以太网(IEEE 802.3)数据帧的最大与最小长度解析
Farmwang 2017 年 03 月 20 日 19:40:01
一、以太网(IEEE 802.3)帧格式
- 前导码:其长度为 7 字节 ,取值为
0x55
,由 1 和 0 交替构成 ,主要用于信号同步 。该字段在物理层进行处理 ,助力接收端实现比特同步 ,并不属于标准以太网帧格式的有效载荷范畴 。 - 帧起始定界符(SFD):长度为 1 字节 ,值为
0xD5
(二进制表示为10101011
),用于标识一帧的起始位置 。同样 ,其作用于物理层 ,用于标记帧的起始点 ,不计入标准以太网帧的有效部分 。 - 目的地址(DA):长度为 6 字节 ,用于表示帧的目的 MAC 地址 。
- 源地址(SA):长度为 6 字节 ,用于表示帧的源 MAC 地址 。
- 类型 / 长度:长度为 2 字节 ,当值处于
0 ~ 1500
范围内时表示长度 ;当值处于1536 ~ 65535
(十六进制表示为0x0600 ~ 0xFFFF
)范围内时表示类型 。 - 数据:长度范围为 46 ~ 1500 字节 。若数据字段长度小于 46 字节 ,MAC 子层会自动填充数据 ,以保证数据帧长度不低于 64 字节(包含 FCS)。
- 帧校验序列(FCS):长度为 4 字节 ,通过 CRC 算法对从目的 MAC 地址到数据字段之间的内容进行计算得到校验和 ,用于检测帧在传输过程中是否出现错误 。
二、最大帧长分析
依据 RFC 894 的规定 ,以太网封装 IP 数据包的最大长度为 1500 字节 。标准的以太网最大帧长仅考虑以太网首部(包括目的 MAC 地址 、源 MAC 地址 、类型 / 长度字段)、数据以及 FCS 。其计算方式如下 :
6 字节(目的 MAC)+ 6 字节(源 MAC)+ 2 字节(类型 / 长度)+1500 字节(数据)+ 4 字节(FCS)=1518 字节
然而 ,实际抓包所得到的最大帧长度为 1514 字节 。这是因为当数据帧抵达网卡时 ,物理层会去除前导同步码和帧开始定界符 ,随后对帧进行 CRC 校验 。若帧校验和正确 ,网卡会将去除前导同步码 、帧开始定界符和 FCS 后的数据交付给设备驱动程序 。此时 ,抓包软件抓取的数据最大长度为 :
6 字节(目的 MAC)+ 6 字节(源 MAC)+ 2 字节(类型 / 长度)+ 1500 字节(数据)= 1514 字节
三、最小帧长分析
以太网规定 ,帧数据域部分的最小长度为 46 字节 。在实际的以太网帧中 ,计算最小长度时需要考虑整个数据链路层的帧结构 。以太网帧的最小长度计算如下 :
6 字节(目的 MAC)+ 6 字节(源 MAC)+ 2 字节(类型 / 长度)+ 46 字节(数据)+ 4 字节(FCS)= 64 字节
抓包软件抓取到的最小帧长同样为 64 字节(去除 FCS 后为 60 字节 ,但由于 MAC 子层的填充机制 ,实际抓包时所看到的最小帧长是完整包含可能填充数据的 64 字节帧)。当数据字段长度小于 46 字节时 ,MAC 子层负责在数据字段后填充数据 ,以确保数据帧长度不低于 64 字节 ,该填充操作由设备驱动程序执行 。
四、以太网的冲突避免机制
采用 CSMA/CD 作为 MAC 算法的局域网(LAN)被定义为以太网 。CSMA/CD 的冲突避免策略包括 :先听后发 、边听边发以及随机延迟后重发 。一旦发生冲突 ,必须保证所有主机都能够检测到 。最小发送间隙和最小帧长的设定旨在避免冲突 。
考虑这样一种情况 :主机发送的帧较短 ,且两台冲突主机之间距离较远 。假设主机 A 发送的帧在即将到达主机 B 时 ,主机 B 开始发送帧 。当主机 A 的帧到达主机 B 时 ,主机 B 检测到冲突并发送冲突信号 。若主机 B 的冲突信号在主机 A 的帧发送完毕之前未能到达主机 A ,则主机 A 无法检测到冲突 ,进而会误认为数据已成功发送 。由于信号传播存在时延 ,冲突检测也需要一定时间 ,因此必须设定最小帧长限制 。
五、最小帧长的计算
根据标准 ,10 Mbps 以太网在使用中继器时 ,最大连接长度为 2500 米 ,最多可经过 4 个中继器 。因此 ,规定 10 Mbps 以太网一帧的最小发送时间为 51.2 μs 。在此时间内可传输的数据量为 512 位 ,故该时间也被称作 512 位时 。此时间被定义为以太网时隙或冲突时槽 。512 位等同于 64 字节 ,这便是以太网帧最小长度为 64 字节的原因 。
512 位时是主机捕获信道的时间 。如果某主机发送一个 64 字节的帧且未检测到冲突 ,则后续不会再发生冲突 ,此时称该主机已捕获信道 。
六、最大帧长的限制
由于信道由所有主机共享 ,若数据帧过长 ,会致使部分主机长时间无法发送数据 ,并且可能超出接收端缓冲区的大小 ,引发缓冲溢出 。为避免单一主机占用信道时间过长 ,规定以太网帧的最大帧长为 1500 字节(不包含前导码和帧起始定界符)。
七、不同速率以太网的时隙
- 100 Mbps 以太网:其时隙时间与 10 Mbps 以太网保持一致 ,仍为 512 位时 ,规定一帧的最小发送时间为 5.12 μs 。如此设计是为了保障 CSMA/CD 机制在不同速率以太网中的兼容性 。
- 1000 Mbps 以太网:尽管其传输速率大幅提升 ,但为维持 CSMA/CD 机制 ,时隙时间同样为 512 位时所对应的时间 。在 512 位时内 ,1000 Mbps 以太网可传输的数据量变为 512 字节(即 4096 位),对应时间为 4.096 μs 。
以太网帧接收流程
1. 物理层接收:
数据帧通过物理传输介质(例如双绞线)到达网络接口卡 (NIC)。 物理层负责将接收到的比特流转换为数据信号,并传递给数据链路层进行处理。
2. 前导码与帧起始定界符 (SFD) 校验:
- 功能: 网络接口卡首先对接收帧的前导码(7 字节的
10101010...
序列)和帧起始定界符(1 字节的10101011
)进行校验。前导码用于接收端与发送端建立比特同步;帧起始定界符标识帧的起始位置。 - 目的: 确保接收端能够正确识别帧的起始位置,实现比特同步,为后续数据接收和处理奠定基础。该过程完全在物理层进行,与数据链路层及以上层级的协议无关。
3. 循环冗余校验 (CRC):
- 功能: 在确认帧起始后,网络接口卡对整个数据帧执行循环冗余校验 (CRC)。
- 过程: 接收端计算接收到的数据帧的 CRC 值,并将其与帧尾部的帧校验序列 (FCS) 字段进行比较。
- 结果: 若计算的 CRC 值与 FCS 字段不匹配,则判定该帧在传输过程中发生错误,该帧将被丢弃。CRC 校验用于确保数据帧在传输过程中的完整性。
4. 目的 MAC 地址过滤:
- 功能: 在通过 CRC 校验后,网络接口卡检查帧的目的 MAC 地址。
- 处理逻辑:
- 如果目的 MAC 地址与本设备的 MAC 地址、广播地址 (
FF:FF:FF:FF:FF:FF
) 或配置的组播地址相匹配,则该帧将被接收并进一步处理。 - 在混杂模式下,网络接口卡接收所有帧,无论其目的 MAC 地址为何。
- 如果目的 MAC 地址与本设备的 MAC 地址、广播地址 (
- 目的: 通过目的 MAC 地址进行帧过滤,仅接收与本机相关的帧,减轻网络接口卡的处理负担,提高网络效率。
5. 驱动程序处理:
经过上述硬件处理的合格数据帧将被传递到操作系统内核中的网络接口卡驱动程序。此时,前导码、SFD 和 FCS 字段已被网卡硬件移除。剩余的有效数据部分将被传递给驱动程序,进入操作系统层面的协议栈处理流程。
6. 抓包软件捕获:
- 网络抓包工具(例如 Wireshark)通常在以下位置捕获数据:
- 网络接口卡驱动程序与网络协议栈之间。
- 或者在网络协议栈的底层。
- 抓包软件捕获到的数据是经过网卡硬件处理后、准备进入更高层协议栈的数据,因此不包含前导码、SFD 和 FCS 字段。
抓包软件无法捕获前导码、SFD 和 FCS 字段的原因
移除字段
字段 | 描述 | 移除位置 |
---|---|---|
前导码 | 7 字节的 10101010... 序列,用于物理层比特同步。 | 在网卡硬件处理阶段,物理层完成比特同步后即被移除,不传递给后续数据链路层及以上层处理。 |
帧起始定界符 (SFD) | 1 字节的 10101011 序列,标识帧的开始。 | 在网卡硬件处理阶段,物理层标记帧起始后即被移除,不参与后续数据链路层及以上层处理。 |
帧校验序列 (FCS) | 4 字节的 CRC 校验码,用于验证帧的完整性。 | CRC 验证完成后被网卡硬件移除。其校验结果用于确定帧是否被接收。校验完成后,该字段不再随数据传递给设备驱动程序。 |
说明
-
技术层面:网卡硬件在接收和处理数据帧的过程中,自动移除前导码、SFD 和 FCS 字段。 这些字段在物理层和数据链路层完成了相应的功能后,不再需要传递到更高层协议栈。
-
设计理念:前导码、SFD 和 FCS 属于物理层和数据链路层的底层控制信息,仅用于确保帧的正确传输和接收。 它们的作用范围局限于物理层的比特同步,以及数据链路层的基本帧合法性校验和完整性校验。
-
OSI 模型:这些字段在数据帧传递到更高层协议之前已经完成了其使命。 在 OSI 模型中,物理层和数据链路层负责将原始比特流转换为有意义的数据帧,并进行初步的差错检测和纠正。 当数据帧准备进入网络层及以上层级时,这些底层控制字段已不再需要。
因此,Wireshark 等抓包工具只能捕获到不包含前导码、SFD 和 FCS 字段的以太网帧内容。
数据帧丢弃条件
在以下任一情况下,网络接口卡将直接丢弃数据帧:
- 前导码或 SFD 校验失败。
- CRC 校验失败(计算的 CRC 值与 FCS 字段不匹配)。
- 目的 MAC 地址与本机地址、广播地址或配置的组播地址不匹配,且网络接口卡未工作在混杂模式下。
- 帧长度无效(过短或超过最大传输单元 MTU)。
流程图
该流程图展示了抓包软件无法捕获以太网帧尾部 4 字节 FCS 字段的原因,因为这些字段在数据帧被设备驱动程序处理之前已被网卡处理。
via:
-
以太网数据帧(802.3)最大与最小长度 - zhangmingda - 博客园
https://www.cnblogs.com/zhangmingda/p/9758655.html -
部分出处,时光如梭,成追忆。