以太网 MAC 详解:帧格式、位序、FCS 与收发流程
本文从工程实现角度梳理 IEEE 802.3 以太网中的 MAC:先说明 MAC 与 PHY 的分层关系,再介绍帧格式、帧长边界、地址位序、Length/Type、Pad、FCS,以及发送和接收流程。最后区分 MAC frame、Ethernet packet 与线上实际占用,便于进行吞吐率和小包 PPS 估算。
本文以现代交换网络中常见的点到点全双工链路为主线。半双工、碰撞、载波扩展等内容仅在影响帧格式或术语边界时说明;不同速率 PHY 的具体编码和电气参数应继续查阅对应的 IEEE 802.3 条款。
MAC 与 PHY 的分层关系
IEEE 802.3 体系中,MAC 位于数据链路层。MAC 向上为 LLC 或其他 MAC client 提供服务,向下通常通过 Reconciliation 子层和速率相关的介质无关接口与 PHY 交互。

图 1:IEEE 802.3 与 OSI 参考模型的对应关系,摘自 IEEE Std 802.3-2022 Figure 1-1。
从上到下,可以将数据路径概括为:
text
MAC client → MAC Control(可选)→ MAC → Reconciliation → xMII → PHY → MDI → 传输介质
图中的 xMII 是介质无关接口的统称。在典型速率下,100 Mb/s 使用 MII,1 Gb/s 使用 GMII,10 Gb/s 使用 XGMII。它们描述 MAC/Reconciliation 与 PHY 之间的逻辑接口;在具体芯片方案中,接口可能表现为外部并行总线、片内逻辑连接或高速 SerDes,并不一定对应一组独立引脚。
PHY 负责把面向 MAC 的数字数据转换为适合具体介质传输的编码信号,并完成反向接收与恢复。PCS、PMA 和 PMD 是 PHY 中常见的功能子层:
- PCS(Physical Coding Sublayer):负责编码、解码及相关同步功能。
- PMA(Physical Medium Attachment):负责串并转换、时钟恢复等与物理连接相关的功能。
- PMD(Physical Medium Dependent):负责与具体电气或光学介质相关的收发功能。
PHY 是物理层功能实体,不一定对应一颗独立芯片。其具体子层组成和实现边界取决于速率、介质类型与所采用的 IEEE 802.3 条款。
MAC 的职责
MAC(Media Access Control),即介质访问控制,属于 OSI 数据链路层。它主要负责以太网帧的封装与解析、源/目的地址处理、Length/Type 字段解释、帧长与填充处理、FCS 生成与校验,以及相应的介质访问控制。
Ethernet packet 格式

图 2:Ethernet packet 的主要字段,摘自 IEEE Std 802.3-2022 Figure 3-1。
| 字段 | 长度 | 作用 |
|---|---|---|
| Preamble | 7 B | 让接收侧同步;常见字节表示为连续的 0x55 |
| SFD | 1 B | 帧开始定界;常见字节表示为 0xD5 |
| Destination Address | 6 B | 目的单播、组播或广播地址 |
| Source Address | 6 B | 源单播地址 |
| Length/Type | 2 B | 表示数据长度或 EtherType |
| MAC Client Data + Pad | 可变 | 上层数据以及为满足最小帧长而添加的填充 |
| FCS | 4 B | CRC-32 检错 |
| Extension | 可变 | 仅与 1 Gb/s 半双工载波扩展有关 |
按常见的字节表示,Preamble 为连续的 0x55,SFD 为 0xD5;由于普通八位组按 LSB first 发送,线上按时间观察到的比特顺序分别表现为重复的 10101010 和结尾为 10101011 的定界模式。普通主机抓包通常看不到 Preamble、SFD 和 IPG,因为它们在帧交给驱动之前已经由硬件处理。
帧长边界
| 帧类型 | MAC Client Data 最大值 | 额外字段 | MAC frame 最大值 |
|---|---|---|---|
| Basic frame | 1500 B | 无 | 1518 B |
| Q-tagged frame | 1500 B | 4 B QTag Prefix | 1522 B |
| Envelope frame | 1500 B | Envelope Prefix + Suffix,合计不超过 482 B | 2000 B |
需要特别注意:QTag Prefix 和 Envelope Prefix/Suffix 位于 MAC Client Data 之外,因此不能把 1504 B 或 1982 B 标成"MAC Client Data 最大值"。Envelope frame 也不等同于工程中常见的 9 KB 左右 Jumbo frame;IEEE 802.3 的 Envelope frame 最大 MAC frame 为 2000 B。
三种帧使用共同的基本格式。MAC frame 的最小长度为 64 B 。对普通未打标签的基本帧,Data + Pad 至少为 46 B:
text
6 B(DA) + 6 B(SA) + 2 B(Length/Type) + 46 B(Data/Pad) + 4 B(FCS) = 64 B
一个最小帧在链路上的常用占用口径为(按平均 96 bit-times 的 IPG 计算):
text
8 B(Preamble + SFD) + 64 B(MAC frame) + 12 B(IPG 等效时间)
= 84 B = 672 bit-times
因此,在不计 PHY 编码开销的情况下,最小帧连续发送时:
- 1 Gb/s 下,单包约占用 672 ns,理论上限约为 1.488 Mpps;
- 10 Gb/s 下,单包约占用 67.2 ns,理论上限约为 14.88 Mpps。
进行吞吐率或小包 PPS 估算时,不能只使用 64 B 作为分母,还需要考虑 Preamble、SFD 和 IPG。这里得到的是 MAC 侧常用估算值,不包含 64B/66B、8b/10b、FEC、多 lane 对齐标记等 PHY 编码开销。
地址字段与位序
每个 MAC 地址为 48 bit。第一个被发送的地址位同时具有特殊含义:

图 3:MAC 地址中的 I/G 位与 U/L 位,摘自 IEEE Std 802.3-2022 Figure 3-3。
- I/G 位:0 表示 individual(单播),1 表示 group(组播)。源地址中的该位保留并置 0。
- U/L 位:0 表示 globally/universally administered,1 表示 locally administered。
- DA 全 1,即
FF:FF:FF:FF:FF:FF,表示广播地址。
除 FCS 外,每个八位组按 最低有效位先发送。不过,人们看到的 MAC 地址仍按通常的十六进制字节顺序书写,不应因为线路位序而手动反转每个地址字节。
Length/Type 的判定
Length/Type 字段为 2 B,按高字节在前解释:
- 值
<= 1500:作为 Length,表示随后 MAC Client Data 的字节数。 - 值
>= 1536(0x0600):作为 Type,表示 EtherType。 1501~1535:保留区间,不应作为正常 Length 或 EtherType 使用。
Pad 位于客户端数据之后、FCS 之前。当该字段按 Type 解释时,MAC client 必须能够正确处理 MAC 为满足最小帧长而添加的 Pad,不能把 FCS 之前的全部字节都无条件视为上层有效载荷。
FCS 覆盖范围
FCS 是 4 B CRC-32,保护以下字段:
text
DA + SA + Length/Type + MAC Client Data + Pad
Preamble、SFD、FCS 自身、Extension 和 IPG 不在 FCS 覆盖范围内。CRC 生成多项式为:
text
x^32 + x^26 + x^23 + x^22 + x^16 + x^12 + x^11 + x^10
+ x^8 + x^7 + x^5 + x^4 + x^2 + x + 1
实现 CRC 时最容易出错的通常不是多项式本身,而是输入位序、初值与取反规则、移位方向,以及最终 32 bit 的发送顺序。验证硬件或软件实现时,应使用已知帧同时比对最终 FCS 字节,而不能只比较内部寄存器值。
常见软件实现采用 CRC-32/ISO-HDLC 的等价参数:正常表示多项式为 0x04C11DB7,反射实现常使用 0xEDB88320,初值与最终异或值均为 0xFFFFFFFF,输入/输出反射。字符串 123456789 的标准校验值为 0xCBF43926。这些参数用于帮助核对算法,真正验证以太网实现时仍应比较完整测试帧的最终 FCS 字节顺序。
无效 MAC frame
至少满足下列任一条件时,帧应被视为无效:
- Length 解释与实际长度不一致;若字段为合法 Type 值,则不按此项判错。
- 帧长不是整数个八位组。
- 根据接收内容计算得到的 CRC 与 FCS 不一致。
无效帧不交给 LLC 或 MAC Control,可以直接丢弃并计入相应的管理统计。
工程设备通常还会分别统计 runt、giant/oversize、alignment error、jabber 等异常。它们与标准中的 invalid MAC frame 条件有关,但具体计数边界还可能受到设备配置、VLAN 支持和 Jumbo frame 上限影响。
MAC 的发送与接收流程
发送方向
发送路径可以概括为:
- 接收 MAC client 的发送请求,获得地址、服务数据和相关控制信息。
- 形成 MAC frame,必要时补充 Pad,并计算和附加 FCS。
- 在 MAC frame 前发送 Preamble 和 SFD。
- 按规定的线路顺序将各字段交给下层 PHY。
- 帧结束后满足 96 bit-times 的 IPG,再开始发送下一包。
接收方向
接收路径可以概括为:
- 从 PHY 获取接收数据有效信号、数据内容及链路状态。
- 识别 Preamble 和 SFD,确定帧边界。
- 解析地址、Length/Type、Data/Pad 与 FCS 等字段。
- 依次执行地址识别、长度与字节对齐检查,以及 FCS 校验。
- 对合法且目的地址匹配的帧,通过
MA_DATA.indication上送;错误帧则计入相应统计或被丢弃。
可选的 MAC Control 位于 MAC client 与 MAC 之间,可承载 PAUSE 等控制操作。PFC(Priority-based Flow Control)由 IEEE 802.1Qbb 定义,其机制与 PAUSE 类似,但可以按优先级分别进行流量控制。
Packet、MAC frame 与线上占用
- MAC frame:从 Destination Address 开始,到 FCS 结束。
- Ethernet packet:Preamble + SFD + MAC frame;仅在 1 Gb/s 半双工的特定情况下还可能包含 Extension。
- Inter-Packet Gap(IPG):两个 packet 之间的空闲时间,不属于 packet,也不属于 MAC frame,但进行链路占用和 PPS 计算时必须考虑。
总结
理解以太网 MAC 时,建议始终区分三个边界:MAC client 交给 MAC 的数据、从 DA 到 FCS 的 MAC frame,以及包含 Preamble/SFD 的 Ethernet packet。计算线上吞吐时还要加入 IPG;实现和排查 FCS 时,则要同时关注覆盖范围、位序和最终发送字节。把这些边界理清后,MAC 与 PHY 之间的数据路径就会清晰很多。
术语与参考资料
- medium / media:medium 的复数形式为 media;在通信语境中通常译为"介质"。
- PLS(Physical Layer Signaling):早期以太网架构中的物理层信令功能。
- MAU(Medium Attachment Unit):介质连接单元,负责 AUI 与传输介质之间的收发和连接。
- MDI(Medium Dependent Interface):PHY 或 MAU 与传输介质之间的机械、电气或光学接口,例如双绞线或光纤接口。
- PCS / PMA / PMD:PHY 中常见的功能子层,并不等同于"物理层芯片"。
参考资料:
- IEEE Std 802.3-2022:Clause 1(体系结构)、Clause 3(帧格式)、Clause 4(MAC 功能)、Clause 31(MAC Control)。
- IEEE 802.3 Ethernet Working Group
- IEEE 802.3 Overview(David Law,2010)
- IEEE 802.3 Editorial Guidelines:Frames and Packets
- IEEE 802.1Qbb:Priority-based Flow Control