「STP」- BPDU 报文格式

BPDU – Bridge Protocol Data Units

在网络初始时,所有交换机都会相互发送 BPUD 信息;
设备发现自己的 BPUD 优先级(BID)不如其他交换机,因此不再发送 BPDU 信息;
当网络稳定之后,Root Bridge 才会发送 BPDU 信息,包括 Root Bridge 的信息;其他设备的 Designated Port 将转发 BPDU 信息;

| IEEE 802.3 Ethernet | BPDU |

为了计算生成树,交换机之间需要交换相关的信息和参数,这些信息和参数被封装在 BPDU(Bridge Protocol Data Unit)中。

PID,Protocol ID,2 bytes(0x0000 IEEE 802.1D)
针对我们这里讨论的 STP 协议,该字段为 0x00 值;

PVI,Protocol Version ID,1 byte0x00 Config & TCN / 0x02 RST / 0x03 MST / 0x04 SPT BPDU)
针对我们这里讨论的 STP 协议,该字段为 0x00 值;如果我们讨论 RSTP 协议,则该字段为 0x02 值;

BPDU Type,网桥协议数据单元,1 byte。在标准 STP(IEEE 802.1D)中有两种类型:

1) CBPDU, Configuration BPDU,BPDU Type=0x00:Bridge ID、路径开销、Port ID 等参数。STP 协议通过在交换机之间传递配置 BPDU 来选举 Root Bridge,以及确定每个交换机端口的角色和状态。在初始化过程中,每个桥都主动发送 CBPDU。在网络拓扑稳定以后,只有根桥主动发送 CBPDU,其他交换机在收到上游传来的配置BPDU后,才会发送自己的配置BPDU。

2)TCN BPDU,BPDU Type=0x80:下游交换机感知到拓扑发生变化时,向上游发送的拓扑变化通知(这是控制信息,从根端口转发),此时使用该类型报文。

Flags,标志位,1 byte,在 STP 中,仅使用 第一位(TC,Topology Change)与 第八位(Topology Change Acknowledgement),与拓扑变化有关。

在 CBPDU 中,包含足够的信息来保证设备完成生成树计算,其中包含的重要信息如下:

1)Root ID,8 byte:由 Root Bridge 的优先级和MAC地址组成,每个STP网络中有且仅有一个根。
2)RPC,Root Path Cost,根路径开销,4 byte:到根桥的最短路径开销。
3)Bridge ID,指定桥 ID,8 byte:由指定桥的优先级和 MAC 地址组成。指定桥:指定端口所在的桥(即 BPDU 的来源);
4)Port ID,指定端口 ID,2 byte:由指定端口的优先级和端口号组成。
5)Message Age2 byte: CBPDU 在网络中传播的生存期。每经过一个交换机会 +1,当达到 20 时,其他交换机不会再使用;
6)Max Age2 byte: CBPDU 在设备中能够保存的最大时间。在 Max Age 之内,如果未收到 Root Bridge 的 BPUD 帧,则网络出现问题,进行重新选举;
7)Hello Time2 byte: CBPDU 发送的周期,每 2s 发送一次;
8)Forward Delay2 byte:端口状态迁移的延时,15s

时间参数说明

在 STP 中,包含一些重要的时间参数,这里举例说明如下:
1)Hello Time:运行 STP 的设备发送 Configuration BPDU 的时间间隔(default=2s),以检测链路是否存在故障。交换机每隔 HelloTime 会向周围交换机发送 Configuration BPDU,以确认链路是否存在故障。当网络拓扑稳定后,该值仅在根桥上修改才有效;
2)Message Age:如果配置BPDU是根桥发出的,则Message Age为0。否则,Message Age是从根桥发送到当前桥接收到BPDU的总时间,包括传输延时等。实际实现中,配置BPDU报文每经过一个交换机,Message Age增加1。
3)MaxAge 是指:BPDU报文的老化时间(默认20S),可在根桥上通过命令人为改动这个值。Max Age通过配置BPDU报文的传递,可以保证MaxAge在整网中一致。非根桥设备收到配置BPDU报文后,会将报文中的Message Age和Max Age进行比较:如果Message Age小于等于Max Age,则该非根桥设备会继续转发配置BPDU报文。如果Message Age大于Max Age,则该配置BPDU报文将被老化掉。该非根桥设备将直接丢弃该配置BPDU,并认为是网络直径过大,导致了根桥连接失败。