数据链路层帧格式详解
重点讲以太网帧(Ethernet Frame)—— 因为它是现实中最主流、最常用的。
一、先搞懂:什么是 “帧”?
数据链路层的传输单位叫帧(Frame)。作用:
- 把网络层的 IP 数据包封装起来
- 加上源 MAC、目的 MAC、校验等信息
- 让数据能在同一局域网内被交换机正确转发
一句话:帧 = 头部 + 数据 + 尾部
二、标准以太网帧格式(以太网 II / DIX 帧)
最常见、现在互联网 99% 用的就是这种。
完整结构(单位:字节):
plaintext
前导码 + 帧开始定界符 + 目的MAC + 源MAC + 类型/长度 + 数据 + FCS校验逐字段详细解释:
1. 前导码(Preamble)
- 长度:7 字节
- 内容:
10101010重复 7 次 - 作用:
- 让接收网卡同步时钟
- 告诉网卡 “马上有帧来了,准备接收”
2. 帧开始定界符(SFD)
- 长度:1 字节
- 内容:
10101011 - 作用:
- 标记帧真正开始
- 前导码 + SFD 合称 “帧前同步信号”,共 8 字节
注意:这 8 字节不算在以太网帧长度内,是物理层辅助信号。
3. 目的 MAC 地址(Destination MAC)
- 长度:6 字节 = 48 bit
- 作用:
- 标识接收方网卡
- 交换机根据它查表转发
- 格式示例:
00:11:22:33:44:55
4. 源 MAC 地址(Source MAC)
- 长度:6 字节
- 作用:
- 标识发送方网卡
- 交换机靠它学习 MAC 地址表
5. 类型 / 长度字段(Type/Length)
- 长度:2 字节
- 两种含义:
- > 0x0600(1536)→ 表示上层协议类型
- 0x0800 = IPv4
- 0x0806 = ARP
- 0x86DD = IPv6
- < 0x0600→ 表示数据部分长度(老式 IEEE 802.3 用)
- > 0x0600(1536)→ 表示上层协议类型
现在几乎都用类型模式。
6. 数据字段(Data / Payload)
- 长度:46 ~ 1500 字节
- 内容:
- 网络层数据包(IP 包、ARP 包等)
- 最小 46 原因:
- 以太网要求帧最短64 字节
- 去掉头部 14 字节 + FCS4 = 18 字节
- 所以数据至少要 46 字节
- 不够就自动填充(Padding)
最大 1500 就是MTU。
7. 帧校验序列(FCS)
- 长度:4 字节
- 算法:CRC32
- 作用:
- 校验帧在传输中是否出错
- 接收方重新计算 CRC,不一致就直接丢弃
- 注意:FCS 只校验目的 MAC + 源 MAC + 类型 + 数据
三、以太网帧总长度
- 最小帧长:64 字节(14 头 + 46 数据 + 4FCS)
- 最大帧长:1518 字节(14 头 + 1500 数据 + 4FCS)
带 VLAN 标签的帧会多 4 字节,最大 1522 字节。
四、完整帧结构总结表(必背)
表格
| 字段名 | 长度 | 作用 |
|---|---|---|
| 前导码 Preamble | 7B | 时钟同步 |
| 帧开始符 SFD | 1B | 标记帧开始 |
| 目的 MAC | 6B | 接收设备地址 |
| 源 MAC | 6B | 发送设备地址 |
| 类型 / 长度 | 2B | 标识上层协议(IP/ARP) |
| 数据(含填充) | 46–1500B | 上层数据包 |
| FCS 校验 | 4B | CRC 检错 |
真正的以太网帧 = 14 + 数据 + 4 = 18~1518 字节
五、和 IEEE 802.3 帧的区别(简单了解)
老式标准,现在几乎不用:
- 类型字段 → 长度字段
- 后面多了DSAP、SSAP、Control
- 最后才是数据
现实中你遇到的 100% 是以太网 II 帧。
六、帧的生命周期(一句话串起来)
- 上层给一个 IP 包
- 链路层封装:加目的 MAC、源 MAC、类型
- 物理层加前导码 + SFD 发出去
- 交换机根据目的 MAC 查表转发
- 接收网卡校验 FCS
- 去掉帧头,取出 IP 包交给网络层
