引言
在以太网交换网络中,冗余链路虽然提升了网络可靠性,但也带来了二层环路问题。生成树协议 STP(Spanning Tree Protocol)应运而生,它能够在增强网络可靠性的同时,有效规避环路引发的系列问题,确保网络的稳定运行。
一、STP 技术介绍
1. STP 功能
二层环路产生的问题
在复杂的二层网络环境中,冗余链路会引发严重的问题:
- 广播风暴:广播帧在二层环路中会沿顺时针和逆时针方向无休止地循环传播,网络流量呈指数级增长,最终导致设备因资源耗尽而宕机。
- MAC 地址表翻摆(漂移):由于数据帧在环路中持续传输,交换机的 MAC 地址表中 MAC 地址与接口的对应关系会不断变动,进而导致数据转发异常。
- 多帧复制:同一数据帧在环路中反复传输,设备会重复接收到相同的数据帧,浪费网络带宽和设备资源。
STP 解决方案
为了解决上述问题,STP 通过在二层交换网络中逻辑堵塞部分接口,构建从根交换机到所有节点的最短路径树型结构,从而生成一个无环路的拓扑。当网络中的最佳路径出现故障时,STP 会自动将个别阻塞的接口打开,实现链路资源的备份,保障网络的连通性。
2. 生成树协议类型
- STP(802.1D):经典的生成树协议,收敛速度较慢,但为后续协议的发展奠定了基础。
- RSTP(802.1W):快速生成树协议,相比 STP,大大缩短了收敛时间,提升了网络的响应速度。
- MSTP(802.1S):多生成树协议,允许在一个网络中创建多个生成树实例,提高了网络的灵活性和资源利用率。
- PVST、PVST+:思科私有的生成树协议,每个 VLAN 都有一个独立的生成树实例,能够为不同的 VLAN 提供精细化的网络管理。
二、BPDU 报文
BPDU报文包括配置BPDU和TCN BPDU。
1. 配置 BPDU
配置 BPDU 在生成树的角色选举过程中发挥着关键作用,其包含以下重要字段:
- 协议版本 ID:802.1D(STP)为 0,802.1W(RSTP)为 2,802.1S(MSTP)为 3。
- 根网桥 ID(RID):标识根交换机的身份,用于确定网络中的根节点。
- 网桥 ID(BID):每台交换机的唯一身份标志,由 8 字节构成,前 2 字节表示优先级,后 6 字节表示 MAC 地址。在三层交换机中,会选择数值最小的 MAC 地址作为 BID 中的 MAC 地址。
- 根路径开销(RPC):表示发出该 BPDU 的设备到达根网桥的开销值,用于衡量路径的优劣。
- 接口 ID(PID):用于区分和标识交换机的不同接口,由 2 字节构成,前 4 位表示优先级,后 12 位表示接口的标识。
配置PBDU的发送过程:
在交换网络初始化阶段,所有设备都认为自己是根网桥,会从所有激活 STP 协议的接口发送配置 BPDU。通过相互交换 BPDU,网络中的设备进行角色选举,最终确定真正的根网桥。此后,非根网桥不再主动发送配置 BPDU,仅负责转发根网桥的配置 BPDU。根网桥每隔 2 秒周期性发送配置 BPDU,配置 BPDU 的老化时间为 20 秒。
2. TCN BPDU
TCN BPDU的发送过程:
当本地交换链路出现故障时,STP 需要重新收敛。为了快速刷新交换机 MAC 地址表中的错误信息,故障设备会首先发送 TCN BPDU。对端设备收到 TCN BPDU 后,会回复一个 TCA 置 1 的配置 BPDU。TCN BPDU 会逐级上报到根网桥,根网桥收到后,会下发一个 TC 置 1 的配置 BPDU。该配置 BPDU 会逐级下发到所有设备,收到 TC 置 1 配置 BPDU 的设备会将 MAC 地址的老化时间由 360 秒临时缩短到 15 秒,以加速网络的收敛。
三、STP 的选举
1. 根网桥
在 802.1D 标准下,一个交换网络中只生成一棵生成树,且仅选举一个根网桥。根网桥选举规则如下:
- 优先选择优先级数值小的交换机作为根网桥。
- 若优先级相同,则选择 MAC 地址数值最小的交换机作为根网桥。
网桥 ID(BID)由 8 字节构成,前 2 字节为优先级,后 6 字节为 MAC 地址。优先级理论取值范围为 0 - 65536,实际取值范围为 0 - 61330,默认值为 32768。优先级仅使用前 4 位,后 12 位为拓展系统 ID,仅在 802.1S 中启用,因此修改优先级需以 4096 的倍数进行。
2. 根端口
所有非根网桥上都有且仅有一个距离根网桥最近的端口,该端口被称为根端口,用于接收根网桥的 BPDU。根端口选举规则如下:
- 优先选择接收根网桥 BPDU 时 RPC 最小的端口作为根端口。
- 若 RPC 相同,选择对端 BID 较小的设备所对应的接口作为根端口。
- 若对端 BID 相同,选择对端 PID 小的接口对应的接口作为根端口。
- 若对端 PID 也相同,选择本地 PID 小的接口作为根端口。
接口 ID(PID)由 2 字节构成,前 4 位表示优先级,后 12 位表示接口标识。优先级取值范围为 0 - 240,默认值为 128,修改优先级需以 16 的倍数进行。
RPC(路径开销值)计算表:
修改RPC计算方法:(华为默认使用的标准为802.1t)
3. 指定端口
每一条链路上都有且仅有一个端口作为指定端口,用于发送或转发根网桥的 BPDU。指定端口选举规则如下:
- 优先选择发出根网桥 BPDU 时 RPC 最小的端口作为指定端口。
- 若 RPC 相同,选择接口连接设备 BID 小的设备接口作为指定端口。
- 若本端的 BID 相同,选择接口 PID 小的作为指定端口。
- 若本端 PID 也相同,则直接堵塞该端口。
需要注意的是,根网桥的所有接口都是指定端口,根端口的对端一定是指定端口。
4. 非指定端口
所有没有被选举为根端口、指定端口的端口都是非指定端口,非指定端口需要被阻塞,以防止网络环路的产生。
四、STP 接口状态
1. 禁用(Disable)
接口处于禁用状态有两种情况:一是接口被手动关闭;二是接口没有激活生成树协议。
2. 堵塞(Blocking)
接口激活生成树协议后,首先会进入堵塞状态。在该状态下,接口只能侦听 BPDU,不能发送 BPDU,也不能处理业务数据帧。如果设备在 20 秒内没有侦听到 BPDU,会认为根网桥不存在或失效,从而进入下一个状态。
3. 侦听(Listening)
在侦听状态下,设备进行角色选举。接口可以接收和发送 BPDU,但不能处理业务数据帧。侦听状态持续 15 秒(转发延迟时间),其目的是为了防止部分角色没有选举出来而造成临时环路。
4. 学习(Learning)
进入学习状态后,接口开始接收业务数据帧,但只记录 MAC 地址和接口信息,并不转发业务数据帧。学习状态持续 15 秒,其目的是为了尽可能多地记录 MAC 地址信息,以减少未知单播帧的泛洪。
5. 转发(Forwarding)
在转发状态下,接口既可以进行 BPDU 的处理,也可以转发业务数据帧,实现网络的正常通信。
- 首次收敛——50s
- 根网桥故障——50s
- 直连链路故障——30s
- 非直连链路故障——50s
五、STP配置
1、实验拓扑
2.拓补分析
3、STP配置
1)启动生成树协议
[sw1]stp enable
# 华为默认开启生成树
2)选择生成树版本
[sw1]stp mode ?
mstp Multiple Spanning Tree Protocol (MSTP) mode
rstp Rapid Spanning Tree Protocol (RSTP) mode
stp Spanning Tree Protocol (STP) mode
# 华为设备默认选择MSTP
3)查看生成树信息
[sw1]display stp brief
4)修改BID中的优先级
[sw1]stp priority 12288
5)设置生成树根
# 将设备设置为生成树的主根,相当于将设备BID中的优先级改为0
[sw1]stp root primary
# 将设备设置为生成树的备份主根,相当于将设备BID中的优先级改为4096
[sw2]stp root secondary
6)修改PID的优先级
[sw2-GigabitEthernet0/0/1]stp port priority ?
INTEGER<0-240> Port priority, in steps of 16
7)修改接口的开销值
[sw2-GigabitEthernet0/0/1]stp cost ?
INTEGER<1-200000000> Port path cost
4、验证分析
在验证前需要将设备的模式改为STP,且优先级要依次进行设置,保证SW1>SW2>......>SW6。设置完成后再进行查看。
补充:
接口编号的影响
- 当两个接口的优先级和路径开销均相同时,系统会进一步比较接口的 ID(Port ID),而接口ID由两部分组成:
- 高4位:接口优先级(默认128)。
- 低12位:接口的索引号(Port Number),通常与接口的物理编号相关(如GigabitEthernet 0/0/1的索引号比GigabitEthernet 0/0/2小)。
- 结论:接口编号数字越小,其索引号越低,在优先级和路径开销相同的情况下,会被优先选为根端口或指定端口。
LSW1的STP信息表:
得出LSW1成为根网桥,且其余接口全为指定接口,验证成功!
LSW2的STP信息表:
得出g0/0/1成为根端口,g0/0/2为非指定端口,其余接口均为指定端口,验证成功!
LSW3的STP信息表:
得出g0/0/3成为根端口,g0/0/4、5、6为非指定端口,其余接口均为指定端口,验证成功!
LSW4的STP信息表:
得出g0/0/5成为根端口,g0/0/7、8为指定端口,其余接口为非指定端口,验证成功!
LSW5的STP信息表:
得出g0/0/7成为根端口,g0/0/8为非指定端口,验证成功!
LSW6的STP信息表:
得出g0/0/8成为根端口,g0/0/7为非指定端口,验证成功!