STP中的桥ID(根桥ID,自身桥ID),路径开销,端口ID等信息,都通过BPDU协议报文传输。即四要素。
STP中包含两种BPDU类型,配置BPDU和TCN BPDU,TC BPDU(topology change,拓扑变化)和TCA BPDU(topology change ack,拓扑变化确认) 都是配置BPDU的一种。属于配置BPDU中不同的flag置位。
- 配置BPDU是一种心跳报文只要端口使能STP,则配置BPDU就会按照hello time 定时器规定的时间间隔从指定端口发出。
- TCN BPDU是在设备检测到网络拓扑发生变化才发出的。
BPDU报文被封装在以太网数据帧中,目的MAC是组播MAC:01-80-C2-00-00-00,length字段指后续数据的字节长度,但不包括CRC字节,后面是LLC头,LLC之后是BPDU报文头(在data中)。
在初始化过程中,每个桥都主动发送配置BPDU,但是在网络拓扑稳定后,只有根桥主动发送配置BPDU,其他桥在收到上有传来的配置BPDU后,才触发发送自己的配置BPDU。
配置BPDU的长度至少35字节,包括桥ID,路劲开销,端口ID等参数。
只有当发送者的BID或者端口的PID两个字段中至少有一个和本桥接收端口不同,BPDU报文才会被处理,否则丢弃,这样避免了处理和本端口信息一致的BPDU报文。
配置BPDU在3种情况下产生:- 只要端口使能STP,则配置BPDU就会按照HelloTime定时器规定的时间间隔从指定端口发出。
- 根端口收到配置BPDU时,如果优先级比自己的配置BPDU高,就会根据收到的配置BPDU中携带的信息更新自己的BPDU,并从指定接口向下游发送,否则丢弃该配置BPDU。
- 指定端口收到比自己差的配置BPDU时,会立刻向下游设备发送自己的BPDU。
允许STP协议的设备发送配置消息BPDU的时间间隔,用于设备检测链路是否存在故障。设备每隔hello time 时间会向周边的设备发送hello报文,以确定链路是否存在故障。当网络拓扑稳定后,该计时器的修改只有在根桥修改后才有效。TCN BPDU的发送不受这个计时器的管理。
forward delay设备状态迁移的延迟时间。链路故障会引发网络重新进行生成树的计算,生成树的结构将发生相应的变化。不过重新计算得到的新配置消息无法立刻传遍整个网络,如果新选出的根端口和指定端口立即就开始数据转发的话,可能会造成临时环路。STP采用了一种状态迁移机制,新选出的根端口和指定端口要经过2倍的forward delay延时后才能进入转发状态,这个延时保证了新的配置消息传遍整个网络,从而防止了临时环路的产生。forward delay timer指一个端口处于listening和learning状态的各自持续时间,默认各15秒。
Message Age该BPDU的消息年龄。
等于从根桥发送到当前桥接收到BPDU的总时间(包括传输时延),如果配置BPDU是根桥发出的,则MessageAge为0。实际实现中,配置BPDU报文经过一个桥,MessageAge增加1.
端口的BPDU报文老化时间,可在根桥上通过命令人为改动老化时间。Max Age通过配置BPDU报文的传输,可保证Max Age在整网中一致。运行STP协议的网络中非根桥设备收到配置BPDU报文后,报文中的Message Age和Max Age会进行比较:
- 如果Message Age 小于或等于Max Age,则该非根桥设备继续转发配置BPDU报文。
- 如果Message Age 大于Max Age,则该配置BPDU报文将被老化。该非根桥设备直接丢弃该配置BPDU,可以认为网络直径过大,导致根桥连接失败。
- rootidentifier :当前根桥BID
- rootpathcost:本端口累计到根桥的开销。
- bridge identifier:本交换设备的BID。
- port identifier:发送该BPDU的端口ID。
- BPDU Type:当前BPDU类型:
0x00:配置BPDU。
0x80:TCN BPDU。 - Flags:网络拓扑变化标志:
最低位=TC(Topology Change,拓扑变化)标志。
最高位=TCA(Topology Change Acknowledgment,拓扑变化确认)标志。2、TCN BPDU指在下游拓扑发生变化时向上游发送拓扑变化通知,直到根桥,通知根桥下发TC BPDU。
TCN BPDU在两种情况下产生:
TCN BPDU内容比较简单,只有三个字段:协议号、版本、类型。其中类型的固定值位0X80,长度只有4个字节。 - 端口状态变为Forwarding状态;
- 指定端口收到TCN BPDU,复制TCN BPDU并发往根桥。