生成树协议(
stp)
理解
STP的工作原理
会配置
PVST+实现交换网络负载分担
了解
BPDU(桥协议数据单元)
简介
在实际的网络环境中,物理环路可以提高网络的可靠性,当一条线路断掉的时候,另一条链路仍然可以传输数据。但是,在交换网络中,当交换机接收到一个未知目的地址的数据帧时,交换机的操作是将这个数据帧广播出去,这样,在存在物理的交换网络中,就会产生一个双向的广播环,甚至产生广播风暴,导致交换机死机。
这就产生一个矛盾,需要物理环路来提高网络可靠性,而环路又可能产生广播风暴,如何才能两全其美呢?
本章将要讲述的
STP,就是用来解决这个矛盾的。STP协议在逻辑上断开网络的环路,防止广播风暴的产生,而一旦正在用的线路出现故障,逻辑上被断开的线路又被连通,继续传输数据。
本章重点:
STP的工作原理
配置
PVST+以实现交换网络的负载分担
本章难点:
STP的工作原理
4
.1STP概述
4.1
.1交换网络环路的产生
图
4.1物理拓扑
如图4
.1所示,PC1和PC2通过交换机相连。网络初始状态时,PC1与PC2通信过程如下。
(1) 在网络通信最初,
PC1的ARP条目中没有PC2的MAC地址,根据ARP原理PC1首先会发送一个ARP广播请求(请求PC2的MAC地址)给交换机SW1.
(2) 当
SW1收到ARP的广播请求时,根据交换机转发原理,SW1交换机会将广播帧从除接收端口之外的所有端口转发出去(即该广播会从F0/1和F0/2分别转发给SW2和SW3)。
(3) SW2收到广播帧后,同样根据交换机转发原理,将广播帧从
F0/2和连接PC2的端口转发,同样,SW3收到广播帧后,将其从F0/2端口转发。
(4) SW2从
F0/2端口收到从SW3发送的广播帧后,将其从F0/2和连接PC2的端口转发;同样,SW3收到从SW2发送的广播帧后。将其从F0/1端口转发。
(5) SW1分别从
SW2、SW3收到广播帧。然后将从SW2收到的广播帧转发给SW3,而将从SW3收到的广播帧发给SW2.
SW1、
SW2和SW3会将广播帧相互转发,这时网络就形成了一个环路。而交换
机之间并不知道,这将导致广播帧在这个环路中永远循环下去(如图4
.2所示)
4
.2广播风暴的产生
在实际网络环境中情况要复杂的多,当广播帧经过交换机时,交换机就以指数的形式生成广播帧(交换机从除收到该广播帧之外的所有端口转发广播帧)。这种广播帧会越来越多,最终形成广播风暴,导致网络瘫痪。
这种广播风暴只有在物理环路消失时才可能停止。
但是环状的物理链路能够的网络提供备份线路,增强网络的可靠性。这在网络设计中是必要的,因此,这就需要一种解决方法,一方面保证网络的可靠性,另一方面还要防止广播风暴的产生。
STP协议就是用来解决这个问题。
STP协议并不是断掉物理环路,而是在逻辑上断开环路,防止广播风暴的产生。
4
.1.2STP简介
STP就是把一个环形的结构改变成一个树形的结构。STP协议就是用来将物理上存在环路的网络,通过一种算法,在逻辑上阻塞一些端口,来生成一个逻辑上树形结构。如图4.3所示,对于三台交换机构成环路的网络,在使用STP协议后,交换机SW2与SW3连接链路的一个端口被协议从逻辑上阻塞,这条线路也就不能再传输数据了,也就是从逻辑上打破了环路。当正常通信的链路发生故障时,被逻辑上阻塞的链路被重新激活,使数据能从这条链路正常传输
图4
.3三台交换机STP功能示意1
图4
.4三台交换机STP功能示意2
那么
STP协议如何实现将环形结构的拓扑变成树形结构呢?STP协议如何知道哪些接口应该阻止,哪些接口应该用来传输数据呢?它依据的算法是什么样的?下面将详细讲解IEEE802.1d STP的工作原理。
4
.2STP工作原理
4
.2.1生成树算法及验证(
STP选举过程)
1
.生成树算法
生成树协议运行生成树算法(
STA)。生成树算法很复杂,但是其过程可以归纳为以下三个步骤。
(1) 选择根网桥(
ROOT BRIDGE)
(2) 选择根端口(
ROOT PORTS)
(3) 选择指定端口(
DESIGNATED PORTS)
*******************************************************************************
名词解释: 网桥的交换机的前身,由于
STP是在网桥基础上开发的,因此现在交换机的网络中仍然沿用网桥这一术语。
******************************************************************************
下面以一个例子来讲解这几个步骤的选择过程,它采用如图4
.5所示的网络拓扑。
图4
.5STP收敛过程示例拓扑图
要将图所示的网络结构变成一个无环的拓扑,首先,
STP要选择根网桥,前面讲过,STP是将一个环形的拓扑变成一个树状的拓扑结构,因此选择根网桥实现上就是为网络选出一个树根,那么选择根网桥的依据是什么呢?
1) 选择根网桥
选择根网桥的依据是网桥
ID,网桥ID是一个八字节的字段,其组成结构如图4.6所示,前面两个字节的十进制数称为网桥优先级,后六个字节是网桥的MAC地址。
网桥优先级是用于衡量网桥在生成树算法中优生级的十进制数,取值范围为0
~65535,默认值是32768.
网桥
ID中的MAC地址是交换机自身的MAC地址,可以使用命令 show version 在交换版本信息中查看交换机自身的MAC地址,显示如下:
Base Ethernet MAC address : 00:0D:28:00:B1:00
按照生成树算法的定义,当比较那个
STP参数的两个取值时,值小的优先级高。因此,在选择根网桥的时候,比较的方法是看哪台交换机的网桥ID的值最小,优先级小的被选择为根网桥,在优先级相同的情况下,MAC地址小的为根网桥。
在如图4
.5所示的拓扑中,SW2的优先级为4096,SW1与SW3的优先级为默认值32768,因此,SW2被选为根网桥,如图4.7所示。
图4
.7收敛过程选择根网桥
如果
SW2的优先级也是32768时,三台交换机的优先级相同。比较三台交换机的MAC地址,SW2的MAC地址最小,所以SW2被选为根网桥。
2) 选择根端口
选出了根网桥之后,网络中的每台交换机必须和根网桥建立关联,因此,
STP将开始选择根端口的过程。根端口存在每个非根网桥上,需要在每个非根网桥上选择一个根端口。
选择根端口的依据按照顺序依次如下。
到根网桥最低的根路径成本。
直连的网桥
ID最小
端口
ID最小
根路径成本是两个网桥间的路径上所有链路的成本之和,也就是一个网桥到达根网桥的中间所有链路的路径成本之和,如图
4.8所示
图
4.8根路径成本与路径成本
路径成本用来代表一条链路带宽的大小,见表
4-1,一条链路的带宽越大,它的传输数据的成本也就越低。
4-1 带宽与路径成本的关系
端口
ID是一个二字节的STP参数,由一个字节的端口优先级和一个字节的端口编号组成,如图4.9所示。
端口优先级是一个可配置的
STP参数,在基于IOS的交换机上,端口优先级的十进制取值范围是0~255,默认值是128。
端口编号是
catalyst用于列举各个端口的数字标识符。在基于IOS的交换机上,可以支256个端口。端口编号不是端口号,但是端口号低的端口,端口编号值也较小。
在
STP选择根端口的时候,首先比较交换机端口的根路径成本,根路径成本低的为根端口,当根路径成本相同的时候,比较连接的交换机的网桥ID值,选择网桥ID值小的作为根端口;当网桥ID相同的时候,比较端口ID值,选择较小的作为根端口。
*******************************************************************************
注意啦:在比较端口
ID时,比较的是接收到的对端的端口ID值
****************************************************************************
在如图
4.10所示的拓扑中,已经选出了根网桥,那么下一步就需要在SW1和SW3上各选择一个根端口,在本例中,所有的链路都是100MB/S的,那么下一步就需要在SW1和SW3上直接与SW2相连的接口的根路径成本是19,而SW1 与SW3之间连接的端口,其根路径成本应该是19+19=38;因此,在SW1与SW3上,直连SW2的端口被选为根端口,如图4.10
图
4.10 STP收敛过程选择根端口
3) 选择指定端口
选择完根网桥和每台交换机的根端口后, 一个树形结构已初步形成,但是,所有链路仍连接在一起,并可以都处于活动状态,最后导致形成环路。
为了消除环路形成的可能,
STP进行最后的计算,在每一个网段上选择一个指定端口,选择指定端口的依据有三个。
根路径成本较低
所在的交换机的网桥
ID值较小
端口
ID较小
在
STP选择指定端口的时候,首先比较同一网段上端口中根路径成本最低的,也就是将到达根网桥最近的端口作为指定端口;当根路径成本相同的时候,比较这个端口所在的交换机的网桥ID值,选择一个网桥ID值小的交换机上的端口作为指定端口;当网桥ID相同的时候,也就是说,有几个位于同一交换机上的端口时,比较端口ID值,选择较小的作为指定端口。
另外,根网桥上的接口都是指定端口,因为根网桥上端口的根路径成本为
0
如图
4.11所示的拓朴中,首先,作为根网桥的SW2上的端口都是指定端口。那么在SW1 与SW3连接的网段上需要在两个端口之间选出一个指定端口来。
首先比较两个端口的根路径成本,这两个端口的根路径成本的值都是
38 (19+19),那么只能比较网桥的ID 了,现在SW1与SW3的网桥优先级相同,SW3的MAC地址小于SW1的MAC地址,因此,SW3的网桥ID小,所以SW3上的端口选作指定端口(如图4.11所示)。
STP的计算过程结束,这时,只有在
SW1上连接到SW3的端口既不是根端口,也不是指定端口,那么这个端口被阻塞(BLOCK)。被阻塞的端口不能传输数据。
由于
SW1上连接SW3的接口被阻塞,所以图4.11所示的拓朴可以等价为图4.12 SW1和SW3之间的链路成为备份链路。
2.生成树算法验证
在了解了生成树协议的选举过程后,下在分别以两台和三台交换机为例,验证生成树选举算法。
两台交换机的生成树协议选举过程
通过两条速率不等的链路连接的两台交换机的
STP选举过程。
按照图
4.13所示连接网络(如果没有ethernet端口,可以将fastethernet端口速率改为10Mb/s),其中的交换机设备都有为默认配置,SW1的MAC为001f.caff.1000,SW2的MAC为0021.1ba5.6980.
图
4.13两台交换机通过两台链路连接,且两条链路速率不等
按照
STP的工作原理来选择根网桥、根端口和指定端口。
首先,根据网桥
ID选择根网桥。由于交换机为默认配置,所以优先级相同,都为32768,在这种情况下选择,MAC地址最小的交换机为根网桥,所以SW1成为根网桥。
然后,根据根路径成本在非根网桥上选择根端口,链路为
10M的COST为100,而100M的 COST为19,所以SW2的F0/24端口为根端口。
最后,在每个网络上选择指定端口,由于根网桥交换机的端口都为指定端。所以
SW1的F0/23的F0/24成为指定端口,SW2的F0/23端口阻塞。
在交换机上可以使用命令
show spanning-tree查看生成树。
三台交换机的生成树协议选举过程
按照图
4.15所示连接网络,链均为100M链路,其中的交换机设备都为默认配置,
SW1的
MAC为001fcaff.1000,SW2的MAC为0021.1ba5.6980,SW3的MAC为0021.d780.7400.
首先,根网桥
ID选择根网桥。由于交换机为默认配置,所以优先级相同,都为32768,MAC地址最小的交换机为根网桥,所以SW1成为根网桥。
然后,根据根路径成本在非根网桥上选择根端口,交换机
SW2和SW3直接与SW1相连的接口根路径成本最低,所以SW2的F0/24端口为根端口,SW3的F0/23为根端口。
最后,在每个网络上选择指定端口,由于根网桥交换机的端口都为指定端。在
SW2和SW3相连的网络上包含两面三刀个端口,这两个端口的根路径成本都是38,因此根据网桥ID选择指定端口,所以SW2的F0/23成为指定端口,SW3的F0/24端口阻塞。
在交换机上可以使用命令
show spanning-tree查看生成树。
4.2.2 BPDU(
bridge protocol data unit ,桥协议数据单元)
交换机之间根据网桥
ID选择根网桥,根据根路径成本等选择根端口,那么交换机如何获知网络中其他交换机的网桥ID呢?,根路径成要又是怎样计算出来的?
生成树协议(STP)在交换机互相通信时进行操作,数据报文以桥协议数据单元(BPDU)的形式进行交换。
每隔2秒,BPDU报文便向所有的交换机端口发送一次,以便交换机(或网桥)能交换当前最新的拓扑信息,并迅速识别和检测其中的环路。
BPDU的两种类型
正常情况下,交换机只会从它的
Root Port上接收configuration BPDU包,但是绝不会主动发送configuration BPDU包给root bridge。
这里就需要提到第二种类型的
BPDU包了,也就是Topology Change Notification(TCN) BPDU。
这样
,当一台交换机检测到拓扑变化后,它就可以发送TCN给root bridge,注意TCN是通过root port向root bridge方向发出的.
当交换机从它的
designate port接收到TCN类BPDU时,它必须为其做转发,从它自已的root port上发送出去TCN类型的BPDU包,这样一级一级地传到root bridge后,TCN的任务才算完成.
BPDU报文字段
ü 根网桥ID:根信息是由一个2字节优先级和一个6字节ID所组成。这个信息组合标明已经被选定为根网桥的设备标识。
ü 根路径成本:路径成本说明了这个BPDU从根网桥传输了多远,成本是多少。这个字段的值用来决定哪些端口将进行转发,哪些端口将被阻断。
ü 发送网络桥ID:这是发送该BPDU的网桥信息。由网桥的优先级和网桥ID组成。
ü 计时器:计时器用于说明生成树用多长时间完成它的每项功能。这些功能包括报文老化时间、最大老化时间、访问时间和转发延迟。
STP利用
BPDU选择根网桥的过程:
1、当一台交换机第一次启动时,假定自己是根网桥,在BPDU报文中的根网桥字段填入自己的网桥ID,向外发送。
交换机假定自己是根网桥并发送
BPDU
2、交换机比较接收到的
BPDU报文中根网桥ID与自己的网桥ID的值哪个更小,如果接收到的BPDU中的根网桥ID值小于自己的网桥ID,则用接收到的根网桥ID替换现有的根网桥ID,并向外转发。如此不断反复,最终能够选择出全网公认的唯一一个根网桥。
交换机用更小的根网桥
ID替换原有的根网桥
3、收敛以后,如果又一台新的交换机加入进来,则继续比较更网桥
ID,选出新的根网桥。
STP利用BPDU确定端口的跟路径成本:
1、根网桥发送一个根路径成本为
0的BPDU报文。
2、当离根网桥最近的下一级交换机收到
BPDU报文时,就把BPDU所到达的那个端口的路径成本值与根网桥的根路径成本值相加。
3、邻接交换机再以这个新的累加值作为根路径成本,然后发送出包含此值的
BPDU报文。
4、当邻接交换机下的每一台交换机都收到这个
BPDU报文时,再把随后的交换机端口路径成本与这个值相加,依次类推。
生成树端口的状态:
禁用(Disabled):强制关闭(实际并不属于端口正常的STP状态的一部分)
阻塞(Blocking):只接收BPDU,以便能侦听到其他邻接交换机的信息。老化时间20s。
侦听(Listening):构建“活动”拓扑,为了使该端口加入生成树的拓扑过程,允许接收或发送BPDU报文,延迟时间15s。
学习(Learning):构建网桥表(转发BPDU报文的同时,学习新的MAC地址,并添加到交换机的地址列表中),延迟时间15s。
转发(Forwarding):发送/接收用户数据(可以发送和接收数据帧,也可以收集MAC地址加入到它的地址表,还可以发送BPDU报文)
IEEEE的通用生成树(CST):不考虑VLAN,以交换机为单位运行STP。
Cisco的每VLAN生成树(PVST):为每个VLAN使用独立的一个生成树实例。
Cisco的兼容CST的PVST(PVST+):允许CST信息传给PVST,以便与其他厂商在VLAN上运行生成树的实现方法进行互操作。
PVST的配置
SwA(config)#spanning-tree vlan 1 root primary
配置VLAN 1的根网桥为SwA,并设置优先级为24576,如果配置为secondary,则优先级变成28672
SwB(config)#spanning-tree vlan 2 priority 8192
配置VLAN 2的根网桥为SwB,并设置优先级为8192
以上两条命令不能保证根网桥就是它们自身(SwA或者SwB),主要查看它们的网桥ID。
SwA(config-if)#spanning-tree vlan 1 cost 19
修改端口的路径成本为19,即百兆带宽
SwB(config-if)#spanning-tree vlan 2 port-priority 100
修改端口的优先级为100
SwC(config)#interface range f0/1 - 20
SwC(config-if-range)#spanning-tree portfast
将SwC的1到20端口配置为速端口
SwC(config)#spanning-tree uplinkfast
将SwC配置成上行速链路
SwA#show spanning-tree vlan 1
查看VLAN 1的生成树信息
EthernetChannel(以太网通道)
Switch(config)#interface range f0/1 - 2
Switch(config)#channel-group 1 mode on
Switch(config)#no channel-group
配置和撤销Switch的1和2端口为通道1
Switch#show etherchannel summary
查看Switch的通道信息
本文出自 “王燕杰--著” 博客,谢绝转载!