STP生成树协议主要有以下知识点:

  1. 根桥
  2. 优先级
  3. MAC地址
  4. 路径成本

STP协议工作流程

假设现在有三台交换机分别是交换机1、2、3

交换机1的0/0/1口连接交换机2的0/0/1口,交换机1的0/0/2口连接交换机3的0/0/1口,交换机3的0/0/2口连接2的0/0/2口,类似于三角形接法,手动形成环路:

1
2
3
4
graph LR
SW1[交换机1] -- 0/0/1 --- SW2[交换机2]
SW1 -- 0/0/2 --- SW3[交换机3]
SW3 -- 0/0/2 --- SW2

在STP生成树协议中根据设置的优先级进行比较去选举根桥,如果优先级相同则比较MAC地址,则最小数值的成为根桥,选举出根桥后其余交换机以自身为起点去计算每条路径的路径成本去选择最优最短路径,路径成本计算方式一般为速率越小路径成本越高,以下数值仅作示范使用而不是标准数值请查阅相关资料,例如:万兆端口的路径成本为2,千兆端口则为4,10M端口则为45。
经过单独计算路径的路径成本后,通过比较各条路径的总路径成本,寻找出最优最短路径作为唯一路径,其他路径被逻辑断开(阻塞),从根源上杜绝了环路的产生。

BPDU——STP的通信基石

STP协议依赖**BPDU(Bridge Protocol Data Unit,桥协议数据单元)**在交换机之间传递信息,BPDU主要包含以下关键字段:

  • 根桥ID:当前选举出的根桥标识
  • 路径成本:发送者到根桥的累计路径成本
  • 发送桥ID:发送该BPDU的交换机标识
  • 端口ID:发送该BPDU的端口编号

工作流程:

  1. 根桥每隔 2秒 主动发出 Hello BPDU
  2. 非根桥收到BPDU后,更新自身信息并继续向下游转发
  3. 如果交换机在 Max Age(默认20秒) 内没有收到BPDU,则认为链路故障,触发重新计算

端口角色

选举出根桥后,每个端口会被分配一个角色,决定了它的转发行为:

端口角色 说明
根端口(Root Port) 非根桥上,到达根桥路径成本最低的端口,负责接收来自根桥的数据
指定端口(Designated Port) 每条链路上,距离根桥最近一端的端口,负责转发数据
阻塞端口(Alternate / Blocked Port) 既不是根端口也不是指定端口的端口,被逻辑阻塞,不转发数据,仅监听BPDU

通过这三种角色的分配,STP保证网络中任意两台设备之间只有一条逻辑路径,既保留了冗余链路的备份能力,又彻底消除了环路。

端口状态与收敛时间

STP端口在启用后会经历以下状态转换:

1
2
3
阻塞(Blocking) → 监听(Listening) → 学习(Learning) → 转发(Forwarding)
↕
禁用(Disabled)
状态 行为
阻塞(Blocking) 不收发数据,仅监听BPDU,防止临时环路
监听(Listening) 收发BPDU,参与角色选举,持续15秒(Forward Delay)
学习(Learning) 学习MAC地址,构建转发表,仍不转发数据,持续15秒(Forward Delay)
转发(Forwarding) 正常收发数据,稳定运行状态
禁用(Disabled) 端口被管理员手动关闭

由此可见,STP的收敛时间最长可达 30~50秒(Listening 15秒 + Learning 15秒 + BPDU超时),这也是后来 RSTP(快速生成树协议) 将其优化到 几秒内 的主要原因。

总结

STP生成树协议的核心哲学可以概括为:物理冗余、逻辑无环。

  • 通过冗余链路提高网络的高可用性,单条链路故障时可自动切换
  • 通过阻塞冗余端口从逻辑上消除环路,避免广播风暴和MAC地址表震荡
  • 若链路或设备发生故障,STP会重新计算并激活之前阻塞的端口作为备份路径

对于现代网络,传统STP已逐渐被 RSTP(802.1w) 和 MSTP(802.1s) 取代,但理解STP的基本原理仍然是掌握所有生成树协议的基础。