AIGC标识 板块5 · 生成树 STP / RSTP / MSTP

板块5 · 生成树 STP / RSTP / MSTP

目标与定位:STP/RSTP/MSTP 是二层冗余网络的“交通规则”——没有它,任何双上行、双核心或环型链路都可能演变为二层广播风暴。STP 在 ZCIA 中约占 5%,却是现网事故率最高的技术之一:配好时无人注意,配错时往往全网瘫痪。ZCIA 要求会识别拓扑、配置与查看;ZCIP 要求完成 MSTP 多实例规划、跨设备联调和保护加固;ZCIE 要求解释区域分裂、单向链路、跨厂商协商及根因闭环。MSTP + 链路聚合 + VRRP,是 ZCIP 园区网工程的“标准三件套”。

学习承诺:本板块按“原理 → 命令 → 工程实例 → 验证 → 故障排查 → 考点速记”六段式展开。所有原始命令全表、路径开销表、时间参数约束、CORE/ACC 工程脚本、体系B spantree 配置、HMD5 判读、官方排障四步、单向链路定位和保护特性均原样保留并进一步解释。命令以设备上 ? 帮助、运行配置和版本说明书为准;不同型号或软件版本可能存在 spantree 与 spanning-tree、set stp 与 stp 等差异。


5_1 生成树家族与选型

本节要解决什么问题:先建立选型认知:为什么 STP 被淘汰、RSTP 快在哪里、MSTP 为什么成为现网主流。

5_1_1 从“防环”到“按业务分流”:三代协议不是简单替代关系

二层交换网络允许物理冗余,但必须禁止逻辑环路。生成树协议(Spanning Tree Protocol,STP)通过交换 BPDU、选举根桥和端口角色,把一部分冗余端口置于阻塞状态,从而构造无环树形转发路径。当主路径故障时,原阻塞端口可以重新计算并接管。

            ┌──────┐        ┌──────┐
            │  SW1 │════════│  SW2 │
            └──┬───┘        └──┬───┘
               │               │
               │     ╔═══════╗ │
               └─────║ 环路 ║──┘
                     ╚═══════╝

   STP 的目标:从物理“口字型/环型”中剪出一棵逻辑无环树
   阻塞端口:不转发用户数据,但仍收发 BPDU
   故障切换:原阻塞口重新进入选举与转发流程

STP 解决的是确定性问题,不是性能问题。 单一生成树会把所有 VLAN、所有业务压到同一棵树上;即使物理上存在多条上行,只要端口被阻塞,对应带宽就不能被当前树使用。因此,三代协议的核心差异不只是“快不快”,还包括“能否把不同业务映射到不同转发树上”。

协议 标准 收敛时间 实例数 负载分担 现状与选型
STP IEEE 802.1D 30~50 秒 1(所有 VLAN 一棵树) 不支持 基本淘汰;仅用于兼容极老设备
RSTP IEEE 802.1w 1~2 秒 1 不支持 小规模、单实例、快速收敛场景
MSTP IEEE 802.1s 1~2 秒 多实例(0-15) 支持按 VLAN 分担 现网主流,适合双核心/多业务园区网

收敛时间的本质差异在于“是否等待固定计时器”。 STP 中,Listening 和 Learning 各需一个 Forward Delay,常见配置下合计约 30 秒。RSTP/MSTP 引入Proposal/Agreement(P/A)握手、端口角色和更明确的边界条件,在点到点全双工链路上可以不依赖传统两阶段定时器,实现秒级收敛。

【ZCIA】考试只需记住收敛量级、实例数与负载分担三列;【ZCIP】必须解释为什么“两条上行链路都空闲”不等于“两条都能承载当前 VLAN”;【ZCIE】要进一步说明:MSTP 的多实例仍不能突破单实例内部的最优路径选择,若业务无法按 VLAN 拆分,MSTP 也不会自动创造负载分担。

5_1_2 MSTP 的负载分担:让不同 VLAN 走不同阻塞点

MSTP(Multiple Spanning Tree Protocol)不是给每个 VLAN 单独计算一棵树,而是把若干 VLAN 映射到一个 MST 实例(MSTI),每个实例独立计算生成树。这样既减少大量单 VLAN 树的 BPDU 和计算开销,又能让不同实例把阻塞点放在不同链路,实现“按 VLAN 组分流”。

   STP/RSTP:所有 VLAN 共用一棵树
   ┌──────────────┐              ┌──────────────┐
   │   CORE-01    │══════════════│   CORE-02    │
   └──────┬───────┘              └──────┬───────┘
          │                            │
          ▼                            ▼
       ACC-01                      ACC-02

   VLAN10/20/30/40:实例0
   阻塞点固定在一条上行链路 → 另一条链路当前实例不使用

   MSTP:VLAN 分组到不同实例
   实例1(VLAN10,20):阻塞右侧 → 办公流量走左侧
   实例2(VLAN30,40):阻塞左侧 → 安防流量走右侧
   两条上行链路各自承担部分业务,带宽均被利用

MSTP 的负载分担是“受控分流”,不是逐流哈希。 聚合的负载分担基于源目 MAC/IP、端口或报文特征把不同数据流分布到成员口;MSTP 的负载分担则是通过不同实例选择不同根桥、根端口和阻塞端口,使不同 VLAN 的树状路径不同。两者可以叠加,但不能混为一谈:一台接入交换机的某个 VLAN 在某一实例中,仍然只有一条无环转发路径。

设计结论:双核心项目优先采用“实例0兜底、业务实例互备”的模式。例如 CORE-01 是实例1 的主根、实例2 的备根;CORE-02 是实例2 的主根、实例1 的备根。这样既避免一台核心失效后所有业务同时绕行,也保证未明确映射的业务仍有统一 CIST 根。

5_1_3 三大核心概念:根桥、根端口、指定端口

生成树的全部选举最终服务于三个问题:谁是树根、谁负责向上走、谁负责把这一段链路的数据向下游转发。掌握这三项后,再去看 show stp instance 才不会只盯着“blocking”字样。

   ① 根桥 Root Bridge
      - 每个实例(含 CIST)有且仅有 1 个根桥
      - 选举依据:桥 ID(Bridge ID,BID)= 桥优先级 + MAC
      - 数值越小越优;优先级默认 32768
      - 不手工规划时,可能由低 MAC 接入交换机意外当选

   ② 根端口 Root Port(RP)
      - 非根桥上,到达根桥路径开销最小的端口
      - 每台非根桥通常只有 1 个根端口
      - 负责“向上”把流量送往根桥

   ③ 指定端口 Designated Port(DP)
      - 每条链路上负责转发 BPDU、并向下游发送更优信息的端口
      - 根桥的所有可用端口通常都是指定端口
      - 未被选为 RP/DP 的端口进入阻塞/备用角色

桥优先级必须和 MAC 一起比较。 首先比较桥优先级;优先级相同再比较 MAC。优先级的可配置范围依实现而异,工程中常见的步长为 4096。将核心配置为 4096/8192,接入保持默认值,是最简单可靠的根桥控制方法。切记:仅仅因为某台设备是“核心”,生成树不会自动让它成为根桥;BPDU 中的优先级和 MAC 才是选举依据。

【踩坑】不要把“根端口”理解成“根桥上的端口”。根端口一定在非根桥上;根桥上没有根端口。也不要把“阻塞端口”等同于“故障端口”:在稳定生成树中,阻塞是必要的、正确的状态。

5_1_4 路径开销:决定根端口与指定端口的“距离”

路径开销(Path Cost)用于衡量到达根桥的累积代价。同一链路速率下,传统 IEEE 802.1D 开销与新标准(802.1T,常称 dot1t)不同。实际设备可能支持自动计算或手动指定,现场必须以 show stp、接口配置和版本说明为准。

链路速率 传统 STP Cost 新标准 Cost
10 Mbps 100 2,000,000
100 Mbps 19 200,000
1 Gbps 4 20,000
10 Gbps 2 2,000

开销口径不一致会让“最优路径”判断失真。 如果一端按传统标准、另一端按新标准,或者手工 cost 覆盖了自动计算结果,就可能出现预期外的根端口。工程建议如下:

  1. 同一网络统一使用设备默认的同一开销标准,除非有明确规划;
  2. 跨厂商对接前,核对 show stp 中端口 Cost、标准及 BPDU 格式;
  3. 不滥用 cost 微调,确需调整时记录原始值、调整方向和回退命令;
  4. 聚合口的 Cost 通常与其成员状态和实现有关,禁止只看单个物理口。
   根桥选举与路径选择顺序(简化):
   ① 最小根桥 BID(优先级 + MAC)
   ② 到根桥的最小路径开销
   ③ 最小发送者 BID
   ④ 最小发送者端口 ID(优先级 + 端口号)

   手工干预优先级:
   - 根桥位置:instance bridgeprio
   - 同链路谁是指定端口:端口/Trunk priority
   - 某段路径是否更优:端口/Trunk cost

端口优先级只应作为精细调优手段。 端口优先级(port priority)默认 128,范围依实现可能为 0-255;桥优先级范围可为 0-61440。调整前先在实验环境验证,避免同时修改桥优先级、端口优先级和 Cost,导致故障后无法判断真正决策因素。


5_2 RSTP 快速收敛机制

本节要解决什么问题:RSTP 的「快」不是靠缩短计时器,而是靠点到点链路上的握手机制。理解这一点,才知道 linktype 为什么必须配。

5_2_1 端口角色与状态:RSTP 用角色描述“干什么”,用状态描述“能否转发”

RSTP(802.1w)兼容 STP BPDU,但重新定义了端口角色与状态机。角色解决拓扑职责,状态解决数据/地址学习权限。理解这一点后,MSTP 的 CIST/MSTI 端口状态就更容易理解:它们仍遵循类似的 Discarding/Learning/Forwarding 模型。

RSTP 端口角色(角色解决"拓扑职责")

端口角色 含义与现网要点
Root Port(根端口,RP) 到根桥路径最优的端口,每台非根桥一般只有一个;是这台设备"朝根桥方向"的唯一出口
Designated Port(指定端口,DP) 每条链路上负责转发 BPDU 与数据的端口;根桥上的端口通常都是 DP
Alternate Port(替代端口,AP) Root Port 的候选备份,因收到其他路径的更优 BPDU 而阻塞;根端口失效时可快速切换为 RP
Backup Port(备份端口,BP) Designated Port 的候选备份,指同一网段、同一台桥上的另一个端口;现网较少成为主用角色

RSTP 端口状态(由 STP 的 5 种精简为 3 种,状态解决"转发与学习权限")

端口状态 是否转发数据 是否学习 MAC
Discarding 否 否
Learning 否 是
Forwarding 是 是

角色与状态要分开记:角色(RP/DP/AP/BP)是"这个端口在生成树里干什么活",状态(Discarding/Learning/Forwarding)是"这个端口现在能不能转发"。同一个 Alternate 端口,角色是 AP、状态是 Discarding;一旦切换成 RP,角色变了、状态也才转为 Forwarding。

Alternate 是实现快速故障倒换的关键。 当根端口失效,设备可从已同步的 Alternate 端口中快速选出新根端口,而不必从零开始等待长定时器。与之相比,STP 中许多“Blocking”端口需要经历 Listening/Learning,才可能在 30 秒左右进入 Forwarding。

【ZCIP】考试常考“Root/Designated/Alternate/Backup”四角色,应能把 show stp port 输出和拓扑一一对应;【ZCIE】还要解释:Alternate 快速切换成立的前提包括邻居关系、端口状态机、同步机制和链路故障检测均正常,不能只背角色名称。

5_2_2 P/A 握手:RSTP 快速收敛的真正机制

P/A(Proposal/Agreement)握手允许两个 RSTP/MSTP 邻居在确认无环的前提下,将链路快速切换到 Forwarding。它不是“一收到 BPDU 就立即转发”,而是包含提议、同步、确认和逐段推进的过程。

   时间轴:SW-A(当前为上游/指定侧)与 SW-B 建立新链路

   SW-A                    SW-B
    │                        │
    │  ---- Proposal(BPDU) -->│   SW-A 提议:这条链路可以进入转发
    │                        │
    │                        │   SW-B 执行同步:
    │                        │   非边缘、非已同步端口先 Discarding
    │                        │
    │  <-- Agreement(BPDU) ---│   SW-B 确认已同步
    │                        │
    │   两端该链路 Forwarding │
    │                        │
    │    SW-B 再向下游发起    │
    │    同样的 P/A 握手      │
    ▼                        ▼

   关键前提:点到点、全双工链路
   - linktype = point-point
   - 共享介质(如 Hub)无法保证逐段同步,不使用该快速机制

P/A 是“逐段快速”,不是“全网瞬时”。 从根桥到接入层的每一段链路依次完成握手,因此网络越深,端到端收敛仍可能存在多个环节。若某台中间设备不能同步其下游端口,P/A 就会被延迟,链路可能退回传统定时器行为。

linktype point-point 是最容易被忽略的工程项。 对以太网交换机的全双工点对点互联(含聚合口),应显式配置;对接入终端的端口不应盲目配置为点对点,而应结合边缘端口处理。若设备将链路误判为共享介质,即使物理上是光纤直连,也可能无法充分利用快速握手。

   【体系A】将互联口设为点到点
   zte(cfg)#set stp port 23-24 linktype point-point
   zte(cfg)#set stp trunk 1 linktype point-point

   【体系B】接口视图下确认/配置链路类型
   ZXR10(config-stp)#interface gei-0/1/0/5
   ZXR10(config-stp-if-gei-0/1/0/5)#link-type point-to-point

“配错什么现象”速查:

配置问题 可能现象 验证方式
互联口误配 shared 新链路收敛慢,可能经历完整 Learning show stp port 查看 link-type、状态迁移
聚合口未配 P/A 相关参数 聚合成员变化或新链路建立时收敛不快 查看 Trunk STP 状态与角色
边缘端口接交换机 收到 BPDU 后触发保护或拓扑变化 show logging、show stp port
光纤单通 一侧持续发 BPDU,另一侧收不到 debug spantree bpdu-rx/tx

5_3 MSTP 核心概念与区域三要素

本节要解决什么问题:MSTP 的复杂度集中在「区域」这个概念上。三要素不一致会让它悄悄退化成单实例,这是最隐蔽的坑。

5_3_1 MSTP 的层次:CIST 保证全局无环,MSTI 实现业务分流

MSTP 在 RSTP 的基础上引入区域(Region)与多实例。CIST(Common and Internal Spanning Tree)把整个网络——包括各 MST 区域和外部 STP/RSTP 网段——组织成一棵公共树;每个区域内部则通过 IST(Internal Spanning Tree,即实例0)连接,业务 VLAN 可再映射到 MSTI 1-15。

   ┌────────────────────────────────────────────────────────────┐
   │                      CIST(全局公共树)                     │
   │                                                            │
   │   ┌──────────── MST Region A ────────────┐                 │
   │   │                                      │                 │
   │   │   CST:区域与外部相连的“公共树干”    │                 │
   │   │                                      │                 │
   │   │   IST(Instance 0):区域内部公共树   │                 │
   │   │    默认承载未映射 VLAN                │                 │
   │   │                                      │                 │
   │   │   MSTI 1..15:业务实例               │                 │
   │   │    每个实例独立选举根、端口角色       │                 │
   │   └──────────────────────────────────────┘                 │
   │                          │                                 │
   │                          ▼                                 │
   │                 STP/RSTP 或其他 Region                     │
   └────────────────────────────────────────────────────────────┘

CIST = CST + IST,是理解区域边界的第一把钥匙。 CST(Common Spanning Tree)把每个 MST 区域抽象为一台“虚拟桥”进行外部计算;IST 是区域内部实例0,负责承载未明确映射的 VLAN。因此即使只规划了实例1、实例2,实例0 依然存在,它决定 CIST 根、区域边界端口和兜底路径。

MSTI 的隔离是“生成树隔离”,不是“二层转发隔离”。 同一 VLAN 映射到同一实例,不同 VLAN 可映射到不同实例;一个 VLAN 不能同时属于多个实例。VLAN 在不同设备上的映射关系若不一致,区域边界计算就会出现差异,导致负载分担失效或部分流量绕行。

5_3_2 区域三要素:名称、修订号、VLAN-实例映射

同一 MST 区域内所有设备必须对这些参数达成一致。它不是“只要都写了 MSTP 就能同步”,而是基于 MST Configuration Identifier 的一致性判断。

   同一 MST 区域必须完全一致:
   ① 区域名称 name        set stp name <name>
   ② 修订版本号 revision   set stp revision <0-65535>
   ③ VLAN-实例映射         set stp instance <id> add vlan <list>

   任一要素不一致
   → 两台设备被判定在不同区域
   → 区域边界出现 CST 交互
   → MSTI 负载分担失效或路径不符合预期

实例范围固定为 0-15。 实例0 保留给 IST/CIST,不能删除;实例1-15 用于业务。不要为每一个 VLAN 建立一个实例,那样会失去 MSTP 简化控制平面的意义;应按业务、优先级或核心路径把 VLAN 聚合为少数几组。

   区域分裂示意:

   CORE-01 ── CORE-02         配置:ZTE-REGION-1 / rev 1 / VLAN10→1
       │            │
       │            │
   ACC-01 ───── ACC-02        配置:ZTE-REGION-1 / rev 1 / VLAN10→1
   (正常:同一区域,MSTI 可跨设备协同)

   ACC-02 错配为 ZTE-CAMUPS / rev 2 / VLAN10→2
   → ACC-02 与其余设备不在同一区域
   → 区域边界计算变化,CST 接管相关交互
   → VLAN10/20 可能出现非预期阻塞、时通时断或无法按规划分流

【案例故事】某园区网割接后,办公 VLAN10/20 白天偶发中断,重启接入交换机后恢复几分钟,随后又出现部分终端无法跨网段访问。四台核心/接入设备的 show stp 区域名都显示“ZTE-CAMPUS”,看似一致。继续比对时发现,一台旧 ACC 的区域名实际是 ZTE-CAMUPS——工程师从 PDF 复制时少了字母 P。同时该设备的 revision 还是 0,VLAN10 被映射到实例2。结果该接入被视为独立区域,CIST 边界改变,某些 VLAN 的阻塞点漂移。show spantree mst-config 的 HMD5 摘要与其他设备完全不同。逐字符修正名称、revision 和映射后,摘要恢复一致,故障再未复现。教训:比对区域三要素不能只看肉眼近似,必须逐字符、逐数字、逐 VLAN 核对。

5_3_3 实例与 VLAN 映射设计:以“双核心互备”为模板

实例规划应遵循“少而明确”:实例0 兜底,业务实例成对互备。下列模板可直接用于双核心、少量业务组的项目;业务较多时,可按部门、服务等级或网段继续聚合,但每个核心承担的主根/备根关系必须清晰。

实例 VLAN 主根 备根 阻塞链路(规划值) 业务
0(IST) 1, 100(管理/未分配) CORE-01 CORE-02 不强制指定 管理与兜底
1 10, 20(办公) CORE-01 CORE-02 右侧链路 办公流量优先走左
2 40, 50(安防/语音) CORE-02 CORE-01 左侧链路 实时业务优先走右

规划模板的可复用规则:

  1. 每个 VLAN 只映射到一个业务实例;未规划 VLAN 由实例0 承载。
  2. 核心优先级采用 4096 步长:4096(主)、8192(备)、默认 32768(接入)。
  3. 一台核心不能同时是全部业务实例的绝对主根,除非明确接受单侧绕行。
  4. 映射变更属于网络行为变更,应先在维护窗口、测试环境或离线配置中核对。
  5. 所有设备保存同一份“实例—VLAN—根桥—阻塞点”矩阵,禁止凭记忆配置。
   【可复用规划骨架】
   核心A:instance 0 = 4096,instance 1 = 4096,instance 2 = 8192
   核心B:instance 0 = 8192,instance 1 = 8192,instance 2 = 4096
   接入:  instance 0/1/2 保持默认(或按现场规范统一),绝不参与抢根
   区域:  name/revision/映射 全网一致

5_4 MSTP 配置命令全解

本节要解决什么问题:本节把 MSTP 的基本命令、端口控制、时间参数与显示命令一次讲全,并给出时间参数的约束公式。

5_4_1 基本配置:12 条命令的现场含义

以下为 12 条基本配置命令全表。命令行保留原始语法;方括号表示应替换或可选内容,实际输入时不输入方括号。体系A 以 zte(cfg)# 为例,体系B 见 5_5_6。

# 功能 命令
1 使能/关闭 STP set stp {enable|disable}
2 强制 STP 类型 set stp forceversion {mstp|rstp|stp}
3 VLAN 与实例映射 set stp instance [0-15] [add|delete] vlan [vlanlist]
4 网桥优先级 set stp instance [0-15] bridgeprio [0-61440]
5 实例端口优先级 set stp instance [0-15] port [portname] priority [0-255]
6 实例 Trunk 优先级 set stp instance [0-15] trunk [trunkid] priority [0-255]
7 实例端口费用 set stp instance [0-15] port [portname] cost [1-200000000]
8 实例 Trunk 费用 set stp instance [0-15] trunk [trunkname] cost [1-200000000]
9 端口 Root 保护 set stp instance [0-15] port [portname] root-guard {enable|disable}
10 端口 Loop 保护 set stp instance [0-15] port [portname] loop-guard {enable|disable}
11 Trunk Root 保护 set stp instance [0-15] trunk [trunkname] root-guard {enable|disable}
12 Trunk Loop 保护 set stp instance [0-15] trunk [trunkname] loop-guard {enable|disable}

命令怎么用:

  • set stp enable:开局第一句;若协议未开,后面所有实例和保护配置都没有防环效果。
  • forceversion mstp:显式锁定模式,避免被老旧邻居或默认配置影响;跨厂商时仍需确认 BPDU 格式。
  • instance X add vlan:先做规划再加映射;删除时先确认没有其他设备仍把该 VLAN 映射到此实例。
  • bridgeprio:控制根桥的主工具。值越小越优先;采用 4096 倍数,便于排错与扩展。
  • port/trunk priority:仅在两条上行等价、需要精确指定指定端口时使用;应先记录原值。
  • port/trunk cost:用于改变路径选择;手动修改后,务必检查所有实例的累积开销。
  • root-guard:通常配在核心的下行口或面向可能抢根的端口;loop-guard 常用于互联口或光纤链路。

配错现象与验证:

   zte(cfg)#set stp enable
   zte(cfg)#set stp forceversion mstp
   zte(cfg)#set stp instance 1 add vlan 10,20
   zte(cfg)#set stp instance 1 bridgeprio 4096
   zte(cfg)#set stp instance 1 port 23 priority 128
   zte(cfg)#set stp instance 1 trunk 1 priority 128
   zte(cfg)#set stp instance 1 port 23 cost 20000
   zte(cfg)#set stp instance 1 trunk 1 cost 20000
   zte(cfg)#set stp instance 1 port 23 root-guard enable
   zte(cfg)#set stp instance 1 port 23 loop-guard enable
   zte(cfg)#set stp instance 1 trunk 1 root-guard enable
   zte(cfg)#set stp instance 1 trunk 1 loop-guard enable

验证时应逐项查看:show stp 是否 enable、show stp instance 1 的根桥和本桥优先级、show stp port 23 的角色/状态、show stp trunk 1 的 STP 参与情况。若根桥不是规划设备,先查全局 enable、实例映射、桥优先级和上游 BPDU,不要先改 cost。

5_4_2 端口与 Trunk 控制:边缘、BPDU、链路类型和报文格式

功能 命令
端口 STP 开关 set stp port [portlist] {enable|disable}
Trunk STP 开关 set stp trunk [trunklist] {enable|disable}
端口 BPDU 保护 set stp port [portlist] bpdu-guard {enable|disable}
端口 STP 类型检查 set stp port [portlist] pcheck
端口 Link Type set stp port [portlist] linktype {point-point|shared}
Trunk Link Type set stp trunk [trunklist] linktype {point-point|shared}
端口报文类型 set stp port [portlist] packettype {ieee|cisco|huawei|hammer|extend}
Trunk 报文类型 set stp trunk [trunklist] packettype {ieee|cisco|huawei|hammer|extend}

端口控制的核心原则:面向终端和面向网络的端口必须分类配置。

   PC/打印机/摄像头/服务器
   ────────────────────────────────
   edge-port + bpdu-guard
   目的:终端接入立即 Forwarding;若有人私接交换机,立刻触发保护

   交换机之间、聚合口、上行口
   ────────────────────────────────
   通常 STP enable
   linktype point-point(全双工点对点)
   按需 root-guard / loop-guard
   绝不能再配 edge-port
  • bpdu-guard:边缘口收到 BPDU 时执行保护动作(通常为 shutdown/error-disable,具体依型号)。恢复前要清除根因,不能只执行 shutdown/no shutdown。
  • pcheck:用于类型或参数一致性检查;现场应结合具体版本说明和 ? 帮助理解其作用范围。
  • linktype point-point:全双工直连互联的前提;若设备无法自动识别,手工配置能避免退化为共享介质行为。
  • packettype:跨厂商 BPDU 兼容的关键。标准对接优先 ieee;与思科/华为私有实现互操作时,按现网测试结果选择。更改报文格式会导致邻居重新处理 BPDU,应在维护窗口操作。

【踩坑】边缘端口不能配置在交换机互联口。 边缘端口假定对端没有桥、不会发 BPDU,因此跳过普通参与计算。如果互联口误配为边缘端口,一旦形成环,失去正常阻塞机会,极易造成风暴。正确顺序是:先确认端口角色,再配置 STP 属性。

5_4_3 时间与区域参数:稳定网络优先保持默认值

功能 命令
Hello Time set stp hellotime [1-10]
Forward Delay set stp forwarddelay [4-30]
Max Age set stp agemax [6-40]
最大跳数 set stp hopmax [1-40]
MST 区域名称 set stp name [name]
MST 版本号 set stp revision [0-65535]
STP Relay set stp relay {enable|disable}
边缘端口 set stp edge-port {add|delete} port [portlist]
HMD5 摘要 set stp hmd5-digest {cisco|huawei} [0,0x00..0-0xff..f]
HMD5 关键字 set stp hmd5-key {cisco|huawei} [0,0x00..0-0xff..f]

参数边界:

  • hellotime:1-10 秒;常见默认 2 秒。
  • forwarddelay:4-30 秒;常见默认 15 秒。
  • agemax(Max Age):6-40 秒;常见默认 20 秒。
  • hopmax:1-40;用于限制 BPDU 在 MST 区域中的传播跳数,依实现和场景配置。
  • name:区分大小写、逐字符匹配,务必复制配置文本而非手打。
  • revision:0-65535;建议工程采用有含义的版本号,变更时递增。
  • hmd5-digest / hmd5-key:跨厂商兼容时使用;普通中兴同区域组网仍以三要素一致性为先。

区域配置必须作为一个整体提交。 修改 name、revision 或 VLAN 映射前,先确认所有相关设备的配置版本、变更窗口和回退方案。特别是 instance X delete vlan,应先确认该 VLAN 在邻居设备上的新归属,避免同一区域出现临时映射不一致。

5_4_4 显示命令:从全局到端口的“三层查看法”

功能 命令
显示 STP 信息 show stp
显示实例信息 show stp instance [[0-15]]
显示端口信息 show stp port [[portlist]]
显示 Trunk 信息 show stp trunk [trunklist]
显示 Relay 信息 show stp relay

推荐的排障读取顺序:

  1. show stp:先看全局 enable/disable、版本、桥 ID、区域名和 revision;
  2. show stp instance X:确认根桥、本桥角色、各端口角色;
  3. show stp port/trunk:确认 STP 是否参与、link-type、状态、BPDU 收发;
  4. show stp relay:仅在涉及 Relay 穿透/跨设备场景使用。

体系B 的常见对应命令见 5_5_6。现场如遇命令不存在,应进入配置模式使用 ?,并查看运行配置,禁止猜测关键字。

5_4_5 三个时间参数约束:改一个,就要验算整组

标准的 STP 时间参数必须满足:

   2 × (ForwardDelay − 1)  ≥  MaxAge  ≥  2 × (HelloTime + 1)

   典型默认值:
   HelloTime   = 2s
   ForwardDelay = 15s
   MaxAge      = 20s

   验算:
   左侧 = 2 × (15 − 1) = 28
   右侧 = 2 × (2 + 1)  = 6
   不等式:28 ≥ 20 ≥ 6   ✅ 满足

这组约束的本质是“BPDU 老化与状态迁移要匹配”。 Max Age 决定根桥信息多久过期;Forward Delay 决定 Listening/Learning 时长;Hello Time 决定 BPDU 发送间隔。若只把 Max Age 改小,可能使 BPDU 过早老化,网络频繁重算;若只改大 Forward Delay,收敛时间又会拉长。

【踩坑】除非有充分测试和明确需求,否则保持默认值。若必须调整,先把三个参数代入约束公式,再在实验环境模拟根桥切换、链路震荡和 BPDU 丢失。现场常见的“改小 Hello 后更快检测到变化”并不是没有代价:BPDU 频率、CPU 负荷及邻居处理节奏都应纳入评估。


5_5 MSTP 工程配置实例

本节要解决什么问题:从本节开始进入可落地的工程配置:双核心拓扑、主备根、边缘端口、体系B 的 spantree 原生写法与 HMD5 判读。

5_5_1 拓扑与规划:先把根桥、阻塞点和保护点画出来

                    ┌──────────┐         ┌──────────┐
                    │ CORE-01  │═════════│ CORE-02  │
                    │ 实例1主根 │  聚合   │ 实例2主根 │
                    └────┬─────┘         └─────┬────┘
                         │                     │
              ┌──────────┘                     └──────────┐
              │                                            │
        ┌─────▼─────┐                              ┌──────▼────┐
        │  ACC-01   │══════════════════════════════│  ACC-02   │
        └───────────┘      冗余链路(可能产生环路)    └───────────┘

   规划:
   区域名称:ZTE-REGION-1
   版本号:1
   实例0:VLAN 1, 100(管理/兜底)
   实例1:VLAN 10, 20(办公)    → CORE-01 主根、CORE-02 备根
   实例2:VLAN 40, 50(安防/语音)→ CORE-02 主根、CORE-01 备根

工程前置检查:

  • 所有互联接口已 UP,双工/速率符合规划;
  • 聚合(如有)已正常、成员口一致;
  • VLAN 已创建并在 Trunk 上放行;
  • 管理地址、静态路由/VRRP 与生成树阻塞点无冲突;
  • 配置前已备份 running-config,并准备回退脚本。

5_5_2 CORE-01:实例1 的主根、实例2 的备根

zte(cfg)#set stp enable
zte(cfg)#set stp forceversion mstp

! ---------- 区域三要素 ----------
zte(cfg)#set stp name ZTE-REGION-1
zte(cfg)#set stp revision 1
zte(cfg)#set stp instance 1 add vlan 10,20
zte(cfg)#set stp instance 2 add vlan 40,50

! ---------- 实例优先级(值越小越优先,步长 4096) ----------
zte(cfg)#set stp instance 0 bridgeprio 4096      ! 兜底根
zte(cfg)#set stp instance 1 bridgeprio 4096      ! 实例1:CORE-01 为主根
zte(cfg)#set stp instance 2 bridgeprio 8192      ! 实例2:CORE-01 为备份根

! ---------- 链路类型(聚合与骨干链路设为点到点,启用快速收敛) ----------
zte(cfg)#set stp trunk 1 linktype point-point
zte(cfg)#set stp port 1-24 linktype point-point

! ---------- 边缘端口(接终端,不参与 STP 计算,立即转发) ----------
zte(cfg)#set stp edge-port add port 3-20

! ---------- 边缘端口加 BPDU 保护(收到 BPDU 立即关闭端口) ----------
zte(cfg)#set stp port 3-20 bpdu-guard enable

! ---------- 上行口 Root 保护(防止接入交换机抢占根桥) ----------
zte(cfg)#set stp instance 0 port 21 root-guard enable
zte(cfg)#set stp instance 1 port 21 root-guard enable

zte#show stp
zte#show stp instance 1

现场解释:

  • 核心同时做实例1 主根和实例2 备根,是为了在一台核心失效时仍能保持所有实例有确定根桥。
  • trunk 1 对应核心互联聚合口;若现场聚合编号不同,必须替换为真实 Trunk ID。
  • port 3-20 若实际接服务器或终端才设为边缘端口;如连接其他交换机,应删除 edge-port 并配置 loop-guard。
  • root-guard 配在下行口,防止接入设备因更高优先级 BPDU 抢根;它不是“禁止根桥发 BPDU”,而是限制对端改变根角色。

5_5_3 CORE-02:实例2 的主根、实例1 的备根

zte(cfg)#set stp enable
zte(cfg)#set stp forceversion mstp
zte(cfg)#set stp name ZTE-REGION-1
zte(cfg)#set stp revision 1
zte(cfg)#set stp instance 1 add vlan 10,20
zte(cfg)#set stp instance 2 add vlan 40,50

zte(cfg)#set stp instance 0 bridgeprio 8192
zte(cfg)#set stp instance 1 bridgeprio 8192      ! 实例1:备份根
zte(cfg)#set stp instance 2 bridgeprio 4096      ! 实例2:主根

zte(cfg)#set stp edge-port add port 3-20
zte(cfg)#set stp port 3-20 bpdu-guard enable

为什么两台核心不能都用 4096? 若优先级完全相同,根桥会进一步比较 MAC,结果依赖设备 MAC,无法稳定控制。采用 4096/8192 互备,既明确主备,又给未来增加第三台核心留出优先级空间。接入保持默认 32768,确保不会在根桥选举中反超核心。

5_5_4 ACC-01 / ACC-02:接入层保持默认根优先级

zte(cfg)#set stp enable
zte(cfg)#set stp forceversion mstp
zte(cfg)#set stp name ZTE-REGION-1        ! 必须与核心完全一致
zte(cfg)#set stp revision 1               ! 必须与核心完全一致
zte(cfg)#set stp instance 1 add vlan 10,20
zte(cfg)#set stp instance 2 add vlan 40,50

! 接入交换机优先级保持默认(32768),确保不抢占根桥
! 上行口设为点到点
zte(cfg)#set stp port 23-24 linktype point-point

! 用户口设为边缘端口 + BPDU 保护
zte(cfg)#set stp edge-port add port 1-20
zte(cfg)#set stp port 1-20 bpdu-guard enable

接入层最重要的不是“配得更复杂”,而是“不抢根、不误当边缘”。 上行口必须参与 STP,并配置 P/A 前提;用户口采用 edge + bpdu-guard;下联口禁止套用核心的 root-guard 模板。若接入下联又接接入,应重新评估拓扑,不能机械复制脚本。

5_5_5 验证清单:先证明规划,再证明连通性

show stp                      ! 全局:协议版本、区域名、版本号、本桥 ID
show stp instance 1           ! 实例1:根桥是谁、本桥角色、端口角色
show stp instance 2           ! 实例2:根桥应该是 CORE-02
show stp port 23              ! 端口角色(Root/Designated/Alternate)、状态
show stp trunk 1              ! 聚合口的 STP 状态
检查项 预期 不符时排查方向
show stp 区域名/版本号 四台设备完全一致 核对 name/revision 字符、设备配置版本
实例1 根桥 CORE-01 检查 enable、bridgeprio、上游 BPDU
实例2 根桥 CORE-02 检查 CORE-02 实例2 优先级与映射
CORE 到 ACC 端口角色 实例1/2 分别形成规划的根/指定/阻塞关系 查 cost、port priority、link-type
ACC 是否为根 否 ACC 应保持默认 32768;检查误配 root-guard
边缘端口状态 上线即 Forwarding 确认 edge-port、终端无 BPDU、端口 UP
BPDU 收发 互联口 rx/tx 均增长 单通链路、光模块、中间设备 ACL/过滤
聚合口状态 Trunk 参与 STP、成员口正常 聚合模式、负载分担、Trunk STP enable

5_5_6 体系B 的 spantree:模式、全局开关与区域参数

中兴中高端设备可能采用 spantree 配置模式,与体系A 的 set stp 在命令风格、默认值和视图位置上有明显差异。开工前必须先确认软件版本、CLI 提示符和实际关键字;下列内容保留原始真实写法,并用“现场确认”兜底。

标准配置流程(体系B)

! ---------- 1. 进入 STP 配置模式并全局启用 ----------
ZXR10(config)#spantree                                  ! 进入 STP 配置模式
ZXR10(config-stp)#enable                                ! 全局启用(注意:部分型号全局默认 DISABLE!)
ZXR10(config-stp)#spantree mode mstp                    ! 设置模式为 MSTP

! ---------- 2. 配置 MST 区域三要素 ----------
ZXR10(config-stp)#mst name ZTE-CAMPUS                   ! 区域名(默认是设备系统 MAC)
ZXR10(config-stp)#mst revision 1                        ! 版本号(默认 0)
ZXR10(config-stp)#instance 1 vlan 10,20                 ! 实例-VLAN 映射
ZXR10(config-stp)#instance 2 vlan 40,50
ZXR10(config-stp)#exit

! ---------- 3. 端口级配置 ----------
ZXR10(config-stp)#interface gei-0/1/0/5
ZXR10(config-stp-if-gei-0/1/0/5)#enable                 ! 端口启用 STP(端口默认通常是启用)
ZXR10(config-stp-if-gei-0/1/0/5)#packet-type ieee       ! 报文类型(默认 IEEE)
ZXR10(config-stp-if-gei-0/1/0/5)#exit

! ---------- 4. 验证 ----------
ZXR10(config)#show spantree mst-config                  ! 看模式、Name、Revision、HMD5
ZXR10(config)#show spantree mst                         ! 看实例映射与摘要
ZXR10(config)#show spantree instance 0                  ! 看实例 0(未启用会提示 STP is disabled)
ZXR10(config)#show spantree interface gei-0/1/0/5       ! 看端口角色与状态

体系B 关键默认参数(与盒式不同,考试易错)

参数 体系B(5900E/8900E)默认 体系A(盒式)默认
STP 工作模式 MSTP 依型号,建议 set stp forceversion mstp
STP 全局开关 disable(默认关闭!) 依型号
端口 STP 开关 enable(默认开启) 依型号
MST 区域名 设备系统 MAC 地址 空/默认
MST 修订版本号 0 0
BPDU 报文类型 IEEE 标准 IEEE

【踩坑】“全局 STP 默认关闭”是体系B 最危险的默认值。 若只配置端口参数而漏掉 spantree → enable,show spantree instance 0 会提示 STP is disabled!,此时网络没有生成树防环能力。开局脚本必须将“进入 spantree 模式、全局 enable、配置模式、保存配置”作为一个原子步骤执行。

上线前逐字符核对清单:

   [ ] spantree / spanning-tree 关键字是否与本版本一致
   [ ] 全局 enable 是否已提交
   [ ] mode 是否 mstp(若需求为 MSTP)
   [ ] mst name     是否与全网完全一致(区分大小写、空格、连字符)
   [ ] mst revision 是否一致
   [ ] instance X vlan 是否一致,VLAN 是否实际存在
   [ ] 各核心 bridgeprio / root priority 是否符合主备规划
   [ ] 互联口 STP enable、link-type、保护配置是否应用
   [ ] edge-port 是否仅面向终端;bpdu-guard 是否配套
   [ ] 配置是否已 write/save,重启后是否仍生效
   [ ] show spantree mst-config 的 HMD5 是否已与其他设备比对

5_5_7 HMD5 摘要判读:区域一致性的第一证据

show spantree mst-config 的 HMD5 字段由区域名、修订号、VLAN-实例映射等信息共同参与计算。它不是随便填的密钥,而是判断设备是否属于同一配置区域的重要证据。

ZXR10(config)#show spantree mst-config
spanning-tree mode: [MSTP]
        Name  Revision  Instance  Vlans mapped
      [zte]     0          0      1-4094

CISCO  Hmd5-key     : 0x13ac06a62e47fd51f95d2ba243cd0346
CISCO  Hmd5-digest  : 0x00000000000000000000000000000000
HUAWEI Hmd5-key     : 0x13ac06a62e47fd51f95d2ba243cd0346
HUAWEI Hmd5-digest  : 0x00000000000000000000000000000000

判读规则:

  • 两台设备的 Hmd5-key/digest 完全相同:区域三要素一致,属于同一 MST 区域;
  • 任一侧 不相同:很可能处于不同区域,应优先检查 name、revision、VLAN-实例映射和厂商私有摘要选项;
  • 摘要一致但拓扑仍异常:再检查优先级、cost、端口角色、link-type 和 BPDU 收发;
  • 摘要不一致时,不要先调整 cost 或保护特性,那样只会掩盖区域分裂。

HMD5 的正确使用边界: 它是配置一致性校验工具,不是“把摘要改成相同就能互通”的配置对象。若设备显示的摘要算法、厂商标记不同,应先统一标准配置和 packet-type,让摘要自然一致,而不是手工复制对端摘要。依型号/软件版本不同,摘要显示字段可能不同,现场以实际 show spantree mst-config 为准。

5_5_8 官方排障四步:把环路风暴收敛为四个 Yes/No

STEP 1  检查全局 STP 是否启用
        ZXR10(config)#show spantree instance 0
        → 若显示 "STP is disabled!":
          ZXR10(config)#spantree
          ZXR10(config-stp)#enable

STEP 2  检查环上互联端口是否启用 STP
        ZXR10(config)#show spantree interface gei-0/1/1/5
        → 若显示 "NON_STP" 或 "The port is STP disable":
          ZXR10(config-stp)#interface gei-0/1/1/5
          ZXR10(config-stp-if-gei-0/1/1/5)#enable
        → 正常输出示例:
          Mst Instance  Prio.Nbr  Port ID  Cost    State      Role
          MST00         128.3     128.3    20000   Forward    Designated

STEP 3  检查环上各端口的 BPDU 报文类型是否一致
        ZXR10(config-stp-if-gei-0/1/1/5)#packet-type ?
          cisco    huawei    hammer    ieee
        → 全网建议统一为 ieee

STEP 4  检查 BPDU 收发是否正常
        ZXR10#debug spantree bpdu-rx interface gei-0/1/1/5
        ZXR10#debug spantree bpdu-tx interface gei-0/1/1/5
        → 若只有 tx 没有 rx:单向链路(光纤收发光故障)或 BPDU 被中间设备丢弃

四步的内在逻辑是“由全局到局部、由控制面到物理层”。 第一步排除“根本没有防环协议”;第二步排除端口被排除在生成树外;第三步排除 BPDU 方言不一致;第四步验证邻居是否真实交换控制报文。任何一步为 No,都不应跳过后续步骤直接改业务配置。

【踩坑】debug 会产生大量日志并增加 CPU 负担,必须指定接口、限定时间;确认后立即 undebug 或退出调试。生产环境应先评估日志输出、终端连接和设备负载。


5_6 保护特性与单向链路定位

本节要解决什么问题:配好 STP 不等于安全。本节讲四大保护特性,并给出「只发不收即单向链路」这一最难查故障的定位手段。

5_6_1 四大保护机制:分别解决私接、抢根、单通与终端接入

   ① BPDU 保护(bpdu-guard)
   场景:边缘端口(接 PC)本不该收到 BPDU
        用户私接交换机 → 边缘口收到 BPDU → 立即 shutdown 端口
        ┌────────┐   BPDU   ┌──────────┐
        │ 私接SW │─────────►│边缘端口  │──► 端口被关闭,产生告警
        └────────┘          └──────────┘

   ② Root 保护(root-guard)
   场景:上行口收到“更优的 BPDU”(对端宣称自己是根)
        → 拒绝接受,端口进入不一致/阻塞状态,保护根桥地位
   注意:配置在“可能接收到更优根 BPDU”的端口,通常是核心下行口

   ③ Loop 保护(loop-guard)
   场景:链路单向故障,收不到 BPDU
        → 端口不会盲目从阻塞切为转发
   作用:收不到 BPDU 时保持阻塞,降低单向转发形成环路的风险

   ④ 边缘端口(edge-port)
   接终端的端口跳过普通计算,直接 Forwarding
   风险:一旦接交换机成环 → 必须配 BPDU 保护

保护不是互相替代,而是分别覆盖不同故障模型:

特性 适用位置 触发条件 防止的故障 不宜使用位置
BPDU Guard 终端/服务器边缘口 收到 BPDU 私接桥、边缘成环 交换机互联口
Root Guard 下行/可能抢根的口 收到更优根 BPDU 根桥被意外抢占 已确定的根端口上游
Loop Guard 互联口、光纤链路 持续收不到 BPDU 单向链路后误转发 边缘口(已由 bpdu-guard 处理)
Edge Port 终端口 端口连接终端 接入等待过久 交换链路、聚合口

Root Guard 和 Loop Guard 的区别是高频考点。 Root Guard 关心“根角色是否被更优 BPDU 改变”;Loop Guard 关心“本应收到 BPDU 的端口是否失去控制报文”。二者可针对不同风险同时部署,但必须确认型号实现、端口状态和恢复机制。

5_6_2 保护配置组合:写入开局模板

端口类型 edge-port bpdu-guard root-guard loop-guard
用户接入(PC/打印机/摄像头) 是 是 — —
AP 接入 是(或按型号) 是 — —
上行至核心/汇聚 — — 是(下行口) 可选
服务器端口 是 是 — —
交换机互联 — — 视拓扑 是(推荐)
   【体系A 模板片段】
   set stp edge-port add port 1-20
   set stp port 1-20 bpdu-guard enable
   set stp port 23-24 linktype point-point
   set stp instance 0 port 23-24 loop-guard enable
   set stp instance 0 port 21 root-guard enable

保护配置必须带恢复方案。 例如 BPDU Guard 触发后,端口可能进入 error-disable。恢复流程应先拔除私接设备、确认拓扑,再执行 shutdown/no shutdown 或自动恢复(依型号支持情况)。禁止在根因未清除时反复 no shutdown,否则会形成“保护—恢复—再环—再保护”的振荡。

5_6_3 跨厂商对接:先统一方言,再讨论根桥

set stp port <list> packettype {ieee|cisco|huawei|hammer|extend}
set stp trunk <list> packettype {ieee|cisco|huawei|hammer|extend}
set stp hmd5-digest {cisco|huawei} <key>       ! 摘要密钥,兼容厂商私有摘要算法
set stp hmd5-key {cisco|huawei} <key>

对接原则:

  • 标准设备对接:优先 ieee;
  • 思科私有 PVST+/MST 场景:依现网测试选择 cisco;
  • 华为场景:依现网测试选择 huawei;
  • 摘要不匹配是区域协商失败的高频原因;
  • 不要跨厂商假设所有 RSTP/MSTP 扩展完全一致,先抓 BPDU 或在测试环境验证。
   保护特性决策树:
   端口对端是终端吗?
   ├─ 是 → edge-port = yes
   │       └─ 再问:是否可能私接交换机?
   │             ├─ 是 → bpdu-guard = yes
   │             └─ 否 → 仍建议 bpdu-guard(纵深防御)
   └─ 否(交换机/聚合/光纤)
           ├─ 是否需要保护根桥?
           │    └─ 是 → root-guard = yes
           └─ 是否存在单向故障风险?
                └─ 是 → loop-guard = yes

5_6_4 单向链路定位:debug spantree bpdu-rx/tx

单向链路是生成树最隐蔽的故障之一。光纤一根断裂、光模块单向劣化、清洁不良、中间透明设备丢弃 BPDU,都可能导致一侧持续发送、另一侧完全收不到。此时端口物理状态可能仍是 UP,Ping 也可能时好时坏,但 STP 控制面已经不对称。

   正常双向链路:
   SW-A ──(tx BPDU)──► SW-B
   SW-A ◄──(rx BPDU)── SW-B
   rx/tx 均有计数且持续变化

   单向链路:
   SW-A ──(tx BPDU)──► SW-B   ✅ tx 有输出
   SW-A ◄──(rx ?)───── SW-B   ❌ rx 无输出
   → 只发不收 = 单向链路嫌疑

判据:debug spantree bpdu-tx 有输出而 bpdu-rx 无输出,等于“只发不收”,应优先排查单向链路。 但必须与普通“邻居未开 STP”区分:若对端根本未发送 BPDU,也会 rx 为零;若 tx 也在同一接口持续增加、对端确认未发送,则更可能是配置或中间设备问题;若物理层已经出现收光异常,则更偏向光模块/光纤。

   ZXR10#debug spantree bpdu-rx interface gei-0/1/1/5
   ZXR10#debug spantree bpdu-tx interface gei-0/1/1/5

   观察 30~60 秒:
   - rx/tx 都增长:控制面基本正常,继续看角色与优先级
   - 仅 tx 增长:单向链路或 BPDU 被丢弃
   - rx/tx 都无:本端或邻居 STP 未 enable,或接口未参与
   确认后立即取消调试:
   ZXR10#undebug all

【案例故事】某汇聚环在凌晨间歇性出现广播风暴,端口没有 CRC 增长、光功率曲线也在阈值内,Ping 有时正常,团队一度怀疑是 ARP 或病毒。连续两次风暴后,我们在汇聚口启用 debug spantree bpdu-rx/tx,只观察一个周期:一端 bpdu-tx 每 2 秒增加一次,bpdu-rx 始终为 0;对端接口则相反。更换该段一根 LC-LC 跳线并交叉测试光模块后,rx 恢复。复盘发现该链路曾因施工弯折,长期属于“物理 UP、控制面单通”。随后在所有核心/汇聚互联口补配 Loop Guard,并把 BPDU 收发计数纳入巡检。教训:没有 CRC 不等于没有二层故障;生成树异常时,第一手证据是 BPDU rx/tx。


5_7 故障排查、笔记方法与验证清单

本节要解决什么问题:STP 故障的共同特点是「现象吓人、原因很小」。本节给出决策树、笔记模板与验证清单。

5_7_1 故障排查决策树

现象:网络成环/广播风暴/部分 VLAN 不通/收敛慢
   │
   ├─ ① show stp                STP 是否 enable?版本是否 mstp?
   │      └─ 未开 → 立即开启(成环时这是急救)
   │
   ├─ ② show stp instance 0     根桥是谁?
   │      └─ 根桥是接入交换机?→ 立即调整核心优先级为 4096/0
   │
   ├─ ③ 区域三要素是否一致?     名称/版本号/VLAN映射
   │      └─ 不一致 → 区域分裂 → MSTP 退化成 CST → 负载分担失效、VLAN 不通
   │
   ├─ ④ show stp port           端口角色与状态是否合理?
   │      └─ 期望转发的口被 Discarding?→ 查 cost/优先级配置
   │      └─ 端口被 root-guard 阻断?→ 检查是否有设备试图抢根
   │
   ├─ ⑤ show stp port           边缘端口是否误配在交换机互联口上?
   │      └─ 边缘口成环的第一大原因
   │
   ├─ ⑥ 跨厂商对接              packettype 与 hmd5 是否匹配?
   │
   └─ ⑦ 成环应急                先 shutdown 疑似环路端口止血,再排查

决策树的执行纪律: 每一步记录命令、实际输出和判断结论。不能因为“业务恢复”就停止排查;否则根因未除,下一次拓扑变化还会复发。

5_7_2 成环应急处理流程:识别—止血—验证—排查—加固—复盘

① 识别:交换机 CPU 飙升、端口流量打满、MAC 表剧烈漂移、全网变慢
② 止血:shutdown 广播包增长最快的端口(或先拔线)
   zte(cfg)#set port <id> disable
③ 验证:CPU 与流量下降,网络恢复
④ 排查:确认环路点(是否是私接交换机、是否光纤错连、STP 是否未开)
⑤ 加固:开启 STP、边缘端口 + BPDU 保护、端口描述规范
⑥ 复盘:写入变更与验收文档

止血动作必须可逆且有记录。 执行 set port disable 或拔线前,应记录端口、所属设备、影响范围、时间和操作人;恢复时逐条回退。对核心互联口尤其不能盲目 shutdown,否则可能把局部环路问题升级为大面积断网。

5_7_3 高频故障速查表

现象 原因 判据 处理
全网卡顿、CPU 100% 二层环路 端口流量打满、MAC 漂移 止血后开启 STP
根桥是接入交换机 未配置优先级 show stp instance 0 核心设 bridgeprio 4096
VLAN 间时通时断 区域三要素不一致 四台设备 show stp 比对 统一名称/版本号/映射
接入端口 30s 才能上网 未配边缘端口 show stp port 状态变化慢 set stp edge-port add port
私接交换机后全网异常 未配 BPDU 保护 边缘口收到 BPDU 补 bpdu-guard enable
汇聚被抢占根桥 未配 Root 保护 show stp instance 下行口 root-guard enable
与华为设备无法同区域 packettype/hmd5 不匹配 show stp 设 packettype huawei + hmd5
单向光纤导致环路 未配 Loop 保护 端口收不到 BPDU loop-guard enable
STP Relay 相关异常 relay 配置不当 show stp relay 按需求关闭/开启
体系B 显示 STP is disabled 全局 STP 默认关闭 show spantree instance 0 spantree → enable
端口显示 NON_STP 端口 STP 被关闭 show spantree interface <口> 端口下 enable
跨厂商 MSTP 不生效 HMD5 摘要不一致 show spantree mst-config 比对 对齐三要素 + packet-type
只有 tx 没有 rx 单向链路 debug spantree bpdu-rx/tx 换光模块/光纤,加 Loop Guard

5_7_4 【笔记方法】一、STP 拓扑基线记录表

每次开局、变更或排障后更新。基线存在的意义是:故障时能快速判断“现在和正常哪里不同”。

# STP 拓扑基线记录表

设备名称:__________
采集时间:__________
协议模式:MSTP / RSTP / STP
全局状态:enable / disable
区域名称:__________
修订号:__________
HMD5(Cisco/Huawei):__________ / __________

| 实例 | 根桥 | 主根 | 备根 | 本桥优先级 | 根端口 | 指定端口 | 阻塞端口 |
| ---- | ---- | ---- | ---- | ---------- | ------ | -------- | -------- |
| 0    |      |      |      |            |        |          |          |
| 1    |      |      |      |            |        |          |          |
| 2    |      |      |      |            |        |          |          |

关键互联口:
| 接口 | 对端设备 | STP enable | link-type | role | state | BPDU rx | BPDU tx | 保护 |
| ---- | -------- | ---------- | --------- | ---- | ----- | ------- | ------- | ---- |
|      |          |            |           |      |       |         |         |      |

变更后复核:
[ ] 根桥符合规划
[ ] 每个实例阻塞点符合规划
[ ] 区域三要素全网一致
[ ] 无边缘口误用于互联
[ ] BPDU rx/tx 正常

5_7_5 【笔记方法】二、区域三要素核对表

# MST 区域三要素核对表(上线前逐字符核对)

| 设备 | name(复制粘贴) | revision | instance 0 vlan | instance 1 vlan | instance 2 vlan | HMD5一致 |
| ---- | ---------------- | -------- | --------------- | --------------- | --------------- | -------- |
| CORE-01 |                  |          |                 |                 |                 |          |
| CORE-02 |                  |          |                 |                 |                 |          |
| ACC-01  |                  |          |                 |                 |                 |          |
| ACC-02  |                  |          |                 |                 |                 |          |

核对规则:
[ ] name:大小写、空格、连字符、字符数全部一致
[ ] revision:十进制数值一致
[ ] instance-vlan:每个 instance 的 VLAN 集合一致
[ ] 不存在同一 VLAN 在不同设备映射到不同 instance
[ ] show spantree mst-config / show stp 摘要一致
[ ] 配置已保存,重启后三要素仍一致

5_7_6 【笔记方法】三、拓扑变更事件记录模板

# 拓扑变更事件记录

日期/时间:__________
触发原因:链路 UP/DOWN / 设备重启 / VLAN 变更 / 设备接入 / 手工操作
影响范围:VLAN/实例/接入区域:__________

变更前:
- 根桥/阻塞点/关键端口角色:__________

变更操作(逐条命令):
1. 
2. 

变更后验证:
- show stp:__________
- show stp instance 0/1/2:__________
- show stp port/trunk:__________
- BPDU rx/tx:__________

异常/回退:
[ ] 无异常
[ ] 已回退;回退步骤:__________

结论:该变更是否符合预期?是 / 否
后续动作:__________

5_7_7 【验证】验收矩阵:至少覆盖全局、实例、端口、区域和单通

验证命令 预期结果/关键字段 不符时的排查方向
show stp 全局 enable;版本 mstp;name/revision 与规划一致 检查全局开关、配置模式、区域配置是否保存
show stp instance 0 CIST 根桥是核心;本桥优先级符合主备 核对 bridgeprio、桥 MAC、上游 BPDU
show stp instance 1 根桥为规划主根;各端口 role/state 符合基线 检查映射、优先级、cost、link-type
show stp instance 2 根桥为主根的另一台核心 确认互备优先级,避免两台完全相同
show stp port <id> 互联口 STP enable、link-type point-point、角色合理 查边缘误配、端口 disable、保护状态
show stp trunk <trunkid> 聚合口参与 STP;成员状态正常 查聚合配置、Trunk STP、负载分担
show spantree mst-config(体系B) Name/Revision/实例映射及 HMD5 与全网一致 逐字符核对三要素;先对齐配置再查摘要
show spantree interface <口> 非 NON_STP,有正确 role/state 接口 STP enable、物理 UP、邻居参与
show logging edge/bpdu-guard/root-guard 事件符合预期 查私接桥、抢根设备、配置漂移
debug spantree bpdu-rx/tx rx、tx 均按预期增长 单向链路、光模块、BPDU 被丢弃
断开主用上行测试 业务在预期时间内切换,阻塞点迁移 检查 P/A、Alternate、保护、VRRP 联动
接入终端上线测试 边缘口快速 Forwarding;无 BPDU 触发保护 检查 edge-port、bpdu-guard、终端连接

5_8 考点速记与自检清单

本节要解决什么问题:最后是考点速记与自检清单。

5_8_1 考点速记

  1. 协议演进:STP(802.1D)收敛 30~50 秒、单实例、无负载分担;RSTP(802.1w)收敛 1~2 秒、单实例;MSTP(802.1s)收敛 1~2 秒、实例 0-15、可按 VLAN 负载分担。
  2. MSTP 负载分担原理:把 VLAN 映射到 MSTI;不同实例可阻塞不同链路,实现业务分流。它不是逐流哈希,也不是给每个 VLAN 单独建树。
  3. 区域三要素:区域名称、修订版本号、VLAN-实例映射;任一项不一致都会造成区域分裂、MSTP 退化为 CST。
  4. 实例范围:0-15;实例0 是 IST/CIST 兜底;业务使用 1-15。每个 VLAN 只映射到一个实例。
  5. 根桥选举:桥 ID = 优先级 + MAC,数值越小越优;优先级默认 32768,常见主备步长为 4096。
  6. 端口角色:Root、Designated、Alternate、Backup;根端口在非根桥上,指定端口负责链路转发,Alternate 是 RP 备份。
  7. 端口状态:Discarding、Learning、Forwarding;RSTP/MSTP 不再使用 STP 的 5 状态混合模型。
  8. P/A 握手:Proposal/Agreement 实现逐段快速收敛;前提为点到点、全双工链路,linktype point-point 必须正确。
  9. 保护特性:BPDU Guard 防私接;Root Guard 防抢根;Loop Guard 防单向故障;Edge Port 用于终端快速上线,必须与 BPDU Guard 配套。
  10. 时间参数约束:2×(ForwardDelay-1) ≥ MaxAge ≥ 2×(HelloTime+1);默认 2/15/20 满足约束。改参先验算,稳定网络优先保持默认。
  11. 路径开销:传统标准与新标准数值差异大;调整 cost 前统一口径、记录原值并核对累积路径。
  12. 体系B:使用 spantree 模式;全局可能默认 disable,端口可能默认 enable;默认区域名为系统 MAC、revision 0。进入配置后必须 enable。
  13. HMD5:由 name + revision + VLAN-实例映射参与计算;同区域摘要应一致。摘要不一致先对齐三要素,而不是手工复制摘要。
  14. 官方排障四步:全局 enable → 端口 enable → packet-type 一致 → BPDU 收发正常。
  15. 单向链路判据:debug spantree bpdu-tx 有输出、bpdu-rx 无输出,即“只发不收”,优先排查光纤/光模块/中间设备;同时检查 Loop Guard。

5_8_2 本板块自检清单

posted @ 2026-09-16 06:53  睡到自然醒的猪  阅读(14)  评论(0)    收藏  举报