STP 选举机制与角色详解
STP 通过特定的算法在交换网络中选举出一个根桥 (Root Bridge),并阻塞部分冗余端口,形成一棵无环的生成树。这一过程依赖于 BPDU (Bridge Protocol Data Unit) 报文的交互。
1. 核心角色与概念
1.1 三种角色 (Roles)
在 STP 计算中,涉及三种主要角色:
| 角色 | 英文 | 描述 | 数量 | 状态 |
|---|---|---|---|---|
| 根桥 | Root Bridge | 整个生成树的逻辑中心(树根)。 | 全网 有且仅有 1 台 | 所有端口均为转发状态 (DP) |
| 根端口 | Root Port (RP) | 非根桥去往根桥路径开销最小的端口。 | 每个非根桥 有且仅有 1 个 | 转发 (Forwarding) |
| 指定端口 | Designated Port (DP) | 负责向该网段发送 BPDU 的端口。 | 每条链路 有且仅有 1 个 | 转发 (Forwarding) |
| 阻塞端口 | Alternate/Blocking Port (AP) | 既不是 RP 也不是 DP 的端口。 | 剩余所有端口 | 阻塞 (Discarding) |
1.2 选举四步走
STP 的选举过程严格遵循以下四个步骤,顺序不可颠倒:
STP 初始化
⬇️
1. 选举根桥 (Root Bridge)
全网唯一
⬇️
2. 选举根端口 (RP)
每个非根桥一个
⬇️
3. 选举指定端口 (DP)
每条链路一个
⬇️
4. 阻塞剩余端口 (Block)
⬇️
生成树构建完成
2. BPDU 报文与比较原则
STP 交换机之间通过发送 配置 BPDU (Configuration BPDU) 来交换信息。BPDU 中包含了选举所需的关键参数。
2.1 BPDU 关键字段
| 字段 | 长度 | 描述 | 作用 |
|---|---|---|---|
| Root ID (RID) | 8字节 | 根桥的 ID | 用于选举根桥。越小越优。 |
| RPC (Root Path Cost) | 4字节 | 根路径开销 | 到达根桥的累计开销。越小越优。 |
| Bridge ID (BID) | 8字节 | 发送者的 ID | 用于打破平局(Sender BID)。越小越优。 |
| Port ID (PID) | 2字节 | 发送端口的 ID | 用于打破平局(Sender PID/Port Priority)。越小越优。 |
- Bridge ID (BID) 格式:
优先级 (2字节)+MAC 地址 (6字节)- 优先级默认 32768,必须是 4096 的倍数。
- Port ID (PID) 格式:
端口优先级 (1字节)+端口号 (1字节)- 端口优先级默认 128,必须是 16 的倍数。
2.2 比较原则 (越小越优)
当交换机收到多个 BPDU 时,会按照以下顺序(从上到下)进行比较,一旦分出胜负即停止比较:
- 最小的 Root ID (RID):谁宣称的根桥 ID 更小?
- 最小的 RPC (Root Path Cost):谁离根桥的总开销更小?
- 最小的 Sender BID:发送者的 ID 谁更小?
- 最小的 Sender PID:发送者的端口 ID 谁更小?
- 最小的 Local PID:接收端口的 ID 谁更小?(仅在同一交换机接收时比较)
3. 选举过程实战推演
假设有三台交换机 SW1, SW2, SW3 连接成环形拓扑,链路带宽均为 1Gbps (Cost=20000)。
- SW1: MAC =
4c1f-cc00-0001, Priority = 32768 - SW2: MAC =
4c1f-cc00-0002, Priority = 32768 - SW3: MAC =
4c1f-cc00-0003, Priority = 32768
text
SW1 (Root)
/ \
Gi0/0/1 Gi0/0/2
/ \
Gi0/0/1 Gi0/0/1
SW2 -------- SW3
Gi0/0/2 Gi0/0/2第一步:选举根桥 (Root Bridge)
- 所有交换机通过 BPDU 互相通告 BID。
- 比较:SW1, SW2, SW3 的优先级都是 32768。
- 决胜:SW1 的 MAC (
...01) < SW2 (...02) < SW3 (...03)。 - 结果:SW1 成为 Root Bridge。
第二步:选举根端口 (RP)
对于非根桥 SW2 和 SW3:
- SW2:
- 路径 1 (Gi0/0/1 直连 SW1): RPC = 0 (根发出) + 20000 (入接口) = 20000。
- 路径 2 (Gi0/0/2 经 SW3): RPC = 20000 (SW3到根) + 20000 (SW2到SW3) = 40000。
- 结果:20000 < 40000,SW2 的 Gi0/0/1 是 RP。
- SW3:
- 同理,SW3 直连 SW1 的路径开销最小。
- 结果:SW3 的 Gi0/0/1 是 RP。
第三步:选举指定端口 (DP)
每条链路上必须有一个 DP:
- SW1-SW2 链路:根桥 SW1 的端口 Cost 为 0,SW2 的 RP 端口 Cost 为 20000。SW1 Gi0/0/1 是 DP。
- SW1-SW3 链路:同理,SW1 Gi0/0/2 是 DP。
- SW2-SW3 链路 (关键):
- 比较 RPC:SW2 到根 Cost=20000,SW3 到根 Cost=20000。平局。
- 比较 BID:SW2 MAC (
...02) < SW3 MAC (...03)。SW2 胜出。 - 结果:SW2 的 Gi0/0/2 是 DP。
第四步:阻塞剩余端口 (Block)
- 全网只剩下 SW3 的 Gi0/0/2 端口。
- 该端口既不是 RP,也不是 DP。
- 结果:SW3 的 Gi0/0/2 被阻塞 (Blocking),处于 Discarding 状态。
4. 路径开销 (Path Cost) 标准
华为设备支持多种路径开销计算标准,常用的有:
| 链路带宽 | IEEE 802.1d-1998 (旧标准) | IEEE 802.1t (新标准, 华为默认) |
|---|---|---|
| 10 Mbps | 100 | 2,000,000 |
| 100 Mbps | 19 | 200,000 |
| 1 Gbps | 4 | 20,000 |
| 10 Gbps | 2 | 2,000 |
注意:在一个网络中,所有设备的路径开销算法必须保持一致,否则可能导致生成树计算错误。 修改命令:
[Huawei] stp pathcost-standard ?