Skip to content

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 时,会按照以下顺序(从上到下)进行比较,一旦分出胜负即停止比较

  1. 最小的 Root ID (RID):谁宣称的根桥 ID 更小?
  2. 最小的 RPC (Root Path Cost):谁离根桥的总开销更小?
  3. 最小的 Sender BID:发送者的 ID 谁更小?
  4. 最小的 Sender PID:发送者的端口 ID 谁更小?
  5. 最小的 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:

  1. SW1-SW2 链路:根桥 SW1 的端口 Cost 为 0,SW2 的 RP 端口 Cost 为 20000。SW1 Gi0/0/1 是 DP
  2. SW1-SW3 链路:同理,SW1 Gi0/0/2 是 DP
  3. 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 Mbps1002,000,000
100 Mbps19200,000
1 Gbps420,000
10 Gbps22,000

注意:在一个网络中,所有设备的路径开销算法必须保持一致,否则可能导致生成树计算错误。 修改命令:[Huawei] stp pathcost-standard ?