计算机网络-以太网帧格式详解
一、数据链路层概述
数据链路层是 OSI 模型的第二层,负责在相邻节点之间传输数据帧,向上为网络层提供服务,向下控制物理层的介质访问。
核心功能:
| 功能 | 说明 |
|---|---|
| 帧封装与同步 | 将上层数据打包成帧,标记帧的起止边界 |
| 媒体访问控制 | 协调多设备共享同一物理介质(CSMA/CD、CSMA/CA) |
| 寻址 | 使用 MAC 地址在局域网内标识设备 |
| 错误检测 | 通过 FCS 检测传输错误 |
| 流量控制 | 防止发送方速率超过接收方处理能力 |
二、LLC 与 MAC 子层
IEEE 802 将数据链路层划分为两个子层:
┌─────────────────────────────────────────┐
│ 网络层(IP) │
├─────────────────────────────────────────┤
│ LLC(逻辑链路控制)IEEE 802.2 │ ← 上子层
│ 帧同步 · 流量控制 · 协议复用 │
├─────────────────────────────────────────┤
│ MAC(媒体访问控制) │ ← 下子层
│ CSMA/CD · CSMA/CA · 令牌传递 │
├─────────────────────────────────────────┤
│ 物理层 │
└─────────────────────────────────────────┘
- MAC 子层:与物理层交互,解决多设备共享介质的冲突问题
- CSMA/CD:先听后发、边发边听、冲突后随机退避,用于有线以太网
- CSMA/CA:通过随机退避主动避免冲突,用于 Wi-Fi
- LLC 子层:现代有线以太网中已基本透明。Ethernet II 用 EtherType 字段直接标识上层协议,取代了 LLC 的协议复用功能;只有 STP、LLDP 等少数控制协议还在使用 LLC 格式帧。
三、Ethernet II 帧格式
现代有线以太网绝大多数使用 Ethernet II 格式:
┌──────────┬──────┬──────────┬──────────┬────────────────────┬──────────┐
│ 前导码 │ SFD │ 目的MAC │ 源MAC │ EtherType/Length │ FCS │
│ 7 字节 │ 1字节│ 6 字节 │ 6 字节 │ 2 字节 │ 4 字节 │
└──────────┴──────┴──────────┴──────────┴────────────────────┴──────────┘
前导码和 SFD 属于物理层,不计入帧长度。有效帧长度为 64 到 1518 字节。
各字段详解
前导码(Preamble)— 7 字节
固定值 AA AA AA AA AA AA AA,连续交替的 10101010... 比特序列。作用是让接收方时钟锁相电路(PLL)同步到发送方时钟频率,实现比特同步。
帧起始定界符(SFD)— 1 字节
固定值 0xAB(即 10101011)。最后两位 11 打破前导码的交替规律,明确通知接收方:下一个字节就是目的 MAC 地址,正式帧数据从这里开始。
目的 MAC 地址 — 6 字节
- 第 1 字节最低位(I/G 位):
0= 单播,1= 多播 - 第 1 字节次低位(U/L 位):
0= 全局唯一,1= 本地管理地址 - 广播地址为全
FF:FF:FF:FF:FF:FF
源 MAC 地址 — 6 字节
由 OUI(前 3 字节,厂商标识)和设备序列号(后 3 字节)组成。交换机依据此字段学习端口与 MAC 地址的映射关系,构建转发表(CAM 表)。
数据(有效载荷)— 46 至 1500 字节
携带 IP 数据报或其他协议 PDU。最小 46 字节,不足时填充全零 Padding;最大 1500 字节即标准 MTU。
FCS(帧校验序列)— 4 字节
对目的 MAC、源 MAC、EtherType/Length、数据四个字段做 CRC-32 运算(生成多项式 0x04C11DB7)。接收方重新计算,不匹配则丢帧。FCS 只能检测错误,不能纠错。
最小帧长 64 字节的原因
与 CSMA/CD 冲突检测机制直接相关。以太网规定最大碰撞域的信号往返时延为 512 位时(= 64 字节)。若帧太短,发送方传输完毕后才检测到冲突,就无法重传。因此数据不足 46 字节时必须填充 Padding。
四、EtherType / Length 字段
这 2 字节字段根据数值范围承担两种含义:
0x0000 ─── 0x05DC 0x05DD~0x05FF 0x0600 ─── 0xFFFF
│ │ │ │ │
└── Length ────┘ (保留/未用) └── EtherType ─┘
≤ 1500 ≥ 1536
- 值 ≤ 1500 → Length,表示数据域字节数(IEEE 802.3 格式)
- 值 ≥ 1536 → EtherType,标识上层协议类型(Ethernet II 格式)
- 1501–1535 → 未定义,正常情况下不出现
常见 EtherType 值
| 值 | 协议 | 说明 |
|---|---|---|
0x0800 |
IPv4 | 最常见,绝大多数互联网流量 |
0x0806 |
ARP | 地址解析协议 |
0x86DD |
IPv6 | IPv6 数据报 |
0x8100 |
802.1Q | VLAN 标签,帧内插入额外 4 字节 |
0x88A8 |
QinQ | 双层 VLAN,用于运营商骨干网 |
0x8847 |
MPLS | 多协议标签交换 |
0x8864 |
PPPoE | 以太网上的点对点协议(宽带拨号) |
五、MAC 地址
MAC 地址是网卡的硬件地址,长度 6 字节(48 位),通常以冒号分隔的十六进制表示,如 00:1A:2B:3C:4D:5E。
┌──────────────────────────┬──────────────────────────┐
│ OUI(前 3 字节) │ 设备序列号(后 3 字节) │
│ 厂商标识 │ 厂商分配的唯一编号 │
└──────────────────────────┴──────────────────────────┘
第1字节:
bit 0(最低位)= I/G 位:0=单播,1=多播/广播
bit 1 = U/L 位:0=全局唯一,1=本地管理
特殊地址:
| 地址 | 说明 |
|---|---|
FF:FF:FF:FF:FF:FF |
广播,局域网内所有设备都接收 |
| 第1字节最低位为 1 | 多播地址,如 IPv6 多播用 33:33:xx:xx:xx:xx |
| U/L 位为 1 | 本地管理地址,虚拟机、VPN 等软件生成的 MAC 常用 |
交换机 MAC 地址学习:读取帧的源 MAC 地址,记录”该 MAC 在哪个端口出现”,动态建立转发表。目的 MAC 在表中有记录则单播转发,否则向所有端口泛洪(Flood)。
六、帧边界的确定
以太网帧格式本身不含帧长度字段,帧边界完全由物理层负责确定。
方法一:载波有无(10M / 100M 以太网)
发送帧时线路有信号,帧发完后线路进入空闲状态。接收方检测到载波消失即认为帧结束。
方法二:编码控制符号(1G 及以上)
千兆以太网线路不能真正空闲(时钟同步会丢失),通过专用控制符号标记帧边界:
... [idle] [idle] | /S/ 目的MAC 源MAC EtherType 数据 FCS /T/ | [idle] [idle] ...
↑ ↑
Start 符号 Terminate 符号
控制符号来自 8b/10b 编码的控制码空间:每 8 位数据编成 10 位传输,多出来的编码值专门用作控制符号,数据中永远不会出现,接收方可无歧义识别。
| 职责 | 负责层 |
|---|---|
| 确定帧的起止边界 | 物理层 |
| 校验帧数据完整性 | MAC 层(FCS) |
| 标识上层协议 | MAC 层(EtherType) |
| 区分真实数据与 Padding | MAC 层(Length,已少用) |
七、巨型帧(Jumbo Frame)
标准以太网 MTU 为 1500 字节。巨型帧绕开而非修改帧格式来支持超大载荷:
- 巨型帧全部使用 EtherType 格式(如
0x0800),该字段只标识协议,不描述长度 - 实际数据长度由 IP 头的 Total Length 字段描述
- 帧边界仍由物理层控制符号确定,与长度无关
部署要求:发送方网卡、接收方网卡、路径上所有交换机端口均须手动启用 Jumbo Frame,通常配置 MTU 为 9000 字节。任何中间节点未开启,超大帧将被直接丢弃。
常见场景:数据中心存储网络(NFS、iSCSI)和高性能计算,可显著降低 CPU 处理开销、提升吞吐量。
八、无线以太网与帧格式转换
“以太网帧”严格指 IEEE 802.3 格式;Wi-Fi 空口使用 IEEE 802.11 格式,两者完全不同,AP 在其间透明转换。
| 场景 | 帧格式 |
|---|---|
| 有线以太网 | Ethernet II(IEEE 802.3) |
| Wi-Fi 空口 | IEEE 802.11 |
| AP 与交换机之间 | Ethernet II(IEEE 802.3) |
AP 的帧格式转换
无线 → 有线(上行):
手机/电脑 AP 交换机/路由器
[802.11头] → 剥掉 802.11头 → [目的MAC][源MAC]
[LLC/SNAP] 剥掉 LLC/SNAP [EtherType=0x0800]
[IP数据] 重新封装为 [IP数据]
[FCS] Ethernet II 帧 [FCS]
有线 → 无线(下行): 反向剥掉以太网头,封装为 802.11 帧。
802.11 数据帧体开头包含 LLC/SNAP 头,其 Protocol 字段即 EtherType 值(如 0x0800)。这个封装/解封装过程发生在 AP 内部,操作系统网络栈始终只处理 Ethernet II,对 LLC/SNAP 完全透明。
九、IEEE 802.3 + LLC 格式(历史)
1980 年代,以太网并存两套标准:
- Ethernet II(DIX):EtherType 直接标识上层协议,简单高效
- IEEE 802.3 + LLC:协议类型由 LLC 子层负责,更符合分层原则
随着 TCP/IP 的普及,Ethernet II 成为绝对主流,IEEE 802.3 + LLC 路线边缘化。
帧结构:
┌──────────┬──────────┬──────────┬────────┬───────────────┬──────────┐
│ 目的MAC │ 源MAC │ Length │ LLC头 │ 数据 │ FCS │
│ 6字节 │ 6字节 │ 2字节 │ 3字节 │ 46~1497字节 │ 4字节 │
└──────────┴──────────┴──────────┴────────┴───────────────┴──────────┘
↑
DSAP(1B) | SSAP(1B) | Control(1B)
SAP 值只有 1 字节,能表示的协议种类太少,故引入 SNAP 扩展头(5 字节),其 Protocol 字段实际上就是 EtherType 的值。
现存使用场景:
| 协议 | DSAP/SSAP | 说明 |
|---|---|---|
| STP(生成树协议) | 0x42 |
网桥间交换 BPDU 报文 |
| LLDP(链路层发现协议) | 0xFE |
设备发现与拓扑感知 |
| CDP(思科发现协议) | SNAP 0x2000 |
思科设备专有 |
| 802.11 Wi-Fi 帧体 | 0xAA(SNAP) |
AP 内部封装格式 |
普通 IP 流量完全不使用此格式。
十、各层分工总结
┌─────────────────────────────────────────────────────────┐
│ 应用层 / 传输层 │
│ 流量控制(TCP)· 端到端错误恢复 │
├─────────────────────────────────────────────────────────┤
│ 网络层(IP) │
│ 路由 · 分片 · 数据长度描述(Total Length) │
├─────────────────────────────────────────────────────────┤
│ 数据链路层(以太网 MAC) │
│ 帧封装 · MAC寻址 · EtherType协议复用 · FCS错误检测 │
├─────────────────────────────────────────────────────────┤
│ 物理层 │
│ 帧边界确定 · 比特同步 · 信号编解码 │
└─────────────────────────────────────────────────────────┘
关键设计原则:
- 物理层负责边界,MAC 层负责内容:帧的起止边界由物理层通过载波有无或编码控制符号确定,MAC 层收到完整字节流后直接按字段解析。
- EtherType 是链路层的协议分发器:读取 2 字节 EtherType,将数据交给对应的上层协议栈,一条物理链路承载多种上层协议。
- LLC 被架空,EtherType 取而代之:LLC 子层的协议复用功能在 TCP/IP 生态中被 EtherType 机制完全替代。
- AP 是两种世界的桥梁:有线 Ethernet II 与无线 802.11 帧格式完全不同,AP 在两者之间透明转换,IP 层以上无感知。
- 巨型帧靠配置不靠格式:Jumbo Frame 不修改以太网帧格式,通过全链路统一配置 MTU 并依赖 IP 层描述数据长度来实现。
