简介
STP(生成树协议 SpanningTreepProtocol)能够提供路径冗余,使用STP可以使两个终端中只有一条有效路径。在实际的网络环境中,物理环路可以提高网络的可靠性,当一条线路断掉的时候,另一条链路仍然可以传输数据。但是,在交换网络中,当交换机接收到一个未知目的地址的数据帧时,交换机的操作是将这个数据帧广播出去,这样,在存在物理的交换网络中,就会产生一个双向的广播环,甚至产生广播风暴,导致交换机死机。如何既有物理冗余链路保证网络的可靠性,又能避免冗余环路所产生的广播风暴呢?STP协议是在逻辑上断开网络的环路,防止广播风暴的产生,而一旦正在用的线路出现故障,逻辑上被断开的线路又被连通,继续传输数据。
交换网络环路
交换网络环路会带来3个问题:广播风暴、同一帧的多个拷贝和交换机CAM表不稳定。
交换网络环路的产生:
PC1和PC2通过交换机相连。网络初始状态时,PC1与PC2通信过程如下:
1.在网络通信最初,PC1的ARP条目中没有PC2的MAC地址,PC1首先会向SW1发送一个ARP广播请求PC2的MAC地址;2.当SW1收到ARP的广播请求后,SW1会将广播帧从除接收端口之外的所有端口转发出去即会从F0/1和F0/2发出;3.SW2收到广播后,会将广播帧从F0/2和连接PC2的端口转发,同样SW3收到广播后,将其从F0/2端口转发;
4.SW2收到SW3的广播后,将其从F0/1和连接PC2的端口转发,SW3收到SW2的广播后将其从F0/1端口转发;
5.SW1分别从SW2、SW3收到广播帧,然后将从SW2收到的广播帧转发给SW3,而将从SW3收到的广播帧发给SW2。SW1、SW2和SW3会将广播帧相互转发。这时网络就形成了一个环路,而交换机并不知道,这将导致广播帧在这个环路中永远循环下去。
STP工作原理
STP运行STA(生成树算法 Spanning Tree Algorithm)。STA算法很复杂,但是其过程可以归纳为以下三个步骤:
1.选择根网桥(Root Bridge);
1>网桥ID最小。
2.选择根端口(Root Ports);
1>到根路径成本最低;
2>最小的直连发送方网桥ID;
3>最小的发送方端口ID。
3.选择指定端口(Designated Ports)。
1>根路径成本最低;
2>所在交换机的网桥ID最小;
3>所在交换机的端口ID最小。
特别注意:选择根端口:比较接收的BPDU!!!;选择指定端口:比较发送的BPDU!!!。
选择根网桥
网桥ID最小:选择根网桥的依据是网桥ID的大小。在选择根网桥的时候,比较的方法是看哪台交换机的网桥ID的值最小,优先级小的被选择为根网桥;在优先级相同的情况下,MAC地址小的为根网桥。
网桥ID:是一个8Byte的字段,前面2Byte的十进制数称为网桥优先级,后6Byte是网桥的MAC地址。
网桥优先级:用于衡量网桥在生成树算法中优先级的十进制数,取值范围为0-65535,默认值是32768。
网桥的MAC地址:交换机自身的MAC地址,可以使用命令show version查看。
选择根端口
选出了根网桥之后,网络中的每台交换机必须和根网桥建立关联,因此STP将开始选择根端口。每个非根网桥上存在一个根端口,因此需要在每个非根网桥上选择一个根端口。选择根端口的依据有三个:
到根路径成本最低的端口:路径成本是两个网桥间的路径上所有链路的成本之和,根路径成本也就是一个网桥到达根网桥的中间所有链路的路径成本之和,路径成本用来代表一条链路带宽的大小,一条链路的带宽越大,它的传输数据的成本也就越低。
最小的直连发送方网桥ID:BPDU帧是从根网桥发向根端口的,则当端口的根路径成本相同时,以收到发来BPDU直连的网桥ID最小(端口的对端端口,即本地端口)为根端口。
最小的发送方端口ID:当直连发送方网桥ID大小相同时,也就是说有几个位于同一交换机上的端口时,比较最小的发送方端口ID。端口ID是一个二字节的STP参数,由一个字节的端口优先级和一个字节的端口编号组成。端口优先级是一个可配置的STP参数,在基于IOS的交换机上,端口优先级的十进制取值范围是0-255,默认值是128。端口编号是catalyst用于列举各个端口的数字标识符,在基于IOS的交换机上,可以支256个端口。
说明:端口编号不是端口号,但是端口号低的端口,端口编号值(端口 ID)也较小。
端口ID:
示例:
选择指定端口
选择完根网桥和每台交换机的根端口后, 一个树形结构已初步形成,但是,所有链路仍连接在一起,并可以都处于活动状态,最后导致形成环路。为了消除环路形成的可能,STP进行最后的计算,在每一个网段上选择一个指定端口。选择指定端口的依据有三个:
根路径成本最低;
所在交换机的网桥ID最小;
所在交换机的端口ID最小。
注意:根网桥上的接口都是指定端口,因为根网桥上端口的根路径成本为0。
示例:
说明:如果端口既不是根端口,也不是指定端口,那么这个端口被阻塞(BLOCK)称为阻塞端口。被阻塞的端口不能传输数据,即该链路成为备份链路。
BPDU(Bridge Protocol Data Unit 桥协议数据单元)
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:该值总为0。
版本号:STP的版本(为IEEE 802.1d时值为0)。
报文类型:BPDU类型(配置BPDU=0,TCN BPDU=80)。
标记域:LSB(最低有效位)=TCN标志;MSB(最高有效位)=TCA标志。
根网桥ID:根信息由2字节优先级和6字节ID组成。这个信息组合标明已经被选定为根网桥的设备标识。
根路径成本:路径成本为到达根网桥交换机的STP开销。表明这个BPDU从根网桥传输了多远,成本是多少。这个
字段的值用来决定哪些端口将进行转发,哪些端口将被阻断。
发送网络桥ID:发送该BPDU的网桥信息。由网桥的优先级和网桥ID组成。
端口ID:发送该BPDU的网桥端口ID。
计时器:计时器用于说明生成树用多长时间完成它的每项功能。这些功能包括报文老化时间、最大老化时间、
访问时间和转发延迟。
最大老化时间:根网桥发送BPDU后的秒数,每经过一个网桥都会递减1,所以它的本质是到达根网桥的跳计数。
访问时间:根网桥连续发送BPDU的时间间隔。
转发延迟:网桥在监听学习状态所停留的时间。
STP利用BPDU选择根网桥的过程
1.当一台交换机第一次启动时,假定自己是根网桥在BPDU报文中的根网桥字段填入自己的网桥ID,向外发送。
2.交换机比较接收到的BPDU报文中根网桥ID与自己的网桥ID的值哪个更小,如果接收到的BPDU中的根网桥ID值小
于自己的网桥ID,则用接收到的根网桥ID替换现有的根网桥ID,并向外转发。如此不断反复,最终能够选择出
全网公认的唯一一个根网桥。
3.收敛以后,如果又一台新的交换机加入进来,则继续比较更网桥ID,选出新的根网桥。
STP利用BPDU确定端口的跟路径成本
1.根网桥发送一个根路径成本为0的BPDU报文。
2.当离根网桥最近的下一级交换机收到BPDU报文时,就把BPDU所到达的那个端口的路径成本值与根网桥的根路径
成本值相加。
3.邻接交换机再以这个新的累加值作为根路径成本,然后发送出包含此值的BPDU报文。
4.当邻接交换机下的每一台交换机都收到这个BPDU报文时,再把随后的交换机端口路径成本与这个值相加,依次
类推。
生成树端口的状态
禁用:强制关闭(实际并不属于端口正常的STP状态的一部分)。
转发:可以发送和接收数据帧,也可以收集MAC地址加入到它的地址表,还可以发送BPDU报文。
学习:延迟时间15s,转发BPDU报文的同时,学习新的MAC地址,并添加到交换机的地址列表中。
侦听:延迟时间15s,为了使该端口加入生成树的拓扑过程,允许接收或发送BPDU报文。
阻塞:老化时间20s,以便能侦听到其他邻接交换机的信息。
生成树协议的发展历程
IEEE生成树发展史:STP/802.1D ——> RSTP/802.1W ——> MISTP/MSTP/802.1S:
STP/802.1D:STP(生成树协议/单生成树协议 Spanning Tree Protocol)在IEEE 802.1D中定义。该协议的的原
理是按照树的结构来构造网络拓扑,消除网络中的环路,避免由于环路的存在而造成广播风暴问题。
缺点:
1.拓扑收敛慢,当网络拓扑发生改变的时候,生成树协议需要50秒的时间才能完成拓扑收敛;
2.不能提供负载均衡的功能,当网络中出现环路的时候,生成树协议简单的将环路进行Block,这样改链路
就不能进行数据包的转发,浪费网络资源。
CST:CST(公共生成树 Common Spanning Tree)在IEEE 802.1Q中定义的?是IEEE 802.1D对于VLAN和STP的
解决方案。CST在生成树收敛的时候,不考虑网络中VLAN的存在,只在网络中生成和维护单个生成
树;所有CST的BPDU作为不带标记的帧通过本地VLAN进行传输。
特点:
1.交换机CPU负载较低,只需要计算一个生成树实例;
2.网络中的STP无法按照VLAN的需求,为VLAN创建最优的STP路径,可能导致某些VLAN存在次优路径;
3.冗余的端口被阻塞掉之后,在每个VLAN中就无法转发数据,会导致无法实现网络流量的负载均衡。
RSTP/802.1W:RSTP(快速生成树协议 Rapid Spaning Tree Protocol)在IEEE 802.1W中定义,由802.1D发展而
来。这种协议进一步处理了网络临时失去连通性的问题,在网络结构发生变化时能更快的收敛网络。实际
上它是把减少STP收敛时间的一些措施融合在802.1D中形成新的协。它比802.1D多了两种端口类型:预备端
口类型(Alternate Port)和备份端口类型(Backup Port),将PortFast、UplinkFast、BackboneFast等问题
都解决了,我们要做的只是打开802.1W协议。RSTP协议可以向下兼容802.1D,但是如果它们共存时802.1W
所拥有的内在的快速收敛功能将失效。
RSTP相对于STP的改进:
1.STP没有明确区分端口状态与端口角色,收敛时主要依赖于端口状态的切换,RSTP比较明确的区分了端口
状态与端口角色,为根端口和指定端口设置了快速切换用的替换端口和备份端口两种角色,且其收敛时
更多的是依赖于端口角色的切换;
2.STP端口状态的切换必须被动的等待时间的超时,而RSTP端口状态的切换却是一种主动的协商;
3.STP中的非根网桥只能被动的中继BPDU,而RSTP中的非根网桥对BPDU的中继具有一定的主动性。
优点:
1.集成了IEEE 802.1D的很多增强技术,这些增强功能不需要额外配置;
2.RSTP使用第2类和第2版BPDU,能够与IEEE 802.1D兼容;
3.RSTP能够主动确认端口是否能安全转换到转发状态,而不需要依靠任何计时器来做出判断。
缺点:
1.仍是单生成树结构,不能做负载均衡,链路被阻塞后不承载任何流量造成了带宽浪费;
2.收敛速度仍无法应对大型网络。
MISTP/802.1S:不常用不作介绍。
MSTP/802.1S:MSTP(多实例生成树协议 Multiple Spanning Tree Protocol)将环路网络修剪成为一个无环的
树型网络,避免报文在环路网络中的增生和无限循环,同时还提供了数据转发的多个冗余路径,在数据转
发过程中实现VLAN数据的负载均衡。MSTP兼容STP和RSTP,并且可以弥补STP和RSTP的缺陷。它既可以快速
收敛,也能使不同VLAN的流量沿各自的路径分发,从而为冗余链路提供了更好的负载分担机制。
1.MSTP设置VLAN映射表(VLAN和生成树的对应关系表),把VLAN和生成树联系起来,通过增加“实例”(将多
个VLAN整合到一个集合中)这个概念,将多个VLAN捆绑到一个实例中,以节省通信开销和资源占用率;
2.MSTP把一个交换网络划分成多个域,每个域内形成多棵生成树,生成树之间彼此独立;
3.MSTP将环路网络修剪成为一个无环的树型网络,避免报文在环路网络中的增生和无限循环,同时还提供
了数据转发的多个冗余路径,在数据转发过程中实现VLAN数据的负载分担;
4.MSTP兼容STP和RSTP。
MST:MST(多生成树 Multiple Spanning Tree)由IEEE 802.1S定义,是把802.1W的RST算法扩展而得到
的,MST提出了域的概念,在域的内部可以生成多个生成树实例,并将VLAN关联到相应的实例中,每
个VLAN只能关联到一个实例中。这样在域内部每个生成树实例就形成一个逻辑上的树拓扑结构,在
域与域之间由CIST实例将各个域连成一个大的生成树。具有相同的MST配置信息,并且具有完全一致
的VLAN-实例映射关系同时运行MSTP协议的桥组成一个域。每个域的内部有一个主实例成为IST,域和
域之间有CST连接,这样整个网络拓扑就有CST和IST功能组成了一个树形拓扑,这个树就是CIST。各
个VLAN内的数据在不同的生成树实例内进行转发,这样就提供了负载均衡功能。
CIST:CIST(公共和内部生成树 Common and Internal Spanning Tree)是连接一个交换网络内所有交换机
的单生成树,由IST和CST共同构成。CIST是每个MST区域的IST实例、互连MST区域的CST实例和802.1D
单生成树桥的一个集合。CIST与MST区域内的IST实例是一致的,并与MST区域外部的CST也是一致的。
IST:IST(内部生成树 Internal Spanning Tree)是MST区域内的一棵生成树。IST和CST共同构成整个交换
机网络的生成树CIST。
CST:CST(公共生成树 Common Spanning Tree)见上。
说明:实例就是多个VLAN的集合,通过多个VLAN捆绑到一个实例中去的方法可以节省通信开销和资源占用率。
Cisco生成树发展史:PVST ——> PVST+:
PVST:PVST(每VLAN生成树 Per VLAN Spanning Tree)为每个VLAN构建一棵单独的生成树实例,可以独立地为每
个VLAN控制哪些端口要转发数据,从而能实现对每个VLAN作二层负载平衡,进而确保能够使用所有的链
路,而不会过度使用某条链路。一般情况下PVST要求在交换机之间的中继链路上运行Cisco的ISL,并允许
一个VLAN中继当被其它VLANs的阻塞时将一些VLANs转发。PVST不兼容STP、RSTP。
PVST+:PVST+(增强的每VLAN生成树 Per VLAN Spanning Tree Plus)对PVST做了改进,它允许在相同网络中同
时存在CST和PVST,使CST可以将信息传给PVST,以便兼容其它厂商的生成树协议。 具体做法是在Vlan 1上
运行CST,在其他VLAN上运行PVST。VLAN上PVST+的每个实例都有单独的根桥,这个根桥向网络中的所有其
它交换机传播与该VLAN相关的生成树信息。PVST+也是每个VLAN一棵STP,也可以实现第二层的负载均衡
PVST+可以使用802.1Q封装,并在Catalyst 802.1Q的Trunks链路上是自动启动的。PVST+将区域分成三种类
型:PVST区域、PVST+区域、单生成树区域。Cisco交换机默认是运行该协议的。
优点:
1.支持ISL和IEEE802.1Q中继 ;
2.兼容STP、RSTP;
3.支持Cisco专有的STP扩展,并添加了BPDU防护和根防护增强功能。
PVST和PVST+的缺点:
1.由于每个VLAN都需要生成一棵树,PVST BPDU的通信量将正比于Trunk的VLAN个数。
2.在VLAN个数比较多的时候,维护多棵生成树的计算量和资源占用量将急剧增长。特别是当Trunk了很多VLAN的
接口状态变化的时候,所有生成树的状态都要重新计算,CPU将不堪重负。所以,Cisco交换机限制了VLAN的使
用个数,同时不建议在一个端口上Trunk很多VLAN。
3.由于协议的私有性,PVST和PVST+不能像STP和RSTP一样得到广泛的支持,不同厂家的设备并不能在这种模式下
直接互通,只能通过一些变通的方式实现,例如Foundry的IronSpan。IronSpan默认情况下运行的是STP协议,
当某个端口收到PVST BPDU时,该端口的生成树模式会自动切换成PVST与PVST+兼容模式。一般情况下,网络的
拓扑结构不会频繁变化,所以PVST/PVST+的这些缺点并不会很致命。但是,端口Trunk大量VLAN这种需求还是
存在的。
总结:
1.STP/RSTP是基于端口的,PVST/PVST+是基于VLAN的,MSTP是基于实例的。
2.第一代生成树协议:STP/RSTP,没有VLAN认知能力,不支持二层负载均衡;
1>STP/IEEE 802.1D版本最为流行;
2>RSTP/IEEE 802.1W向下兼容STP。
第二代生成树协议:PVST/PVST+具有VLAN认知能力,支持二层负载均衡;
1>PVST不兼容STP/RSTP协议;
2>PVST+为PVST的改进版,兼容STP/RSTP。
第三代生成树协议:MSTP/MISTP。
1>MSTP/IEEE 802.1S具有VLAN认知能力,可以实现负载均衡,可以实现类似RSTP的端口状态快速切换,可以捆
绑多个VLAN到一个实例中以降低资源占用率MSTP可以很好地向下兼容STP/RSTP协议。
3.实际应用中多使用:PVST、PVRST、MSTP;Cisco默认开启PVST+,而PVRST、MSTP则需要另外打开。
简单地说:
CST是公共生成树协议,由IEEE 802.1Q定义?该标准规定所有的VLAN只有单个STP,减少了交换机性能的消耗。
PVST是Cisco私有,作用是一个VLAN有一个STP。优点可以做负载平衡等;缺点不能和使用CST的设备交换BPDU。
PVST+就可以使PVST和CST之间交换BPDU,其他方面跟PVST一样。
MST是多生成树。每个VLAN一个STP,如果有很多VLAN,则会有很多STP,这样会消耗交换机的性能。然而其中许
多的STP实际上是可以共用的,MST就是把多个VLAN集合起来,从而使用一个STP实例。避免STP太多或者太少。
实验
RSTP
命令:
sw1(config)#spanning-tree mode rapid-pvst //启用RSTP模式生成树
sw1 (config-if-range)#duplex full //设置链路为全双工模式
sw1(config-if-range)#spanning-tree link-type point-to-point //设置生成树链路类型为点到点
sw3(config-if-range)#spanning-tree portfast //启用速端口
说明:试验中交换机之间是Trunk链路,自动协商为全双工,RSTP会自动把它们的链路类型标识为点到点类型,
我们在这里手动强制配置了一遍。
sw1(config)#spanning-tree mode rapid-pvst
sw1(config)#int range f0/14 - 15
sw1(config-if-range)#switchport mode trunk
sw1 (config-if-range)#duplex full
sw1(config-if-range)#spanning-tree link-type point-to-point
sw2 (config)#spanning-tree mode rapid-pvst
sw2(config)#int range f0/14 - 15
sw2(config-if-range)#switchport mode trunk
sw2 (config-if-range)#duplex full
sw2(config-if-range)#spanning-tree link-type point-to-point
sw3 (config)#spanning-tree mode rapid-pvst
sw3(config)#int range f0/13 - 14
sw3(config-if)#switchport mode trunk
sw3 (config-if-range)#duplex full
sw3(config-if-range)#spanning-tree link-type point-to-point
sw3(config)#int range f0/1 - 2
sw3(config-if)#switchport mode access
sw3(config-if)#switchport access vlan 1
sw3(config-if-range)#spanning-tree portfast
实验调试
sw1#show spanning-tree vlan 1 //查看生成树的配置
sw1#show spanning-tree vlan 1 int f0/14 detail //查看该接口Vlan 1生成树详细信息
sw1#show spanning-tree summary
sw1#show spanning-tree root
RSTP的接口类型:
边界接口(Edge Port):如果接口上启用Portfast,该接口就是边界接口;
命令:sw1 (config-if)#spanning-tree portfast
点到点接口(Point-to-Point Port):如果接口是全双工,该接口就是点到点接口;
命令:sw1 (config-if)#duplex full
sw1(config-if)#spanning-tree link-type point-to-point
共享接口(Share Port):如果接口是半双工,该接口就是共享接口;
命令:sw1 (config-if)#duplex half
sw1(config-if)#spanning-tree link-type shared
说明:虽然RSTP会自动识别链路类型,但是在接口上手动指明链路类型和接口类型有利于RSTP的运行。
PVST 和 STP保护
命令:
sw1(config)#spanning-tree mode pvst //启用PVST模式生成树
sw1(config)#spanning-tree vlan 1 root primary //设置sw1为Vlan 1的主根桥
sw1(config)#spanning-tree vlan 2 root secondary //设置sw1为Vlan 2的次根桥
sw3(config-if-range)#spanning-tree portfast //配置速端口
sw3(config)#spanning-tree uplinkfast //配置上行速链路
sw3(config)#spanning-tree backbonefast //配置快速主干
sw3(config-if)#spanning-tree vlan 1 cost 18 //设置链路开销
sw3(config-if)#spanning-tree vlan 1 port-priority 112 //设置端口优先级
sw1(config-if)#spanning-tree guard root //配置Guard Root
sw3(config-if)#spanning-tree bpduguard enable //配置BPDU Guard
说明:
①“spanning-tree vlan 1 root primary”和“spanning-tree vlan 1 root secondary”命令实际上是宏命
令,执行该命令时交换机会先取出当前根桥的优先级,然后把本交换机的优先级设置为比当前根桥优先级大或
者小4096的值;使用“show running-config”命令时,在配置文件中是看不到该命令的。
②设置链路开销和端口优先级时,注意根据SPA算法配置在正确的交换机上。
③配置Guard Root后,如果该端口收到比现有根桥更优的BPDU帧,为了保护现有根桥,该端口将进入Blocking;
④配置BPDU Guard后,如果该端口收到BPDU帧,为了保护现有网络,该端口将会立即关闭,要重新开启端口需要
先移除BPDU源,在端口下执行“shutdown”和“no shutdown”命令。
sw1(config)#vtp domain PVST
sw1(config)#vlan 2
sw1(config)#int range f0/14 - 15
sw1(config-if-range)#switchport mode trunk
sw1(config)#spanning-tree mode pvst
sw1(config)#spanning-tree vlan 1 root primary
sw1(config)#spanning-tree vlan 2 root secondary
sw1(config)#spanning-tree backbonefast
sw1(config)#int f0/14
sw1(config-if)#spanning-tree guard root
sw2(config)#int range f0/14 - 15
sw2(config-if-range)#switchport mode trunk
sw2(config)#spanning-tree mode pvst
sw2(config)#spanning-tree vlan 2 root primary
sw2(config)#spanning-tree vlan 1 root secondary
sw2(config)#spanning-tree backbonefast
sw2(config)#int f0/14
sw2(config-if)#spanning-tree guard root
sw3(config)#int range f0/13 - 14
sw3(config-if-range)#switchport mode trunk
sw3(config)#spanning-tree mode pvst
sw3(config)#int range f0/1 - 2
sw3(config-if)#switchport mode access
sw3(config-if)#switchport access vlan 1
sw3(config-if-range)#spanning-tree portfast
sw3(config-if)#spanning-tree bpduguard enable
sw3(config)#int range f0/3 - 4
sw3(config-if)#switchport mode access
sw3(config-if)#switchport access vlan 2
sw3(config-if-range)#spanning-tree portfast
sw3(config-if)#spanning-tree bpduguard enable
sw3(config)#spanning-tree uplinkfast
sw3(config)#spanning-tree backbonefast
sw3(config)#int f0/13
sw3(config-if)#spanning-tree vlan 1 cost 18
sw3(config-if)#spanning-tree vlan 1 port-priority 112
说明:
①网桥优先级必须是4096的倍数,默认为32768,相当于“spanning-tree vlan 1 priority 32768”命令;
②百兆链路成本默认为19,相当于“spanning-tree vlan 1 cost 19”;
③端口优先级必须是16的倍数,默认为128,相当于“spanning-tree vlan 1 port-priority 112”命令;
④每个VLAN的优先级又有所不同,为“优先级 + VLAN ID”;
⑤执行“spanning-tree vlan 1 root primary”命令后,优先级设置为24576,该命令相当于“spanning-tree
vlan 1 priority 24576”命令,当不同交换机轮换使用“root primary”参数时,优先级设置为当前主根桥
优先级递减4096,到0为止;
⑥执行“spanning-tree vlan 1 root secondary”命令后,优先级设置为28672,该命令相当于“spanning-
tree vlan 1 priority 28672”命令,不同交换机轮换使用“root secondary”参数时,优先级不变。
⑦如果sw3强制成为根桥,那么sw2和sw1的F0/14端口将进入阻塞状态;
⑧如果sw3的F0/1 - 4端口接收到BPDU帧,些端口将被立即关闭。
实验调试
sw3#show spanning-tree vlan 1
sw1#show spanning-tree
sw1#debug spanning-tree bpdu //查看STP发送和接收的BPDU帧情况
sw1#debug spanning-tree events //查看STP事件
注意:
①在实际中,当要显式控制根桥和根口等时,不要利用交换机的MAC地址来控制,如果交换机更换或者网络中加
入新的交换机,由于这些交换机的MAC地址并不能事先知道,可能导致STP和我们预想的不一致。
②没有环路时可以使用“no spanning-tree vlan 1”命令关闭某个VLAN的STP;但是建议不要做此动作,因为
STP对交换机的压力通常是可以忍受的。
PortFast、UplinkFast和BackboneFast:
PortFast(速端口):用于接入层交换机或连接到路由器接口的配置;作用主要用在以太网接口一但有设备入,
端口立即进入Forwarding状态,不必经过Listening、Learning的30s。
配置要求:通常用于Access接口,该接口不能用于接入交换机,只能接入计算机或路由器等。
配置命令:sw3(config)#int range f0/1 - 2
sw3(config-if-range)#spanning-tree portfast
在通常情况下接口先进入Listening,然后经过Learning最后才成为Forwarding,这期间需要30秒。这对于某些场合是不能忍受的(如DHCP自动获取时,如果端口启动时间过长将导致客户端得不到IP地址),配置PortFast特性后,一旦有设备接入端口立即进入Forwarding状态,端口不参与STP计算,但依然运行STP协议,如果检测到环路也能够将Forwarding转换为Blocking。
说明:确定网络没有环路时,Trunk接口也可以配置PortFast,使用“spanning-tree portfast trunk”命令。
UplinkFast(上行速链路):用于接入层交换机的配置;作用主要用在接入层交换机到主干交换机的主链路故障
时,能立即切换到备份链路的Forwarding,不必经过最大老化时间、Listening、Learning的50s或者30s。
配置要求:必须用于接入层交换机,该交换机至少有一个端口处于blocking,链路失效必须发生在根端口时
才有意义。
配置命令:sw3(config)#spanning-tree uplinkfast
没有配置UplinkFast时,交换机如果能直接检测到主链路故障,那么另外的备份链路接口会先进入Listening,然后经过Learning最后才成为Forwarding,这期间需要30秒。然而如果到上行交换机的主链路上存在一个Hub,那么当对端端口故障时,无法直接检测到故障,需要等待10个周期没有收到对端的BPDU(每个周期2s),20s后才能进入Listening、然后经过Learning最后才成为Forwarding,这样总共50s才能进入Forwarding。所以,STP重新收敛的时间通常需要30-50s。配置UplinkFast后会把优先级增加到49152,端口开销增加3000,如果主链路故障,那么备份链路能很快进入Forwarding。由于配置后提高了交换机上所有端口的路径开销,所以交换机不适合作为根网桥。
注意:该命令只能用于接入层,不能配置在汇聚和核心层;Catalyst交换机不支持以VLAN为基础配置该命令。
BackboneFast(快速骨干):用于所有交换机的配置;可以在不是相邻网络的故障中缩短网络收敛的时间,即
省去了由Blocking到Listening的20s的最大老化时间。
配置要求:需要在所有交换机上都进行配置。
配置命令:sw3(config)#spanning-tree backbonefast
BackboneFast是对UplinkFast的一种补充,UplinkFast能够检测直连链路的失效,BackboneFast是用来检测间接链路的失效。当启用了BackboneFast的交换机检测到间接链路失效后,会使阻塞端口立即直接进入Listening,而不经过20s的最大老化时间,然后经过Learning最后成为Forwarding,只需要30s就进入Forwarding,比之前的50s少了20s。
总结:PVST+为每一个VLAN生成一棵生成树,在默认情况下,所有生成树的根桥都是同一交换机。设置主次根桥为了优化交换网络实现负载均衡;配置速端口为了使接入终端的端口快速进入转发状态;配置上行速链路为了实现备份的上行链路快速恢复;配置快速主干可以缩短不相邻网络的故障的收敛时间。
Root Guard
配置Guard Root功能是为了防止用户擅自在网络中接入交换机并成为新的根桥,从而破坏了原有的STP树。该功能通常在接入层上对外开放的接口下配置,这些接口将拒绝接收比现有根桥更优的BPDU帧。
Bpdu Gard
配置BPDU Guard功能是为了防止在那些已经配置PortFast命令的端口上接入交换机,从而导致环路的产生。因为PortFast端口通常用于接入计算机,这些端口一但激活就立即进入Forwarding,配置BPDU Guard功能后可以防止这些端口收到BPDU帧。
端口恢复:
可以配置端口自动恢复,来恢因BPDU Guard而关闭的端口。
sw3(config)#errdisable recovery cause bpduguard
sw3(config)#errdisable recovery interval 60
MST
命令:
sw1(config)#spanning-tree mode mst //启用MST生成树模式
sw1(config)#spanning-tree mst configuration //进入MST配置模式
sw1(config-mst)#name MST /命名MST名字
sw1(config-mst)#revision 1 //配置MST的Revision号
sw1(config-mst)#instance 1 vlan 1 – 2 //把vlan 1、2的生成树映射到实例1
sw1(config-mst)#instance 2 vlan 3 – 4 //把vlan 3、4的生成树映射到实例2
sw1(config-mst)#exit //退出配置才能生效
sw1(config)#spanning-tree mst 1 priority 8192 //配置sw1为MST实例1的主根桥
sw1(config)#spanning-tree mst 2 priority 12288 //配置sw1为MST实例2的次根桥
说明:
①只有MST的名字和Revision号相同的交换机才是在同一个MST区域;
②实例0是默认的实例,默认时所有的VLAN都映射到该实例上。
sw1(config)#vtp domain PVST
sw1(config)#vlan 2
sw1(config)#vlan 3
sw1(config)#vlan 4
sw1(config)#int range f0/14 - 15
sw1(config-if-range)#switchport mode trunk
sw1(config)#spanning-tree mode mst
sw1(config)#spanning-tree mst configuration
sw1(config-mst)#name MST
sw1(config-mst)#revision 1
sw1(config-mst)#instance 1 vlan 1 – 2
sw1(config-mst)#instance 2 vlan 3 – 4
sw1(config-mst)#exit
sw1(config)#spanning-tree mst 1 priority 8192
sw1(config)#spanning-tree mst 2 priority 12288
sw2(config)#int range f0/14 - 15
sw2(config-if-range)#switchport mode trunk
sw2(config)#spanning-tree mode mst
sw2(config)#spanning-tree mst configuration
sw2(config-mst)#name MST
sw2(config-mst)#revision 1
sw2(config-mst)#instance 1 vlan 1 – 2
sw2(config-mst)#instance 2 vlan 3 – 4
sw2(config-mst)#exit
sw2(config)#spanning-tree mst 2 priority 8192
sw2(config)#spanning-tree mst 1 priority 12288
sw3(config)#int range f0/13 - 14
sw3(config-if-range)#switchport mode trunk
sw3(config)#spanning-tree mode mst
sw(3config)#spanning-tree mst configuration
sw3(config-mst)#name MST
sw3(config-mst)#revision 1
sw3(config-mst)#instance 1 vlan 1 – 2
sw3(config-mst)#instance 2 vlan 3 – 4
sw3(config-mst)#exit
sw3(config)#int range f0/1 - 2
sw3(config-if)#switchport mode access
sw3(config-if)#switchport access vlan 1
sw3(config)#int range f0/3 - 4
sw3(config-if)#switchport mode access
sw3(config-if)#switchport access vlan 2
sw3(config)#int range f0/5 – 6
sw3(config-if)#switchport mode access
sw3(config-if)#switchport access vlan 3
sw3(config)#int range f0/7 – 8
sw3(config-if)#switchport mode access
sw3(config-if)#switchport access vlan 4
实验调试
sw1#show spanning-tree
sw1#show spanning-tree mst configuration //查看MST的配置