简单描述标准生成树协议STP
生成树协议STP
为什么需要生成树
如上图所示网络拓扑,如果没有生成树协议,在网络通信开始时,假设PC0向PC1发送一个数据包,交换机S2的MAC地址表中并没有对应的MAC地址,因此会产生ARP洪泛(详情参考交换机自学习算法那篇文章)发送广播帧,由S2的Fa0/1和Fa0/3端口向对端发出。
当S1、S3分别接收到广播帧后,根据同样原理进行广播帧转发。这时网络形成了一个环路,但交换机并不知道这将导致广播帧在环路中永远循环下去。
随着时间增加,广播帧将会越来越多,最终形成网络广播风暴导致网络瘫痪。(对于交换机的运算速度来讲,网络由正常变瘫痪过程中的时间是非常短的)
STP概念
由上述描述就可以知道,我们需要一套方案去解决这种问题,所以就有了生成树协议。
生成树协议(英语:Spanning Tree Protocol,STP),是一种工作在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/s | 250 |
10Mb/s | 100 |
16Mb/s | 62 |
100Mb/s | 19 |
1Gb/s | 4 |
10Gb/s | 2 |
如果存在多个端口到根网桥的成本相同时,则比较对端的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最基本的情况进行描述分析,实际网络中的情况更复杂,例如某个网桥(交换机)突然掉线、链路损坏、生成树还未生成时交换机发生故障需重新选举等等。