广播域中的每台交换机最初假设自己是生成树实例的根网桥,因此发送的 BPDU 帧中将本地交换机的 BID 作为根 ID。 默认情况下,交换机启动后每两秒发送一次 BPDU 帧;也就是说,BPDU 帧指定的 Hello 计时器的默认值为两秒。 每台交换机都维护着有关其 BID、根 ID 以及到根网桥的路径开销的本地信息。

当邻接交换机收到 BPDU 帧时,它们会比较 BPDU 帧内的根 ID 与本地根 ID。 如果 BPDU 中的根 ID 比本地根 ID 低,交换机会更新本地根 ID 和 BPDU 消息中的 ID。 这些消息的作用是告诉网络新的根网桥。 到根网桥的距离也由路径开销更新指示。 例如,如果快速以太网交换机端口上收到 BPDU,路径开销会增加 19。 如果本地根 ID 小于 BPDU 帧内的根 ID,该 BPDU 帧将被丢弃。

交换机的根 ID 更新后,其送出的所有后续 BPDU 帧都会包含新的根 ID 以及更新后的路径开销。 通过这种方式,所有其他邻接交换机就能始终看到最小的根 ID。 随着 BPDU 帧在其他邻接交换机之间传递,路径开销也不断更新,以指示到根网桥的总路径开销。 生成树中的每台交换机使用其路径开销来指示到根网桥的最佳可能路径。

下面概要总结了 BPDU 过程:

注意:优先级是选举根网桥的首个因素。 如果所有交换机的优先级相同,则具有最低 MAC 地址的设备成为根网桥。

1. 最初,每台交换机都将自己视为根网桥。 S2 将 BPDU 帧从所有交换机端口转发出去。 (图 1)

2. 当交换机 S3 从交换机 S2 收到 BPDU 时,S3 将自己的根 ID 与 BPDU 帧中的进行比较。 两者的优先级相同,因此交换机不得不检查 MAC 地址部分,以确定哪个 MAC 地址的值较低。 由于 S2 的 MAC 地址值更低,因此 S3 将自己的根 ID 更新为 S2 的根 ID。 此时,S3 将 S2 视为根网桥。 (图 2)

3. 当 S1 将自己的根 ID 与收到的 BPDU 帧进行比较时,它发现本地的根 ID 值更低,所以它将来自 S2 的 BPDU 丢弃。 (图 3)

4. 当 S3 送出自己的 BPDU 帧时,该 BPDU 帧内包含的根 ID 是 S2 的根 ID。 (图 4)

5. 当 S2 收到该 BPDU 帧时,它检查发现 BPDU 所含的根 ID 与自己的本地根 ID 匹配,所以它丢弃该帧。 (图 5)

6. 由于 S1 自己的根 ID 包含更低的优先级,所以它丢弃从 S3 收到的 BPDU 帧。 (图 6)

7. S1 送出自己的 BPDU 帧。 (图 7)

8. S3 发现 BPDU 帧内的根 ID 值更小,因此它更新自己的根 ID,指出现在的根网桥是 S1。 (图 8)

9. S2 发现 BPDU 帧内的根 ID 值更小,因此它更新自己的根 ID,指出现在的根网桥是 S1。 (图 9)