
在HCIP-Datacom的学习体系中,STP生成树协议是二层交换的必修核心,也是园区网防环的基石。只要网络中存在冗余链路,就可能出现二层环路:重复数据帧、广播风暴、MAC地址漂移,轻则卡顿,重则全网瘫痪。STP通过阻塞特定端口,把物理环状拓扑变成逻辑无环树,同时保留冗余备份能力。
一、为什么需要STP?
二层环路,指的是二层设备(交换机)之间连成环状拓扑,并且没有开启防环协议。
环状拓扑会带来三个典型问题:
- 主机可能收到重复数据帧;
- 广播风暴:广播帧在链路上无休止发送,占用链路资源,浪费设备开销;
- MAC地址漂移:后学习的MAC地址表项会覆盖前面的表项,导致同一MAC在多个接口间来回切换,最终通信异常,甚至网络瘫痪
三层环路一般由人为配置失误导致。路由器通常不会出现三层环路,而且即使出现,TTL值也会防止数据包永久转发,TTL减为0后丢弃。
二、STP是什么?有哪些版本?
STP生成树协议的核心作用有两个:
- 防环:通过阻塞某个端口,让拓扑中的环状消失;
- 实现路径备份:当网络变化时重新计算生成树,原先被阻塞的接口恢复,确保数据正常转发。
STP常见版本:
| 版本 | 标准 | 特点 |
| STP | 802.1d | 收敛慢,30s~50s |
| RSTP | 802.1w | 收敛快,秒级 |
| MSTP | 802.1s | 支持多棵生成树,实现负载 |
所谓收敛,就是网络从不稳定到稳定的过程。设备刚开机、网络刚发生变化,都属于不稳定状态。华为设备默认运行MSTP。
三、STP工作过程四步走
STP整个工作过程可以概括为四步:
- 选根桥ROOT:整个交换网络选出一台根交换机;
- 选根端口RP:每台非根交换机上各选出一个根端口;
- 选指定端口DP:每段链路上选出一个指定端口;
- 剩AP口:非根非指定端口直接阻塞,用于防环。
选举ROOT
网络刚开始运行时,所有交换机都会认为自己是根桥,所有接口都是DP,都会产生配置BPDU向外发送,并以自身桥ID作为根桥ID。
经过比较后,桥ID最优的交换机成为根桥,其余交换机成为非根桥。非根桥停止产生配置BPDU,只能转发来自根桥的配置BPDU。
选举RP
RP用于接收最优BPDU,每台非根交换机有且仅有一个RP。
选举根端口时依次比较:
- 根路径开销;
- 对端BID;
- 对端PID;
- 本端PID。
选举DP
DP口用于发送最优BPDU,每段链路上有且仅有一个DP。
根桥的所有接口一般都是DP;交换机连接PC、路由器的接口,也均为DP口。
选举指定端口时依次比较:
- BPDU发送者的根路径开销;
- 本端BID;
- 本端PID。
剩余端口为AP
剩下的接口为AP口,直接阻塞,用于防环。
四、BPDU:STP的“语言”
BPDU,即网桥协议数据单元,是STP的报文。STP报文结构为:STP层 + 数据链路层头部,采用802.3帧格式。
- SMAC:交换机自己;
- DMAC:专用组播MAC 0180-c200-0000,代表运行了STP协议的交换机都能接收。
1. 配置BPDU
周期性发送:默认2s/次。只有根桥才能主动发送,其他非根桥只能转发。
作用:
- 维护根桥地位。如果其他交换机在20s内没有收到根桥发送的配置BPDU,则认为根桥故障;
- 选举根桥以及各种端口角色:RP、DP、AP。
- 标识部分:协议ID、协议版本ID、BPDU类型、flags位;
- 选举四要素;
- 时间参数:Hello时间默认2s,转发延时15s。
选举四要素的规则是:数值越小越优先。
① 根桥ID
桥ID = 优先级 + MAC地址。
STP优先级默认32768,可调范围0-65535,调整步长为4096。先比较优先级,再比较MAC地址。
根桥ID特指根桥的桥ID。只有网络中根桥确认,根桥ID就不会发生变化。
华为命令:
[S1] stp priority 0② 根路径开销
BPDU发送者到根桥的最小开销。
根桥直接发送出来的配置BPDU中,根路径开销为0。路径开销指流量经过的所有出接口的开销之和。STP接口默认开销为20000。
接口下配置:
[S2-GigabitEthernet0/0/1] stp cost 10000
③ 发送者的桥ID
BPDU发送者的优先级 + MAC地址。
当一份BPDU中的根桥ID与发送者的桥ID一致,则说明该BPDU为根桥直接发送。
④ 端口ID
端口ID = 端口优先级 + 接口编号,越小越优。
接口优先级默认为128,可调范围0-240,调整步长为16。先比较接口优先级,再比较接口编号。
[S2-GigabitEthernet0/0/3] stp port priority 0
2. TCN BPDU
TCN BPDU是拓扑变更通知BPDU。
触发式发送:只有网络拓扑发生变化时才会发送。所有交换机都可以发送,只要网络发生变化就可以发送TCN BPDU。
作用:通知其他交换机网络发生变化。
TCN BPDU只携带标识部分:协议ID、协议版本ID、BPDU类型。
五、华为设备命令速查
[S1] undo stp enable // 关闭STP协议,华为设备默认开启 [S1] stp mode stp // 修改STP版本为STP,默认运行MSTP [S1] stp priority 0 // 修改STP全局优先级 [S1-GigabitEthernet0/0/1] stp port priority 128 // 修改STP接口优先级 [S1] stp root primary // 手工指定根桥,本质是设置优先级为0 [S1] stp root secondary // 手工指定备份根桥,本质是设置优先级为4096 [S1] display stp brief // 查看STP端口角色
六、STP端口状态与转发延时
标准STP端口状态:disable、blocking、listening、learning、forwarding。
华为设备中通常对应为:discarding、learning、forwarding。
- discarding 阻塞状态:所有端口初始都为discarding状态。选举为AP的端口会停留在discarding状态。处于该状态的端口无法转发数据,无法学习MAC地址表项。
- learning 学习状态:过渡状态。处于该状态的接口无法转发数据,但可以学习MAC地址表项。
- forwarding 转发状态:处于该状态的接口可以转发数据,也可以学习MAC地址表项。DP/RP最终会停留在forwarding。
discarding ——15s—— learning ——15s—— forwarding转发延时的主要作用是防止临时环路。
端口状态只影响业务数据转发,BPDU的发送不受端口状态影响,只受端口角色影响。其中DP可以发送BPDU,RP只能接收BPDU。初始状态下,所有接口都为DP,都可以发送BPDU。
七、拓扑变化与收敛时间
1. 直连链路故障
收敛时间:30s。
2. 非直连链路故障
收敛时间:50s。
过程如下:
- 当S2的RP失效后,对于S3来说属于非直连链路故障,S3无法直接检测;
- S2收不到来自根桥的BPDU,就会认为自己为根桥,向S3发送自身的配置BPDU;
- 但S3仍然保存有之前根桥的BPDU,所以接收到S2的次优BPDU时不会处理,而是等待20s;
- 20s后,S3给S2发送最优的来自根桥的BPDU;
- 通过交互BPDU,S3的AP要转换为DP,S2的DP要转换为RP;
- DP进入转发状态需要等待两个转发延时,即30s;
- 所以非直连链路故障需要等待20+30s,即50s。
八、拓扑变更机制
拓扑变更机制的触发条件:有接口进入forwarding状态。
- 发生拓扑变更的设备,会向外发送TCN BPDU,往根桥方向发送,给到上游交换机;
- 上游交换机收到后,会回应TCA=1的配置BPDU,用于确认收到TCN BPDU,并且将TCN BPDU继续往上游发送,直到根桥收到;
- 根桥收到TCN BPDU后,会先发送TCA=1的配置BPDU确认收到,再向外发送TC=1的配置BPDU,2s一次,持续发送35s,在全网泛洪;
- 其余交换机收到后,会清空自身的MAC地址表项。
九、备考小结
对于华为认证 HCIP-Datacom 来说,STP是二层交换的高频考点。重点记住:
- 根桥看桥ID,先优先级后MAC;
- RP看根路径开销、对端BID、对端PID、本端PID;
- DP看发送者根路径开销、本端BID、本端PID;
- 剩下的是AP,阻塞防环;
- 配置BPDU周期2s,20s未收到认为根桥故障;
- 转发延时15s,直连故障收敛30s,非直连故障收敛50s;
- TCN用于拓扑变更通知,根桥用TC=1配置BPDU通知全网清空MAC表项;
- 华为默认开启STP,默认运行MSTP。
HarmonyOS开发|ArkTS UI颜色API通用规则
