3、STP生成树:STP原理、端口角色与状态、STP配置与优化、RSTP快速生成树

3.1 为什么需要STP?—— 一个真实的“广播风暴”故事

我记得刚入行那会儿,有一次半夜被电话叫醒。客户说整个公司网络瘫痪了,所有交换机指示灯狂闪。我远程一看,CPU负载100%,网络延迟几千毫秒。

赶到现场,发现是某个实习生把两根网线插到了同一台交换机的两个端口上。就这么一个简单的环路,引发了广播风暴,整个网络直接“炸”了。

你想想看,一个广播帧在环路里无限转发,交换机之间互相转发,数据量指数级增长。不到一分钟,所有交换机资源耗尽。这就是没有STP的后果。

STP(Spanning Tree Protocol)就是来解决这个问题的。它的核心思想很简单:逻辑上切断环路,物理上保留冗余

核心原则:STP通过阻塞某些端口,把有环路的物理网络变成一棵无环的逻辑树。当主链路断了,它再自动激活备份端口。

3.2 STP的工作原理 —— 选根、选路、选端口

STP的工作流程,说白了就是三个步骤:选举根桥 → 选举根端口 → 选举指定端口。我习惯把它理解成“选老大、选亲信、选管家”。

3.2.1 选举根桥(Root Bridge)

每台交换机都有一个桥ID(Bridge ID),由桥优先级(2字节)+ MAC地址(6字节)组成。优先级默认是32768。

选举规则:桥ID最小的交换机成为根桥。先比优先级,优先级相同再比MAC地址。

我在项目中遇到过,两台新交换机都是默认优先级,结果MAC地址小的那台成了根桥。这其实不太合理,因为根桥应该选在网络核心位置。所以我建议:手动把核心交换机的优先级改成4096或8192,确保它成为根桥。

3.2.2 选举根端口(Root Port)

每台非根桥上,有且只有一个根端口。它是到达根桥路径开销最小的那个端口。

路径开销怎么算?看链路带宽:

链路带宽 路径开销(旧标准) 路径开销(新标准)
10 Mbps 100 2,000,000
100 Mbps 19 200,000
1 Gbps 4 20,000
10 Gbps 2 2,000

嗯,这里要注意:新标准的值更大,是为了支持更高速的链路。实际配置中,我一般用新标准,更精确。

3.2.3 选举指定端口(Designated Port)

每条链路上,有且只有一个指定端口。它负责把BPDU(桥协议数据单元)转发到链路的另一端。

选举规则:根桥上的所有端口都是指定端口。非根桥上,比较端口到达根桥的路径开销,开销小的成为指定端口。

剩下的端口呢?如果既不是根端口,也不是指定端口,那就被阻塞(Blocking)。

3.3 端口状态与状态迁移

STP的端口有5种状态。我刚开始学的时候觉得记不住,后来发现只要记住一个口诀就行:“禁、阻、听、学、转”

状态 说明 是否转发数据 是否学习MAC
Disabled 端口被管理员关闭
Blocking 端口被阻塞,只收BPDU
Listening 监听BPDU,参与选举
Learning 学习MAC地址,但不转发数据
Forwarding 正常转发数据

端口从Blocking到Forwarding,需要经过50秒(20秒Max Age + 15秒Listening + 15秒Learning)。

我曾经踩过的坑:有一次给客户做网络割接,新交换机接入后,等了快一分钟端口才起来。客户以为设备坏了。其实这就是STP的收敛时间。后来我学乖了,提前跟客户说清楚:“接入后请等待50秒,这是正常现象。”

3.4 STP配置与优化

3.4.1 基础配置

配置STP其实不复杂。我一般分三步走:

// 启用STP(默认就是开启的)
spanning-tree mode stp

// 配置根桥优先级(核心交换机)
spanning-tree vlan 1 priority 4096

// 配置端口路径开销(手动调整)
interface GigabitEthernet0/1
 spanning-tree cost 19

3.4.2 优化技巧

我个人习惯做以下几项优化:

  • 启用PortFast:连接终端设备的端口,直接跳过Listening和Learning状态,立即进入Forwarding。配置命令:spanning-tree portfast
  • 启用BPDU Guard:如果PortFast端口收到了BPDU,说明有人私接了交换机,立即将端口置为errdisable状态。配置命令:spanning-tree bpduguard enable
  • 调整Hello时间:默认2秒,可以改成1秒加快收敛。但别改太小,否则BPDU太多浪费CPU。

我的经验:PortFast和BPDU Guard一定要配合使用。光开PortFast不安全,万一有人插了交换机,环路瞬间形成。两个一起开,既快又安全。

3.5 RSTP快速生成树 —— 把50秒变成几秒

STP的50秒收敛时间,在今天的网络里简直不能忍。RSTP(Rapid Spanning Tree Protocol,IEEE 802.1w)就是来救场的。

RSTP改进了什么?说白了就是两点:端口角色更丰富 + 状态迁移更快

3.5.1 RSTP的端口角色

RSTP在STP的基础上,增加了两个角色:

  • Alternate Port(替代端口):根端口的备份。如果根端口挂了,它立刻顶上。
  • Backup Port(备份端口):指定端口的备份。同一台交换机上,如果两个端口连到同一个网段,其中一个就是备份端口。

你想想看,STP里端口被阻塞后,只能被动等待。RSTP里,替代端口和备份端口已经准备好了,随时可以切换。这就是“预计算”的思想。

3.5.2 RSTP的状态迁移

RSTP只有三种状态:Discarding、Learning、Forwarding。它去掉了Blocking和Listening,合并成了Discarding。

更重要的是,RSTP引入了提议-同意(Proposal-Agreement)机制。端口之间通过握手,可以在几秒内完成收敛,不需要等计时器超时。

// 启用RSTP
spanning-tree mode rapid-pvst

// 或者
spanning-tree mode mst

我建议:新项目直接用RSTP或MSTP。除非你还在维护十几年前的老设备,否则别用STP了。

3.6 知识体系总览

下面这张图,是我自己总结的STP知识体系。你可以把它当成一个“思维导图”来看:

STP生成树协议 工作原理 端口角色与状态 配置与优化 选举根桥 选举根端口 选举指定端口 根端口/指定端口 5种状态迁移 BPDU报文 基础配置命令 PortFast优化 BPDU Guard RSTP快速生成树 新增Alternate/Backup端口 提议-同意机制 3种状态快速收敛 核心目标:消除环路 + 链路冗余 + 快速收敛

3.7 避坑指南

最后,分享几个我亲身踩过的坑:

  • 别在Trunk端口上开PortFast:Trunk端口连接的是交换机,开PortFast会导致环路。我曾经见过有人全局开了PortFast,结果整个网络震荡了一下午。
  • 注意STP和VTP的交互:VTP(VLAN中继协议)的配置变化会触发STP重新计算。我建议:生产环境关掉VTP,手动配置VLAN
  • 监控根桥变化:如果根桥频繁变化,说明网络里有非法设备或者链路不稳定。用show spanning-tree命令定期检查。

我的习惯:每次做完STP配置,我都会用show spanning-tree summary确认根桥位置,再用debug spanning-tree events观察端口状态变化。确认无误后再接入生产流量。

好了,STP的内容就讲到这里。记住一句话:STP是网络的“安全带”,平时感觉不到它的存在,但关键时刻能救命


专注资料整理