首页 > 代码库 > 生成树协议(STP)

生成树协议(STP)

n  交换网络环路的产生

在实际网络环境中,情况要复杂得多,当广播帧经过交换机时,交换机就以指数的形式生成广播帧(交换机从除收到该广播帧之外的所有端口转发广播帧)。这种广播帧会越来越多,最终形成广播风暴,导致网络瘫痪。

这种广播风暴只有在物理环路消失时才可能停止。

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

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

n  STP简介

STP(Spanning Tree Protocol,生成树协议)就是把一个环形的结构改变成一个树形的结构。STP协议就是用来将物理上存在环路的网络,通过一种算法,在逻辑上阻塞一些端口,来生成一个逻辑上的树形结构。

n  生成树算法

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

(1) 选择根网桥(Root Bridge)

(2) 选择根端口(Root Ports)

(3) 选择指定端口(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最小的端口所对应的端口)

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

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

端口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值。

n  桥协议数据单元(BPDU)

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

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

1.   BPDU的两种类型

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

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

2.   BPDU报文字段

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

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

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

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

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

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

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

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

n  STP的收敛

1.生成树端口的状态

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

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

状态                         用途                              

转发(Forwarding)              发送/接受用户数据

学习(Learning)                构建网桥表

侦听(Listening)               构建“活动”拓扑

阻塞(Blocking)                只接受BPDU

禁用(Disabled)                强制关闭                          

2.生成树计时器

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

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

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

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

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

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

1)   从阻塞到侦听(20s)

2)   从侦听到学习(15s)

3)   从学习到侦听(15s)

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

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

n  STP与VLAN的关系

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

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

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

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

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

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

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

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

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

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

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

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

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

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

n  PVST+的配置命令

1.  配置PVST+的意义

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

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

除了配置网络中比较稳定的交换机为根网桥外,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-listpriority Bridge-priority

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

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

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

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

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

(3)  修改端口成本

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

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

(4)  修改端口优先级

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

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

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

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

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

(5)  配置速端口

Switch(config)#spanning-tree portfast

3.  PVST+配置的查看

(1) 查看生成树的配置

Switch# show spanning-tree

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

Switch# show spanning-tree vlan vlan-iddetail

            

配置VLAN负载均衡


技术分享

具体步骤:

1.  在SW0上配置如下:

技术分享

或者更改优先级:

技术分享

2.  在SW1上配置如下:

技术分享

或者更改优先级:

技术分享


本文出自 “刘小兔” 博客,谢绝转载!

生成树协议(STP)