STP 拓扑计算过程及结果

拓扑定义
用一个环形拓扑来推一遍 STP 的完整计算过程。
三台交换机 A、B、C 互联成环:
- A 通过 A1(左手)、A2(右手)分别连向 B1、C1
- B 通过 B1(左手)、B2(右手)分别连向 A1、C2
- C 通过 C1(左手)、C2(右手)分别连向 A2、B2
“左手"“右手"只是标识,逻辑上每台交换机各有两个端口参与环网。
链路开销如下:
- A—B:cost = 5
- A—C:cost = 10
- B—C:cost = 4
BPDU 报文格式
下文所有 BPDU 统一用三段式表示,格式为:
根桥ID-到根桥累计开销-发送者BID
即:
- 第一段:根桥的标识
- 第二段:从本端口到根桥的总开销
- 第三段:发送这条 BPDU 的交换机的 BID
举例:
A-0-A:根桥是 A,到根桥开销为 0,发送者是 AA-5-B:根桥是 A,到根桥开销为 5,发送者是 BA-9-C:根桥是 A,到根桥开销为 9,发送者是 CA-10-C:根桥是 A,到根桥开销为 10,发送者是 C
所有计算均围绕"哪条路径到根桥的累计开销更小"展开。
第一步:确定根桥
STP 先选根桥,比较依据是 BID(Bridge ID)。BID 由两部分组成:
- 优先级
- MAC 地址
三台交换机各自通过两个端口收到对方的 BPDU 后,比较 BID。三台交换机一致认为 A 的 BID 最小,因此 A 成为根桥。
第二步:确定各非根桥的根端口(RP)
根端口是每台非根桥上,离根桥最近、cost 最小的那个端口。
B 的根端口选择
B 的两个端口收到的 BPDU 如下:
- B1 收到 A1 发来的 BPDU:
A-0-A - B2 收到 C2 发来的 BPDU:
A-10-C
B 在此基础上叠加自身到达根桥的 cost:
- 经 B1 去根桥:cost = 5
- 经 B2 去根桥:cost = 14
B1 的 cost 更小,因此 B1 是 B 的根端口。
C 的根端口选择
C 的两个端口收到的 BPDU 如下:
- C1 收到 A2 发来的 BPDU:
A-0-A - C2 收到 B2 发来的 BPDU:
A-5-B
C 叠加自身 cost 后:
- 经 C1 去根桥:cost = 10
- 经 C2 去根桥:cost = 9
C2 的 cost 更小,因此 C2 是 C 的根端口。
第三步:确定指定端口(DP)
指定端口的指派原则是:同一链路上,能把更优 BPDU 转发到对面的那个端口成为 DP。
A 已是根桥,因此 A 的所有端口都是指定端口:
- A1:DP
- A2:DP
接下来逐段链路比较:
A—B 段
- A1 发出的 BPDU:
A-0-A - B1 自身计算后要发出的 BPDU:
A-5-B
两侧比较,A1 的 cost 更优,因此 A1 是 DP,B1 作为根端口不参与 DP 竞争。
A—C 段
- A2 发出的 BPDU:
A-0-A - C1 自身计算后要发出的 BPDU:
A-10-C
A2 的 cost 更优,因此 A2 是 DP。
B—C 段
- B2 发出的 BPDU:
A-5-B - C2 发出的 BPDU:
A-9-C
B2 的 cost(5)比 C2 的 cost(9)更优,因此 B2 是 DP。
C2 虽然自身是根端口,但在这条链路上它不是 DP,DP 由对侧 B2 获得。
第四步:阻塞端口
每个非根桥最多只能有 1 个根端口 和 若干指定端口,其余端口必须进入 blocking 状态,以打破环路。
C 的两个端口结果如下:
- C2:根端口(RP)
- C1:既不是根端口,也不是指定端口
因此 C1 被阻塞,环路被打破。
总结
| 交换机 | 根端口(RP) | 指定端口(DP) | 阻塞端口 |
|---|---|---|---|
| A(根桥) | — | A1、A2 | — |
| B | B1 | B2 | — |
| C | C2 | — | C1 |
BPDU 的核心比较逻辑始终是:拿对方发来的 BPDU 和自身计算后的 BPDU 做比较,谁的到根桥 cost 更小,谁就在这条链路上占优。
原始手稿
认为的 A就是交换机,B就是交换机,C就是交换机 A1就是左手,A2就是右手 B1就是左手,B2就是右手 C1就是左手,C2就是右手 然后ABC互联了一个环形网需要STP破环 第一步先确定交换机角色,先选择根桥 A,是他的大脑,他通过左右手A1和A2收到B1和C1的BPDU报文 B,是他的大脑,他通过左右手B1和B2收到A1和C2的BPDU报文 C,是他的大脑,他通过左右手C1和C2收到A2和B2的BPDU报文 选择根桥比较BID,选择最小BID,BID的组成是优先级和大脑MAC, A通过左右手A1和A2收到B1和C1的BPDU报文,认为自己的优先级最小 B通过左右手B1和B2收到A1和C2的BPDU报文,认为A的优先级最小 C通过左右手C1和C2收到A2和B2的BPDU报文,认为A的优先级最小 A成为根桥 第二步再确定根端口 B通过左右手B1和B2收到A1和C2的BPDU报文,B1收到bpdu报文是A1发来的,为A-0-A,分别代表根桥-到根桥的开销-发送者BID。B2收到的bpdu报文假设也是更新过的,为A-10-C,分别代表根桥-到根桥的开销-发送者BID。然后B拿着收到两条BPDU,加上自己cost计算以下,我B从B1去根桥cost是5,从B2去根桥cost是14,然后B1成为根端口 C通过左右手C1和C2收到A2和B2的bpdu报文,C1收到的bpdu报文是A2发来的,为A-0-A,分别代表根桥-到根桥的开销-发送者BID。C2收到的bpdu报文是B2发过来的假设已经是更新过的,B2发来的是A-5-B,分别代表根桥-到根桥的开销-发送者BID。然后C拿着收到的两条bpdu,加上自己的cost计算,认为我C从C1去根桥cost要10,从C2去根桥cost要9,然后C2成为根端口 再然后选择指定端口 然后是选择DP 清空所有说辞 A已然是根桥了 B通过B1收到A1发来的,是A-0-A,B1自身是计算过的,是A-5-B,cost比不过,A1是DP C通过C1收到A2发来的,是A-0-A,C1自身是计算过的,是A-9-C(因为C2是RP),cost比不过,A2是DP B通过B2收到C2发来的,是A-9-C(因为C2是RP),B2是自身计算过的,是A-5-B,cost比不过,B2是DP C通过C2收到B2发来的,是A-5-B,C2是自身计算过的,是A-9-C(因为C2是RP),cost比不过,B2是DP 然后最重要的,C看自己的左右手C1和C2,两个都是计算好的,C1是A-10-C,C2是A-9-C,C2的cost更小,C2是RP,C1不是RP也不是DP就block bpdu的计算,是用对方发来的,和自己计算后去跟桥的bpdu比较