第四章 管理交换网络中的冗余链路
4.1生成树协议概述
对二层以太网来说,两个LAN间只能有一条活动着的通路,否则就会产生广播风暴。但是为了加强一个局域网的可靠性,建立冗余链路又是必要的,其中的一些通路必须处于备份状态,如果当网络发生故障,另一条链路失效时,冗余链路就必须被提升为活动状态。
手工控制这样的过程显然是一项非常艰苦的工作,STP协议就自动的完成这项工作。它能使一个局域网中的交换机起下面作用:
发现并启动局域网的一个最佳树型拓朴结构。
发现故障并随之进行恢复,自动更新网络拓朴结构,使在任何时候都选择了可能的最佳树型结构。
局域网的拓朴结构是根据管理员设置的一组网桥配置参数自动进行计算的。使用这些参数能够生成最好的一棵拓朴树。只有配置得当,才能得到最佳的方案。
RSTP协议完全向下兼容802.1D STP协议,除了和传统的STP协议一样具有避免回路、提供冗余链路的功能外,最主要的特点就是“快”。如果一个局域网内的网桥都支持RSTP协议且管理员配置得当,一旦网络拓朴改变而要重新生成拓朴树只需要不超过1秒的时间(传统的STP需要大约50秒)。
Bridge Protocol Data Units(简写为BPDU):
要生成一个稳定的树型拓朴网络需要依靠以下元素:
 每个网桥唯一的桥ID(bridge ID),由桥优先级和Mac地址组合而成。
 网桥到根桥的路径花费(root path cost),以下简称根路径花费。
 每个端口ID(port ID),由端口优先级和端口号组合而成。
网桥之间通过交换BPDU(Bridge Protocol Data Units,网桥协议数据单元)帧来获得建立最佳树形拓朴结构所需要的信息。这些帧以组播地址01-80-C2-00-00-00(十六进制)为目的地址。
每个BPDU由以下这些要素组成:
 Root Bridge ID(本网桥所认为的根桥ID)。
 Root Path cost(本网桥的根路径花费)。
 Bridge ID(本网桥的桥ID)。
 Message age(报文已存活的时间)
 Port ID(发送该报文端口的ID)。
 Forward-Delay Time、Hello Time、Max-Age Time 三个协议规定的时间参数。
 其他一些诸如表示发现网络拓朴变化、本端口状态的标志位。
当网桥的一个端口收到高优先级的BPDU(更小的bridge ID,更小的root path cost,等),就在该端口保存这些信息,同时向所有端口更新并传播信息。如果收到比自己低优先级的BPDU,网桥就丢弃该信息。
这样的机制就使高优先级的信息在整个网络中传播开,BPDU的交流就有了下面的结果:
 网络中选择了一个网桥为根桥(Root Bridge)。
 除根桥外的每个网桥都有一个根口(Root Port),即提供最短路径到Root Bridge的端口。
 每个网桥都计算出了到根桥(Root Bridge)的最短路径。
 每个LAN都有了指派网桥(Designated Bridge),位于该LAN与根桥之间的最短路径中。指派网桥和LAN相连的端口称为指派端口(Designated port)。
 根口(Root port)和指派端口(Designated port)进入Forwarding状态。
 其他不在生成树中的端口就处于Discarding状态
Bridge ID
按IEEE 802.1W标准规定,每个网桥都要有单一的网桥标识(Bridge ID),生成树算法中就是以它为标准来选出根桥(Root Bridge)的。Bridge ID由8个字节组成,后6个字节为该网桥的mac地址,前2个字节如果下表所示,前4 bit表示优先级(priority),后8 bit表示System ID,为以后扩展协议而用,在RSTP中该值为0,因此给网桥配置优先级就要是4096的倍数。

 
Priority value
System ID
Bit位
16
15
14
13
12
11
10 9
 
8
7
6
5
4 3
2
1
 
32768
16384
8192
4096
2048
1024
512
256
128
64
32
16 8
 
4
2
1

Spanning-Tree Timers(生成树的定时器)
以下描述影响到整个生成树性能的三个定时器。
 Hello timer:定时发送BPDU报文的时间间隔。
 Forward-Delay timer:端口状态改变的时间间隔。当RSTP协议以兼容STP协议模式运行时,端口从listening转变向learning,或者从learning转向forwarding状态的时间间隔。
 Max-Age timer:BPDU报文消息生存的最长时间。当超出这个时间,报文消息将被丢弃。
Port Roles and Port States
每个端口都在网络中有扮演一个角色(Port Role),用来体现在网络拓朴中的不同作用。
 Root port:提供最短路径到根桥(Root Bridge)的端口。
 Designated port:每个LAN的通过该口连接到根桥。
 Alternate port:根口的替换口,一旦根口失效,该口就立该变为根口。
 Backup port:Designated port的备份口,当一个网桥有两个端口都连在一个LAN上,那么高优先级的端口为Designated port,低优先级的端口为Backup port。
 Disable port:当前不处于活动状态的口,即operState为down的端口都被分配了这个角色。
以下为各个端口角色的示意图R1w-2-1、R1w-2-2、R1w-2-3:
R = Root port D = Designated port A = Alternate port B = Backup port
在没有特别说明情况下,端口优先级从左到右递减
每个端口有三个状态(port state)来表示是否转发数据包,从而控制着整个生成树拓朴结构。
 Discarding:既不对收到的帧进行转发,也不进行源Mac地址学习。
 Learning:不对收到的帧进行转发,但进行源Mac地址学习,这是个过渡状态。
 Forwarding:既对收到的帧进行转发,也进行源Mac地址的学习。
对一个已经稳定的网络拓朴,只有Root port和Designated port才会进入Forwarding状态,其它端口都只能处于Discarding状态。
网络拓朴树的生成(典型应用方案)
现在就可以说明STP、RSTP协议是如何把杂乱的网络拓朴生成一个树型结构了。如下图R1w-3-1所示,假设Switch A、B、C的bridge ID是递增的,即Switch A的优先级最高。A与B间是千兆链路,A和B间为百兆链路,B和C间为十兆链路。Switch A做为该网络的骨干交换机,对Switch B和Switch C都做了链路冗余,显然,如果让这些链路都生效是会产生广播风暴的。
而如果这三台Switch都打开了Spanning Tree协议,它们通过交换BPDU选出根桥(root bridge)为Switch A。Switch B发现有两个端口都连在Switch A上,它就选出优先级最高的端口为root port,另一个端口就被选为Alternate port。而Switch C发现它既可以通过B到A,也可以直接到A,但由于交换机通过计算发现:就算通过B到A的链路花费(path cost)也比直接到A的低(各种链路对应的链路花费请查看章节《配置Path Cost的缺省计算方法》中附录的表),于是Switch C就选择了与B相连的端口为Root port,与A相连的端口为Alternate port。都选择好端口角色(port role)了,就进入各个端口相应的状态了,于是就生成了相应的图R1w-3-2。
如果Switch A和Switch B之间的活动链路出了故障,那备份链路就会立即产生作用,于是就生成了相应的图R1w-3-3。
如果Switch B和Switch C之间的链路出了故障,那Switch C就会自动把Alternate port转为Root port,就生成了图R1w-3-4的情况。
 
RSTP协议可以与STP协议完全兼容,RSTP协议会根据收到的BPDU版本号来自动判断与之相连的网桥是支持STP协议还是支持RSTP协议,如果是与STP网桥互连就只能按STP的forwarding方法,过30秒再forwarding,无法发挥RSTP的最大功效。
另外,RSTP和STP混用还会遇到这样一个问题。如图R1w-1-1所示,Switch A是支持RSTP协议的,Switch B只支持STP协议,它们俩互连,Switch A发现与它相连的是STP桥,就发STP 的BPDU来兼容它。但后来如果换了台Switch C(如图R1w-1-2),它支持RSTP协议,但Switch A却依然在发STP的BPDU,这样使Switch C也认为与之互连的是STP桥了,结果两台支持RSTP的交换机却以STP协议来运行,大大降低了效率。
为此RSTP协议提供了protocol-migration功能来强制发RSTP BPDU,这样Switch A强制发了RSTP BPDU,Switch C就发现与之互连的网桥是支持RSTP的,于是两台交换机就都以RSTP协议运行了。
 
4.2 配置STP、RSTP
下面列出Spanning Tree的缺省配置
项目缺省值Enable State Disable,不打开STP STP Priority 32768 STP port Priority 128
STP port cost 根据端口速率自动判断Hello Time 2秒Forward-delay Time 15秒Max-age Time 20秒Path Cost的缺省计算方法长整型Tx-Hold-Count 3 Link-type 根据端口双工状态自动判断
您可通过spanning-tree reset命令让spanning tree参数恢复到缺省配置
打开、关闭Spanning Tree协议
打开Spanning-tree协议,交换机即开始运行生成树协议。
交换机的缺省状态是关闭Spanning-tree协议。
进入特权模式,按以下步骤打开Spanning Tree协议:
命令含义步骤1 configure terminal 进入全局配置模式。步骤2 spanning-tree 打开Spanning tree协议步骤3 end 退回到特权模式。步骤4 show spanning-tree 核对配置条目步骤5 copy running-config startup-config 保存配置。
如果您要关闭Spanning Tree协议,可用no spanning-tree 全局配置命令进行设置。
配置交换机优先级(Switch Priority)
设置交换机的优先级关系着到底哪个交换机为整个网络的根,同时也关系到整个网络的拓朴结构。建议管理员把核心交换机的优先级设得高些(数值小),这样有利于整个网络的稳定。
优先级的设置值有16个,都为4096的倍数,分别是0,4096,8192,12288,16384,20480,24576,28672,32768,36864,40960,45056,49152,53248,57344,61440。缺省值为32768。
进入特权模式,按以下步骤配置交换机优先级:
命令含义步骤1 configure terminal 进入全局配置模式。步骤2 spanning-tree priority priority 配置交换机的优先级,取值范围为0到61440,按4096的倍数递增,缺省值为32768。步骤3 end 退回到特权模式。
步骤4 show spanning-tree 核对配置条目步骤5 copy running-config startup-config 保存配置。
您如果要恢复到缺省值,可用no spanning-tree priority全局配置命令进行设置。
配置端口优先级(Port Priority)
当有两个端口都连在一个共享介质上,交换机会选择一个高优先级(数值小)的端口进入forwarding状态,低优先级(数值大)的端口进入discarding状态。如果两个端口的优先级一样,就选端口号小的那个进入forwarding状态。
和交换机的优先级一样,可配置的优先级值也有16个,都为16的倍数,分别是0,16,32,48,64,80,96,112,128,144,160,176,192,208,224,240。缺省值为128。
进入特权模式,按以下步骤配置端口优先级:
命令含义步骤1 configure terminal 进入全局配置模式。步骤2 interface interface-id 进入该interface的配置模式,合法的interface包括物理端口和Aggregate Link。步骤3 spanning-tree port-priority priority 配置该interface的优先级,取值范围为0到240,按16的倍数递增,缺省值为128。步骤4 end 退回到特权模式。步骤5 copy running-config startup-config 保存配置。
您如果要恢复到缺省值,可用no spanning-tree port-priority接口配置命令进行设置。
配置端口的路径花费(Path Cost)
交换机是根据哪个端口到根桥(root bridge)的path cost总和最小而选定Root port的,因此port path cost的设置关系到本交换机root port。它的缺省值是按interface的链路速率(the media speed)自动计算的,速率高的花费小,如果管理员没有特别需要可不必更改它,因为这样算出的path cost最科学。
进入特权模式,按以下步骤配置端口路径花费:
命令含义步骤1 configure terminal 进入全局配置模式。步骤2 interface interface-id 进入该interface的配置模式,合法的interface包括物理端口和Aggregate Link。步骤3 spanning-tree cost cost 配置该端口上的花费,取值范围为
1到200,000,000。缺省值为根据interface的链路速率自动计算。步骤4 end 退回到特权模式。步骤5 copy running-config startup-config 保存配置。
您如果要恢复到缺省值,可用no spanning-tree cost接口配置命令进行设置。
配置Path Cost的缺省计算方法(path cost method)
当该端口Path Cost为缺省值时,交换机会自动根据端口速率计算出该端口的path cost。但IEEE 802.1d和IEEE 802.1t对相同的链路速率规定了不同path cost值,802.1d的取值范围是短整型(short)(1—65535),802.1t的取值范围是长整型(long)(1—200,000,000)。请管理员一定要统一好整个网络内path cost的标准。缺省模式为长整型模式(IEEE 802.1t模式)。
下表列出两种方法对不同链路速率自动设置的path cost。
端口速率Interface IEEE 802.1d(short) IEEE 802.1t
(long) 10M 普通端口100 2000000 Aggregate Link 95 1900000 100M 普通端口19 200000 Aggregate Link 18 190000 1000M 普通端口4 20000 Aggregate Link 3 19000
进入特权模式,按以下步骤配置端口路径花费的缺省计算方法:
命令含义步骤1 configure terminal 进入全局配置模式。步骤2 spanning-tree pathcost method long/short 配置端口路径花费的缺省计算方法,设置值为长整型(long)或短整型(short),缺省值为长整型(long)。步骤3 end 退回到特权模式。步骤4 copy running-config startup-config 保存配置。
您如果要恢复到缺省值,可用no spanning-tree pathcost method全局配置命令进行设置。
配置Hello Time
配置交换机定时发送BPDU报文的时间间隔。缺省值为2秒。
进入特权模式,按以下步骤配置Hello Time:
命令含义步骤1 configure terminal 进入全局配置模式。步骤2 spanning-tree hello-time seconds 配置hello time,取值范围为1到10秒,缺省值为2秒。步骤3 end 退回到特权模式。步骤4 copy running-config startup-config 保存配置。
您如果要恢复到缺省值,可用no spanning-tree hello-time全局配置命令进行设置。
配置Forward-Delay Time
配置端口状态改变的时间间隔。缺省值为15秒。
进入特权模式,按以下步骤配置Forward-Delay Time:
命令含义步骤1 configure terminal 进入全局配置模式。步骤2 spanning-tree forward-time seconds 配置forward delay time,取值范围为4到30秒,缺省值为15秒。步骤3 end 退回到特权模式。步骤4 copy running-config startup-config 保存配置。
您如果要恢复到缺省值,可用no spanning-tree forward-time全局配置命令进行设置。
配置Max-Age Time
配置BPDU报文消息生存的最长时间。缺省值为20秒。
进入特权模式,按以下步骤配置Max-Age Time:
命令含义步骤1 configure terminal 进入全局配置模式。步骤2 spanning-tree max-age seconds 配置max age time,取值范围为6到40秒,缺省值为20秒。步骤4 end 退回到特权模式。步骤5 copy running-config startup-config 保存配置。
您如果要恢复到缺省值,可用no spanning-tree max-age全局配置命令进行设置。
配置Tx-Hold-Count
配置每秒种最多发送的BPDU个数,缺省值为3个。
进入特权模式,按以下步骤配置Max-Age Time:
命令含义步骤1 configure terminal 进入全局配置模式。步骤2 spanning-tree tx-hold-count numbers 配置每秒最多发送BPDU个数,取值范围为1到10个,缺省值为3个。步骤4 end 退回到特权模式。步骤5 copy running-config startup-config 保存配置。
配置link-type
配置该端口的连接类型是不是“点对点连接”,这一点关系到RSTP是否能快速的收敛。请参照1.7 RSTP的快速收敛。当您不设置该值时,交换机会根据端口的“双工”状态来自动设置的,全双工的端口就设link type为point-to-point,半双工就设为shared。您也可以强制设置link type来决定端口的连接是不是“点对点连接”。
进入特权模式,按以下步骤配置端口的link type:
命令含义步骤1 configure terminal 进入全局配置模式。步骤2 interface interface-id 进入该interface的配置模式,合法的interface包括物理端口和Aggregate Link。步骤3 spanning-tree link-type point-to-point/shared配置该interface的连接类型,缺省值为根据端口“双工”状态来自动判断是不是“点对点连接”。步骤4 end 退回到特权模式。步骤5 copy running-config startup-config 保存配置。
您如果要恢复到缺省值,可用no spanning-tree link-type接口配置命令进行设置。
配置protocol migration处理
该设置是让该端口强制发RSTP BPDU,强制进行版本检查。相关说明请参看1.8 RSTP与STP的兼容。
您可以在普通用户模式下用clear spanning-tree detected-protocols对所有端口强制版本检查,也可以用clear spanning-tree detected-protocols interface interface-id针对一个端口进行版本检查。
STP、RSTP信息显示
本章节将解释STP的显示命令:
命令含义show spanning-tree 显示Spanning Tree的全局信息show spanning-tree interface interface-id 显示指定interface的信息
其中show spanning-tree显示出:
Switch#sh sp
SysStpStatus : Enabled
BridgeAddr : ffff.ffff.f7ff
BaseNumPorts : 24
StpPriority : 32768
StpTimeSinceTopologyChange : 0d:0h:25m:48s
StpTopologyChanges : 0
StpDesignatedRoot : 80000008A3731040
StpRootCost : 2000000
StpRootPort : Fa0/18
StpMaxAge : 20
StpHelloTime : 2
StpForwardDelay : 15
StpBridgeMaxAge : 20
StpBridgeHelloTime : 2
StpBridgeForwardDelay : 15
StpTxHoldCount : 3
StpPathCostMethod : Long
StpBPDUGuard : Disabled
StpBPDUFilter : Disabled
show spanning-tree interface interface-id将显示出:
Switch#sh sp int f 0/18
StpPortPriority : 128
StpPortState : forwarding
StpPortDesignatedRoot : 80000008A3731040
StpPortDesignatedCost : 0
StpPortDesignatedBridge : 80000008A3731040
StpPortDesignatedPort : 8002
StpPortForwardTransitions : 1
StpPortAdminPathCost : 0
StpPortOperPathCost : 2000000
StpPortRole : rootPort
StpPortAdminPortfast : Disabled
StpPortOperPortfast : Disabled
StpPortAdminLinkType : auto
StpPortOperLinkType : shared
StpPortBPDUGuard: Disabled
StpPortBPDUFilter: Disabled