在前面的章节中介绍了桥ID、路径开销和端口ID等信息,所有这些信息都是通过BPDU协议报
文传输。
- 配置BPDU是一种心跳报文,只要端口使能STP,则配置BPDU就会按照Hello Time定时器规定的时间间隔从指定端口发出。
- TCN BPDU是在设备检测到网络拓扑发生变化时才发出。
BPDU报文被封装在以太网数据帧中,目的MAC是组播MAC:01-80-C2-00-00-00,Length/Type。
字段为MAC数据长度,后面是LLC头,LLC之后是BPDU报文头。以太网数据帧格式如图1所示。
图1 以太网数据帧格式
配置BPDU
通常所说的BPDU报文多数指配置BPDU。
在初始化过程中,每个桥都主动发送配置BPDU。但在网络拓扑稳定以后,只有根桥主动发送配置BPDU,其他桥在收到上游传来的配置BPDU后,才触发发送自己的配置BPDU。配置BPDU的长度至少要35个字节,包含了桥ID、路径开销和端口ID等参数。只有当发送者的BID或端口的PID 两个字段中至少有一个和本桥接收端口不同,BPDU报文才会被处理,否则丢弃。这样避免了处理和本端口信息一致的BPDU报文。
配置BPDU在以下3种情况下会产生:
- 只要端口使能STP,则配置BPDU就会按照Hello Time定时器规定的时间间隔从指定端口发出。
- 当根端口收到配置BPDU时,根端口所在的设备会向自己的每一个指定端口复制一份配置 BPDU。
- 当指定端口收到比自己差的配置BPDU时,会立刻向下游设备发送自己的BPDU。
配置BPDU报文基本格式如表1所示。
域 | 字节 | 说明 |
Protocol Identifier | 2 | 总是0。 |
Protocol Version Identifier | 1 | 总是0。 |
BPDU Type | 1 | 当前BPDU类型: 0x00:配置BPDU。 0x80:TCN BPDU。 |
Flags | 1 | 网络拓扑变化标志: 最低位=TC(Topology Change,拓扑变化)标志。 最高位=TCA(Topology Change Acknowledgment,拓扑变化 确认)标志。 |
Root Identifier | 8 | 当前根桥的BID。 |
Root Path Cost | 4 | 本端口累计到根桥的开销。 |
Bridge Identifier | 8 | 本交换设备的BID。 |
Port Identifier | 2 | 发送该BPDU的端口ID。 |
Message Age | 2 | 该BPDU的消息年龄。 如果配置BPDU是根桥发出的,则Message Age为0。否则,Message Age是从根桥发送到当前桥接收到BPDU的总时间,包括传输延时等。实际实现中,配置BPDU报文经过一个桥,Message Age增加1。 |
MaxAge | 2 | 消息老化年龄。 |
Hello Time | 2 | 发送两个相邻BPDU的时间间隔。 |
Forward Delay | 2 | 控制Listening和Learning状态的持续时间。 |
表1 BPDU报文基本格式
标志字段如图2所示,STP中只使用了其最高位和最低位。
图2 Flags字段格式
TCN BPDU
TCN BPDU内容比较简单,只有表1中列出的前3个字段:协议号、版本和类型。类型字段是固定值0x80,长度只有4个字节。
TCN BPDU是指在下游拓扑发生变化时向上游发送拓扑变化通知,直到根节点。TCN BPDU在如下两种情况下会产生。
- 端口状态变为Forwarding状态,且该设备上至少有一个指定端口。
- 指定端口收到TCN BPDU,复制TCN BPDU并发往根桥。