? 当STP协议启用在交换机上时,每个端口都必须经历以下这些阶段。(仅限于802.1D,下述内容均为802.1D STP)

? 从Blocking状态进入Listening状态需要20秒,再从Listening进入Forwarding状态需要30秒,共需50秒。
? Loss of BPDU detected —— BPDU会在交换机端口保存20秒,若在20秒内没有收到BPDU或收到不同的BPDU,则端口开始计时20秒,并准备进入Listening状态。

? 如上图,若交换机A与B之间链路失效,则共需要50秒进行收敛。
? 若交换机A与C之间链路失效,则只需要30秒进行收敛。
? 在下图的情况中,SW-B和SW-C链路失效,使PC-A到PC-B的路径发生改变,但SW-A的MAC地址表并未做出相应改变,依然将PC-B的MAC地址指向SW-B,致使数据无法转发,MAC地址表刷新时间为300秒,则有五分钟的时间导致网络为瘫痪状态。

? 当一个交换机在网络中侦测到了拓扑变化,它会将这个事件通告给整个交换网络。然后通知每台交换机,将MAC地址表老化时间减少到Forward_Delay(默认为15秒)一段时间(Max_age+Forward_delay默认为20+15=35秒)。减少老化时间比直接清除MAC地址表更好,因为正在传输流量的主机不会被影响。
? 这种通告通过TCN BPDU分发到网络中。
? 那么如何定义拓扑变化?
? 通告的过程分为两步
? 在正常的情况下,交换机在根端口上只会收到来自根交换机的Configuration BPDU,而不会发送BPDU,为了实现上述的技术,引入了一种叫做Topology Change Notification(TCN)BPDU。因此,当网络拓扑发生变化时。交换机会在根端口上发送TCN BPDU。当指定端口接收到TCN BPDU,交换机会在自己的根端口生成一个BPDU向上转发,这个过程会持续到根交换机收到TCN为止。
? TCN BPDU是一个很简单的BPDU,它不包含交换机信息,只是随着hello_time发出。(但该hello_time均为本地配置,而不是指的是configuration BPDU的Hello Time)
? 交换机的指定端口通过收到一个带有Topology Change Acknowledgement(TCA)Configuration BPDU来确定上游交换机收到了TCN BPDU。通知拓扑更改的交换机不会停止发送TCN直到其上游交换机返回一个TCA,因此,即使上游交换机没有收到来自根桥的TCA,也会向通知拓扑更改的交换机发送TCA。

? 一旦根桥知道了网络拓扑的变动,它就开始发送BPDU中TC bit = 1的Configuration BPDU。这样能网络中所有的交换机都能够知晓网络拓扑发生了变化,并将MAC地址表老化时间转换到forward_delay。

如下图,当交换机A与交换机C之间的链路失效,交换机C由于没有根端口,则无法发出TCN,则交换机A作为根桥直接下发TCN。

? 当局域网中突然有大量端口状态的转变,则将会造成TCN与TC的洪泛,占用大量带宽,甚至可能影响业务的运行。
