STP选举出根桥,确定了端口角色后,生成树收敛,环路消除。
可是,STP的计算毕竟需要一个过程,需要一点时间。那么在选出根桥和确定端口角色之前,是不是还是有环路呢?
没错,在生成树收敛前,确实存在临时环路。
为了避免临时环路,STP引入了“端口状态”。
STP规定,端口在初始情况下,全部都是Blocking状态!
什么是Blocking状态?处于这种状态的端口,只会接收BPDU,除此之外啥也不干!既不会接收任何数据,更不会发送任何报文,包括BPDU。
这样一来,肯定没有环路了:谁都不发东西,哪来的环路呢。
接着,STP一声令下,所有端口的状态由Blocking变成了Listening状态。
处于Listening状态的端口,会发会收BPDU,除此之外啥也不干。
既然会发会收BPDU,那么STP就可以开始干活了:选举根桥,确定根端口、指定端口和阻塞端口。
被选为AP的阻塞端口,STP把它们的端口状态由Listening状态立即变回Blocking状态。
被选为RP和DP的端口,STP经过Forwarding Delay时间(默认15秒)后,把它们的状态由Listening状态变成Learning状态。
处于Learning状态的端口,和Listening状态一样会发会收BPDU,不会转发其他任何数据,但比Listening状态多做一件事,会学习MAC地址表,也就是会把端口收到报文中的源MAC地址写进MAC地址表中,或更新它的老化时间。
经过Forwarding Delay时间后,STP把Learning状态的端口再变成Forwarding状态。
Forwarding状态是端口的最终稳定状态。处于Forwarding状态的端口会收发任何数据,也会学习更新MAC地址表,和正常端口一样。
端口状态迁移完成后,处于Forwarding状态的端口开始正常收发数据,而Blocking状态的端口阻塞,除会接收BPDU外,不转发任何数据,环路因此消除。
我们注意到,AP端口一定是Blocking状态,而RP和DP端口一定是Forwarding状态,只是RP和DP端口要变成Forwarding状态,需要经过2倍Forwarding Delay时长,默认30秒后,才开始转发数据。
领取专属 10元无门槛券
私享最新 技术干货