Open nfssuzukaze opened 3 years ago
Disabled
Blocking
blocking port
BPDU
Listening
Learning
MAC
Forwarding
root bridge
从 blocking 转换到 forwarding 所需要的时间
blocking
forwarding
graph TD A[Blocking -- max age = 20s] --> B[Listening -- forward delay = 15s] B --> C[Learning -- forward delay = 15s] C --> D[forwarding]
50s case:
BID
Max Age
listening
Forward Delay
learning
30s case:
RP
forward delay
在此图片中,当 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
switch
MAC table
switch cache
解决方法:
这种机制是通过 TCN BPDU 实现的(Topology Change Notification BPDU)
TCN BPDU
发现问题的 switch 会通过发送 TCN 告诉 root bridge 拓扑结构发生了变化
TCN
switch1
switch2
TCA
收到 TCN 的 root bridge 会告诉整个网络的 switch ,拓扑结构发生了变化
TC bit
TC
生成树的收敛
802.1D STP Port States
Disabled
(稳定态)Blocking
(稳定态)blocking port
的状态,只会接收BPDU
,不会转发数据帧Listening
(临时态)Learning
(临时态)MAC
地址Forwarding
(稳定态)MAC
地址802.1D STP Timer
root bridge
发送BPDU
的时间间隔Listening
及Learning
所需的时间BPDU
的时间从
blocking
转换到forwarding
所需要的时间802.1D STP Converge
50s case:
root bridge
发来的数据帧,同时,C 的 F0/1端口也可以接收从 B 发来的BPDU
数据帧root bridge
,继续向 C 发送BPDU
数据帧,由于此时 C 中仍保存着之前的BPDU
,经过比较,会发现新的BPDU
中的BID
并没有之前的好,据此就可以知道 B 对应的链路断了Max Age
的时间来等待 B 的恢复,若没有恢复,则 C 的 F0/1 端口从blocking
转换为listening
Forward Delay
的时间,C 的 F0/1 端口从listening
转换为learning
Forward Delay
的时间,C 的 F0/1 端口从learning
转换为forwarding
30s case:
root bridge
发来的数据帧RP
端口接收不到从 A 发来的数据帧,F0/1 从blocking
转换为listening
forward delay
的时间,F0/1 从listening
转换为learning
forward delay
的时间,F0/1 从learning
转换为forwarding
STP Topology Change Mechanism
5 Min Down Time
在此图片中,当 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解决方法:
switch
侦测到拓扑发生变化后,会告诉该网络所有的switch
:拓扑发生了变化。switch
收到了这种通知之后,会将MAC table
的刷新时间从 300s 缩短成了 15s,这种缩短的刷新时间会持续 35s,35s 后又会变成 300s 一次刷新MAC table
更好,因为它不会从表中清除有效传输流量的活动主机这种机制是通过
TCN BPDU
实现的(Topology Change Notification BPDU)发现问题的
switch
会通过发送TCN
告诉root bridge
拓扑结构发生了变化switch1
通过RP
向它的上一层switch2
发送TCN
,而上层的switch2
接收到TCN
后会向该switch1
发送TCA
确认,当switch2
发送了TCA
后,switch2
会向上发送TCN
…… 直到TCN
传递到了root bridge
收到
TCN
的root bridge
会告诉整个网络的switch
,拓扑结构发生了变化root bridge
会将发送的BPDU
中的TC bit
设置为 1,而收到的BPDU
中的TC
为 1 的switch
会将MAC table
的更新时间设置为 15s ,持续 35s