一、数据链路层概述

数据链路层是 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
  • ≤ 1500Length,表示数据域字节数(IEEE 802.3 格式)
  • ≥ 1536EtherType,标识上层协议类型(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 层描述数据长度来实现。