STP 拓扑计算过程及结果

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,发送者是 A
  • A-5-B:根桥是 A,到根桥开销为 5,发送者是 B
  • A-9-C:根桥是 A,到根桥开销为 9,发送者是 C
  • A-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
BB1B2
CC2C1

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比较