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)
相关推荐
05大叔7 小时前
网络基础知识 域名,JSON格式,AI基础
运维·服务器·网络
我想走路带风7 小时前
c++工具转向网络底层工具
网络
dashizhi20157 小时前
服务器共享禁止保存到本地磁盘、共享文件禁止另存为本地磁盘、移动硬盘等
运维·网络·stm32·安全·电脑
皙然7 小时前
深入理解TCP流量控制
网络·网络协议·tcp/ip
网教盟人才服务平台8 小时前
2026数字中国创新大赛-数字安全赛道全面启动!
网络·安全
woho7788999 小时前
不同网段IP的网络打印机,打印、扫描设置
运维·服务器·网络
CN.LG9 小时前
抓包工具 Wireshark 是什么?
网络·测试工具·wireshark
ricky_fan10 小时前
(OpenAI)Codex 安装、部署使用方式
python·macos·conda·vim
Crazyong10 小时前
FreeRTOS-任务通知-1
网络
JdayStudy10 小时前
SIR 网络传播仿真软件说明书
开发语言·网络·php