生成树协议(STP)原理与配置PVST+实现负载均衡

本文涉及的产品
传统型负载均衡 CLB,每月750个小时 15LCU
应用型负载均衡 ALB,每月750个小时 15LCU
网络型负载均衡 NLB,每月750个小时 15LCU
简介:

交换网络环路的产生

     在实际网络环境中,物理环路可以提高网络的可靠性,当一条线路断掉时,另一条线路仍然可以传输数据。但是,当交换机收到广播请求时,交换机就根据转发原理(交换机从除收到该广播帧之外的所有端口转发广播帧),形成了一个环路,这种广播帧会越来越多,最终形成广播风暴,导致网络瘫痪。这种广播风暴只有在物理环路消失时才可能停止。

      wKiom1mVi1nDAahoAAC_caLaJ7s784.png

    但是环状的物理线路能够为网络提供备份线路,增强网络的可靠性,这在网络设计中是必要的,因此,这就需要一种解决方法,一方面能够保证网络的可靠性,另一方面还要防止广播风暴的产生。

STP协议就是用来解决这个问题的。STP协议并不是断掉物理环路,而是在逻辑上断开环路,防止广播风暴的产生。


STP简介

   STP(Spanning Tree Protocol,生成树协议)就是把一个环形的结构改变成一个树形的结构。STP协议就是用来将物理上存在环路的网络,通过一种算法,在逻辑上阻塞一些端口,来生成一个逻辑上的树形结构。当线路发生故障时,被阻塞的线路就重新激活,使数据从这条线路正常传输。


生成树算法

   生成树协议运行生成树算法(Spanning Tree Algorithm,STA)。生成树算法很复杂,但是其过程可以归纳为以下三个步骤:

第一步:选择根网桥(Root Bridge)

第二步:选择根端口(Root Ports)

第三步:选择指定端口(Designated Ports)

网桥:交换机的前身,由于STP是在网桥基础上开发的,因此现在交换机的网络中仍然沿用网桥这一术语。在Cisco教程里习惯称为“网桥”,在这指的就是“交换机”。

1.选择根网桥(在一个环形网络中,可以出现多个根网桥(有多个VLAN的时候,或者做负载均衡的时候),默认只有一个)

   选择根网桥的依据是网桥ID,网桥ID是一个八字节的字段,前两个字节的十进制数称为网桥优先级,后两个字节是网桥的MAC地址。

  网桥优先级是用于衡量网桥在生成树算法中优先级的十进制数,取值范围为0-65535,默认值是32768.

  网桥ID中的MAC地址是交换机自身的MAC地址,可以使用命令show version在交换机版本信息中查看交换机自身的MAC地址。

  * 按照生术数算法的定义,当比较某个STP参数的两个取值时,值小的优先级高。因此,在选择根网桥的时候,比较的方法是看哪台交换机的网桥ID的值最小,优先级小的被选择为根网桥,在优先级相同的情况下,MAC地址小的为根网桥。


2.选择根端口(在每个非根网桥上选择一个)

   选出了根网桥之后,网络中的每台交换机必须和根网桥建立某种关联,因此STP将开始选择根端口的过程。根端口存在于非根网桥上,需要在每个非网桥上选择一个根端口。

选择根端口的依据按照顺序依次如下:

(1) 到根网桥最低的根路径成本

(2) 直连的网桥ID最小

(3) 端口ID最小(直连对端的网桥端口ID最小的端口所对应的端口)

  根路径成本是两个网桥间的路径上所有线路的成本之和,也就是某个网桥到达根网桥的中间所有线路的路径成本之和。

  路径成本用来代表一条线路带宽的大小,一条线路的带宽越大,它传输数据的成本也就越低。

 wKioL1mVnOWRepzJAAB-yi3HN-A607.png

            wKiom1mVnOaBzXiOAAB260zSVP8073.png

  端口ID是一个二字节的STP参数,由一个字节(8位)的端口优先级和一个字节(8位)的端口编号组成。

  端口优先级是一个可配置的STP参数,在基于IOS的交换机上,端口优先级的十进制取值范围是0-255,默认值是128。

  端口编号是Catalyst用于列举各个端口的数字标示符。在基于IOS的交换机上,可以支持256个端口。端口编号不是端口号,但是端口号低的端口,端口编号值也较小。

  * 在STP选择根端口的时候,首先比较交换机端口的根路径成本,根路径成本低的为根端口。当根路径成本相同的时候,比较连接的交换机的网桥ID值,选择网桥ID值小的作为根端口;当网桥ID相同的时候,比较端口ID值,选择较小的作为根端口。

注意:在比较端口ID值时,比较的是接收到的对端的端口ID值。


3.选择指定端口(在每条链路上选择一个)

   选择完根网桥和每台交换机的根端口后,一个树形结构已初步形成,但是,所有的线路仍连接在一起,并可能都处于活动状态,最后导致形成环路。

    为了消除环路形成的可能,STP进行最后的计算,在每一个网段上选择一个指定端口。选择指定端口的依据与根端口相同,按顺序有以下三个:

(1)根路径成本较低

(2)所在的交换机的网桥ID的值较小

(3)端口ID的值较小

  * 在STP选择指定端口的时候,首先比较同一网段上端口中根路径成本最低时,也就是将到达根网桥最近的端口作为指定端口;当根路径成本相同的时候,比较这个端口所在的交换机的网桥ID值,选择一个网桥ID值小的交换机上的端口作为指定端口;当网桥ID相同的时候,也就是说,有几个位于同一交换机上端口时,比较端口ID值,选择较小的作为指定端口。

注意:和选择根端口不同,在比较端口ID值时,比较的是自身的端口ID值。


生成树算法验证 

  在交换机上使用命令查看生成树

   Switch# show  spanning-tree            


桥协议数据单元(BPDU)

   交换机之间通过BPDU(桥协议数据单元,Bridge Protocol Data Unit)来交换网桥ID、根路径成本等信息。交换机从端口发送出一个BPDU帧,使用该端口本身的MAC地址作为源地址。交换机本身并不知道它周围是否还有其他的交换机存在。因此,BPDU帧利用了一个STP组播地址(01-80-c2-00-00-00)作为它的一个目的地址,使之能到达相邻的,并处于STP侦听状态的交换机。

  每隔两秒,便向所有的交换机端口发送一次BPDU报文,以便交换机(或网桥)能交换当前最新的拓扑信息,并迅速识别和检测其中的环路。

1.BPDU的两种类型

(1) 配置BPDU,用于生成树计算。

(2) 拓扑变更通告(Topology Change Notification,TCN)BPDU,用于通告网络拓扑的变化。

2.BPDU报文字段

  BPDU中包含根网桥ID、根路径成本、发送网桥、端口ID和计时器等,下面是对BPDU几个关键字段作用的解释。

(1) 根网桥ID:由一个二字节优先级和一个六字节网桥MAC地址组成。这个信息组合表明已经被选定为根网桥的设备标识。

(2) 根路径成本:说明这个BPDU从根网桥传输了多远,成本是多少。这个字段的值决定哪些端口将进行转发,哪些端口将被阻断。

(3) 发送网桥ID:这是发送BPDU的网桥信息,由网桥的优先级和网桥MAC地址组成。

(4) 端口ID:由一个字节的端口优先级和一个字节的端口编号组成。

(5) 计时器:计时器用于说明生成树用多长时间能完成它的每项功能。这些功能包括报文老化时间、最大老化时间、访问时间和转发延迟。

3.STP利用BPDU选择根网桥的过程

   根网桥的选择是一个持续、反复进行的过程,它没两秒触发一次,检查BPDU的根网桥ID是否发生了变化、网桥是否有网桥ID值更低的交换机加入进来。


STP的收敛

1.生成树端口的状态

   生成树协议在交换机中自动运行,在交换机开机的时候可以看到,交换机的指示灯显示为***,并且大约有30S的时间不能转发数据,这时交换机是在做STP计算。直到交换机的STP计算完毕,有些端口可以转发数据,有些端口被阻塞,也就是网络收敛后,交换机才开始转发数据。并且,当网络的拓扑发生变化的时候,交换机还要重新运行STP计算,形成新的逻辑的拓扑结构。

   在STP运算过程中,交换机的每一个端口都必须依次经历好几种状态,如图所示:

  wKioL1mVkW3DO97SAACGPc-1kLA093.png

2. 生成树计时器

   STP在交换机相互发送BPDU报文时,尽力形成一个无环路的拓扑。BPDU从一台交换机传到另一台交换机时,总要花费一定的时间。另外,当拓扑改变(如线路或根网桥故障)的消息从网络的一侧传送到另一侧时,也要经历一定的传播延迟。由于存在这些延迟,所以需要为交换机设置足够的时间来完成BPDU的转发和生成树的运算,因袭,在交换机内部设置了一些计时器来控制每个阶段的时间长度。

   STP利用三种计时方法来确定一个网络正确的收敛。现将STP计时器及它们的默认值描述如下:

* Hello时间:网桥发送配置BPDU报文之间的时间间隔。IEEE802.1q标准规定的默认访问时间为两秒。

转发延迟:一个交换机端口在Listening(侦听)和Learning(学习)状态所花费的时间间隔,它的默认值各为15S。

* 最大老化时间:交换机在丢失BPDU报文之前存储它的最大时间。

侦听和学习都是生成树所实施的过渡状态,用来强迫端口等待来自其他交换机上的所有BPDU。典型的端口过渡如下:

A.从阻塞到侦听(20s)

B.从侦听到学习(15s)

C.从学习到侦听(15s)

  当启用STP时,VLAN上面的每台交换机在加电以后都经过从给阻塞到侦听、学习的过渡状态。

  STP计时器可以用命令予以配置和调整。不过,如不是经过认真考虑和规划,建议不要轻易改变计时器的默认值。


STP与VLAN的关系

VLAN与生成树之间的关系主要有以下几种:

1.IEEE的CST(Common Spanning Tree,通用生成树)

2. Cisco的PVST(Per VLAN Spanning Tree,每VLAN生成树)

3.Cisco的PVST+(Per VLAN Spanning Tree Plus,增强的每VLAN生成树)

4. IEEE的MST(Multiple Spanning Tree,多生成树)

  其中,CST不考虑VLAN,以交换机为单位运行STP(整个交换网络生成一个STP实例),交换机中划分VLAN不会产生广播环路。但是由于CST不考虑VLAN,所以经过STP计算后会阻塞其中的一个端口。

PVST是Cisco私有的协议,PVST为每个虚拟局域网运行单独的生成树实例(每个VLAN生成一个STP实例)。

PVST为每个VLAN运行独立的一个生成树实例,能优化根网桥的位置,能为所有的VLAN提供最优路径(因为VLAN的拓扑结构各不相同)。

  但是,PVST也不是完美的,主要缺点如下:

1.为了维护针对每个VLAN而生成的生成树,交换机的利用率(如CPU负载)会更高。

2. 为了支持各个VLAN的BPDU,需要占用更多的Trunk线路带宽。

3. PVST与IEEE的CST不兼容,使得运行PVST的Cisco交换机不能与其他厂家的交换机进行互操。

  为了解决和其他厂商的交换机进行互操作的问题,Cisco开发了PVST+。PVST+允许CST的信息传给PVST,以便与其他厂商在VLAN上运行生成树的实现方法进行互操作。

  PVST+为每一个VLAN生成一个生成树实例,而每个实例都要占用交换机的CPU和内存资源。随着VLAN的增加,实例也会增加,这导致维护生成树实例将占用较多的交换机资源。


1. 配置PVST+的意义

   因为在交换网络中,如果一个根网桥不稳定,那么这个网络就需要经常惊醒STP运算,经常变化逻辑拓扑。因此,可以说,如果网络中有一个不稳定的根网桥,就会有一个不稳定的网络。

   而在交换机选择根网桥的时候,如果不修改网桥ID中的优先级,那么选择的依据就是交换机的MAC地址,而MAC地址是随机的,很可能就会碰到这种情况:网络中最边缘的交换机被选择成了根网桥。因此,虽然生成树在交换机中自动运行,但是,合理的配置能够对网络进行优化。

  wKioL1mVlJDjBsJ9AADfjl2ezZM527.png

  除了配置网络中比较稳定的交换机为根网桥外,PVST+的配置主要还有以下几个方面:

1) 利用PVST+实现网络的负载均衡

   配置两台或多台核心交换机分别为不同VLAN的根网桥,使不同的VLAN中各接入交换机上选择的根端口不同,因此,不同的VLAN的数据传输使用的线路也不同,以达到两条或多条线路之间负载均衡的目的。

2) 配置速端口(PostFast)

   使连接终端的端口快速进入到转发状态。主机连接到交换机的端口,如果主机关闭后再开机,交换机的端口状态会先变为down再变为up。这时,此端口直到STP进入转发状态后才可用,如果使用默认的STP计时器,端口从down到STP的转发状态需要至少30秒。这就导致主机必须等待端口进入转发状态后,才能接收或转发数据。

当单台主机连接到交换机的一个端口时,不可能形成环路,所以Cisco交换机提供了速端口功能。在端口启用速端口功能后,当端口从down到up状态时,该端口不经过侦听和学习状态,直接进入转发状态,节省30秒的转发延迟。然而,该端口仍然运行生成树协议,如果检测到了环路,也能够从转发状态转换到阻塞状态。速端口只能配置在连接终端的接口上,否则就有可能导致短时间的生成树的环路。


2. PVST+配置命令

(1) 启用生成树命令

   交换机在默认情况下启用生成树。通过在此命令前加no,可以关掉某个VLAN的生成树,但是,一般情况下,即使网络中不存在物理环路,也不建议关闭生成树。启用生成树的命令如下:

   Switch(config)# spanning-tree vlan vlan-list          


(2) 指定根网桥

由于MAC地址不可更改,所以要指定VLAN的优先级。可以使用下面命令更改优先级。

   Switch(config)# spanning-tree vlan vlan-list priority Bridge-priority  

  其中,Bridge-priority默认为32768,范围是0-65535,可以通过此命令同时更改多个VLAN的网桥优先级,例如VLAN5和VLAN10-20的网桥优先级配置为4096,如下所示:

   Switch(config)# spanning-tree vlan 5,10-20 priority 4096          

除了更改网桥的优先级外,还可以使用命令指定交换机为根网桥,如果配置为primary,则交换机的优先级变为24576,配置secondary,优先级变为28672。配置根网桥的命令如下:

   Switch(config)# spanning-tree vlan vlan-list root {primary | secondary}   

注意:配置VLAN负载均衡的两种方法的目的都是改变STP的优先级,且配置的STP优先级必须是4096的倍数


(3) 修改端口成本

在端口模式下配置如下命令,来更改该端口的端口成本。如下所示:

   Switch(config-if)# spanning-tree vlan vlan-list cost cost   


(4) 修改端口优先级

在端口模式下配置如下命令,更改该端口的端口优先级,如下所示:

   Switch(config-if)#spanning-tree vlan vlan-list port-priority priority   

例如,使用下面命令更改F0/1端口的成本和优先级,如下所示:

   Switch(config)# spanning-tree vlan 1 cost 10              

   Switch(config)# spanning-tree vlan 1 port-priority 96     


(5) 配置速端口

   Switch(config)# spanning-tree portfast             


3. PVST+配置的查看

(1) 查看生成树的配置

   Switch# show spanning-tree                        

(2) 查看某个VLAN的生成树详细信息

   Switch# show spanning-tree vlan vlan-id detail    


配置STP实现VLAN负载均衡

   wKioL1mVmG7h8QdtAACALvRCrm8255.png  

(1)为交换机配置VLAN并配置连接端口为trunk模式 (略)

(2)配置VLAN负载均衡

   SW1(config)# spanning-tree vlan 1  root primary          

   SW1(config)# spanning-tree vlan 2  root secondary        

   SW2(config)# spanning-tree vlan 2  root primary          

   SW2(config)# spanning-tree vlan 1  root secondary        

(3)在SW3上为端口1-20配置速端口

   SW3(config)# int r f0/1 -20                              

   SW3(config)# spanning-tree portfast                      










本文转自 杨书凡 51CTO博客,原文链接:http://blog.51cto.com/yangshufan/1957184,如需转载请自行联系原作者
相关实践学习
SLB负载均衡实践
本场景通过使用阿里云负载均衡 SLB 以及对负载均衡 SLB 后端服务器 ECS 的权重进行修改,快速解决服务器响应速度慢的问题
负载均衡入门与产品使用指南
负载均衡(Server Load Balancer)是对多台云服务器进行流量分发的负载均衡服务,可以通过流量分发扩展应用系统对外的服务能力,通过消除单点故障提升应用系统的可用性。 本课程主要介绍负载均衡的相关技术以及阿里云负载均衡产品的使用方法。
目录
相关文章
|
21天前
|
负载均衡 网络协议 网络安全
SLB-Backend多实例部署配置健康检查
【10月更文挑战第22天】
48 3
|
2天前
|
负载均衡 应用服务中间件
slb何时需要配置健康检查域名
slb何时需要配置健康检查域名
14 3
|
24天前
|
负载均衡 算法 应用服务中间件
5大负载均衡算法及原理,图解易懂!
本文详细介绍负载均衡的5大核心算法:轮询、加权轮询、随机、最少连接和源地址散列,帮助你深入理解分布式架构中的关键技术。关注【mikechen的互联网架构】,10年+BAT架构经验倾囊相授。
5大负载均衡算法及原理,图解易懂!
|
16天前
|
弹性计算 负载均衡 算法
slb 配置不当
【11月更文挑战第2天】
32 10
|
17天前
|
负载均衡 监控 应用服务中间件
slb配置同步问题
【11月更文挑战第1天】
27 3
|
25天前
|
弹性计算 负载均衡 算法
slb配置监听器
【10月更文挑战第18天】
39 3
|
1月前
|
负载均衡 Java 应用服务中间件
Nginx负载均衡配置
Nginx负载均衡配置
|
1月前
|
负载均衡 算法 Java
java中nginx负载均衡配置
java中nginx负载均衡配置
42 0
|
5月前
|
缓存 负载均衡 算法
解读 Nginx:构建高效反向代理和负载均衡的秘密
解读 Nginx:构建高效反向代理和负载均衡的秘密
122 2
|
4月前
|
负载均衡 算法 应用服务中间件
nginx自定义负载均衡及根据cpu运行自定义负载均衡
nginx自定义负载均衡及根据cpu运行自定义负载均衡
94 1
下一篇
无影云桌面