计算机网络学习站

kp-009 · 02-物理层与数据链路层

以太网与交换机:帧、自学习、VLAN 与 STP

核心 约 30 分钟 以太网交换机VLAN生成树协议
我的进度:

注:本文基于模型知识整理,建议结合权威教材与 RFC 原文核对细节。

一句话定义

以太网(Ethernet)是有线局域网的事实标准:IEEE 802.3 帧格式定义链路上数据的模样,交换机靠自学习把帧精确送到目的端口,VLAN(IEEE 802.1Q)在二层切分广播域,生成树协议 STP(IEEE 802.1D)防止交换机环路引发广播风暴。

为什么重要

办公室、家庭、数据中心的有线接入几乎都跑在以太网家族上:读懂以太网帧是看懂抓包的前提,交换机自学习是「零配置就能工作」的分布式算法典范,VLAN 与 STP 是网络实务和面试的高频考点,更是理解「二层管链路、三层管路由」分工的绝佳切口。

前置知识

建议先读 kp-008《介质访问控制与 CSMA/CD》,需要冲突域、争用期与最小帧长的结论;帧结构与检错见 kp-007《组帧与差错检测:奇偶校验、CRC 与海明码》。

核心概念

  • 简史一句话:1973 年 Metcalfe 在施乐 PARC 提出以太网雏形,DEC、Intel、Xerox 三家公司(DIX)将其推向标准化,后由 IEEE 802.3 接管并延续至今。
  • 帧格式逐字段:前导码(preamble,7 字节交替的 1/0)与帧定界符 SFD(10101011)用于接收同步,通常不计入帧长;目的 MAC、源 MAC 各 6 字节;类型字段 EtherType(2 字节,标识上层协议,如 IPv4 为 0x0800);数据 46 至 1500 字节,不足 46 字节则填充;帧检验序列 FCS(4 字节,CRC-32)。
  • 最小帧长 64 字节指从目的 MAC 到 FCS,与 kp-008 的「发送时间 ≥ 2τ」直接挂钩。
  • 为什么帧格式没有长度字段:经典 10 Mb/s 以太网采用曼彻斯特编码,码元中点必有电平跳变,接收方持续保持同步;帧发送结束后载波消失,即自然给出帧尾,帧长可由其余信息推断,故 V2 帧只保留类型字段。
  • MAC 地址:48 位,前 3 字节为 OUI(Organizationally Unique Identifier,厂商标识),后 3 字节由厂商自行分配;全局唯一但结构完全平面。MAC 与 IP 的本质区别:MAC 平面且唯一,如同身份证号(定了就不随住址变);IP 层次化且随拓扑分配,如同邮政地址(随搬家而变、可按前缀聚合路由)。跨路由器时帧的源/目的 MAC 逐跳被重写,IP 地址保持端到端不变(忽略 NAT)。
  • 交换机(switch):多端口网桥,各端口可并发转发。自学习(self-learning)算法:收到帧先把「源 MAC → 入端口」写入 MAC 表;再查目的 MAC,命中则从对应端口单发,未命中或目的为广播地址则泛洪(flooding)到其余所有端口;表项带老化时间(量级为分钟)并随新帧刷新。
  • 冲突域 vs 广播域:集线器(hub)只是共享信道的物理层设备,不分隔冲突域;交换机每个端口一个冲突域,但广播帧仍泛洪全网,不分隔广播域;路由器才同时分隔冲突域与广播域。
  • VLAN(IEEE 802.1Q):在源 MAC 之后、类型字段之前插入 4 字节标签(含协议标识 TPID 0x8100、3 位优先级、12 位 VLAN ID)。Access 口面向主机,出入帧不带标签且只属于一个 VLAN;Trunk 口面向交换机互联,一条链路承载多个 VLAN,靠标签区分。
  • STP(Spanning Tree Protocol, IEEE 802.1D):二层帧没有类似 IP TTL 的字段,一旦存在交换机环路,广播帧将被无限复制转发,迅速演变成广播风暴;STP 通过根桥选举与路径代价比较,逻辑阻塞冗余端口,把物理有环的拓扑修剪成一棵无环树,链路故障时自动重新收敛;代价是收敛慢(量级数十秒)与冗余链路闲置。

图示

以太网 V2 帧格式(不含前导码与 SFD)
+------------+----------+-------------+--------------------+-----+
| 目的 MAC 6B | 源 MAC 6B | 类型 2B     | 数据 46 至 1500 B   | FCS |
|            |          | EtherType   | (不足则填充)       | 4B  |
+------------+----------+-------------+--------------------+-----+
最小帧 64 B = 6 + 6 + 2 + 46 + 4

插入 802.1Q 标签后:
| 目的 MAC 6B | 源 MAC 6B | 802.1Q 标签 4B | 类型 2B | 数据 | FCS 4B |
                              ↑ TPID 0x8100 + 优先级 + 12 位 VLAN ID
交换机自学习与转发(初始 MAC 表为空)

A(端口1) ──发帧给 C──→ [交换机]
  第 1 步 学习:源 MAC = A,入端口 = 1 → 表记 A→1
  第 2 步 查表:目的 C 未命中 → 泛洪到端口 2、3、4
C(端口3) ──回帧给 A──→ [交换机]
  第 1 步 学习:C→3
  第 2 步 查表:A→1 命中 → 只从端口 1 发出,不再打扰他人

原理与机制

自学习是纯粹被动的分布式算法:交换机不依赖任何配置或协议报文,仅凭「帧从哪个端口进来、源是谁」这一事实建表;交换机级联等拓扑也自然被同一机制覆盖。泛洪是有意保留的兜底:目的未知时与其丢帧不如广播出去让目标自己应答,下一帧就能学到路径。但泛洪遇上环路就变成灾难——广播帧沿环每绕一圈就被复制一次且永不消亡,STP 用「物理有环、逻辑无环」的思路化解:让部分端口处于阻塞状态、只保监听,既保住冗余能力,又切断风暴传播路径。VLAN 则从另一个维度治理泛洪:把广播域人为划小,广播帧只在同一 VLAN 内传播,既省带宽又缩小故障影响面;跨 VLAN 通信必须经过三层设备,隔离与互通的控制权因此交还给路由器。

实例分析

场景一:跨交换机的同 VLAN 通信。PC-A 属 VLAN 10,接在交换机 X 的 Access 口;X 与 Y 之间的 Trunk 链路同时承载 VLAN 10 与 VLAN 20。PC-A 发给同 VLAN 的 PC-B(接 Y 的 Access 口):X 收到无标签帧,判定属于 VLAN 10,从 Trunk 口发出时打上 VLAN 10 标签;Y 收到带标签帧,剥掉标签后从对应 Access 口发给 PC-B。VLAN 20 的帧在同一条链路上并行传输,互不可见。

场景二:三台交换机两两互联成三角形(物理环路)。无 STP 时,任一主机发出的广播帧(例如 ARP 请求)会沿两条路径无限循环复制,很快耗尽所有链路带宽——广播风暴;启用 STP 后,交换机选举出根桥,各自计算到根的最短路径,把三角形一条边上的端口置为阻塞,广播帧只沿树传播一次;某条活动链路故障时,阻塞端口自动切换为转发,冗余的价值得以兑现。现代数据中心则常改用路由化架构(三层下沉到接入层)或 TRILL、SPB 等协议来同时获得无环与高链路利用率。

常见误区

  • 认为 MAC 地址端到端不变:MAC 是逐链路概念,每经过一个路由器,帧的源/目的 MAC 都会被重写;端到端不变的是 IP 地址(NAT 场景除外)。
  • 认为交换机分隔广播域:它只分隔冲突域;分隔广播域要靠 VLAN 配合三层设备或路由器。
  • 把 VLAN 当成安全隔离的充分手段:VLAN 隔离的是二层广播,不同 VLAN 之间只要有三层路由即可互通,访问控制须另配策略。
  • 认为交换机要「学习」目的 MAC:学习的永远是源 MAC,目的 MAC 只用于查表。
  • 把前导码计入帧长,或把 FCS 排除在 64 字节之外:64 字节从目的 MAC 起算、到 FCS 结束。
  • 认为 STP 是唯一解:经典 STP 收敛慢且闲置冗余链路,现代网络已有 MSTP、TRILL、SPB、路由化架构等多种替代。

自测题

  1. 以太网帧数据字段最小 46 字节是怎么来的?

答案要点: 由最小帧长 64 字节减去目的/源 MAC、类型与 FCS 共 18 字节得出,目的是保证发送时间不小于争用期 2τ。

  1. 交换机收到目的 MAC 未知、目的 MAC 为广播地址的帧分别怎么处理?

答案要点: 都会泛洪:未知单播从除入端口外的所有端口发出,广播帧同样泛洪,只有命中单播表项才定向转发。

  1. 交换机与路由器对冲突域、广播域的隔离能力有何区别?

答案要点: 交换机每端口隔离冲突域、不隔离广播域;路由器两层都隔离。

  1. 802.1Q 标签插在帧的什么位置?Trunk 口与 Access 口的差异是什么?

答案要点: 插在源 MAC 之后、类型字段之前,共 4 字节;Access 口面向主机、出入不带标签且只属一个 VLAN,Trunk 口面向交换机互联、用标签区分多个 VLAN。

  1. 为什么二层环路中的广播帧不会自然消亡?STP 如何解决?

答案要点: 以太网帧没有 TTL 类字段,环路中广播帧被无限复制;STP 通过根桥选举与阻塞冗余端口,把物理环路剪成逻辑无环树,广播只沿树传播一次。

延伸阅读

  • IEEE 802.3(以太网)
  • IEEE 802.1Q(虚拟局域网)
  • IEEE 802.1D(生成树协议)
  • 谢希仁《计算机网络》,数据链路层以太网章节