简单描述标准生成树协议STP

生成树协议STP

为什么需要生成树

如上图所示网络拓扑,如果没有生成树协议,在网络通信开始时,假设PC0向PC1发送一个数据包,交换机S2的MAC地址表中并没有对应的MAC地址,因此会产生ARP洪泛(详情参考交换机自学习算法那篇文章)发送广播帧,由S2的Fa0/1和Fa0/3端口向对端发出。

当S1、S3分别接收到广播帧后,根据同样原理进行广播帧转发。这时网络形成了一个环路,但交换机并不知道这将导致广播帧在环路中永远循环下去。

随着时间增加,广播帧将会越来越多,最终形成网络广播风暴导致网络瘫痪。(对于交换机的运算速度来讲,网络由正常变瘫痪过程中的时间是非常短的)

STP概念

由上述描述就可以知道,我们需要一套方案去解决这种问题,所以就有了生成树协议。

生成树协议(英语:Spanning Tree ProtocolSTP),是一种工作在OSI网络模型中数据链路层的通信协议,基本应用是防止交换机冗余链路产生的环路。用于确保以太网中无环路的逻辑拓扑结构。从而避免了网络广播风暴,大量占用交换机的资源。

与图论中所指的生成树概念一致,目的就是为了破环(将环形图变成树形)。

STP会阻塞备用链路,当正常线路损坏时会启用备用链路。

交换机上默认的STP版本还有多实例生成树(MSTP)、快速生成树(RSTP)等,本文只描述标准版本。

生成树协议核心是生成树算法(Spanning Tree Algorithm,STA),下面对STA算法过程进行描述。

生成树算法STA

交换机是由网桥演变而来的,在描述生成树算法的时候也指代交换机

STA大致分为三步:

  • 选举根网桥
  • 选举根端口
  • 选举指定端口并阻塞备用端口

选举根网桥

选举条件:网桥ID(BID)最小者当选

BID由以下两部分构成:

  • 优先级
  • 交换机的基本MAC地址

优先级范围为0-61440,步长4096,默认值为32768

看到这里可能会有人问,为什么步长恰好是2的12次方即4096?这并不是巧合,因为这里的步长就是VLAN号(VLAN号使用12比特)

BID的比较方法:

  • 优先级取值越小,BID就越小
  • 若优先级相同,则比较MAC地址,从MAC地址左侧开始比较,数值小的BID就越小

选举根端口

根端口(Root Port, RP)的选举是在非根网桥(非根交换机)上的,并且在每个交换机上只能存在一个RP。

RP用于接收根网桥发来的BPDU,也用来转发普通流量。

RP的选举首先考虑BPDU接收端口到根网桥的路径成本最小,其路径成本与链路带宽对应如下(该值不绝对,交换机上可更改)

链路带宽成本值
4Mb/s250
10Mb/s100
16Mb/s62
100Mb/s19
1Gb/s4
10Gb/s2

如果存在多个端口到根网桥的成本相同时,则比较对端的BID,对端BID小的本机端口则选举为RP。

(注意BID是对端,也就是与参加选举的端口相连的其它交换机的端口,而参与选举的端口是在本交换机上)

如果对端BID也相同,则比较对端的端口ID(PID),同样对端PID小的本机端口选举为RP。

PID参数如下:

  • 范围0-240
  • 步长16
  • 默认值128
  • 端口号(如Fa0/1比Fa0/2小)

(其实还存在一种对端BID与PID都相同的情况,详细请看本文 STA举例部分->其他例子->使用集线器的情况)

选举指定端口并阻塞备用端口

在每一个网段上选出一个指定端口(Designated Port,DP)。DP用于转发根网桥发来的BPDU,也用来转发普通流量。

注意:每网段上存在且只能存在一个DP

DP的选举条件如下:

  • 根网桥的所有端口都是DP
  • 根端口的对端端口一定都是DP(反之不一定成立)
  • BPDU转发端口到根网桥的路径成本最小
  • 本端的BID最小

剩余端口成为备用端口(Alternate Port,AP),它们将被阻塞。

STA举例

主要例子

网络拓扑如下

按照上文中的步骤

首先选举根网桥

  • 优先级都是32768,然后比较MAC地址,S1的MAC地址为00-01-...,比其它地址都小,所以S1是根网桥。

然后选取根端口

  • 交换机S2的到S1路径上的所有链路都是1Gb/s,所以开销都是4,G0/1到S1的总开销为4,G0/2到S1的总开销为8,G0/3到S1的总开销为12,所以S2的根端口为G0/1。
  • 与此同理,S3根端口为G0/1,S4的根端口的为G0/2(G0/2的对端BID比G0/1对端BID小,二者成本相同)。
  • S5的根端口为Fa0/1(Fa0/1与Fa0/2的成本相同,对端BID相同,但Fa0/1对端为S4的Fa0/1,端口号小,所以PID小)。

选举指定端口并阻塞备用端口

  • S1为根网桥,所以S1的G0/1与G0/2都是指定端口
  • 然后按照第二个条件,所有的RP对端端口都是DP,那么选出来的有:S3的G0/3,S4的Fa0/1

  • 剩下的几个网段无法根据第二个条件选出DP,然后根据第三个条件即到S1成本路径最小来选
  • 首先来看S4Fa0/2-S5Fa0/2这个网段,到S4Fa0/2成本为8,到S5Fa0/2成本为27,所以S4的Fa0/2端口胜出,为该网段的DP
  • 再看S2G0/2-S3G0/2这段链路,这两个端口到S1的开销相同,但是S3的BID比S2小,所以S3的G0/2为该网段下的DP
  • 同理S2的G0/3也是DP
  • 剩下的端口都是AP

其他例子

已知条件如下:

  • 所有链路带宽都相等(也就是说链路成本值相同)
  • S2 BID < S3 BID

那么下图中S4的RP如红圈所示

有一种特殊情况,使用了集线器,在S4上Fa0/1与Fa0/2链路成本相同,Fa0/3成本比前两者大,并且Fa0/1与Fa0/2对端BID与对端PID相同,此时比较的是本机端口的PID,如下图所示

结束

上述仅对STA最基本的情况进行描述分析,实际网络中的情况更复杂,例如某个网桥(交换机)突然掉线、链路损坏、生成树还未生成时交换机发生故障需重新选举等等。

最后修改:2022 年 11 月 28 日
如果觉得我的文章对你有用,请随意赞赏