0. 课件来源
STP / RSTP / MSTP 解决了二层环路问题,但实际网络中还存在 人为误接、私接交换机、单向链路失效、恶意攻击 等场景,仅靠选路无法覆盖。本节讲解华为设备提供的 5 种 STP 防护机制:BPDU 保护、BPDU 过滤、根保护、环路保护、TC 保护。
1. 为什么需要 STP 防护
| 风险场景 | 后果 | 对应防护机制 |
|---|---|---|
| 用户私接交换机,EP 收到 BPDU | 网络拓扑被篡改、终端接口变成阻塞 | BPDU 保护 |
| 互联端口被误配为 EP | 接口不收不发 BPDU,脱离生成树 | BPDU 过滤 |
| 外部接入更优交换机抢占根 | 根桥被抢占,整网拓扑重算 | 根保护 |
| 光纤单向链路失效 | 一端收不到 BPDU,误以为链路可用导致环路 | 环路保护 |
| 大量 TC BPDU 攻击 | 全网 MAC 表频繁刷新,CPU 飙升 | TC 保护 |
2. BPDU 保护(bpdu-protection)
2.1 适用场景
边缘端口(EP)直连终端,正常情况下 不应收到任何 BPDU。若用户在终端接口私接了一台交换机,EP 会收到 BPDU 并失去 EP 属性,变为普通 STP 端口参与选举——这可能导致拓扑被篡改甚至环路。
BPDU 保护 的作用:EP 端口一旦收到 BPDU,立即将其 shutdown(Error-Down),阻止私接交换机影响生成树。
2.2 配置
# 全局开启 BPDU 保护(对设备上所有 EP 端口生效)
stp bpdu-protection⚠️ 只能全局配置
stp bpdu-protection 是 全局命令,没有接口级配置。开启后所有 EP 端口都被保护;若只想保护部分端口,则不要把不需要保护的端口配成 EP。
2.3 自动恢复
EP 被BPDU 保护 shutdown 后,默认需要 手工 undo shutdown 恢复。可配置自动恢复:
# 30 秒后自动恢复(cause 必须指定为 bpdu-protection)
error-down auto-recovery cause bpdu-protection interval 30| 恢复方式 | 命令 | 说明 |
|---|---|---|
| 手工恢复 | 进接口 undo shutdown | 默认行为 |
| 自动恢复 | error-down auto-recovery cause bpdu-protection interval 30 | 全局配置,30 秒后自动恢复 |
3. BPDU 过滤(bpdu-filter)
3.1 作用
BPDU 过滤让端口 不收也不发 BPDU,彻底脱离生成树计算。与 BPDU 保护不同,过滤不会 Error-Down,端口仍正常转发数据。
| 机制 | 收到 BPDU 的反应 | 端口状态 | 发不发现BPDU |
|---|---|---|---|
| BPDU 保护 | 立即 shutdown | Error-Down | 收 |
| BPDU 过滤 | 丢弃,不处理 | 正常转发 | 不收不发 |
3.2 配置方式
# 方式 1:接口级(只对该接口生效)
interface g0/0/1
stp bpdu-filter enable
# 方式 2:全局默认(对所有 EP 端口默认开启过滤)
stp bpdu-filter default🚫 BPDU 过滤不能配置在互联端口
若在交换机之间的 互联端口 配置 bpdu-filter,两端都不发 BPDU,该链路将 彻底脱离生成树,STP 无法在该链路上阻断环路,可能导致广播风暴。
stp bpdu-filter enable:仅用于明确不需要参与 STP 的终端接口stp bpdu-filter default:全局让所有 EP 默认过滤,慎用
4. 根保护(root-protection)
4.1 适用场景
根桥是生成树的根基。若网络中接入了一台 优先级更高(BID 更小) 的交换机(如管理员误配、私自接入),它会抢占根桥角色,导致整网拓扑重算,业务中断。
根保护 配置在 指定端口(DP) 上,作用是:即使收到更优的 BPDU,也 不允许本端口 surrender(让出)DP 角色,强制保持 DP 并置为 Discarding,保护现有根不被抢占。
4.2 工作流程
1. DP 端口配置了 root-protection
2. 收到对端发来的更优 BPDU(BID 更小)
3. 本端口不做角色切换,强制保持 DP,状态置为 Discarding(不转发数据)
4. 持续监测:若 30 秒(2*Forward-Delay)内不再收到更优 BPDU
→ 恢复正常 DP Forwarding
5. 这 30 秒类似 "试错期":如果对方只是临时接入又拔走,无需人工干预即可恢复💡 根保护 vs BPDU 保护
- BPDU 保护:针对 EP 端口(终端方向),收到 BPDU 直接 shutdown
- 根保护:针对 DP 端口(互联方向),收到更优 BPDU 不 shutdown,而是强制保持 DP Discarding
4.3 配置
interface g0/0/1
stp root-protection # 在 DP 上配置5. 环路保护(loop-protection)
5.1 适用场景
光纤链路存在 单向链路失效 风险:一端能收到光信号,另一端收不到。此时收不到光信号的一端 收不到对端的 BPDU,误以为对端/上游故障,自己应该接管转发,结果两端都在转发 → 环路。
环路保护 配置在 非 DP 端口(RP / AP / BP),作用是:若这些端口 收不到最优 BPDU 超过一定时间,不切换为 Forwarding,而是 置为 Discarding 并阻塞,防止单向链路失效导致的环路。
5.2 工作行为
| 端口角色 | 配置 loop-protection 后,收不到最优 BPDU 的反应 |
|---|---|
| RP | 不切换为 Forwarding,置 Discarding(丢弃数据) |
| AP | 不切换为 Forwarding,保持 Discarding |
| BP | 不切换为 Forwarding,保持 Discarding |
⚠️ 环路保护 vs 根保护配置位置
- 环路保护:配置在 非 DP(RP/AP/BP),防单向链路失效
- 根保护:配置在 DP,防更优 BPDU 抢占根
二者配合可在所有关键端口形成完整防护。
5.3 配置
interface g0/0/1
stp loop-protection # 配置在非 DP 端口6. TC 保护(tc-protection)
6.1 适用场景
拓扑变更(TC)发生时,交换机会 刷新 MAC 地址表重新学习。若网络上短时间内涌入大量 TC BPDU(攻击或故障抖动),每次都刷新 MAC 表会导致:
- MAC 表频繁清空 → 大量未知单播泛洪
- CPU 飙升 → 设备性能下降甚至瘫痪
TC 保护 的作用:限流(速率限制),在指定时间窗口内只处理限定次数的 TC BPDU,超出部分统一处理一次。
6.2 工作原理
默认参数:
interval = 10 秒(时间窗口)
threshold = 3 次(阈值)
工作流程:
1. 收到 TC BPDU,每收到一次就处理一次(刷新 MAC 表)
2. 同时启动 10 秒计时窗口
3. 若 10 秒内处理次数 < 3 次 → 正常逐次处理
4. 若 10 秒内处理次数 ≥ 3 次 → 超出阈值
→ 仅在窗口结束时统一处理一次,不再每次都刷表
5. 10 秒窗口结束后,计数清零,开始新一轮统计6.3 配置
# 全局配置(对所有端口生效)
stp tc-protection interval 10 threshold 3| 参数 | 默认值 | 含义 |
|---|---|---|
interval | 10 秒 | 统计时间窗口 |
threshold | 3 次 | 窗口内允许逐次处理的最大次数 |
💡 TC 保护不是"丢弃"TC
TC 保护 不丢弃 超出阈值的 TC BPDU,而是 合并处理。窗口内超过 3 次后,只在窗口结束时处理一次。这样既防止 MAC 表频繁刷新,又不遗漏真实拓扑变更信息。
7. 五种防护机制全景对比
| 防护机制 | 配置位置 | 防护目标 | 触发条件 | 动作 | 恢复方式 |
|---|---|---|---|---|---|
| BPDU 保护 | 全局,作用于所有 EP | 防止 EP 私接交换机 | EP 收到 BPDU | 端口 Error-Down(shutdown) | 手工 undo shutdown 或自动恢复 30s |
| BPDU 过滤 | 接口/全局 | 端口彻底脱离 STP | 主动配置 | 不收不发 BPDU | 需 undo 配置 |
| 根保护 | DP 端口 | 防止更优交换机抢占根 | DP 收到更优 BPDU | 强制保持 DP,置 Discarding | 30s 内无更优 BPDU 自动恢复 |
| 环路保护 | 非 DP 端口 | 防单向链路失效环路 | 收不到最优 BPDU | 置 Discarding 阻塞 | 收到最优 BPDU 后恢复 |
| TC 保护 | 全局 | 防大量 TC 攻击抖动 | 10s 内 TC BPDU ≥ 3 次 | 超出阈值统一处理一次 | 自动(窗口结束清零) |
8. 综合配置示例
# ── 全局配置 ──
stp mode rstp # 使用 RSTP 模式
stp bpdu-protection # 全局 BPDU 保护(保护所有 EP)
error-down auto-recovery cause bpdu-protection interval 30 # 自动恢复
stp tc-protection interval 10 threshold 3 # TC 保护
# ── 终端接口(应配 EP + 全局 BPDU 保护已覆盖)──
interface g0/0/1
stp edged-port enable # 标记为边缘端口
# ── 互联接口(DP 方向配根保护,非 DP 方向配环路保护)──
interface g0/0/24 # 假设此端口为 DP
stp root-protection # 根保护
interface g0/0/23 # 假设此端口为 RP/AP
stp loop-protection # 环路保护9. 易混淆点与考前速记
| 对比项 | 结论 |
|---|---|
| BPDU 保护 vs 过滤 | 保护收到 BPDU 就 shutdown;过滤是不收也不发,端口正常转发 |
| BPDU 保护默认自动恢复? | 否,需手工 undo shutdown 或配 error-down auto-recovery |
| 根保护配在哪 | DP 端口,收到更优 BPDU 强制保持 DP Discarding |
| 环路保护配在哪 | 非 DP 端口(RP/AP/BP),收不到最优 BPDU 阻塞防单向链路 |
| 根保护恢复时间 | 30 秒(2×Forward-Delay),无更优 BPDU 自动恢复 |
| TC 保护默认参数 | interval 10 秒,threshold 3 次 |
| TC 保护是否丢弃 TC | 不丢弃,超出阈值后窗口结束统一处理一次 |
| bpdu-filter 能配在哪 | 接口级 enable 或全局 default,禁止配在互联端口 |
考前速记 8 条:
BPDU 保护:EP 收到 BPDU → shutdown(Error-Down),全局命令 stp bpdu-protectionBPDU 保护自动恢复:error-down auto-recovery cause bpdu-protection interval 30BPDU 过滤:不收不发 BPDU,端口正常转发,禁止配在互联端口根保护:配在 DP,收到更优 BPDU 强制保持 DP Discarding根保护恢复:30 秒内无更优 BPDU 自动恢复 Forwarding环路保护:配在非 DP(RP/AP/BP),收不到最优 BPDU 阻塞防单向链路失效TC 保护:interval 10 threshold 3,10 秒内超过 3 次统一处理一次,不丢弃根保护 → DP;环路保护 → 非 DP;BPDU 保护 → EP
🤖 AI 伴学
想快速记住 5 种防护机制的配置位置和触发条件,可以让 AI 做"场景推演":
"请用5个不同的'网络运维事故场景'(用户私接交换机、光纤单向失效、外部抢占根、TC攻击、互联端口误配EP),分别对应说明应选哪种 STP 防护机制、配置在什么端口、触发后的具体动作,最后统一总结一张'事故→防护'映射表。"
