![](https://i-blog.csdnimg.cn/direct/511ff7142e244b54b9c805088ec544d7.png)
![](https://i-blog.csdnimg.cn/direct/f8c7f720fd8447858172171af5aad74d.png)
![](https://i-blog.csdnimg.cn/direct/aa7baf4452534ee098b028ec5b4c921f.png)
![](https://i-blog.csdnimg.cn/direct/000b3c783660446f8d204690d41855be.png)
配置报文的内容如上图所示,在一开始的时候,所有的报文都会认为自己是根桥,在比对了优先级,mac地址等要素后,才会更换根桥。
stp的收敛速度慢的原因,就在端口转换和max age这两点上。stp并不关心环境之中的报文变化,哪怕链路已经断开,下游交换机发来更优的报文,它也不会更新,只会等20S之后才会开始转换,而forward delay时间则导致stp需要等30秒才会转换完毕,因此最长的收敛时间为50s。
BPDU在stp的环境中有两个情况,一个是配置BPDU,一个是拓扑变化bpdu(txn)
配置bpdu只有根桥会发送,其他的交换机只是做处理(也就是将根交换机里关于bridge的描述,更改为自己的)后转发,并不会主动发送BPDU。
但在环境变化的时候(在使用stp的情况,增加链路或者链路断开的情况都属于环境变化),stp会主动发送拓扑变化bpdu。
目前sw1到sw3的线路断开了。
原本sw3的2端口是锁定端口,即bp,那么它在感知到下一跳链路断开后,会向SW1发送bpdu(tcn),如下
而sw2的指定端口则会发送回应
注意看bpdu的flag位,回复的tca和拓扑变化的tc都是亮的(华为对stp做了优化,许多内容都是基于rstp改编的,所以收敛速度比stp快许多,也不需等那么久。
回复完这次之后,sw2的其他报文就没tca了
总结:
stp在链路未稳定时,会相互发送bpdu报文,根据bpdu报文的内容(优先级,mac地址等决定根交换机,然后决定相对ing的端口(指定端口,根端口,锁定端口)
在更新链路信息时,临近端口会发送tc(拓扑变化)报文给上端指定端口,直到根桥。而指定端口会回复tca(tc报文里的tcaflag为1),同时根桥会发送tc报文(通知),并会连续发送段时间。
图形理解如下