--- tags: [计算机网络, Ethernet, MAC, 帧结构, 数据链路层] create time: 2026-05-17 22:50 --- # Ethernet 帧结构 ## 概述 Ethernet(以太网)是目前最主流的局域网技术,由 Xerox、DEC 和 Intel 在 1980 年联合制定(IEEE 802.3)。理解 Ethernet 帧结构是掌握网络底层通信的基础——每一帧都包含了足够的信息来让网卡判断"这是给我的吗?内容完整吗?上层协议是什么?" ## Ethernet II 帧格式(最常见) ``` ┌──────────┬──────────┬──────────┬─────────────┬──────────┐ │ Dest MAC │ Src MAC │ EtherType│ Payload │ FCS │ │ 6 bytes │ 6 bytes │ 2 bytes │ 46–1500 B │ 4 bytes │ │ aabb.ccdd│ dd.eeff. │ 0x0800 │ IP Packet │ crc32() │ │ ee.ff.00│ │ │ │ │ └──────────┴──────────┴──────────┴─────────────┴──────────┘ ←──────── 14 bytes Header ───────→ ← Tail → ←──── Min Frame = 64B ────→ ←──── Max Frame = 1518B ────→ ``` ### 字段详解 | 字段 | 大小 | 说明 | |------|------|------| | Dest MAC | 6 bytes | 目标 MAC 地址,`ff:ff:ff:ff:ff:ff` 表示广播 | | Src MAC | 6 bytes | 源 MAC 地址,发出方的物理地址 | | EtherType | 2 bytes | 上一层协议类型:`0x0800`=IPv4, `0x86DD`=IPv6, `0x0806`=ARP | | Payload | 46–1500 bytes | 承载的上层数据包。**最小 46 字节**,不足则填充(Padding) | | FCS | 4 bytes | CRC-32 校验和,网卡硬件自动计算,接收端验证错误则直接丢弃 | ### 为什么 Payload 最小 46 字节? 最早的以太网最大电缆长度 2500m,信号传播延迟需要至少 64 字节才能保证碰撞检测(CSMA/CD)生效。所以规定**整个帧最小 64 字节**,减去 14 字节头部和 4 字节 FCS,Payload 最少 46 字节。短包会补零填满。 现代 Gigabit+ 网卡已不用 CSMA/CD,但为了兼容仍保留此限制。 ## IEEE 802.3 / 802.3Q(VLAN Tagged)帧 当网络中使用 VLAN 时,帧中会插入一个 4 字节的 802.1Q Tag: ``` ┌──────────┬──────────┬──────┬──────┬──────────┬─────────────┬──────────┐ │ Dest MAC │ Src MAC │ Type │ TPID │ TCI/VID │ Payload │ FCS │ │ 6 bytes │ 6 bytes │ 2B │2B │ 2B │ 46–1500 B │ 4 bytes │ └──────────┴──────────┴──────┴──────┴──────────┴─────────────┴──────────┘ ``` 新增字段: - **TPID** (Tag Protocol Identifier): `0x8100` — 标识这是带 VLAN Tag 的帧 - **TCI** (Tag Control Information): 包含 PCP(优先级,3 bit)、CFI(规范格式指示符,1 bit)、**VID**(VLAN ID,12 bit) VID 取值范围 1–4094,共 4094 个可用 VLAN。 ## 常见 EtherType 对照表 | EtherType | 十六进制 | 协议 | |-----------|---------|------| | IPv4 | `0x0800` | IP 数据包 | | IPv6 | `0x86DD` | IPv6 数据包 | | ARP | `0x0806` | 地址解析协议 | | RARP | `0x8035` | 反向 ARP(历史遗留) | | PPPoE | `0x8864` | PPP over Ethernet | | 802.1Q | `0x8100` | VLAN 标记 | | LACP | `0x8809` | 链路聚合控制协议 | ## MAC 地址空间与 OUI ### OUI(Organizationally Unique Identifier) MAC 地址的前三个字节由 **IEEE** 统一分配给厂商,称为 OUI。查询 OUI 可以知道网卡的制造商: ```bash $ ip link show link/ether aa:bb:cc:dd:ee:ff brd ff:ff:ff:ff:ff:ff ↑ 前三个字节 aa:bb:cc 就是 OUI # 在线查询:https://www.wireshark.org/tools/oui-lookup.html # Linux 也可以用 ethtool -P eth0 查看出厂 MAC ``` ### 单播/多播位(LSB of First Byte) 第一个字节的最低比特位决定寻址类型: | LSB | 类型 | 示例 | |-----|------|------| | 0 | 单播 (Unicast) | `aa:bb:cc:dd:ee:ff` | | 1 | 多播 (Multicast) | `01:00:5e:xx:xx:xx`(IPv4 组播) | | 1 | 广播 (Broadcast) | `ff:ff:ff:ff:ff:ff` | > [!tip] 如何快速判断?看 MAC 第一个字节的十六进制最后一位 > - `a` → 1010 → LSB=0 → 单播 > - `3` → 0011 → LSB=1 → 多播/广播 ## 关联笔记 - [[hhs/NETWORK/OSI与TCP-IP模型对比]] — 以太网属于链路层 - [[hhs/NETWORK/MAC地址与广播域]] — MAC 地址的工作范围 - [[hhs/NETWORK/Switch与路由器]] — Switch 如何使用 MAC 表转发帧