STP协议
一、STP概述
1. 什么是STP?
生成树协议(Spanning Tree Protocol,STP)是一种工作在OSI模型第二层的网络协议,基本功能是防止二层网络产生环路,同时提供链路冗余备份。
2. 为什么需要STP?——二层环路带来的问题
在未启用STP的二层网络中,环路会引发以下灾难性后果:
广播风暴:交换机对BUM帧(广播、组播、未知单播)进行无限泛洪,耗尽设备CPU和带宽,最终导致网络瘫痪。
MAC地址表震荡:交换机在不同接口间反复学习同一个MAC地址(MAC地址漂移),导致MAC表不断刷新,影响正常转发。
3. 为什么二层不能自己防止环路?
交换机转发机制缺陷:交换机对BUM帧仅执行泛洪,无内置防环机制。
对比三层网络:IP报文通过TTL(生存时间)逐跳递减,TTL=0时丢弃,天然防止环路;而二层帧无类似字段。
二、STP基本概念
1. 桥ID(Bridge ID,BID)
组成:
桥优先级(2字节) + MAC地址(6字节)作用:唯一标识一台交换机,用于根桥选举。
优先级范围:0~61440,默认32768,步进4096(必须配置为4096的倍数)。
2. 根桥(Root Bridge,RB)
定义:STP网络中桥ID最小的交换机。
作用:作为全网逻辑中心,所有路径计算以根桥为参考点。
3. 根路径开销(Root Path Cost,RPC)
定义:从某交换机到达根桥的所有链路开销之和(入方向累计)。
根桥自身RPC=0。
4. 端口ID(Port ID,PID)
组成:
端口优先级(1字节,默认128) + 端口号(1字节)作用:在特定场景下(如选举指定端口)作为比较因子。
优先级范围:0~240,默认128,步进16。
5. BPDU(桥协议数据单元)
STP通过交换BPDU来传递拓扑信息,分为两类:
配置BPDU:用于STP拓扑计算,由根桥周期性(默认2秒)发送。
TCN BPDU:拓扑变更通知,仅在网络拓扑发生变化时触发。
配置BPDU报文格式
| 字段 | 含义 |
|---|---|
| RID | 根桥的桥ID |
| RPC | 发送该BPDU的交换机到达根桥的路径开销(根桥发送时为0) |
| BID | 发送该BPDU的交换机的桥ID |
| Port ID | 发送该BPDU的端口ID |
| Message Age | BPDU存活时间,从根桥发出为0,每经过一台交换机+1,超过Max Age(默认20s)则丢弃 |
| Max Age | BPDU最大老化时间(默认20s) |
| Hello Time | BPDU发送周期(默认2s) |
| Forward Delay | 端口状态迁移延迟(默认15s) |
BPDU Flag字段
TC=1:拓扑变更通知
TCA=1:拓扑变更确认
当TC=0且TCA=0时,表示STP网络稳定。
三、STP端口角色与状态
1. 端口角色
| 角色 | 定义 | 功能 | 最终状态 |
|---|---|---|---|
| 根端口(Root Port) | 非根桥上到达根桥路径开销最小的端口 | 接收来自根桥的BPDU,转发数据 | 转发(Forwarding) |
| 指定端口(Designated Port) | 每个网段(冲突域)上到达根桥路径开销最小的端口 | 发送本网段最优BPDU,转发数据 | 转发(Forwarding) |
| 阻塞端口(Blocking Port) | 既不是根端口也不是指定端口的端口 | 仅接收BPDU,不转发数据 | 阻塞(Blocking) |
2. 端口状态(802.1D)
在稳定STP网络中,端口只存在Blocking或Forwarding状态,其他为过渡状态:
| 状态 | 收发BPDU | 学习MAC | 转发数据 | 说明 |
|---|---|---|---|---|
| Disabled | 否 | 否 | 否 | 接口被shutdown或物理失效 |
| Blocking | 仅接收 | 否 | 否 | 阻塞端口,防止环路 |
| Listening | 收发 | 否 | 否 | 过渡状态,等待15s |
| Learning | 收发 | 是 | 否 | 过渡状态,等待15s |
| Forwarding | 收发 | 是 | 是 | 正常转发状态 |
STP状态机
text
禁用(Disabled) → 阻塞(Blocking) → 监听(Listening) → 学习(Learning) → 转发(Forwarding)
四、STP工作机制与选举过程
1. 根桥选举
比较桥优先级,数值越小越优。
若优先级相同,比较MAC地址,越小越优。
根桥具有抢占性:当网络中接入一台桥ID更小的交换机时,它会成为新根桥。
2. 根端口选举(非根桥上)
选举依据:比较接收到的最优配置BPDU(按以下顺序逐条比较,直到选出最优):
RID(根桥ID)越小越优
RPC(根路径开销)越小越优
发送者BID(桥ID)越小越优
发送者PID(端口ID)越小越优
接收端口自身的PID越小越优
3. 指定端口选举(每个网段)
注意事项:先完成全网根端口选举,再进行指定端口选举。
选举步骤与根端口选举完全一致(比较BPDU优先级),但比较的是端口发出的BPDU与邻居发来的BPDU。
指定端口的特点
根桥上的所有端口都是指定端口。
指定端口的对端要么是根端口,要么是阻塞端口。
连接终端设备(PC、路由器、防火墙)的端口均为指定端口。
指定端口主动发送最优BPDU。
4. 最优BPDU的判断标准
一条BPDU的“优劣”按以下顺序比较:
RID最小
RPC最小
发送者BID最小
发送者PID最小
5. STP拓扑计算过程(初始状态)
初始状态:所有交换机均认为自己是根桥,发送以自己为根的BPDU。
选举根桥:交换BPDU后,全网选出RID最小的交换机为根桥。
选举根端口:非根桥根据收到的BPDU选出根端口。
选举指定端口:
设备根据根端口的BPDU和接口开销,为每个端口计算出“指定端口BPDU”。
将该BPDU与端口当前保存的BPDU比较,若计算出的更优,则端口成为指定端口并周期性发送该BPDU;若更差,则端口成为阻塞端口,只接收不发送。
6. 路径开销(Cost)
路径开销与链路带宽成反比,常见标准(802.1D-1998)参考值:
| 链路带宽 | 开销值 |
|---|---|
| 10Mbps | 100 |
| 100Mbps | 19 |
| 1000Mbps | 4 |
| 10Gbps | 2 |
注:不同标准(如802.1t)开销值可能不同,配置时需保持全网一致。
五、STP故障案例分析
1. 根桥故障
场景:根桥SW1失效,停止发送BPDU。
过程:
SW2根端口失效(无替代端口),认为失去与根桥的连接,随即以自己为根发送BPDU。
SW3的阻塞端口(Alternate Port)仍保留SW1为根的BPDU,需等待20s Max Age老化。
老化后SW3处理SW2的BPDU,重新选举:SW2成为新根桥,SW3原阻塞端口成为根端口,经历30s(Listening+Learning)后转发。
中断时间:50s(20+15+15)
2. 直连链路故障
场景:SW3根端口直连链路故障,且存在替代端口。
过程:
SW3感知到根端口失效,立即将替代端口升为根端口。
新根端口经历30s(Listening+Learning)后进入转发状态。
中断时间:30s(15+15)
3. 非直连链路故障
场景:SW2根端口失效(无替代端口),且故障点不在直连链路上。
过程:
SW2以自己为根发送BPDU。
SW3阻塞端口收到SW2的BPDU,但因原BPDU(以SW1为根)仍有效,需等待20s Max Age。
老化后SW3处理新BPDU,将原阻塞端口升为指定端口,经历30s后转发。
中断时间:50s(20+15+15)
4. 指定端口故障
若指定端口所在链路已断开(对端为阻塞端口),故障不影响现有拓扑,无中断。
5. 拓扑改变导致MAC地址表错误
问题:拓扑变化后,MAC地址表未及时更新,导致帧被错误转发。
解决流程:
检测到拓扑变化的交换机(如SW3)向上游发送TCN BPDU。
上游收到后回复TCA BPDU,并继续向根桥转发TCN。
根桥收到TCN后,向全网发送TC置位的BPDU(持续35s,每2s一次)。
下游交换机收到TC BPDU后,将MAC地址表老化时间由默认300s临时缩短为15s,快速刷新表项。
6. 为什么转发时延需要15s?
Listening(15s):确保根桥的BPDU有足够时间传播到全网,防止临时环路。
Learning(15s):让交换机在新拓扑中学习MAC地址,减少未知单播泛洪。
六、华为STP特性与优化
1. 华为STP与标准802.1D的区别
华为STP吸收了RSTP的部分特性,进行了优化:
收到次优BPDU时立即处理,无需等待Max Age。
只有三种端口状态:Discarding、Learning、Forwarding(相当于将Blocking、Listening合并为Discarding)。
交换机有自己的超时机制:超时时间 =
Hello Time × 3 × Timer Factor(Timer Factor默认3),默认为18s,最小6s,因此Max Age在华为设备中意义不大。收到TC BPDU后立即清空MAC表,但TC BPDU会持续发送35s(约17次),可能导致短时间内泛洪增多。
2. 华为STP故障恢复时间优化
| 故障类型 | 标准802.1D | 华为STP |
|---|---|---|
| 根桥故障 | 50s | 30s |
| 非直连故障 | 50s | 30s |
| 直连故障(有AP) | 30s | 30s(不变) |
优化原因:华为STP借用了RSTP的替代端口(Alternate Port)概念,且支持次级BPDU立即处理,无需等待Max Age。
七、STP配置命令(华为设备)
1. 切换STP模式
bash
[Huawei] stp mode { stp | rstp | mstp } # 默认为mstp2. 修改转发延迟时间
bash
[Huawei] stp timer forward-delay centiseconds # 步进100,如1500表示15s
3. 修改桥优先级
bash
[Huawei] stp priority priority # 0-61440,需为4096倍数
4. 修改路径开销标准(全网一致)
bash
[Huawei] stp pathcost-standard { dot1d-1998 | dot1t | legacy } # dot1d-1998:802.1D-1998标准 # dot1t:802.1T标准 # legacy:华为私有标准5. 修改接口开销
bash
[Huawei] interface gigabitEthernet 0/0/1 [Huawei-GigabitEthernet0/0/1] stp cost cost-value # 1-200000000
