目录
BPDU
STP选举机制
STP端口状态
STP计时器
STP拓扑变更机制
生成树协议(Spanning Tree Protocol),简写为STP。
STP是二层网络中用于消除环路的协议,通过阻塞冗余链路,使可用链路在拓扑上呈现出无环的树结构,消除网络中可能存在的环路。当前活动链路发生故障时,激活冗余链路,恢复网络连通性。
BPDU
桥协议数据单元,用于传递STP协议相关的报文。
分类
-
配置BPDU
-
传递STP配置信息,用来进行生成树的选举。
-
网桥(交换机)通过交互配置BPDU,获取STP计算所需的参数。
-
配置BPDU基于二层组播方式发送,组播地址是:01-80-C2-00-00-00。
-
配置BPDU只由根桥周期性发出,发送周期(Hello Time)为2秒。
-
-
TCN BPDU
-
通告拓扑变更信息。
-
非根交换机发的拓扑变化通知,用于报错使用。
-
STP数据帧格式
-
Protocol ID
-
协议ID,表明使用的协议。
-
-
Protocol Version ID
-
协议版本标识符,STP协议中该值为0。
-
RSTP为2。
-
MSTP为3。
-
-
BPDU Type
-
BPDU类型。
-
STP的配置BPDU:0x00。
-
STP的TCN BPDU:0x80。
-
MSTP或者RSTP的BPDU:0x02。
-
-
Flags
-
8个标记位。最左边(最高位)置位时,表示TCA;最右边(最低位)置位时,表示TC。中间的6位保留。
-
TC,根桥发出的用来描述拓扑变化信息的,其他交换机收到后会将MAC地址表老化时间由300秒缩短至15秒。
-
TCA,拓扑变化确认。交换机收到拓扑变化报文后回复,表示收到了。
-
两者属于配置BPDU中因Flags置位不同而产生的两种消息。
-
-
Root ID
-
网桥ID都是8个字节,前两个字节是网桥优先级,后6个字节是网桥MAC地址。
-
-
Root Path Cost
-
根路径开销,本端口累计到根桥的开销。
-
-
Bridge ID
-
发送者BID,本交换机的BID。
-
-
Port ID
-
发送端口PID,发送该BPDU的端口ID。
-
-
Message Age
-
该BPDU消息存在于交换机中的时间(老化时间)。
-
-
Max Age
-
类似于保活时间,交换机间周期发送配置BPDU保活,每2秒发送一次,10次后还没收到回包(20秒),就判定对方宕机。MAX Age = 10 * Hello Time。
-
-
Hello Time
-
发送两个相邻BPDU间的时间间隔,一般2秒。
-
-
Forward Delay
-
控制Listening和Learning状态的持续时间。
-
STP选举机制
根桥的选举
在所有交换机中选出一台作为根网桥(Root Bridge),其他交换机都为非根网桥。
-
选举规则
-
Bridge id小的优先。
-
-
Bridge id
-
桥ID,用来标识交换机的身份,简写为BID。
-
格式:优先级 - MAC地址
-
默认优先级为32768,优先级必须是4096的倍数。
-
根端口的选举
每台非根网桥选举出一个根端口(Root Port)。
-
选举规则
-
到达根网桥开销值小的优先。
-
对端交换机BID小的优先。
-
端口ID小的优先。
-
-
端口ID
-
格式:优先级+端口号(交换机接口编号)。
-
优先级取值为0 - 240,默认为128,端口优先级必须是16的倍数。
-
-
开销
-
即cost,代表路径耗费的代价和成本,带宽越大,开销越小。
-
指定端口的选举
每个物理段上选举出一个指定端口(Designated Port)。
-
选举规则
-
到达根网桥开销小的优先。
-
本机BID小的优先。
-
端口ID小的优先。
-
闭塞端口的选举
上面的角色选举完成后,剩下的端口就是闭塞端口(Blocked Port)。
注意
-
根桥和端口角色的选举同步进行,不存在先后关系。
-
选举时间(STP计算的时间)为30秒。
STP端口状态
Disable
-
禁用状态,被手动关闭的端口。
-
不发送配置BPDU,不进行MAC地址表的学习,不收发数据。
-
不接收来自根桥的配置BPDU。
Blocking
-
阻塞状态,闭塞端口所在的状态。
-
不发送配置BPDU,不进行MAC地址表的学习,不收发数据。
Listening
-
监听状态,是一个过度状态,持续时间为15秒。
-
发送配置BPDU,不进行MAC地址表的学习,不收发数据。
Learning
-
学习状态,也是一个过度状态,持续时间为15秒。
-
发送配置BPDU,进行MAC地址表的学习,不收发数据。
Forwarding
-
转发状态。
-
发送配置BPDU,进行MAC地址表的学习,收发数据。
当网络出现变化(有交换机故障),整个网络的角色将会重新计算,这个过程至少需要30秒(因为Listening和Learning两个状态)。
STP计时器
Hello Time
-
配置BPDU的发送周期,2秒。
Max Age
-
判断链路故障的时间,10 * Hello Time = 20秒。
Forwarding Delay
-
状态切换延迟,15秒。
STP的收敛时间
-
初次收敛时间 --- 30秒
-
存在故障接口的交换机能迅速接收到来自其他交换机转发的配置BPDU,只需要等待两个状态切换延迟就能收敛。
-
-
拓扑故障再收敛时间 --- 50秒
-
存在故障接口的交换机不能接收来自其他交换机转发的配置BPDU,此情况下,需要等待一个Max Age和两个状态切换延迟才能收敛。
-
STP拓扑变更机制
STP协议收敛时间为30秒或50秒,当网络中出现故障时,等待STP收敛后就可以正常转发数据了吗?
当网络收敛完成,交换机的MAC地址表是否会有300秒的老化时间。在MAC地址表没刷新前,数据包按照之前的路径走,肯定不可能顺利到达目的地。STP也有解决该问题的方案。
处理方案
-
交换机感知到拓扑变更,交换机向根桥发送TCN BPDU。
-
Max Age超时、有接口状态变更,都判定为拓扑变更。
-
-
沿途的非根网桥收到TCN BPDU后,会继续向根桥转发。
-
根桥收到TCN BPDU后,在下一轮配置BPDU中将TC置位,通告拓扑变更。
-
所有交换机收到根桥TC置位的配置BPDU后,将MAC地址表老化时间由300秒缩短到15秒。并向根桥回复TCA置位的配置BPDU。
该机制和收敛同时进行。