第一阶段
1、一开始大家都是各自认为自己是根桥,然后向所有端口发送自己为根桥且P位置1的BPDU,同时发送这些报文的端口此时的角色是DP端口,同时状态为discarding。那么在这个过程中,高优先级的交换机是不会响应这些BPDU的。所以在上图中的SW1是不会响应SW2,SW3和SW4的BPDU的,但是SW2,SW3和SW4经过比对发现SW1的桥ID是最高的,那么SW2和SW3会将G0/0/1变为根端口同时回送一个根桥为SW1且A置1的BPDU给SW1,而SW4也会将G0/0/3变为根端口同时回送一个根桥为SW1且A置1的BPDU给SW1,同时它们会将根端口的状态直接变为forwarding,那么SW1的各个DP端口接受到A置1的BPDU后也会将DP端口的状态从discarding变为forwarding。
第二阶段
SW2,SW3,SW4在确定了根端口并且将根端口的状态变为forwarding后,它们会根据从根端口收到的BPDU计算各个指定端口要发送的BPDU。发送的BPDU主要内容包括下面四个字段:
根桥的桥ID
去往根桥的COST
自身的桥ID
发送该BPDU的接口ID
通过比对从非根桥收到的P置1的BPDU,它们会发现这些BPDU没有根桥的BPDU更优,所以是不会回应A置1的BPDU。而且交换机在接受到非根桥的BPDU的过程其实也是确定指定端口的过程,比如SW2和SW3之间的G0/0/2在互送计算后的BPDU后会判断谁的BPDU更优先,因为SW2是次根桥,所以SW2的BPDU更优,那么SW3的G0/0/2接口就不会发送计算后的P置1的BPDU,状态就直接变为了Alternative,但是SW2还是会不断发送计算后的P置1的BPDU,那么SW2的G0/0/2端口还是要经过30S的状态迁移后才能从discarding变为forwarding,上图中其他的也是这样类似的过程。
但是虽然有些端口还是需要30S的过渡时间,但是在前面几次的BPDU的交互后各个交换机的根端口就已经确定而且都还转换到forwarding状态,那么其实一个无环图就已经确定了,那么只要无环图确认出来的,其实其他指定端口的状态慢点确定其实也无所谓,如下图:
RSTP端口状态 | 端口状态对应的行为 | |
Disabled | Discarding | 如果不转发用户流量也不学习MAC地址,那么端口状态就是Discarding状态。 |
Blocking | ||
Listening | ||
Learning | Learning | 如果不转发用户流量但是学习MAC地址,那么端口状态就是Learning状态。 |
Forwarding | Forwarding | 如果既转发用户流量又学习MAC地址,那么端口状态就是Forwarding状态。 |