字段 | 字节数 | 说明 |
Protocol Identifier(协议ID) | 2 | 总是为0 |
Protocol Version(协议版本) | 1 | STP(802.1D)传统生成树,值为0; RSTP(802.1W)快速生成树,值为2; MSTP(802.1S)多生成树,值为3; |
Message Type(消息类型) | 1 | 指示当前BPDU消息类型: 0x00为配置BPDU,负责建立,维护STP拓扑; 0x80为TCN BPDU,传达拓扑变更; |
Flags(标志) | 1 | 最低位=TC(Topology Change,拓扑变化)标志,最高位=TCA(Topology Change Acknowledgement,拓扑变化确认)标志 |
Root Identifier(根ID) | 8 | 指示当前根桥的RID(即“根ID”),由2字节的桥优先级和6字节MAC地址构成 |
Root Path Cost(根路径开销) | 4 | 指示发送该BPDU报文的端口累计到根桥的开销 |
Bridge Identifier(桥ID) | 8 | 指示发送该BPDU报文的交换设备的BID(即“发送者BID”),也是由2字节的桥优先级和6字节MAC地址构成 |
Port Identifier(端口ID) | 2 | 指示发送该BPDU报文的端口ID,即“发送端口ID” |
Message Age(消息生存时间) | 2 | 指示该BPDU报文的生存时间,即端口保存BPDU的最长时间,过期后将删除,要在这个时间内转发才有效,如果配置BPDU是直接来自根桥的,则Message Age为0,如果是其他桥转发的,则Message Age是从根桥发送到当前桥接收到BPDU的总时间,包括传输延时等。实际实现中,配置BPDU报文经过一个桥,Message Age增加1 |
Max Age(最大生存时间) | 2 | 指示BPDU消息的最大生存时间,也即老化时间 |
Hello Time(Hello消息定时器) | 2 | 指示发送两个相邻BPDU的时间间隔,根桥通过不断发送STP维持自己的地位,Hello time 是发送的间隔时间 |
Forward Delay(转发延时) | 2 | 指示控制listening和learning状态的持续时间,表示在拓扑结构改变后,交换机在发送数据包前维持在监听和学习状态的时间 |
STP 选举流程:
1.选举根桥 2.非根交换机选举根端口 3.每个线路选举指定端口 4.阻塞非根,非指定端口
选举根桥,根端口,指定端口,阻塞端口都以下面的规则来选,都是越小越好,这些信息在BPDU中都有。
比较规则:
1.bridge ID: 优先级(默认32768) + MAC地址 2.Cost路径开销: 根据接口带宽比例计算 3.port ID: 优先级 (默认128)+ 端口号
根桥选举:
1.选根桥:每个交换机假设自己为根,互相发送BPUD报文,然后通过比较规则竞选根桥
2.选根端口:每个交换机根据接收由根桥发送的BPDU中的开销来选举根端口(最优路径),交换机接收累加开销,转发不累加
3.选指定端口:每条链路根据比较规则来选出指定端口,每条链路必须有指定端口。
4.选阻塞端口:除了根端口,指定端口,剩下的为阻塞端口
下面是华为设备STP 的配置BPDU
从这里可以分析出,该端口的端口号是2,据开销20000可知千兆口,所以为G0/0/2
很明显该端口所属的交换机不是根桥,并且是根桥的邻居。BPDU类型是配置BPDU。
下面看下当某条链路断开时,发生了拓扑变化的BPDU报文
比如有一台交换机,一个端口为根端口,另一个为阻塞端口。如果根端口被关闭了
那么阻塞端口会发送一个拓扑变更BPDU的报文给相邻的交换机,这个BPDU类型为:TCN
而相邻的交换机会向这个阻塞端口发送一个确认拓扑变更的BPDU,这样阻塞端口就知道自己的消息被收到并将会传达。
这个BPDU类型为 TCA,同时相邻的交换机就会把继续把 TCN 向根端口方向转发,之后也会收到上层交换机发来的TCA确认接收报文
如果根桥收到了这个由阻塞端口传来的TCN,便会下发拓扑变更BPDU其类型为TC,每台收到此TC报文的交换机都会将自己的MAC缓存表刷新或减低过期时间。
然后再向下传达这个TC报文。