nfssuzukaze / Blog

0 stars 0 forks source link

生成树的收敛 #8

Open nfssuzukaze opened 3 years ago

nfssuzukaze commented 3 years ago

生成树的收敛

802.1D STP Port States

802.1D STP Timer

Timer Primary Purpose Default
Hello Time root bridge 发送 BPDU 的时间间隔 2s
Forward Delay 转换到 ListeningLearning 所需的时间 15s
Max Age 存储 BPDU 的时间 20s

blocking 转换到 forwarding 所需要的时间

graph TD
A[Blocking -- max age = 20s] --> B[Listening -- forward delay = 15s]
B --> C[Learning -- forward delay = 15s]
C --> D[forwarding]

802.1D STP Converge

2020-11-08_15-47

50s case:

30s case:

STP Topology Change Mechanism

5 Min Down Time

2020-11-08_21-22

在此图片中,当 ABCD 链路出现问题时,SWA 会用 30s 的时间将 blocking 的端口转换为 forwarding ,但是数据包并没有立马就通过转换为 forwarding 的端口发送出去,其原因就在于每个 switch 都有自己的 MAC table ,而这个 MAC table 会在 switch cache 中存储 300s,因此就算生成树以 30s 收敛完毕,但是由于 MAC table 并没有及时更新,所以从主机 A 发向主机 B 的数据帧在这段时间内仍会通过连接 SWB 的 SWA 的端口发送出去,直到 MAC table 更新之后才会直接从 SWA 发向 SWD

解决方法:

这种机制是通过 TCN BPDU 实现的(Topology Change Notification BPDU)

  1. 发现问题的 switch 会通过发送 TCN 告诉 root bridge 拓扑结构发生了变化 2020-11-08_22-06

    • switch1 通过 RP 向它的上一层 switch2 发送 TCN ,而上层的 switch2 接收到 TCN 后会向该 switch1 发送 TCA 确认,当 switch2 发送了 TCA 后,switch2 会向上发送 TCN …… 直到 TCN 传递到了 root bridge
  2. 收到 TCNroot bridge 会告诉整个网络的 switch ,拓扑结构发生了变化 2020-11-08_22-16

    • root bridge 会将发送的 BPDU 中的 TC bit 设置为 1,而收到的 BPDU 中的 TC 为 1 的 switch 会将 MAC table 的更新时间设置为 15s ,持续 35s