Skip to content

算法Algorithm

生成树桥接与端口角色

Spanning Tree Protocol · STP · 生成树协议

由根ID、根路径成本和端口平局规则计算活动转发树,证明稳定拓扑无环,并用三角形区分最短根路径、最小总成本和切换期安全。

冗余链路能在断线后提供另一条路,也可能让广播帧永久循环。生成树桥接保留物理冗余,却让部分端口暂不转发数据;链路变化后,再重新决定哪些端口参与。

形式陈述 ​

物理图与当前转发图 ​

本页考虑单VLAN、有限连通的点到点桥接图。桥ID唯一,每条链路具有严格正的对称成本,端口ID在桥内唯一。学习交换机只在被允许的端口之间传送普通数据帧;桥控制消息仍能在阻塞数据的端口交换。

目标是在稳定时形成覆盖各桥的生成树。每台桥维护根ID r、到根成本 d、根端口及各相邻端口收到的配置消息。消息主要比较字段为 (r,d,b,q):声明的根、发送桥到根的成本、发送桥ID、发送端口ID。

接收桥在本地端口 p 收到邻居消息,链路成本为 cp,其根路径候选比较键为

(r,d+cp,b,q,p).

按字典序取最小:先选最小根ID,再最小到根成本,最后用桥/端口ID消除平局。根最终是全图最小桥ID,其到根成本为零;每个非根桥保留一个根端口。这里用一般正成本展开教学,Perlman原论文的基本介绍先以跳数计距离。

每条链路的指定端口 ​

稳定且两端认同同一根后,一条点到点链路比较两端发送的 (r,d,b,q),较优一端为指定端口。每个非根桥的根端口,以及各桥的指定端口,允许转发数据;其余端口阻塞普通数据。只有两端都允许转发的链路才属于活动转发图。

“根端口”是本桥通向根的入口选择,“指定端口”是本链路上较优的根方向声明者,两者是不同角色。根桥没有根端口;在本页连通、正成本模型中,根桥的端口均为指定端口。

直觉

所有桥先同意向哪个根靠近 ​

初始每台桥可以先声称自己是根。较小根ID通过配置消息传播,其他桥改用该根,再比较到它的候选路径。稳定拓扑、可靠的反复消息交换和持续处理事件,使最小根的消息最终传遍连通分量;新出现更短根路径时,本地选择也随之调整。

桥不需要预先知道整张图才能比较一个新候选。不过,“每次保留历史最小消息”只适用于没有失效的单调改善阶段。链路或根消失后,旧消息必须过期或被撤销,才可能提高成本、改选另一个根。

严格下降说明稳定结构为什么没有环 ​

若桥 v 的根端口指向 u,稳定时 d(v)=c(v,u)+d(u)。因为 c(v,u)>0,沿根端口前进时成本严格下降,故不可能沿父指针绕回原点。每个非根桥恰有一个父方向,反复前进最终到达唯一成本为零的根。

同时,父桥 u 在这条链路上的根成本较小,因此它那一端是指定端口。每条父边两端均转发。反过来,若一条链路两端都转发,较差的一端不可能也是指定端口,只能是根端口;所以活动边恰是这些父边,共 n−1 条,连通且无环。

这份证明使用共同的稳定根和距离。它没有证明任意消息混合状态下,瞬间开启所有“看起来较好”的端口都安全。

例子与边界

三角形留下哪两条边 ​

桥ID为1、2、3。链路1—2成本4,1—3成本4,2—3成本1。根为桥1。桥2直接到1成本4,经3则为5;桥3同理,所以两者均把连接桥1的端口选为根端口。

链路2—3的两端都报告根1、根成本4;比较桥ID后,桥2胜出,桥2这一端为指定端口,桥3这一端阻塞。虽然桥2一端允许转发,整条2—3仍不能承担普通数据的跨桥转发。

桥 根成本 到1的端口 2—3上的端口
1 0 无根端口;到2、3均指定 不相连
2 4 根端口,转发 指定,转发
3 4 根端口,转发 阻塞
相同物理冗余可以对应不同的稳定转发树

活动树取1—2与1—3,总成本8。图的最小生成树却可取2—3与1—2,总成本5;那会让桥3到根1的路径成本变成5。生成树桥接在本模型中选择最短根路径,不负责最小化所有所选边的成本总和。

断线之后,旧结论需要重算 ​

现在1—3断开,其他链路保持可用。故障信息处理并收敛后,桥3经桥2到根,成本为 1+4=5,3在2—3上的端口改为根端口,原先被阻塞的物理冗余开始承载数据。

真实桥协议还必须处理旧配置消息的年龄,以及端口从不转发到转发的等待或协商。经典STP的阻塞、监听、学习、转发阶段和后续快速协议各有规定;本页只计算稳定角色,不给这些过渡阶段设一个通用秒数。若在一条旧边尚未停止转发前就开启替代边,可能临时恢复环;仅凭“最终是树”不能排除这种过程错误。

拓扑变化也可能使FDB里“到某MAC的方向”过时。端口角色更新与学习表的清理/重新学习要配合,才能避免长期按旧出口发送。单看一张已经无环的桥图,仍不足以证明所有已缓存单播马上正确送达。

分区、平局和零成本 ​

物理图分成多个连通分量后,各分量只能各自选根;不存在横跨断开的链路的生成树。桥ID不唯一会破坏这里依赖的唯一平局结果。允许零成本时,严格下降的证明失效,需要另加能排除等距父指针环的条件;本页不把正成本证明原样推广到零成本。

推论与应用

用三张表检查一次改动 ​

检查拓扑时分别写出物理边、端口角色、活动转发边。物理存在不等于数据可过;一端指定也不等于另一端愿意接收普通数据。再核对每个非根桥恰有一条通向更低根成本的根端口,便能定位稳定角色中的环或断开。

共享网段上的多个桥、每VLAN不同树和快速收敛都会增加协议状态。它们仍需回答同样的基础问题:哪条消息比哪条新或更优、哪条旧信息何时失效、何时允许新增转发边。本页的三角形可以作为核对这些扩展时的最小反例,而不是完整IEEE协议实现。

参考资料
  • Radia Perlman,An Algorithm for Distributed Computation of a Spanning Tree in an Extended LAN,SIGCOMM 1985,pp.44–53,原论文,pp.46–48,“HELLO Messages”“Electing the Root and Designated Bridges”“State Transitions”:根、指定桥、消息年龄和过渡状态
  • Larry L. Peterson、Bruce S. Davie,Computer Networks: A Systems Approach,§3.2.3 Spanning Tree Algorithm:配置消息与端口选择;本文正成本三角形和稳定性证明为教学展开
关系图谱4 个相邻概念 · 2 类关系

拖动节点调整位置。

显示关系

显示:依赖

  1. 前置三跳
  2. 前置二跳
  3. 前置一跳
  4. 当前条目
  5. 后续一跳
  6. 后续二跳
  7. 后续三跳
文字版关系按与当前条目的最短距离分组
类型化关系

使用的工具