1. Spanning Tree Protocol(生成树协议 802.1D)特征
- 在冗余链路上解决二层环路,实现链路备份(当活动链路故障时激活阻塞链路,恢复网络连通性)
- 让某些接口处于逻辑拥塞状态(不能转发数据),避免[环路风险]
- 广播风暴(收到广播包或未知单播,会进行泛洪)
- MAC 地址表震荡/飘逸
- 重复帧拷贝
- STP 依靠时间进行计算
- STP 有两种报文
- BPDU:配置BPDU报文
- TCN:拓扑改变通知
- 华为 STP 借鉴了 RSTP ,有备份端口角色
- 在华为设备上,因为借鉴了 RSTP 的机制,所以存在一个 BP、EP 接口
2. Port Role 和选举原则
1)概述
- 通过 BPDU(桥协议数据单元)完成生成树的计算
- 整个交换网络只有一个根桥
- 每个非根交换机选举一个根端口,设备级(转发状态)
- 每个链路上选举一个指定端口,链路级(转发状态)
-
2)计算度量依据
Root ID(根桥ID):是根桥设备 ID,由协议优先级 + 扩展系统 ID(VLAN 号,华为系统 ID 为 0)+ 背板 MAC 组成[优先级默认 32768 ,以 4096 为步长递增,0 最优]
- Bridge ID(桥ID):是转发 BPDU 报文的设备 ID
- Port ID(端口ID):由端口优先级 + 接口序号组成[端口优先级默认 128 ,以 16 为步长递增,0 最优]
RPC(根路径开销):到达根桥的链路 Cost ,累加入 自己接口的Cost值[Cost 数值的大小由 RFC 决定]
3)根桥(Root)
整个交换网络只有一个根桥
设备启动时每台设备都认为自己是根桥,向外发送自身的 BPDU。计算后(网络收敛),只有根桥向外发送 BPDU,其他设备对此 BPDU 进行转发
选举原则
非根设备只有一个唯一的根端口(离根桥最近的接口),用于接收根桥发来的 BPDU
- 选举原则
- RPC ,到根桥的开销
- 发送端的 BID 小的优选
- 发送端的 PID 小的优选
- 接收端的 PID 小的优选
控制根端口选举
根桥一般情况下所有接口都是指定端口(但不一定都为 DP),用于转发根桥的 BPDU
- 一般情况下 RP 的对端就是 DP
- DP 端口也有情况会是 Disabled 状态
- 下行设备是个傻瓜交换机(没有 STP),傻瓜交换机自环,会导致上联设备 DP 端口收到自己转发的 BPDU,导致成为 Disabled 状态
- 配置了 BPDU 保护,也会成为Disabled状态
选举原则
-
3. 端口状态变迁(STP 状态机)
1)时间戳
- Hello Time:BPDU 的发送间隔,「2s」发送一次(由根桥发送)。用于设备检测链路是否存在故障
- Max Age:最大生存时间「20s」
- 报文中 Message Age ≤ Max Age,则该非根桥设备继续转发配置 BPDU 报文
- 报文中 Message Age > Max Age,则该配置 BPDU 报文将被老化,非根桥设备直接丢弃该配置 BPDU
-
2)端口状态
Disabled(禁用状态):不接收、不转发数据帧;不学习MAC地址;不接收BPDU
- Blocking(Discarding、阻塞状态):不接收、不转发数据帧;不学习MAC地址;接收但不转发BPDU
- Listening(侦听状态):不接收、不转发数据帧;不学习MAC地址;接收并转发BPDU(选举端口角色)
- Learning(学习状态):不接收、不转发数据帧;学习MAC地址;接收并转发BPDU(因为 CAM 表中是空的,如果直接转发会导致全是泛洪报文)
Forwarding(转发状态):接收、转发数据帧;学习MAC地址;接收并转发BPDU
3)状态变迁
华为缺省情况处于 MSTP 模式,当从 MSTP 模式切换到 STP 模式,运行 STP 协议的设备端口支持的端口状态仍然保持和 MSTP 支持的端口状态一致,支持的状态仅包括 Forwarding、Learning 和 Discarding
在 STP 中:
- Protocol Identifier、 Protocol Version Identifier、 BPDU Type、 Flags 四部分设置为全 0
- Root Identifier、Root Path Cost、Bridge Identifier、Port Identifier 四部分用于检测最优的配置 BPDU,进行生成树计算
STP Message 格式解析
- Protocol Identifier:协议标识
- Protocol Version Identifier:协议版本标识
- STP = 0
- RSTP = 2
- MSTP = 3
- BPDU Type:BPDU 类型
- 0x00 = STP 的 Configuration BPDU
- 0x80 = STP 的 TCN BPDU(Topology Change Notification BPDU)
- 0x02 = RST BPDU(Rapid Spanning-Tree BPDU)或者 MST BPDU(Multiple Spanning-Tree BPDU)
- Flags:标志位。在 STP 中,只用到了 0位和 7位
- 0位(最低位)= TC(拓扑变更)
- 7位(最高位)= TCA(拓扑变更收到确认)
- Root Identifier:网桥 ID。发送此配置 BPDU 的交换机所认为的根交换机的标识
- Root Path Cost:根路径开销。到达根桥的最短路径开销
- Bridge Identifier:发送者的 BID。转发该 BPDU 报文的桥 ID
- Port Identifier:发送者端口的 PID。转发该 BPDU 报文的端口 ID
- Message Age(消息年龄):每经过一个设备会增加 1
- Max Age(最大消息年龄、老化时间):默认为 20s。如果 Message Age 到达 Max Age,则此配置 BPDU 被认为已经过期
- RP 没有收到 Root 发来的 BPDU,需要等待 20s 才会进行端口状态切换
- Hello Time:默认为 2秒,在指定端口上,配置 BPDU 每隔两秒发送一次
-
1)配置 BPDU(桥协议数据单元)
配置 BPDU 只用于计算生成树,不用于传递拓扑改变信息
- 上游设备向下游设备发送 BPDU 报文
- 使用标准 LLC 格式封装在以太网数据帧中
- 通过组播目的 MAC 地址传递「0180-C200-0000」:标识所有的交换机,只在本地链路有效
LLC Header 中源目地访问服务点都为[01000010],Control 值为[3]
2)TCN
只要交换机的端口有动作(Up/Down)就会触发 TCN 报文
- TCN BPDU 报文主要用来向上游设备乃至根桥通知拓扑变化
- 下游交换机只有向上游交换机发送 TCN 报文,上游交换机才会向下游交换机发送 TCN BPDU 报文(只有 Root 交换机才有资格发送 TC 变更的 BPDU 报文)
- 拓扑变更通知 BPDU(Topology Change Notification BPDU)
- 用于非根交换机在根端口上向上游交换机通告拓扑改变信息,并且每隔 Hello Time 2 秒发送一次,直到收到上游交换机的拓扑变更确认配置 BPDU 或者拓扑变更配置 BPDU
- 拓扑改变确认配置 BPDU(Topology Change Acknowledgment Configuration BPDU)
- BPDU 中 TCA=1 主要是上游设备用来告知下游设备已经知道拓扑变化,通知下游设备停止发送 TCN BPDU 报文
- 配置 BPDU 的一种,比普通配置 BPDU 多设置了一个 Flags 位(TCA = 1)。用于非根交换机在接收到拓扑改变通知 BPDU 后,在指定接口上向下游交换机发送拓扑改变通知的确认信息
- 拓扑改变配置BPDU (Topology Change Configuration BPDU)
- 主要是上游设备用来告知下游设备拓扑发生变化,请下游设备直接删除桥 MAC 地址表项,从而达到快速收敛的目的
- 该配置 BPDU 设置了另外一个 Flag 位(TC = 1)。用于根交换机向整网泛洪拓扑改变信息,所有交换机都在自己所有的指定端口上泛洪该 BPDU
- 在网络拓扑发生变化后,下游设备会不间断地向上游设备发送 TCN BPDU 报文
- 上游设备收到下游设备发来的 TCN BPDU 报文后,只有指定端口处理 TCN BPDU 报文。其它端口也有可能收到 TCN BPDU 报文,但不会处理
- 上游设备会把配置 BPDU 报文中的 Flags TCA =1,然后发送给下游设备,告知下游设备停止发送 TCN BPDU 报文
- 上游设备复制一份 TCN BPDU 报文,向根桥方向发送
- 根桥把配置 BPDU 报文中的 Flags TC = 1 和 TCA = 1 后每隔 2s 发送,通知下游设备直接删除(将 MAC 地址老化时间设置为 15s)桥 MAC 地址表项(快速收敛)。后续的 BPDU 报文只有 TC = 1,连续发送 Max Age + Forwarding 时间的 BPDU 报文