以太网数据帧格式详解

  以太网(Ethernet)是当今局域网通信的基础技术,其数据帧(Frame)是数据链路层传输的基本单元。理解以太网帧的详细结构,对于网络故障排查、协议分析、性能优化以及底层网络编程都具有重要意义。以太网帧的格式经历了从DIX(DEC、Intel、Xerox)联盟定义的Ethernet II标准到IEEE 802.3标准的演进,同时衍生出支持虚拟局域网(VLAN)的802.1Q标签帧和用于较大数据负载的巨型帧(Jumbo Frame)等变体。本文将从基本结构入手,逐一剖析每个字段的作用、取值规则和设计原理,并对比不同帧格式之间的差异。

  一、以太网帧的基本组成结构

  典型的以太网数据帧由以下几个部分组成(按发送顺序排列): 前导码(Preamble)‍ 、 帧起始定界符(SFD)‍ 、目的MAC地址源MAC地址类型/长度字段数据载荷及填充、 帧校验序列(FCS)‍。其中,前导码和SFD属于物理层附加的同步信息,在数据链路层处理时通常被移除或忽略;其余字段构成完整的MAC帧。

  1. 前导码(Preamble)与帧起始定界符(SFD)

  前导码占用7个字节(56位),其二进制序列为连续的 10101010(十六进制为 0xAA)。该字段的作用是让接收设备的物理层电路与发送端的时钟信号同步,确保网卡在帧的实际内容到达之前进入稳定的接收状态。

  紧接着前导码的是帧起始定界符(SFD),占用1个字节,二进制序列为 10101011(十六进制 0xAB)。SFD的最后两位为 11.这一特定模式标识着前导码结束、MAC帧正式开始,通知接收设备准备接收后续的地址和数据字段。

  说明:前导码和SFD共8个字节,由物理层自动生成和移除,它们不计入帧头的长度字段值中,也不参与FCS校验计算。在DIX Ethernet(Ethernet II)的早期定义中,前导码曾为8字节(且无独立的SFD),而IEEE 802.3标准明确将其拆分为7字节前导码+1字节SFD。

  2. 目的MAC地址(Destination Address, DA)

  目的地址字段占 6字节(48位)‍ ,用于标识帧的接收者。该字段首先发送最低有效位(LSB)。 目的地址分为三类:

  单播地址(Unicast)‍ :目的地址的第一比特(I/G位)为0.表示该帧仅发送给唯一一个节点,接收网卡只有在自己的MAC地址与DA匹配时才接收。

  多播地址(Multicast)‍ :I/G位为1.表示该帧由一组节点接收,这类地址被用于组播通信(如路由协议、视频流等)。

  广播地址(Broadcast)‍ :DA为全1(FF-FF-FF-FF-FF-FF),表示该帧将被网络中的所有节点接收。

  目的地址的设计使得以太网能够支持点对点、一对多和全网广播三种通信模式,这是数据链路层寻址的核心能力。

  3. 源MAC地址(Source Address, SA)

  源地址同样占 6字节(48位)‍ ,标识发送帧的设备。源地址中不允许出现广播或多播格式(即I/G位必须为0),因为发送者必须是唯一的单个设备。SA字段的发送顺序与DA相同,均从最低有效位开始。

  4. 类型/长度字段(Type/Length)

  该字段占用2字节,是以太网帧中最具代表性的字段,其值决定了帧的两种语义:

  类型字段(Type)‍ :当值 大于等于0x0600(1536)‍ 时,表示上层网络层协议的类型。常见取值如:

  0x0800:IPv4协议

  0x0806:ARP协议

  0x86DD:IPv6协议

  0x0835:RARP协议

  这一用法源于DIX Ethernet V2标准,使得接收端的网络层能够直接识别应该将数据交由哪个协议处理。

  长度字段(Length)‍ :当值 小于等于0x05DC(1500)‍ 时,表示数据载荷部分的实际字节数。这种用法由IEEE 802.3标准定义,在802.3帧中该字段明确表示数据长度,且后续还需携带LLC(逻辑链路控制)头部来指示上层协议。

  无效区间:介于1501~1535之间的值在早期标准中被视为无效帧,但后续IEEE 802.3x修订允许该字段既可作为类型也可作为长度,因此DIX帧也可被视为有效的802.3帧(需配合SNAP封装)。

  这一字段的双重解释机制是以太网协议栈互操作性的关键设计——接收设备通过判断数值范围来区分当前帧是DIX风格还是802.3风格。

  5. 数据载荷(Data)与填充(Pad)

  数据字段承载来自上层(网络层)的协议数据单元(如IP包),其长度可变,但以太网对帧总长有严格限制:

  最小数据长度46字节。若上层数据不足46字节,则必须在数据字段之后添加填充字节(Pad),使整个数据字段达到46字节。这个最小值源于以太网CSMA/CD冲突检测机制对帧长的要求——帧的最小长度为64字节(14字节头部 + 46字节数据 + 4字节FCS = 64),小于64字节的帧会被视为“碎片”(Runt帧)并被丢弃。

  最大数据长度1500字节。这是以太网的“最大传输单元(MTU)”值,即在不包括头部和尾部校验的情况下,单帧可携带的最大上层数据量。超过1500字节的数据需要由网络层进行分片。

  6. 帧校验序列(Frame Check Sequence, FCS)

  FCS字段占 4字节(32位)‍ ,采用 循环冗余校验(CRC)‍ 技术,用于检测帧在传输过程中发生的数据错误。其核心原理是:

  发送端:将目的地址、源地址、类型/长度、数据及填充字段视为一个整体,使用特定的生成多项式进行二进制除法运算,得到的32位余数即为CRC校验码,附加在帧尾。

  接收端:以相同的多项式对接收到的帧(包括FCS自身)进行除法运算。若余数为0.则认为数据无误;若不为0.则丢弃该帧,且通常不告知发送端(错误恢复由上层协议处理)。

  二、DIX Ethernet帧格式与IEEE 802.3帧格式的对比

  历史上以太网曾存在两种主流帧格式,它们在链路层的区别主要源于对类型/长度字段的定义不同,并由此导致了帧结构上的细微差异:

特性DIX Ethernet (Ethernet II)IEEE 802.3
前导码8字节(无独立SFD)7字节前导码 + 1字节SFD
类型/长度字段类型字段(≥0x0600)长度字段(≤0x05DC)
上层协议识别直接通过类型字段标识通过LLC(DSAP/SSAP/Control)或SNAP头标识
应用场景广泛用于TCP/IP协议栈(如IPv4、ARP)常用于Novell IPX/SPX及需要LLC服务的场合
当前兼容性所有现代以太网均支持IEEE 802.3已允许该字段同时作为类型/长度,故DIX帧可视为有效802.3帧

  DIX格式因其简洁直接(无需额外的LLC头部来标识协议),成为互联网协议(IP)最常使用的帧封装格式。而IEEE 802.3格式通过LLC子层和SNAP(Subnetwork Access Protocol)提供了更灵活的多协议封装能力,例如在非以太网网络(如令牌环、FDDI)上运行IPv4/IPv6时需要借助802.2 LLC + SNAP头部。

  SNAP封装

  对于需要在IEEE 802.3帧中标识上层协议的情况(如IPv4运行在802.3网络上),帧格式会扩展为:802.3头部 + LLC(3字节DSAP/SSAP/Control,其中DSAP=0xAA, SSAP=0xAA, Control=0x03) + SNAP(5字节:3字节OUI + 2字节Protocol ID)。SNAP中的协议ID(如0x0800)与DIX类型字段取值一致,从而实现了协议标识的兼容。

  三、带有802.1Q VLAN标签的以太网帧

  为了支持虚拟局域网(VLAN)划分和优先级管理,IEEE 802.1Q标准在标准以太网帧的源地址字段之后、类型/长度字段之前插入了 4字节的标签头(Tag Header)‍ ,从而形成Q-in-Q帧。其结构如下:

  TPID(Tag Protocol Identifier)‍ :2字节,固定为 0x8100.用于标识这是一个带有802.1Q标签的帧。

  TCI(Tag Control Information)‍ :2字节,包含:

  PCP(Priority Code Point)‍ :3位,用于帧优先级(802.1p),0~7级。

  DEI(Drop Eligible Indicator)‍ :1位,表示在拥塞时是否可丢弃。

  VID(VLAN Identifier)‍ :12位,标识所属的VLAN ID(0~4095.其中0和4095保留)。

  插入标签后,帧头部长度由14字节变为18字节,数据载荷的最小长度仍为46字节(填充至总帧长不小于64字节),但此时最大帧长可由1518字节扩展至1522字节(若标签存在)。现代交换机普遍支持更大的“巨型帧”以容纳标签开销。

  四、最大传输单元(MTU)与巨型帧

  1. 标准MTU

  以太网标准定义了有效载荷的最大长度为1500字节,这一数值即为标准MTU。数据链路层不能直接传输超过MTU的IP数据包,网络层(IPv4/IPv6)会将其分片成多个不超过MTU的段,分别封装成独立的以太网帧传输。

  一个完整的标准以太网帧总长度范围为:

  最小值:64字节(14字节头部 + 46字节数据 + 4字节FCS)

  最大值:1518字节(14字节头部 + 1500字节数据 + 4字节FCS)

  若包含802.1Q标签,最大帧长则增至1522字节。

  2. 巨型帧(Jumbo Frame)

  在数据中心和高速存储网络等场景中,为了降低协议开销、提升吞吐量,许多设备支持巨型帧——即MTU大于1500字节的帧。常见的巨型帧MTU为 9000字节(有效载荷)。其优势在于:

  减少帧数量:每传输相同的数据量,所需的帧头开销比例从约1.2%(1500字节载荷下18字节开销)降至约0.2%(9000字节载荷下18字节开销)。

  降低CPU占用:减少中断和内存拷贝次数。

  减少分片:对大型文件传输尤其有利。

  然而,巨型帧的使用有严格的前提条件:传输路径上的所有网络设备(网卡、交换机、路由器)都必须支持相同的巨型帧MTU值,否则会导致数据包被分片或丢弃。常见的MTU限制如:以太网最大可支持9000字节,IP over InfiniBand的MTU限制为InfiniBand MTU减4字节等。

  五、以太网帧的发送顺序与字节序

  在物理介质上传输时,以太网帧按以下顺序发送:

  前导码(7字节,连续 0xAA)

  帧起始定界符(1字节 0xAB)

  目的MAC地址(6字节,先发送最低有效位)

  源MAC地址(6字节,先发送最低有效位)

  类型/长度(2字节,先发送高位字节,即 大端序(Big Endian)‍)

  数据载荷 + 填充(最小46字节,最大1500字节)

  帧校验序列(4字节,CRC-32.先发送高位字节)

  需要注意的是,MAC地址的位序是以比特为单位的最低位优先(LSB first),而类型/长度字段和FCS是以字节为单位的大端序(网络字节序)。这种混合序体现了以太网在设计中对效率和兼容性的权衡。

  六、总结与深度思考

  以太网数据帧格式的设计体现了分层协议栈的思想:物理层负责比特同步(前导码/SFD),数据链路层负责寻址(MAC地址)、协议复用(类型/长度)和错误检测(CRC)。DIX与IEEE 802.3帧格式的并存与融合,展示了技术标准化过程中产业联盟与学术机构之间的协调。VLAN标签的引入使以太网从平面网络走向逻辑隔离的虚拟网络,而巨型帧则满足了高性能计算对低开销传输的需求。

  在实际运维和开发中,理解帧格式有助于:

  通过Wireshark抓包时正确解析协议类型;

  配置MTU时避免IP分片导致的性能下降;

  设计网络设备驱动时正确处理CRC校验;

  排查巨型帧配置不匹配导致的连通性问题。

  以太网作为最成功的局域网技术,其帧格式自1973年梅特卡夫(Robert Metcalfe)发明以来,虽经历多次扩展(如10M → 100M → 1G → 10G → 100G/400G),但基本框架始终得以延续,这正是其生态强大生命力的体现。

滚动至顶部