MAC 发出的一个帧(MAC Frame)及其完整的帧格式

内容以 IEEE 802.3 以太网 MAC 帧 为例:

MAC 帧是什么?

MAC 帧(MAC Frame)是 数据链路层(Layer 2) 的基本传输单元,由 MAC 子层负责收发。

无论是交换机、车载以太网、最后实际发出的都是标准 MAC 帧。

MAC 帧负责:

  • 标识源/目的 MAC 地址
  • 识别协议类型(IP、ARP、TSN、AVB 等)
  • 提供最基本的差错校验(FCS)
  • 进行负载封装

MAC 帧格式(802.3 Ethernet II)

复制代码
+------------+----------------+----------------+------------+-----------+
| 前导码     | SFD 起始帧定界符 | MAC 目的地址    | MAC 源地址  | EtherType |
| 7 字节     | 1 字节          | 6 字节          | 6 字节      | 2 字节    |
+------------+----------------+----------------+------------+-----------+
|                          Payload 数据(46 ~ 1500 字节)                |
+---------------------------------------------------------------------------+
|                                  FCS 校验(4 字节)                      |
+---------------------------------------------------------------------------+

下面逐字段解释。


1)Preamble 前导码(7 字节)

复制代码
10101010 10101010 ... (重复 7 次)

作用:

  • 时钟同步(MAC 收发器之间的时钟恢复)
  • 让接收端知道帧即将开始

2)SFD --- Start Frame Delimiter(1 字节)

复制代码
10101011

这是标志"真正的 MAC 帧从下一字节开始"。

MAC 不会把 Preamble 和 SFD 上交给上层,但会在物理层自动加上。


3)Destination MAC Address(6 字节)

可以是:

  • 单播 MAC(如:00:1A:2B:3C:4D:5E)
  • 组播(01-00-5E-xx-xx-xx)
  • 广播(FF:FF:FF:FF:FF:FF)

硬件先根据目的 MAC 决定该帧的流向。


4)Source MAC Address(6 字节)

发送方的 MAC 地址,由 MAC 控制器自动填充。


5)EtherType / Length(2 字节)

802.3 Ethernet II(常用)

表示协议类型,例如:

EtherType 协议
0x0800 IPv4
0x86DD IPv6
0x0806 ARP
0x8100 VLAN Tag(表示下一个字段是 VLAN)
0x88F7 TSN / AVB(一些场景)

(可选)802.1Q VLAN Tag(4 字节)

有 VLAN 的帧结构会变成:

复制代码
Dest MAC | Src MAC | 0x8100 | Tag | EtherType | Payload | FCS

VLAN Tag 内容:

  • PCP(优先级,TSN 用到)
  • DEI
  • VLAN ID(12 bit)

S32G/S32Z 的 TSN 交换机、ENETC 都会处理 VLAN/PCP。


6)Payload 数据区(46~1500 字节)

最小长度必须是 46 字节 ,若不足,MAC 会自动填充(Padding)。

常见封装的协议:

  • IPv4/IPv6
  • TCP/UDP
  • TSN/AVB 负载
  • SOME/IP
  • PTP(1588)
  • ARP

最大 MTU = 1500 Bytes(不含头部和 FCS)。

如果启用了 Jumbo Frame,例如 9000 bytes,需要双方 MAC 都支持。


7)FCS --- Frame Check Sequence(4 字节)

CRC-32 校验,用于保证数据完整性。

MAC 硬件自动计算并在接收时验证。

RTD 的驱动不需要软件处理 CRC,否则会导致帧错误。


🔄 MAC 帧的最小 / 最大长度

最小帧长 = 64 字节

包含:

  • Dest(6) + Src(6) + EtherType(2) + Payload(46) + FCS(4)

如果 Payload < 46,MAC 自动补齐 Padding。

最大帧长 = 1518 字节(无 VLAN)

复制代码
6 + 6 + 2 + 1500 + 4 = 1518

最大帧长(带 VLAN) = 1522 字节


📡 MAC 在发送帧时的具体过程(硬件视角)

以 S32G/S32Z ENET/ENETC 为例:

  1. CPU 或 DMA 将帧填入 TX Buffer
  2. 填写 Buffer Descriptor(BD 或 QBMan FD)
  3. 提交到 MAC / ENETC 发送队列
  4. MAC 自动添加:
    • Preamble
    • SFD
    • CRC(FCS)
  5. 将完整帧发送到 PHY
  6. PHY 发送到链路(MII/RGMII/SGMII)

注意:驱动提交的帧不包含 Preamble/SFD/FCS


📘 举个完整的 MAC 帧例子(十六进制)

复制代码
FF FF FF FF FF FF   ← Destination MAC (广播)
00 1A 2B 3C 4D 5E   ← Source MAC
08 00               ← EtherType (IPv4)

45 00 00 54 ...     ← Payload 数据 (IP+UDP+Data)

DE AD BE EF         ← FCS (CRC32)
相关推荐
DianSan_ERP2 天前
电商API接口全链路监控:构建坚不可摧的线上运维防线
大数据·运维·网络·人工智能·git·servlet
呉師傅2 天前
火狐浏览器报错配置文件缺失如何解决#操作技巧#
运维·网络·windows·电脑
2501_946205522 天前
晶圆机器人双臂怎么选型?适配2-12寸晶圆的末端效应器有哪些?
服务器·网络·机器人
linux kernel2 天前
第七部分:高级IO
服务器·网络
数字护盾(和中)2 天前
BAS+ATT&CK:企业主动防御的黄金组合
服务器·网络·数据库
~远在太平洋~2 天前
Debian系统如何删除多余的kernel
linux·网络·debian
unfeeling_2 天前
Keepalived实验
linux·服务器·网络
坐吃山猪2 天前
OpenClaw04_Gateway常见问题
网络·gateway·openclaw
上海云盾商务经理杨杨2 天前
2025年重大网络安全事件回顾与趋势分析
网络·安全·web安全
kylezhao20192 天前
C# 的开闭原则(OCP)在工控上位机开发中的具体应用
网络·c#·开闭原则