Appearance
交换机工作原理
2026 大纲 三(八)以太网交换机及其工作原理。冲突域与广播域的定义在以太网篇,VLAN 如何切分广播域在 VLAN 篇。
一、集线器把冲突域越连越大,交换机怎么把它切开
上一节末尾算过一笔账:三个系的以太网用集线器互连,覆盖范围扩大了,总吞吐量却从 30 Mb/s 掉回 10 Mb/s——三个冲突域被合成了一个。
交换机把这笔账反过来做:它给每个端口一个独立的冲突域,把"
它凭什么做得到?因为它比集线器多懂一层:交换机的本质是多端口的网桥,工作在数据链路层,看得懂帧、看得懂 MAC 地址。四个特点:
| 特点 | 含义 |
|---|---|
| 并行性 | 多对端口可以同时通信 |
| 端口有存储器 | 输出端口忙时能把帧缓存下来 |
| 即插即用 | 交换表靠自学习自动建立,不用人工配置 |
| 硬件转发 | 用专用交换结构芯片,不走软件 |
("交换机"本身并无准确定义,与网桥的差别在端口数、硬件转发与并行性,不在原理。它的交换表实际上就是内容可寻址存储器 CAM。)
它全双工、不使用 CSMA/CD——没有共享总线就没有碰撞,"争用期"也没有了。但帧格式(含 64 字节最小帧长)原样保留,这就是它仍叫"以太网"的原因。
| 对比项 | 集线器(Hub) | 交换机(Switch) |
|---|---|---|
| 工作层次 | 物理层 | 数据链路层 |
| 本质 | 多端口转发器(中继器) | 多端口网桥 |
| 转发方式 | 收到信号向所有端口放大转发 | 按 MAC 地址表定向转发 |
| 是否缓存帧 | 不能缓存 | 能缓存 |
| 冲突域 | 所有端口在同一个 | 每个端口一个 |
| 工作方式 | 半双工,跑 CSMA/CD | 全双工,不用 CSMA/CD |
| 带宽 | 所有端口共享 | 每个端口独享 |
| 并行通信 | 不可能(同时只能一对通信) | 可以(多对端口同时连通) |
二、自学习:为什么看源地址
交换表有三列:MAC 地址、端口、写入时间。启动时为空,全靠自学习建立。
收到一帧时做两件事,顺序固定:
- 学习(看源 MAC + 入端口):表中没有该源 MAC → 添加"源 MAC → 入端口";已有但端口不同 → 更新端口(设备换了位置);已有且端口相同 → 刷新写入时间。
- 转发(看目的 MAC):查表,按下面三种行为之一执行。
为什么学的是源地址? 教材把这条推断写得很直白:"既然 A 发送的帧是从端口 1 进入交换机的,那么从端口 1 转发出的帧肯定到达 A。" 帧从端口
一句话:源地址是"证据",目的地址是"问题"——交换机若已经知道目的在哪,就不用学了。
由此还得出一条容易被忽略的推论:只收不发的主机永远学不到。收帧不产生任何表项,一台机器哪怕收过很多泛洪帧,只要没开口过就不在表里。


图源:谢希仁《计算机网络》(第 8 版) 图 3-25(a)(b),p102。表里的 (A,1)、(B,3) 全部来自源地址与入端口,没有一条来自目的地址。
第三列"写入时间"支撑老化(约 300 秒)。 不老化会出两个问题:主机换端口后帧被送进空端口成为黑洞;表容量被长期不通信的主机占满。老化时间太短则泛洪增多、太长则错误表项存活久,是个折中。
三、三种转发行为
| 行为 | 触发条件 | 动作 |
|---|---|---|
| 转发(Forwarding) | 目的 MAC 在表中,且对应端口 ≠ 入端口 | 只从该端口发出 |
| 过滤(Filtering) | 目的 MAC 在表中,且对应端口 = 入端口 | 丢弃该帧 |
| 泛洪(Flooding) | 目的 MAC 不在表中,或目的 MAC 是广播/多播地址 | 从除入端口外的所有端口发出 |
三条各有一个坑:
泛洪不含入端口——"除入端口外的所有端口"。发回去等于把帧还给发送者。
广播帧一定泛洪,与表是否完整无关。目的 MAC 为全 F(以及多播地址)时直接泛洪,这是广播的语义,不是"查表未命中"。
过滤 = 命中且端口相同。查不到是泛洪,只有命中且"目的端口 = 入端口"才过滤——这说明源与目的挂在同一端口下(下面接了集线器或另一台交换机),目的站已经在自己那侧收到了。
⚠️ 教材里有两个"过滤"。 上面这个是交换机决定不转发;教材讲泛洪时说的"C、D 因目的地址不匹配丢弃此帧,这一过程也称为过滤"指的是主机适配器丢弃非本站帧。主体不同。
交互可视化
四、手推交换表:先学习、后转发,一帧一帧走
4 端口交换机,A 在端口 1、C 在端口 2、B 在端口 3、D 在端口 4,交换表初始为空。
| 序 | 事件 | 学习动作 | 查目的 MAC | 转发行为 | 帧发往 | 表结束状态 |
|---|---|---|---|---|---|---|
| 0 | 交换机上电 | — | — | — | — | 空 |
| 1 | A → B | 表中无 A,写入 (A, 1) | B 未命中 | 泛洪 | 端口 2、3、4 | (A,1) |
| 2 | B → A | 表中无 B,写入 (B, 3) | A 命中 → 端口 1,≠ 入端口 3 | 转发 | 端口 1 | (A,1)(B,3) |
| 3 | C → A | 表中无 C,写入 (C, 2) | A 命中 → 端口 1 | 转发 | 端口 1 | (A,1)(B,3)(C,2) |
| 4 | A → B | A 已有且端口相同,刷新时间 | B 命中 → 端口 3 | 转发 | 端口 3 | 同上(时间更新) |
| 5 | A → 广播 | 刷新 A | 目的是全 F | 泛洪 | 端口 2、3、4 | 同上 |
| 6 | D → C | 表中无 D,写入 (D, 4) | C 命中 → 端口 2 | 转发 | 端口 2 | (A,1)(B,3)(C,2)(D,4) |
| 7 | A 移到端口 4,A → D | A 已有但端口不同(1→4),更新为 (A, 4) | D 命中 → 端口 4,= 入端口 4 | 过滤 | 丢弃 | (A,4)(B,3)(C,2)(D,4) |
几处需要单独看的:
- 第 1 帧必然泛洪:表是空的,任何交换机的第一帧都是泛洪,这是自学习的必然代价。
- 第 2 帧就不用泛洪:第 1 帧已经把 (A,1) 学进去了。教材原话:"现在应直接把收到的帧从端口 1 转发给 A,而没有必要再广播收到的帧。"
- 第 4 帧对比第 1 帧:同样是 A→B,第一次泛洪、第二次定向转发——一次泛洪换来此后所有帧的定向转发。
- 第 5 帧:广播帧一定泛洪,即使表已经很完整。
- 第 7 帧同时演示两件事:主机换端口时表项被更新(不是新增一条,也不是保留旧的);以及"目的端口 = 入端口"时触发过滤。
三个典型的手推错误:用目的地址学习、泛洪时把入端口算进去、忘了广播帧无条件泛洪。
老化时间为什么必要:一个黑洞窗口
接上表的状态,把 B 从端口 3 拔下改插到端口 4 下挂的集线器(B 与 D 共享端口 4),随后依次发生 A→B、B→D、A→B。
- 第一次 A→B:查 B 命中 (B, 3)——这是过期的表项 → 转发到端口 3,而 B 已经不在那里 → 帧丢失。交换机毫不知情地把帧送进了一个空端口。
- B→D:B 从端口 4 发出。学习阶段发现源地址已存在但入端口变成 4 → 更新为 (B, 4);转发阶段查 D 命中 (D,4) = 入端口 4 → 过滤丢弃。两件事同时发生但依据不同:更新看"源地址已存在而入端口变了",过滤看"目的端口 = 入端口"。
- 第二次 A→B:查 B 命中 (B, 4) → 转发到端口 4,B 收到。
第一次与第三次内容完全相同却一丢一达,差别只在中间夹了 B 的那一帧——交换机对拓扑变化是"被动"感知的,没有任何主动探测机制,只能等设备自己开口。所以拓扑变动后总有一个"黑洞窗口",长度取决于"设备多久发一次帧"与"老化时间"两者中先到的那个。实际网络里这个窗口通常很短,因为主机会周期性发 ARP、DHCP 续租等帧。
五、直通交换与存储转发
| 方式 | 何时开始转发 | 时延 | 是否检错 | 代价 |
|---|---|---|---|---|
| 存储转发 | 收完整帧、校验 FCS 之后 | 大(至少一个帧的接收时间) | 检,坏帧不转发 | 时延高 |
| 直通 | 收到目的 MAC(前 6 字节)后立即 | 很小 | 不检 | 会把坏帧也转发出去 |
直通交换的转发时延下界是可以算出来的:它要读完目的 MAC 才能决定往哪发,而目的 MAC 是帧的前 6 个字节,所以最小时延就是接收这 6 个字节的时间。100 Mb/s 下是
必须用存储转发的三种情形:线路速率匹配、协议转换、差错检测。速率匹配这条最硬——入端口 1 Gb/s、出端口 100 Mb/s 时不缓存就会溢出,只要两端速率不同就只能存储转发;而交换机一般都具有多种速率的端口,所以存储转发是基本能力,直通只是可选的加速路径,两者不互斥。
六、冗余链路、兜圈子与 STP
为提高可靠性增加冗余链路后,自学习的过程就可能导致以太网帧在环路中无限制地兜圈子:交换表是空的 → #1 泛洪 → 到 #2 仍未命中 → #2 再泛洪 → 绕回 #1 → 又泛洪……
根子不在"链路冗余",在"泛洪 + 环路 + 二层帧没有 TTL"三者叠加。 IP 分组有生存时间字段、三层环路能自动止损;以太网帧首部里没有任何跳数计数器,帧进了环就永远出不来。
两台交换机间有
所以危害不取决于是否指数增长,而取决于"永不消亡"。 广播帧尤其致命,因为广播必然泛洪,这就是广播风暴。还有个副作用:同一个源 MAC 从不同端口反复到达,交换表被反复改写,正常的定向转发也跟着失效。
STP(Spanning Tree Protocol,IEEE 802.1D)的要点是:不改变网络的实际拓扑,但在逻辑上切断某些链路,使从一台主机到所有其他主机的路径成为无环路的树状结构。过程是选举根桥(桥 ID 最小)→ 每台非根交换机选一个到根桥开销最小的根端口 → 每个网段选一个指定端口 → 其余端口置为阻塞状态(不转发数据帧,但仍接收 STP 配置消息)。
物理链路还在,只是被逻辑阻塞;活动链路一旦故障就重新计算、把原先阻塞的端口打开——可靠性收益保住了,环路害处消掉了,代价是备份链路平时闲置。
七、交换机隔离冲突域、不隔离广播域
隔离冲突域靠"缓存 + 定向转发":每个端口一个冲突域,因为它缓存帧、定向转发,信号不会在介质上叠加。不隔离广播域是因为广播帧必须泛洪——二层交换机没有网络层信息,判断不出该不该转发。要隔离广播域用路由器或 VLAN。
数广播域很省事:数路由器(或其他三层设备)的接口。集线器与二层交换机都不隔离广播域,所以路由器每一侧下面挂了多少二层设备都不影响。
数冲突域要先想清楚"哪一段介质上真的可能碰撞":
| 这一段 | 算不算一个冲突域 | 为什么 |
|---|---|---|
| 集线器 + 它下挂的全部主机 + 它到交换机的上联线 | 算 1 个(整片合计) | 共享介质,两台主机同时发就会撞 |
| 交换机端口直接挂一台主机的那条链路 | 算 1 个 | 教材口径:"每一个端口和连接到端口的主机构成了一个碰撞域" |
| 交换机↔交换机、交换机↔路由器的链路 | 通常不计 | 全双工点对点,两端各自独立收发,物理上不可能碰撞 |
第三行是这类题唯一的分歧点,也是判卷口径所在。判据回到定义本身:冲突域是"同一时刻只能有一个站发送"的那片范围,而全双工链路上两端可以同时发、永远不会撞,自然不构成冲突域。所以拓扑里全是交换机与全双工链路时,"有几个冲突域"实际问的是"有几片共享介质"。
本节小结
- 交换机是多端口网桥,靠并行性、端口缓存、即插即用的自学习与硬件转发,把"
人分 "变成" 人各有 ";它全双工、不使用 CSMA/CD,但保留了以太网帧结构(含 64 字节最小帧长)。 - 自学习看源 MAC + 入端口,只收不发的主机永远学不到;三种转发行为按"命中且端口不同 / 命中且端口相同 / 未命中或广播"分别是转发 / 过滤 / 泛洪。交换表的第三列写入时间支撑老化,不老化则换端口后的帧会被送进空端口。
- 冗余链路 + 泛洪 + 帧无 TTL 三者叠加产生广播风暴,危害的根源是"帧永不消亡"而非是否指数增长;STP 不改变物理拓扑,只在逻辑上阻塞端口,把网络裁成无环生成树,故障时重新计算并启用备份链路。
考点速记
本节的真题密度仅次于 CSMA/CD,在真题里被考过的形式按问法分四类:
① 手推转发端口(cn-2014-34)。给一张三主机拓扑与一份只有一条表项的转发表,问两个帧各从哪些端口转发出去。按第四部分那张表的顺序走,先学习、后转发,一帧一帧来:
- a1 → c1:学习写入 (a1, 1);查 c1 —— 表里只有 b1,未命中 → 泛洪,发往除入端口 1 外的 {2, 3}。
- c1 → a1:学习写入 (c1, 3);查 a1 —— 上一帧刚学到 (a1, 1),命中且 ≠ 入端口 3 → 转发,只发 {1}。
第一帧泛洪、第二帧就能定向转发,这一对正是"自学习"的完整演示。干扰项 {3} 是把泛洪当成了定向转发,{1,2,3} 是泛洪时把入端口也算了进去。
② 数冲突域与广播域(cn-2020-35)。拓扑是"路由器两个接口各接一台交换机,每台交换机各接两台集线器,每台集线器下挂两台服务器"。
- 广播域 = 路由器接口数 = 2。
- 冲突域 = 4:四台集线器各带出一片共享介质(集线器 + 它下面的主机 + 它到交换机的上联线),而交换机与交换机、交换机与路由器之间的全双工链路不构成冲突域——那上面不可能发生碰撞。
这道题是第七部分那条判据的直接应用:数冲突域就是数"有几片共享介质",不是机械地数端口。
③ 谁能物理层收到某个帧(cn-2016-35)。拓扑是"交换机下挂 H1、H2 与一台集线器,集线器下挂 H3、H4",H2 发数据帧给 H4、H4 立即回确认帧,问除 H4 外还有谁能在物理层收到这个确认帧。
顺着帧走一遍:H4 → 集线器 → 交换机 → H2。集线器向除入端口外的所有端口放大转发,所以 H3 收得到;交换机查表,H2 刚发过帧、表里已有它的表项,定向转发只发给 H2,所以 H1 收不到。答 H2 与 H3。
这道题把"集线器泛洪、交换机定向"的差别问到了物理层这一级——H3 在链路层会因目的 MAC 不匹配丢弃它,但物理层确实收到了。
④ 概念判断(cn-2009-36、cn-2013-38、cn-2015-37)。三道各卡一个点:
- 交换机按哪个地址做转发决策(cn-2009-36):目的物理地址。源地址是用来学习的、不是用来转发的,这两个用途别混。
- 直通交换的最小转发时延(cn-2013-38):直通只需读完目的 MAC(前 6 字节) 就能决定出端口,100 Mb/s 下
。选项里的 s 是最小帧 64 B 的接收时间(那是存储转发的下界), s 是最大帧 1518 B 的。 - 关于交换机的正确叙述(cn-2015-37):以太网交换机本质上是一种多端口网桥。另外三项分别错在——通过交换机互连的工作站不是一个冲突域(每端口一个)、交换机每个端口不是独立的广播域(它不隔离广播域)、它不能实现不同网络层协议的网络互连(那是路由器的活)。
易错:自学习看源 MAC + 入端口,转发看目的 MAC。 用目的地址去学习是手推交换表的头号错误。
易错:泛洪不含入端口。 "除入端口外的所有端口",把入端口算进去会多出一个。
易错:广播帧无条件泛洪,与交换表是否完整无关。
易错:只收不发的主机永远学不到。 它哪怕收过很多泛洪帧,只要没发过帧就不在表里——这正是第二个帧仍要泛洪的原因。
易错:数冲突域是数"有几片共享介质",全双工点对点链路不算。 交换机之间、交换机与路由器之间的链路上不可能碰撞。
易错:直通交换的下界是读完 6 字节目的 MAC 的时间,不是读完最小帧的时间。 后者是存储转发的下界。
易错:交换机隔离冲突域但不隔离广播域。 要在二层切广播域只能用 VLAN。
教材出处
- 谢希仁《计算机网络》(第 8 版)印刷 p101,3.4.2 在数据链路层扩展以太网:网桥到交换机的演进——"网桥对收到的帧根据其 MAC 帧的目的地址进行转发和过滤";"以太网交换机实质上就是一个多端口的网桥";四个特点(并行性、端口存储器缓存、即插即用的自学习、专用交换结构芯片硬件转发);"每一个端口和连接到端口的主机构成了一个碰撞域,具有
个端口的以太网交换机的碰撞域共有 个";总容量的账——"对于拥有 10 个端口的交换机的总容量则为 100 Mb/s";以及交换表"实际上这种交换表就是一个内容可寻址存储器 CAM"。同页还引 Perlman 的评价:"'交换机'应当是一个市场名词"。 - 同书印刷 p102:直通交换与存储转发的对比——"直通交换不必把整个数据帧先缓存后再进行处理,而是在接收数据帧的同时就立即按数据帧的目的 MAC 地址决定该帧的转发端口";"直通交换的一个缺点是它不检查差错就直接将帧转发出去";"在某些情况下,仍需要采用基于软件的存储转发方式进行交换,例如当需要进行线路速率匹配、协议转换或差错检测时"。同页给出自学习的完整例子(图 3-25):A 从端口 1 发帧给 B,交换机"把此帧的源地址 A 和端口 1 写入交换表中,并向除端口 1 以外的所有端口广播这个帧(从端口 1 收到的帧显然不应再从端口 1 转发出去)",以及那条关键推断——"既然 A 发送的帧是从端口 1 进入交换机的,那么从端口 1 转发出的帧肯定到达 A"。
- 同书印刷 p103:老化机制——"当交换表中写入一个项目时就记下当时的时间,只要超过预先设定的时间(例如 300 秒),该项目就自动被删除……图 3-25 中的交换表实际上是有三列,即 MAC 地址、端口和写入时间";冗余链路导致帧"在网络的某个环路中无限制地兜圈子"的完整推演(图 3-26);以及 STP 的定义——"其要点就是不改变网络的实际拓扑,但在逻辑上则切断某些链路,使得从一台主机到所有其他主机的路径是无环路的树状结构,从而消除了兜圈子现象"。
- 同书印刷 p104:交换机不使用 CSMA/CD——"以太网交换机不使用共享总线,没有碰撞问题,因此不使用 CSMA/CD 协议,而是以全双工方式工作。既然连以太网的重要协议 CSMA/CD 都不使用了(相关的'争用期'也没有了),为什么还叫作以太网呢?原因就是它的帧结构未改变,仍然采用以太网的帧结构。"
相关知识
以太网与 MAC 地址|VLAN 虚拟局域网|CSMA/CD 协议|路由器的组成与功能