为有源头活水来——生成树技术

萌新学有余力,整理《路由与交换技术》中关于生成树技术的一些学习笔记,巩固自己知识储备的同时并与大家一起分享,才疏学浅,还请大家多多批评指正,笔芯~

中华文化,底蕴深厚,开篇借用一首来自宋代学问家朱熹先生的诗作正式开启学习之路吧!


《观书有感》
半亩方塘一鉴开,天光云影共徘徊。
问渠那得清如许?为有源头活水来。

在这里插入图片描述


再回顾生成树技术之前,先浅谈一下什么是网络中的广播风暴
在这里插入图片描述
广播风暴也叫网络广播风暴,即一个数据包或帧被传送到本地网段(由广播域定义)上的每个节点就是广播,网络上的广播帧由于被转发,数量急剧增加而出现正常网络通信的反常现象。

广播风暴会占用相当可观的网络带宽,导致正常数据包无法正常运行。当广播数据充斥网络无法处理并占用大量网络带宽,导致正常业务不能运行,这就发生了广播风暴,造成局域网局部或整个网络瘫痪。

1.生成树协议的产生
在网络发展初期,透明网桥是一个不得不提的重要角色。它比只会放大和广播信号的集线器聪明得多,它会悄悄地把发向它的数据帧的源MAC地址和端口号记录下来,下次碰到这个目的MAC地址的报文就只从记录中的端口号发送出去,除非目的MAC地址没有记录在案或者目的MAC地址本身就是多播地址才会向所有端口发送。

通过透明网桥,不同的局域网之间可以实现互通,网络可操作的范围得以扩大。并且由于透明网桥具备MAC地址学习功能,而不会像Hub那样造成网络报文冲撞泛滥。但是,金无足赤,透明网桥也有它的缺陷。它的缺陷就在于它的透明传输,透明网桥并不能像路由器那样知道报文可以经过多少次转发,一旦网络存在环路就会造成报文在环路内不断循环和增生,甚至造成恐怖的“广播风暴”。

在这种大环境下,扮演着“救世主”角色的生成树协议(Spanning Tree Protocol,STP)来到人间,其中以 IEEE的802.1D版本最为流行。

—————为有源头活水来—————

2.生成树概述
STP是一种第二层的链路管理协议,它用于维护一个无环路的网络。
大家都知道,自然界中生长的树是不会出现环路的,如果网络也能够像一棵树一样生长就不会出现环路。
在这里插入图片描述
于是,STP中定义了根桥(Root Bridge)、根端口(Root Port)、指定端口(Designated Port)、路径开销(Path Cost)等概念,目的就在于通过构造一棵自然树的方法达到裁剪冗余环路的目的,同时实现链路备份和路径最优化。

用于构造这棵树的算法称为生成树算法(SPA)

生成树算法会特意阻塞可能导致环路的冗余路径,以确保网络中所有目的地之间只有一条逻辑路径

但要实现这些功能,网桥之间必须要进行一些信息的交流,这些信息交流单元就称为网桥协议数据单元(BPDU)帧

BPDU是一种二层报文,目的MAC地址是多播地址:01-80-C2-00-00-00,所有支持STP的网桥都会接收并处理收到的BPDU 报文,该报文的数据区里携带了用于生成树计算的所有有用信息。阻塞的路径不再接收和转发用户数据包,但是会接收用来防止环路的网桥协议数据单元(BPDU)帧。

如果网络拓扑发生变化,需要启用阻塞路径来抵消网络电缆或交换机故障的影响,STP就会重新计算路径,将必要的端口解除阻塞,使冗余路径进入活动状态。

3.基本术语
(1)根桥:每个生成树实例都有一台交换机被指定为根桥。根桥是所有生成树计算的
参考点,用以确定哪些冗余路径应被阻塞。

(2)端口角色
根端口:最靠近根桥的交换机端口

指定端口:网络中获准转发流量的、除根端口之外的所有端口

非指定端口:为防止环路而被置于阻塞状态的所有端口

禁用端口:是处于管理性关闭状态的交换机端口

端口开销:端口开销值与给定路径上的每个交换机端口的端口速度相关联

路径开销:路径开销是到根桥的路径上所有端口开销的总和

到根桥的最佳路径:交换机到根桥的所有路径中最短的一条路径

BPDU(网桥协议数据单元):是运行STP交换机之间交换的消息帧

每个BPDU都包含4个重要字段:

1.根桥的BID
2.转发根桥BPDU 的网桥的BID
3.到达根桥的开销
4.转发根桥BPDU 的网桥的端口ID

BID(网桥ID):内含有优先级值、发送方交换机的MAC地址以及可选的扩展系统 ID

端口ID:包含交换机端口的优先级、接口ID

交换机完成启动后,生成树便立即确定。如果交换机端口直接从阻塞转换到转发状态,但交换机此时并不了解所有拓扑信息时,该端口可能会暂时造成数据环路。
为此,STP引入了5种端口状态:
在这里插入图片描述
端口处于各种端口状态的时间长短取决于BPDU计时器,BPDU计时器状态:

Hello时间
Hello时间是端口发送BPDU帧的间隔时间,此值默认为2s,不过可调整为1~10s之间的值;

转发延迟
转发延迟是处于侦听和学习状态的时间,默认情况下,每转换一个状态要等待15s,不过此时间可调整为4~30s之间的值;

最大老化时间
最大老化时间计时器控制着交换机端口保存配置BPDU信息的最长时间,此值默认为20s,不过可调整为6~40s之间的值;

4.STP端口状态转换过程
STP端口状态的转换过程有以下5种:
(1)如果一个被阻塞的接口(非指定端口)在收到一个BPDU后,20s的时间内没有收到BPDU,则开始进入侦听状态。
(2)交换机端口初始化后直接进入侦听状态。
(3)在侦听状态中,交换机通过相互间的BPDU交换选出根桥、根端口、指定端口。在一个转发延迟(默认15s)之后进入下个状态。如果端口类型是以上三种之一则进入侦听状态,否则进入阻塞状态。
(4)在侦听状态中,BPDU 交换就绪。开始学习新的MAC 地址。在一个转发延迟之后(默认15s)进入下个状态。
(5)在转发状态中,端口可以接收和发送BPDU,可以接收和发送数据帧。端口现在就是生成树拓扑中的一个具有全部功能的交换机端口。
在这里插入图片描述
5.BPDU更新过程
●每台交换机最初都将自己作为根桥;

●当交换机或其他交换机收到BPDU时,将自己当前的根桥BID与收到的BPDU帧中的进行比较(先比较优先级,后比较MAC地址),如果收到的BPDU中的根桥的BID比当前的根桥BID更小(BID最小的网桥为根桥),则当前交换机将更新并转发此BPDU(此时不再自己生成 BPDU),修改发送网桥 BID为当前网桥的BID,到根的开销增加送出端口的端口开销,发送端口ID为送出端口的ID。

●当交换机收到来自两个不同接口的BPDU,其标识的根桥BID一致,就会比较其到根桥开销的大小,忽略开销大的BPDU,更新并转发小的BPDU。

●当交换机收到来自两个不同接口的BPDU,其标识的根桥BID一致,开销也一样,就会比较发送网桥的BID的大小,忽略发送网桥BID大的BPDU,更新并转发小的BPDU。如果发送网桥的BID也一样,就会比较发送端口ID的大小,忽略发送端口ID大的BPDU,更新并转发小的 BPDU。

6.STP收敛的步骤

1.选举根桥
●根桥的选举在交换机完成启动时或网络中检测到路径故障时触发。一开始,所有交换机端口都配置为阻塞状态,此状态默认情况下会持续20s。
●由于生成树技术允许网络的端与端之间最多有7台交换机,因此整个根桥的选举过程能够在14s内完成,此时间短于交换机端口处于阻塞状态的时间。
●交换BPDU,每2s发送一次,选取BID最小的网桥为根桥。

2.选举根端口
除根桥外的其余每台交换机都需具有一个根端口(到根桥的路径开销最低的端口)

●如果当同一交换机上有两个以上的端口到根桥的路径开销相同时,做出如下选择:
(1)到根路径的上一级网桥BID不同时:选择其BID小的路径。
(2)到根路径的上一级网桥BID相同时:选择其BPDU中的端口ID小的路径。

●当交换机从具有等价路径的多个端口中选择一个作为根端口时,落选的端口会被配置
为非指定端口(阻塞状态)以避免环路。

3.选举指定端口和非指定端口
交换网络中的每个网段只能有一个指定端口

●当两台交换机交换BPDU帧时,它们会检查收到的BPDU帧内的发送方BID,BID较小的交换机会将其端口配置为指定角色,BID较大的交换机将其交换机端口配置为非指定角色(阻塞状态)。

看到这里,来个例子,加深一下印象,体会STP收敛的过程!
在这里插入图片描述
1.首先选取根桥,根桥的选取是根据优先级和MAC地址来选取的。
首先比较优先级,如果优先级小那么就被选举为根桥,如果优先级相同,那么就比较MAC地址,MAC地址小的选举为根桥,如图所示,首先比较优先级,S1的优先级最小,就选举其为根桥。

2.端口选取,分为根端口和指定端口
途中所有链路速度均为百兆,因此链路开销为19,根桥不需要选取根端口,因此S1的F0/1和F0/2均为指定端口。
非根桥的交换机需要选取根端口,靠近根桥的交换机端口即为根端口,因此,S3的F0/1和S2的F0/1被选举为根端口。

在Trunk1链路,S2上的F0/1到根桥的开销为 19,S1上的F0/1到根桥的开销为0,因此选举S1 的F0/1为指定端口。
在Trunk2链路上S2上的F0/2端口到根桥的开销为19,S3上的F0/2端口到根桥的开销为19,两个开销一样,就比较MAC地址大小,因此S2上的F0/2被选举为指定端口。
在Trunk3链路上S3上的F0/1端口到根桥的开销为19,S1上的 F0/2端口到根桥的开销为0,因此选举S1上的F0/2为指定端口。

3.最后选举非指定端口,即S3上的F0/2端口。
在这里插入图片描述
最后,STP给透明网桥带来了新生。但是,随着应用的深入和网络技术的发展,它的缺点在应用中也被暴露了出来。

STP的缺陷主要表现在收敛速度上

当拓扑发生变化,新的配置消息要经过一定的时延才能传播到整个网络,这个时延称为转发延迟,协议默认值是15s。在所有网桥收到这个变化的消息之前,若旧拓扑结构中处于转发的端口还没有发现自己应该在新的拓扑中停止转发,则可能存在临时环路。

为了解决临时环路的问题,生成树使用了一种定时器策略,即在端口从阻塞状态到转发状态中间加上一个只学习MAC地址但不参与转发的中间状态,两次状态切换的时间长度都是转发延迟,这样就可以保证在拓扑变化的时候不会产生临时环路。但是,这个看似良好的解决方案实际上带来的却是至少两倍转发延迟的收敛时间。

7.快速生成树协议RSTP
RSTP在STP基础上做了三点重要改进,使得收敛速度快得多(最快1s以内)。

★第一点改进:为根端口和指定端口设置了快速切换用的替换端口(Alternate Port)和备份端口(Backup Port)两种角色,当根端口/指定端口失效的情况下,替换端口/备份端口就会无时延地进入转发状态。

★第二点改进:在只连接了两个交换端口的点对点链路中,指定端口只需与下游网桥进行一次握手就可以无时延地进人转发状态。如果是连接了三个以上网桥的共享链路,下游网桥是不会响应上游指定端口发出的握手请求的,只能等待两倍转发延迟时间进入转发状态。

★第三点改进:直接与终端相连而不是把其他网桥相连的端口定义为边缘端口(Edge
Port)
。边缘端口可以直接进入转发状态,不需要任何延时,但由于网桥无法知道端口是否是直接与终端相连,所以需要人工配置。


对于生成树技术的理解,萌新还有许多不足之处,还请读者朋友多多指正,谢谢啦~