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 ?

真人撰写written by human