文章目录
前言
随着局域网规模的不断扩大,越来越多的交换机被用来实现主机之间的互连,而如果所有的交换机之间都只使用一根链路互连,很可能会出现单点故障,最终导致交换机死机
这时一般都会使用冗余链路(这样会形成环路)来实现备份,这样可以提高网络的可靠性,当一条线路断掉时还有一条线路可以传输数据
但是在交换网络中,交换机接收到一个未知目的地址的数据帧时,就会进行广播,这样在存在物理环路的交换机网络中,就会产生一直循环下去,进而产生了广播风暴,最终导致交换机死机
这样就会产生一个矛盾,网络需要提高可靠性,但物理环路又有这种弊端,那怎么办呢
有需求就会有解决方法,接下来要进行讲解的生成树协议(STP)就是用来解决这个矛盾
它可以在逻辑上断开网络的环路,以防止广播风暴的产生
接下来具体进行讲解
一、STP概述
1、交换网络环路的产生
广播风暴的形成
先假设,如下图所示,PC1和PC2通过交换机相连,通信过程如下
- 网络通信刚开始时,PC1的ARP条目中没有PC2的MAC地址,所以会发送ARP广播请求(请求PC2的MAC地址)给交换机SW1
- SW1收到后会将广播帧从除了接收端口之外的所有端口转发出去(即该广播从F0/1和F0/2分别转发给SW2和SW3)
- SW2收到广播帧后,同样根据交换机转发原理,将广播帧从F0/2和连接PC2的端口转发;SW3收到后也同理,会从F0/2转发给SW2
- SW2从F0/2的端口收到SW3发送的广播帧后,将其从F0/2端口和连接PC2的端口转发;同样,SW3收到SW2的广播帧后,将其从F0/1转发
- SW1分别SW2、SW3收到广播帧,然后又将SW2收到的广播帧转发给SW3,再将SW3收到的广播帧转发给SW2
就这样,SW1、SW2与SW3将广播帧相互转发,网络就会形成一个环路,而交换机之间的默认转发原理就会导致广播帧在这个环路中无线循环下去最终形成广播风暴导致网络瘫痪
而且环路不仅产生了广播风暴,也导致了交换机mac地址表动荡
- PC1向外发送一个单播帧,假设此单播帧的目的MAC地址在网络中所有交换机的MAC地址表中都暂时不存在
SW1收到此数据帧之后,在MAC地址表中生成一个MAC地址表项,AAAA-AAAA-AAAA,对应端口为F0/3,并将其从F0/1和F0/2端口转发给SW3和SW2 - SW3接收到此帧后,由于MAC地址表中没有对应此帧目的MAC地址的表项,生成MAC地址表:AAAA-AAAA-AAAA,对应端口号为F0/1,然后SW3会将此帧从F0/2转发到SW2,
- SW2接收到此帧后,会转发给SW3,SW3收到后生成MAC地址表:AAAA-AAAA-AAAA,对应端口号为F0/2
这种广播风暴只有在物理环路消失时才可能停止
但是环路的物理线路能够为网络提供备份路线,提供可靠性,是必要的,这时STP就是用来在逻辑上断开环路,防止广播风暴产生
2、STP简介
STP,就是把一个环形的结构改变成一个树形的结构,也即在逻辑上阻塞一些端口,来生成一个逻辑上的树形结构
现在我再来解释一下“树”这个很形象的概念
同学们仔细观察一棵树,会发现一棵树,有根,树干,树枝,叶子,水分通过根,源源不断地输送到主干,树枝,然后到达叶子
水分在从根扩散到叶子的过程中,一直是单向的;而叶子因为光合作用产生的能量,再沿着叶子到达树枝,树干,一直到根
水分和能量是相反方向的流量,如果定义叶子为上游,根为下游,则水是从下游流向上游;而能量则是由下游流向上流
无论是哪个方向的流量,都没有在原地打转的情况发生,那是因为树的物理结构是发散的,树干和树枝有很多物理交织,自然不会发生环路
二、STP的工作原理
1、生成树算法
生成树算法的过程很复杂,可以归为一下三个步骤
(1)选择根网桥
(2)选择根端口
(3)选择指定端口
网桥:是一个二层桥接设备,桥接就是把桥的两端连接起来,只有目的MAC地址匹配才放行,也可以说指的就是“交换机”
下面以一个例子来讲解这几个步骤的选择过程,它采用如下图所示的网络拓扑结构
要将上图所示的网络结构变成一个无环的拓扑,首先,STP要选择根网桥
前面讲过,STP是将一个环形的拓扑结构变成一个树状的拓扑结构,因此选择根网桥实际上就是为网络选出一个树根
(1)选择根网桥
选择根网桥的依据是网桥ID,网桥ID是一个8字节的字段,前两字节的十进制数称为网桥优先级,后六字节是网桥的MAC地址(注:上图中缺省值为默认值)
网桥ID中的MAC地址是交换机自身的MAC地址
按照生成树算法定义,比较某个STP参数的两个取值时,值小的优先级高
因此,在选择根网桥的时候,比较的方法是看哪台交换机的网桥ID值最小,优先级相同则选择MAC地址小的为根网桥
如图,SW2优先级4096,值最小,所以为根网桥
若SW2的优先级也为默认值32768,三台交换机的优先级都相同,则比较MAC地址,SW2最小,所以SW2被选为根网桥
(2)选择根端口和指定端口
选出根网桥后,网络中的每台交换机必须和根网桥建立关联,因此STP将开始选择根端口的过程
路径成本用来代表一条线路带宽的大小,一条线路的带宽越大,它传输数据的成本也就越低
| 链路带宽/(Mb/s) | 路径成本 |
|---|---|
| 10 | 100 |
| 100 | 19 |
| 1000 | 2 |
(↑这里就简单介绍三个最常用的)
端口ID是一个2字节的STP参数,由1字节的端口优先级和1字节的端口编号组成
在STP选择根端口的时候,首先比较交换机端口的根路径成本,当相同时再比较网桥ID,若再相同,则比较端口ID(以上都是选择较小值为根端口)
在比较端口ID值得时候,比较的是接收到的对端的端口ID值
如下图所示,已选出了根网桥为SW2,那么下一步就是在SW1和SW3上各选择一个根端口,根端口为圈出来的端口
注:根网桥上的端口都是指定端口,因为根网桥上端口的路径成本为0
2、BDPU(桥协议数据单元)
交换机之间通过BPDU来交换网桥ID、路径成本等信息
交换机从端口发送一个BPDU帧,使用该端口本身的MAC地址作为源地址,它本身并不知道周围是否还有别的交换机存在,因此BPDU帧利用了一个STP组播地址(01-80-c2-00-00-00)作为它的一个目的地址,使之能够到达相邻的并处于STP聆听状态的交换机
注:每隔2s,便向所有的交换机端口发送一次BPDU报文,以便交换机(或网桥)能交换当前最新的拓扑信息,并迅速识别和检测其中的环路
(1) BPDU的两种类型
- 配置BPDU——用于生成树计算
- 拓扑变更通告(TNC)BPDU——用于通告网络拓扑的变化
(2)BPDU报文字段
对BPDU几个管子字段作用解释如下:
- 根网桥ID:由一个2字节优先级和一个6字节网桥MAC地址组成,这个信息组合是已经被选定为根网桥的设备标识
- 根路径成本:说明这个BPDU从根网桥传输了多远,成本是多少,这个字段的值决定哪个端口将进行转发,哪些端口将被阻断
- 发送网桥ID:这是发送该PBDU的网桥信息,由网桥的优先级和网桥的MAC地址组成
- 端口ID:由1字节的端口优先级和1字节的端口编号组成
- 计时器:计时器用于说明生成树用多长时间能完成它的每项功能,这些功能包括报文老化时间、最大老化时间、访问时间和转发延迟
(3)STP利用BPDU选择根网桥的过程
根网桥的选择是一个持续、反复进行的过程,它每2s触发一次,检查BPDU根网桥ID是否发生了变化,网络中是否有网桥ID值更低的交换机加入进来
根网桥选择过程如下所述:
- 当一台交换机第一次启动时,都会假定自己是根网桥,在BPDU报文中的根网桥ID字段填入自己的网桥ID并向外发送
- 交换机比较收到的BPDU报文中的根网桥ID与自己对比谁值更小,如果收到的小于自己,则用接收到的网桥ID代替自己,并转发
- 交换机会继续监听其他交换机发来的BPDU,并进行比较,只要收到的BPDU中的根网桥ID值小于目前储存的根网桥ID,就会进行替换
- 这样经过一段时间后,当所有的交换机互相交换了全部的BPDU,就能选出全网公认的唯一的根网桥
- 若收敛后有一台网桥ID值更小的交换机加入进来,那么它会首先把自己当做一个根网桥在网络中通告,由于那些新交换机的网桥ID值的确更小,于是其他的所有交换机在比对完后,就会把它当做新的根网桥记录下来
3、STP的收敛
(1)生成树端口的状态
STP在交换机中自动运行,在交换机开机的时候可以看到,交换机的指示灯显示为黄色,并且有大约30s的时间不能转发数据,这时交换机在做STP计算
直到交换机的STP计算完毕,有些端口可以转发数据,有些端口被堵塞,也就是网络收敛后,交换机才开始交换数据
并且,当网络的拓扑发生变化的时候,交换机还要重新运行STP计算,形成新的逻辑拓扑结构
在STP计算过程中交换机的每一个端口都必须依稀经历好几种状态,如下表所示列出了五中STP状态
如果一个端口允许转发数据,它首先从Disavled状态开始,经过几个被动状态,最后进入Active(活动)状态
(2)生成树计时器
STP在交换机相互发送BPDU报文时,会尽力形成一个无环路的拓扑
BPDU从一台交换机到另一台交换机的时候,总是需要花费一点时间,另外,当拓扑改变(如线路或根网桥故障)的消息从网络的一侧传到另一侧,也要经历一定的传播延迟
由于存在种种延迟,所以需要为交换机设置足够的时间来完成BPDU的转发和生成树的运算
因此,在交换机内部设置了一些计时器来控制每个阶段的时间长度
下图显示了生成树计时器决定的端口在各种状态下所处的时间长短,当启用STP的时候,VLAN上的每台交换机都会经过从阻塞到侦听(20s)、学习(15s)再到转发(15s)的过渡状态