STP协议概述
STP(Spanning Tree Protocol)中文名称生成树协议,应用在数据链路层,用来阻塞交换机端口,消除环路,实现链路备份。
STP协议原理
1、通过一系列选举,“阻塞”某个接口打破环路
2、当其他接口出现故障,“阻塞接口”及时恢复转发状态,使得网络正常通信
STP的端口选举
端口选举是比较配置BPDU(网桥协议数据单元,交换机每2s发送一次)的优劣。BPDU报文涉及根桥选举的关键字段:
1、RID(Root Identifier):这台交换机认为哪个设备是根桥(内容为:优先级(默认32768),开销,mac地址)
2、RPC(Root Path Cost):交换机自身到根桥的开销
3、BID(Bridge Identifier):发送该配置BPDU交换机的桥ID
4、PID(Port Identifier):标识发送配置BPDU端口ID。例子:BPDU从交换机端口0/0/3发出,则发送配置BPDU的PID为0x8003(十六进制):第一个字节80是端口优先级(可修改,默认值200即十六进制0x80),第二个字节03是端口编号。
交换机在比较BPDU优劣是按照从1到4顺序比较,均是越小越优,在本条相同的情况下,才向下比较。
STP端口角色
根端口(RP):非根交换机上,接收最优BPDU的端口
指定端口(DP):当前链路上,发送最优BPDU的端口
预备端口(AP):当前链路上,接收最优BPDU的端口,将被阻塞
STP工作步骤
1、在网络上选举根桥
初始状态,各交换机都自认为是根桥,向外发送自己配置的BPDU,比较出当前链路上最优BPDU,最终比较出全网络中最优BPDU。确定出根桥。根桥发送的BPDU中BID,RID中的mac都是自身的。
2、在非根交换机上选举根端口
端口接收根桥的配置BPDU,该端口设置为根端口,且非根交换机只有一个根端口。根端口相连的另一端为指定端口。
在该环节比较BPDU报文优先级时,由于已经选定根桥,所有BPDU的RID相同,所以比较每个非根交换机上各个端口收到来自根桥的BPDU累加的cost值(即RPC),BID,PID。
3、在每段链路上选举指定端口
非根交换机在比较BPDU阶段,RID中mac都为根桥的mac,RPC需要累加根端口的开销值;
如果自身发送的更优,则该发送端口为指定端口;
如果收到的更优,则该接收端口为预备端口,被阻塞。
在该环节比较BPDU报文优先级时,由于已经选定根桥,所有RID相同。所以比较RPC、BID、PID。
STP的端口状态
Forwarding(转发):转发数据、学习MAC地址、接收并处理BPDU
Learning(学习):不转发数据、学习MAC地址、接收并处理BPDU
Listening(侦听):不转发数据、不学习MAC地址、接收并处理BPDU
Blocking(阻塞):不转发数据、不学习MAC地址、仅接收BPDU
Disabled(失效):不转发数据、不学习MAC地址、不处理BPDU----接口状态为Shutdown
前三者状态变迁间隔15s
STP拓扑变更机制
触发条件:非边缘端口进入Forwarding状态(可以认为多了环路,或者少个环路)
过程:
①如何非根桥上发生拓扑变化,此时非根桥会向根桥的方向发送TCN BPDU,告知根桥发生变化。上联的非根桥从指定端口收到TCNBPDU后,向发送者回复TCA位置位的配置BPDU,并继续向根桥方向发送TCN BPDU
② 根桥收到TCN BPDU后,向发送者方向回复TCA位置位的配置BPDU,同时向所有指定端口发送TC位置位的配置BPDU,TC置位的配置会连续发送35s,同时将自己的MAC老化时间设置位15s
③其他非根桥收到TC置位的配置BPDU后,将自己的MAC地址老化时间设置为15s,加速MAC地址表的老化(边缘端口除外)
TCN:告诉根桥拓扑发生了变化,需要加快MAC地址表老化
TCA:告诉发送TCN报文的设备,“已经收到,停止发送TCN”
TC:只要是收到TC置位的BPDU交换机,MAC地址表的老化时间变为15s
TCN报文:
TC报文:
STP计时器
BPDU中实现stp计时器的参数
Message Age:标识BPDU经历过多少交换机,每经历一台交换机+1,如果该值大于Max Age则丢弃BPDU
Max Age:
可以控制BPDU可以传递多少台交换机(若该值为20,则可以传递20台交换机)
端口缓存BPDU的老化时间(如果根端口在Max Age时间内没有收到根的BPDU则认为根桥失效)
Hello Time:根桥发送BPDU的时间间隔(默认2s)
Forward Delay:转发延时,learing和listing转换的持续时间(默认15s)。防止某些场景出现瞬时环路。
STP的缺点
1、收敛速度慢。依赖定时器,使得直连故障恢复时间30s(Learning-Listening-Forwarding其中每段状态转换需要15s),非直连故障恢复时间50s(状态换30秒+丢弃BPDU20秒)
2、单实例生成树,链路利用率低。只支持一个树,所有数据转发都经过该链路,而被阻塞的链路始终闲置。