BPDU
BPDU(bridge protocol data unit,网桥协议数据单元): 是STP能够正常工作的根本,是STP的协议报文,分为
- 配置BPDU(configuration BPDU)
- TCN BPDU(topology change notification BPDU),TCN BPDU只在网络拓扑发生变更时才会被触发**
字节 | 字段 | 描述 |
---|---|---|
2 | PID | 协议ID,对于STP而言,该字段的值总为0 |
1 | PVI | 协议版本ID,对于STP而言,该字段的值总为0 |
1 | BPDU type | 指示本BPDU的类型,若值为0x00,则表示本报文为配置BPDU;若为0x80,则为TCN BPDU |
1 | flags | 标志,STP只使用了该字段的最高及最低两个比特位,最低位TC(topology change,拓扑变更)标志,最高位是TCA(topology change acknowledgment,拓扑变更确认)标志 |
8 | Root ID | 根网桥的桥ID |
4 | RPC | 根路径开销,到达根桥的STP cost |
8 | Bridge ID | BPDU发送桥的ID |
2 | Port ID | BPDU发送网桥的接口ID(优先级+接口号) |
2 | Message Age | 消息寿命,从根网桥发出BPDU之后的秒数,每经过一个网桥都减1,所以它本质上是到达根桥的跳数 |
2 | Hello Time | 根网桥连续发送的BPDU之间的时间间隔,默认2s |
2 | Forward Delay | 转发延迟,在侦听和学习状态所停留的时间间隔,默认15s |
Bridge ID
Bridge ID(桥ID):IEEE802.1D标准中规定BID由16位的桥优先级(Bridge Priority)与桥MAC地址构成,每一台运行STP的交换机都拥有一个唯一的BID,BID最小的设备会被选举为根桥(先比较桥优先级,优先级的值越小,则越优先成为根桥;如果优先级相等,再比较MAC地址,MAC地址小的优先成为根桥)
Cost
Cost(开销):每一个激活了STP的接口都维护一个Cost值,接口的Cost主要用于计算根路径开销,也就是到达根的开销。接口的缺省Cost除了与其速率、工作模式有关、还与交换机使用的STP Cost计算方法有关。接口带宽越大,则Cost值越小。用户也可以根据需要通过命令调整接口的Cost值
RPC
根路径开销(Root Path Cost):一台设备从某个接口到达根桥的RPC等于从根桥到该设备沿途所有入方向接口的Cost累加
Port ID
接口ID(Port ID,PID):运行STP的交换机使用接口ID来标识每个接口,接口ID主要用于在特定场景下选举指定接口。接口ID由两部分构成:高4bit是接口优先级,低12bit是接口编号,步长为16,范围0-240。激活STP的接口会维护一个缺省的接口优先级,在华为交换机上,该值为128。用户可以根据实际需要,通过命令修改该优先级
BPDU的比较原则
按照如下顺序选择的配置BPDU:
- 最小的根桥ID
- 最小的RPC
- 最小的网桥ID
- 最小的接口ID
这四条中,第一条原则主要用于在网络中选举根桥,后面的原则主要用于选举根接口和指定接口
计算过程
选举一个根桥
- STP在交换网络中开始工作后,每个交换机都会向网络中发送配置BPDU。配置BPDU中包含交换机自己的BID
- 网络中拥有最小BID的交换机成为根桥
- 在一个连续的STP交换网络中只会存在一个根桥
- 根桥的角色是可抢占的
- 为了确保交换网络的稳定,建议提前规划STP组网,并将规划为根桥的交换机的桥优先级设置为最小值0
在每台非根桥上选举一个根接口
- 到根桥的RPC越小,优先成为根接口
- 对端BID小的,本端对应端口优先成为根接口
- 对端PID小的,本端对应端口优先成为根接口
在每条链路上选举一个指定端口
- 一般情况下,根桥的所有接口都是指定端口
- 到根桥的RPC越小,优先成为指定接口(从根桥到端口的沿着路径,RPC越大,端口就为指定端口;案例一)
- 本端BID小的,端口优先成为指定接口
注:BID的选举优先选择优先级小的,如果相同,则选择MAC小的;BID的选举优先选择优先级小的,如果相同,则选择接口编号小的
案例一
如图:阻塞端口为LSW3的G0/0/1口,不是LSW4的G0/0/2口
STP的接口状态
状态名称 | 状态描述 |
---|---|
禁用(disable) | 该接口不能收到BPDU,也不能收发业务数据帧,例如接口为down |
阻塞(blocking) | 该接口被STP阻塞,处于阻塞状态的接口不能发送BPDU,但是会持续侦听BPDU,而且不能收发业务数据帧,也不会进行MAC地址学习 |
侦听(listening) | 当接口处于该状态时,表明STP初步认定该接口为根接口或指定接口,但接口依然处于STP计算的过程中,此时接口可以收发BPDU,但是不能收发业务数据帧,也不会进行MAC地址学习 |
学习(learning) | 当接口处于该状态时,会侦听业务数据帧(但是不能转发业务数据帧),并且在收到业务数据帧后进行MAC地址学习 |
转发(forwarding) | 处于该状态的接口可以正常收发业务数据帧,也会进行BPDU处理。接口的角色需是根接口或指定接口才能进入转发状态 |
拓扑变化
根桥故障
- 根桥发生故障,停止发送BPDU报文
- 非根桥等待Max age计时器(20s)超时,从而导致已经收到的BPDU报文失效,又接收不到根桥发送新的BPDU报文,从而得知上游出现故障
- 非根桥会互相发送配置BPDU报文,重新选举新的根桥
- 经过重新选举后,之前的阻塞接口AP经过侦听15s和学习15s恢复转发状态
- 非根桥会在BPDU老化之后开始根桥的重新选举
- 根桥故障会导致50s左右的恢复时间(20s+15s+15s)
直连链路故障
- 当交换机间用两条链路互联时,其中一条是主用链路,另一条为备用链路
- 当网络稳定时,非根桥检测到与根桥之间的链路发生故障后,会将阻塞接口(AP)转换为根接口
- 直连链路故障,阻塞接口(AP)会经过30s后恢复转发状态
非直连链路故障
假设SW1、SW2、SW3三台互联,AP在SW3的接口上与SW2互联,SW1是根桥,这时SW1和SW2之间的链路发生故障
- SW2一直收不到SW1发来的BPDU报文,等待Max age计时器(20s)超时,从而导致已经收到的BPDU报文失效
- 此时非根桥SW2会认为SW1失效,并且认为自己是根桥,从而发送BPDU报文给SW3,告知SW3自己是新的根桥
- 在此期间,SW3的AP一直收不到包含根桥ID的BPDU报文,等待Max age计时器(20s)超时,接口进入listening状态,并向SW2转发从上游发来的包含根桥ID的BPDU报文
- 因此,Max age计时器(20s)超时后,SW2和SW3几乎同时收到对方发来的BPDU报文,再进行STP重新计算,SW2发现SW3发来的BPDU报文更优,就放弃宣称自己是根桥并重新确定接口角色
拓扑改变导致MAC地址表错误
因为MAC地址表的老化时间是300秒
TCN BPDU在网络拓扑变化的时候产生