← 网络基础学习第 39 / 55 章进阶30 分钟

模块五 · 链路层和局域网

环路与 STP

上一章讲到二层帧没有 TTL,连成环就会广播风暴。可现实中又需要冗余链路(一根线断了还能通)—— 要冗余就必然成环。这个矛盾怎么解?靠生成树协议(STP)。

本章要解决的问题:上一章讲到二层帧没有 TTL,连成环就会广播风暴。可现实中又需要冗余链路(一根线断了还能通)—— 要冗余就必然成环。这个矛盾怎么解?靠生成树协议(STP)。

本章的证据来源:⚠️ 本章没有历史实测记录。 本机只有一台家用路由器,没有可管理的交换机组,无法构造或观察二层环路。本章内容标注为标准/原理(IEEE 802.1D / 802.1w),并在文中标明哪些是推断。

先从一个例子理解概念

为了网线断一根仍能通,你可能接两条备用线路;但多出来的线路也可能让帧绕圈。生成树是在保留备用线路时防止二层循环的一种办法。

多留一条路:冗余与环路

备用线路叫冗余;线路连成可反复绕行的圈叫环路。冗余是目标,环路是需要处理的风险,二者不能简单等同。

重复转发挤满网络:广播风暴

广播在环中循环并泛洪,可产生大量重复帧并占用资源,叫广播风暴。这是网络负载异常,不是天气现象。

选出无环的工作路径:STP

STP(生成树协议)让交换设备选一组无环的转发路径,其余冗余端口暂不转发普通数据。改选路径后恢复稳定,叫收敛。

交换机之间商量:BPDU

交换机用BPDU(桥协议数据单元)交换生成树信息。根桥是选定的树根设备,根端口是非根设备朝向根桥的一个选定端口;它们是角色名。

下面再用这些概念看原理、命令和结果。规范与官方资料列在本章末尾,类比只帮助理解,不代替协议规则。

先把"为什么会瘫痪"说清楚

《以太网帧》那一章讲过帧的格式:目的 MAC、源 MAC、类型、数据、FCS。这里面没有任何"跳数"字段。

对比一下三层:

有没有防环机制后果
IP(三层)有 TTL,每过一台路由器减 1,减到 0 就丢弃环路导致丢包,但不会无限循环
以太网(二层)没有环路导致帧可反复转发,泛洪可造成大量副本,直到拓扑改变、过滤或资源限制使其停止

于是就有了这个场景:

两台交换机之间不小心插了两根网线(或者三台交换机连成一个三角):

    A ────── B
    │        │
    └─── C ──┘

某个设备发一个广播帧:
  A 收到 → 从两个口都发出去 → B 和 C 各收到一份
  B 收到 → 也转发给 C 和 A → ...
  每转发一次,副本数量翻倍

几秒钟之内,这一个广播帧就会产生几十万个副本,把交换机的 CPU、内存和链路带宽全部占满。整个局域网瘫痪。这叫广播风暴。

环路带来的三个问题

问题表现
广播风暴帧的在有分支的泛洪拓扑中副本可能快速增长;具体增长依赖拓扑,带宽和 CPU 被打满
MAC 地址表震荡同一个 MAC 从两个不同的口都被学到,交换机反复改写表项,转发混乱
重复帧目标设备收到多个相同的帧副本

但冗余又是必需的

如果为了防环就禁止冗余链路,会掉进另一个坑:

服务器 ──── 交换机

这一根线断了,整台服务器就下线了。企业网络无法接受单点故障。

所以需求是矛盾的:要冗余(成环),又不能真的成环。

STP 的答案很巧妙:物理上保留所有链路,逻辑上把环剪断。

STP 怎么工作:三步选举

STP(Spanning Tree Protocol,生成树协议)的目标是:在所有交换机之间算出一棵没有环的树,把多余的口逻辑上封掉(但物理上仍然连着)。

第一步:选出一个"根桥"

所有交换机互相比较一个叫桥 ID 的值(= 优先级 + MAC 地址),最小的当根桥(Root Bridge)。

桥 ID 的比较顺序:先比优先级(默认 32768),优先级相同再比 MAC 地址

根桥是这棵树的"树根"。可以把它理解成"全网的逻辑中心"。

第二步:每台非根桥选出自己的"根端口"

每台非根交换机,从自己的所有端口中选出一个"到根桥开销最小"的口,叫根端口(Root Port)。

开销(Cost)和链路速率有关:链路越快,开销越小。

第三步:每条链路选出一个"指定端口"

每条链路上,比较两端的"到根桥的开销",开销小的那台交换机的那个口成为指定端口(Designated Port),负责这条链路的转发。

最后:剩下的口被阻塞

经过上面三步,每个网段都有一个明确负责转发的端口,未被选为根端口或指定端口、且存在冗余转发风险的端口进入阻塞;不能把非根桥自己的根端口也说成阻塞。

结果:物理上是带环的拓扑
      逻辑上变成了一棵树 —— 没有环,也就没有广播风暴

关键点:被阻塞的端口并没有被关闭,它只是不转发数据帧,但仍然在接收 BPDU 报文。 一旦主链路断了,它可以在几秒到几十秒内被激活,接替工作 —— 这就是冗余的目的达到了。

端口状态与收敛时间

经典 STP 的端口要经过几个状态才能开始转发:

状态行为持续时间
Blocking不转发数据,只收 BPDU—
Listening开始参与选举,仍不转发约 15 秒
Learning学习 MAC 地址,仍不转发约 15 秒
Forwarding正常转发数据—

所以经典 STP 的收敛时间大约 30~50 秒。 相关受影响路径可能中断,并非全部网络必然断开;实际时间还取决于拓扑、计时器和快速/边缘端口机制。

BPDU 是什么? 交换机之间每 2 秒交换一次的报文,用来交换桥 ID、开销等信息,完成选举和故障检测。可以理解成"交换机之间的心跳"。

本机为什么观察不到

诚实地说明:

本机没有可管理的交换机组。 家里只有一台路由器(内置交换模块 + 无线接入点),所有设备呈星型连接,物理上不构成环:

      ┌── 本机
路由器 ┼── 邻居 A
      └── 邻居 B

星型拓扑天然无环,STP 在这里无事可做。

会不会有隐形环路? 理论上如果用户自己把两根网线插回同一台路由器的两个 LAN 口,就构成环了。但家用设备是否支持并启用STP需查型号和配置,不能假定会自动保护这种接线。不要在业务网络中制造环路。本机环境里没有观察到任何异常(网络工作正常,没有广播风暴的迹象)。

要真正观察 STP,你需要:

  • 两台以上支持 STP 的可管理交换机
  • 或者用 GNS3 / EVE-NG 之类的网络模拟器(可以在软件里跑真实的交换机镜像)
  • 观察手段是交换机的 show spanning-tree 命令,或抓 BPDU 报文

本教程不编造这部分数据。 你在实际工作中接触到可管理交换机时,show spanning-tree 的第一行就会告诉你"谁是根桥"。

常见误解

误解一:"STP 是为了防止数据包绕圈"

它主要防的是广播风暴。单播帧在成环的拓扑里虽然也会绕圈,但因为有转发表(而且会被泛洪反复刷新),破坏力远不如广播帧 —— 广播帧持续转发和泛洪可产生大量副本,增长取决于拓扑,这是指数增长。

误解二:"为了更快,多插几根网线就行"

可能形成环路或被防环机制阻塞。 在同一对交换机之间插两根网线,如果没有配置链路聚合(把多根线绑成一条逻辑链路),STP 会把其中一根阻塞掉 —— 你并没有获得额外带宽,只是得到了一条备用链路。想要叠加带宽必须配置链路聚合(LACP)。

误解三:"STP 是路由器的功能"

是交换机的功能,工作在二层。纯三层接口不运行二层STP;路由器若包含桥接/交换模块,该模块仍可能需要防环。三层也可发生路由环路,TTL只限制单个包循环,不保证业务正常。

误解四:"STP 阻塞的端口等于关掉了"

不是。被阻塞的端口仍然可接收和处理BPDU,随时准备在拓扑变化时接管。这是"冗余能用"的关键 —— 如果真关掉了,就没法自动切换了。

本章小结

结论类型
二层帧没有 TTL,成环会导致广播风暴标准
环路的三个问题:广播风暴、MAC 表震荡、重复帧标准
STP 的目标是物理保留冗余、逻辑剪断环路标准
三步选举:选根桥 → 选根端口 → 选指定端口,其余阻塞标准
被阻塞的端口不转发数据,但仍接收 BPDU,可随时接管标准
经典 STP 收敛约 30~50 秒,RSTP 降到秒级标准
BPDU 每 2 秒交换一次,用于选举与故障检测标准
本机为星型拓扑、无可管理交换机组,无法实测 STP实测(环境限制)
未观察到本机存在广播风暴迹象实测

自测题

6 题 · 先自己答,再展开对照

  1. 为什么二层网络连成环会瘫痪,而三层网络不会?根本区别是什么字段?
    基本以太网帧没有TTL,循环和泛洪可形成风暴;IP的TTL限制单个包的转发次数,但三层环路仍可造成大量丢包、占用带宽和业务中断。
  2. 既然环路有害,为什么还要保留冗余链路?STP 是怎么同时满足这两个要求的?
    因为单点故障不可接受 —— 一根线断了业务就中断。STP 的做法是物理上保留所有链路,逻辑上把多余的端口阻塞掉:这样平时没有环(不会广播风暴),一旦主链路故障,被阻塞的端口能在几十秒内激活接管,冗余的目的就达到了。用"逻辑上剪断"换来了"物理上冗余"。
  3. STP 选出根桥之后,其余端口为什么是"阻塞"而不是"关闭"?
    因为要保留它作为备用。 被阻塞的端口仍然在接收 BPDU 报文,持续监听拓扑变化。如果把它彻底关闭,主链路故障时就没法自动切换了,冗余就失去了意义。"阻塞但不关闭"正是 STP 能提供冗余的关键。
  4. 你在两台交换机之间插了两根网线,希望带宽翻倍。实际会发生什么?
    带宽不会翻倍。 如果没有配置链路聚合(LACP),STP 会把其中一根标记为冗余并阻塞掉 —— 你得到的是"一条工作链路 + 一条备用链路",而不是双倍带宽。想要叠加带宽必须把两根线绑定成一条逻辑链路(链路聚合),这样从上层看就是一条更快的链路。
  5. 经典 STP 的收敛时间大概多久?为什么现代网络很少用它?
    大约 30~50 秒(Blocking → Listening 15 秒 → Learning 15 秒 → Forwarding)。这个时间在现代网络里太长了 —— 拔一根线要等半分钟才能恢复,业务上无法接受。所以现在实际部署的基本是 RSTP(IEEE 802.1w)或 MSTP,通过预先协商备用端口的角色,把收敛时间压到秒级。
  6. 家用路由器需要 STP 吗?
    若家用设备存在二层环路风险,需要防环设计或对应机制;是否支持并启用STP由设备决定,不能保证两个LAN口互接会自动被阻塞。

参考资料与适用范围

修订核对日期:2026-10-13。规则按所列协议与实现范围理解;文中的原始命令输出是历史观察,不表示本次重新实测。跨版本、代理/隧道及不同捕获位置需要另行核对。

正文源自 m5-06-环路与STP.md · 共 10 节 · 6 道自测题