STP 为了减少网络的故障时间,我们经常会采用冗余拓扑。STP可以让具有冗余结构的网络 在故障时自动调整网络的数据转发路径。STP重新收敛时间较长,通常需要30—50秒,为 了减少这个时间,引入了一些补充技术,例如uplinkfast、backbonefast等。RSTP则在协 议上对STP作了根本的改进形成新的协议,从而减少收敛时间。STP还有许多改进,例如PVST、 MST协议,以及安全措施,本章将介绍这些常用的配置。 14.1 STP简介 14.1.1 基本STP 为了增加局域网的冗余性,我们常常会在网络中引入冗余链路,然而这样却会引起交换 环路。交换环路会带来三个问题:广播风暴、同一帧的多个拷贝、交换机CAM表不稳定。 STP(STP,Spanning Tree Protocol)可以解决这些问题,STP基本思路是阻断一些交换机接 口,构建一棵没有环路的转发树。STP利用BPDU(Bridge Protocol Data Unit)和其他交换 机进行通信,从而确定哪个交换机该阻断哪个接口。在BPDU中有几个关键的字段,例如: 根桥ID、路径代价、端口ID等。 为了在网络中形成一个没有环路的拓扑,网络中的交换机要进行以下三个步骤:(1)选 举根桥、(2)选取根口、(3)选取指定口。这些步骤中,哪个交换机能获胜将取决于以下因 素(按顺序进行): (1) 最低的根桥ID; (2) 最低的根路径代价; (3) 最低发送者桥ID; (4) 最低发送者端口ID。 每个交换机都具有一个唯一的桥ID,这个ID由两部分组成:网桥优先级+MAC地址。网 桥优先级是一个2个字节的数,交换机的默认优先级为32768;MAC地址就是交换机的MAC 地址。具有最低桥ID的交换机就是根桥。根桥上的接口都是指定口,会转发数据包。 选举了根桥后,其他的交换机就成为非根桥了。每台非根桥要选举一条到根桥的根路径。 STP使用路径Cost来决定到达根桥的最佳路径(Cost是累加的,带宽大的链路Cost低), 最低Cost值的路径就是根路径,该接口就是根口;如果Cost职一样,就根据选举顺序选举 根口。根口是转发数据包的。 交换机的其他接口还要决定是指定口还是阻断口,交换机之间将进一步根据上面的四个 因素来竞争。指定口是转发数据帧的。剩下的其它的接口将被阻断,不转发数据包。这样网 络就构建出一棵没有环路的转发树。 当网络的拓扑发生变化时,网络会从一个状态向另一个状态过渡,重新打开或阻断某些 接口。交换机的端口要经过几种状态: 禁用(Disable)、阻塞(Blocking)、监听状态 (Listening)、学习状态(Learning)、最后是转发状态(Forwarding)。 14.1.2 PVST 当网络上有多个VLAN时,PVST(Per Vlan STP)会为每个VLAN构建一棵STP树。这样的 好处是可以独立地为每个VLAN控制哪些接口要转发数据,从而实现负载平衡。缺点是如果 VLAN数量很多,会给交换机带来沉重的负担。Cisco交换机默认的模式就是PVST。 14.1.3 portfast、uplinkfast、backbonefast STP的收敛时间通常需要30—50秒。为了减少收敛时间,有一些改善措施。Portfast 特性使得以太网接口一旦有设备接入,就立即进入转发状态,如果接口上连接的只是计算机 或者其他不运行STP的设备,这是非常合适的。 Uplinkfast则经常用在接入层交换机上,当它连接到主干交换机上的主链路上故障时, 能立即切换到备份链路上,而不需要经过30秒或者50秒。Uplinkfast只需要在接入层交 换机上配置即可。 Backbonefast则主要用在主干交换机之间,当主干交换机之间的链路上故障时,可以 比原有的50秒少20秒就切换到备份链路上。Backbonefast需要在全部交换机上配置。 14.1.4 RSTP RSTP实际上是把减少STP收敛时间的一些措施融合在STP协议中形成新的协议。RSTP 中,接口的角色有:根接口、指定接口、备份接口(Backup Interface)、替代接口(Alternate Interface)。接口的状态有:丢弃(Discarding)、学习状态(Learning)、转发状态 (Forwarding)。接口还分为边界接口(Edge Port)、点到点接口(Point-to-Point Port)、 共享接口(Share Port)。 14.1.5 MST 在PVST中,交换机为每个VLAN都构建一棵STP树,不仅会带来CPU的很大负载,也会 占用大量的带宽。MST则是把多个VLAN映射到一个STP实例上,从而减少了STP实例。MST 可以和STP、PVST配合使用。对于运行STP、PVST的交换机来说,一个MST域看起来就像一 台交换机。 14.1.6 STP防护 STP协议并没有什么措施对交换机的身份进行认证。在稳定的网络中如果接入非法的交 换机将可能给网络中的STP树带来灾难性的破坏。有一些简单的措施来保护网络,虽然这些 措施显得软弱无力。Root Guard特性将使得交换机的接口拒绝接收比原有根桥优先级更高 的BPDU。而BPDU Guard主要是和portfast特性配合使用,portfast使得接口一有计算机 接入就立即进入转发状态,然而万一这个接口接入的是交换机很可能造成环路。BPDU Guard 可以使得portfast接口一旦接收到BPDU,就关闭该接口。 14.2 实验1: STP、PVST 1. 实验目的 通过本实验,读者可以掌握如下技能: (1) 理解STP的工作原理 (2) 掌握STP树的控制 (3) 利用PVST进行负载平衡 2. 实验拓扑
图14-1 实验1、实验2、实验4拓扑图 图14-1中,S1和S2模拟为核心层的交换机,而S3为接入的交换机。S1和S2实际上 是三层交换机,我们这里并不利用其三层功能,所以它们也采用二层交换机的图标。 3. 实验步骤 我们要在网络中配置2个VLAN,不同VLAN的STP具有不同的根桥,实现负载平衡。 (1) 步骤1:利用VTP在交换机上创建VLAN2,在S1和S2之间的链路配置Trunk S1(config)#vtp domain VTP-TEST Changing VTP domain name from NULL to VTP-TEST S1(config)#vlan 2 //在S1上配置VTP的域名,并创建VLAN 2。由于默认时S2和S3的VTP域名为空,它们将 自动学习到S1的VTP域名,同时S2、S3也将自动学习到VLAN 2,请确认是否成功。 S1(config)#int f0/14 S1(config-if)#shutdown //关闭该接口,以免影响我们的实验 S1(config)#int f0/13 S1(config-if)#switchport trunk encapsulation dot1q S1(config-if)#switchport mode trunk //S1的f0/13改为negotiate后,由于默认时S2的f0/13为auto模式,S1和S2将自动协 商成功Trunk。而默认时S3的以太网接口就是desirable模式,所以S3和S1、S2的链路 也自动协商成功Trunk。请确认三条链路的Trunk是否成功。 (2) 步骤2:检查初始的STP树 S1#show spanning-tree VLAN0001 Spanning tree enabled protocol ieee //以上表明运行的STP协议是IEEE的802.1D Root ID Priority 32768 Address 0009.b7a4.b181 Cost 19 Port 17 (FastEthernet0/15) Hello Time 2 sec Max Age 20 sec Forward Delay 15 sec //以上显示VLAN 1的STP树的根桥信息,通过根桥的MAC地址可以确定S3是根桥。这是 因为S3是较早的交换机,具有较低的MAC地址。由于S3是一台低端的交换机,成为根桥 显然是不合理的。 Bridge ID Priority 32769 (priority 32768 sys-id-ext 1) Address 0018.ba11.f500 Hello Time 2 sec Max Age 20 sec Forward Delay 15 sec Aging Time 300 //以上显示该交换机的桥ID Interface Role Sts Cost Prio.Nbr Type ---------------- ---- --- --------- -------- -------------------------------- Fa0/13 Altn BLK 19 128.15 P2p Fa0/15 Root FWD 19 128.17 P2p //以上显示该交换机各个接口的状态,f0/13为阻断状态,f0/15为根口 VLAN0002 Spanning tree enabled protocol ieee Root ID Priority 32768 Address 0009.b7a4.b182 Cost 19 Port 17 (FastEthernet0/15) Hello Time 2 sec Max Age 20 sec Forward Delay 15 sec Bridge ID Priority 32770 (priority 32768 sys-id-ext 2) Address 0018.ba11.f500 Hello Time 2 sec Max Age 20 sec Forward Delay 15 sec Aging Time 300 Interface Role Sts Cost Prio.Nbr Type ---------------- ---- --- --------- -------- -------------------------------- Fa0/13 Altn BLK 19 128.15 P2p Fa0/15 Root FWD 19 128.17 P2p //以上是VLAN 2的STP树情况,VLAN 2的STP树和VLAN 1的类似。默认时,Cisco交换机 会为每个VLAN都生成一个单独的STP树,称为PVST(Per VLAN Spanning Tree)。 【技术要点】需要仔细分析为什么STP会是目前这种情况。三个交换机的默认优先级都是 32768,而S3的MAC较低,所以成为了根桥,则S3上的f0/1和f0/2是指定口,处于Forword 状态。S1有两个接口可以到达S3,一个接口是f0/13,到达S3的Cost为19+19=38,另 一个接口是f0/15,到达S1的Cost为19,因此f0/15是根口,处于Forword状态。同样 S2上,f0/15也是根口,处于Forword状态。在S1和S2之间的链路上,要选举出一个指定 口。根据选举的要素,根桥的ID是一样的,不能决出胜负;到达根桥的Cost值也是一样的, 都为19,不能决出胜负;但是发送者桥ID不一样,S1的MAC地址高,S2的MAC地址低, S2获胜,所以S2的f0/13是指定口,处于Forward状态,S1的f0/13就处于Block状态了。 (3) 步骤3:控制S1为VLAN1的根桥,S2为VLAN2的根桥 S1(config)#spanning-tree vlan 1 priority 4096 S2(config)#spanning-tree vlan 2 priority 4096 //对于VLAN 1来说,S1的优先级为4096,而S2和S3保持默认值32768,这样S1就成为 了VLAN 1的根桥。同样我们控制S2成为了VLAN 2的根桥。优先级通常要是4096的倍数。 S1#show spanning-tree VLAN0001 Spanning tree enabled protocol ieee Root ID Priority 4097 Address 0018.ba11.f500 This bridge is the root Hello Time 2 sec Max Age 20 sec Forward Delay 15 sec //S1成为了VLAN 1的根桥了 Bridge ID Priority 4097 (priority 4096 sys-id-ext 1) Address 0018.ba11.f500 Hello Time 2 sec Max Age 20 sec Forward Delay 15 sec Aging Time 15 Interface Role Sts Cost Prio.Nbr Type ---------------- ---- --- --------- -------- -------------------------------- Fa0/13 Desg FWD 19 128.15 P2p Fa0/15 Desg FWD 19 128.17 P2p //对于VLAN 1来说,f0/13和f0/15是指定口,都处于转发状态了 VLAN0002 Spanning tree enabled protocol ieee Root ID Priority 4098 Address 0018.ba11.eb80 Cost 19 Port 15 (FastEthernet0/13) Hello Time 2 sec Max Age 20 sec Forward Delay 15 sec //S2成为了VLAN 2的根桥了 Bridge ID Priority 32770 (priority 32768 sys-id-ext 2) Address 0018.ba11.f500 Hello Time 2 sec Max Age 20 sec Forward Delay 15 sec Aging Time 15 Interface Role Sts Cost Prio.Nbr Type ---------------- ---- --- --------- -------- -------------------------------- Fa0/13 Root FWD 19 128.15 P2p Fa0/15 Altn BLK 19 128.17 P2p //对于VLAN 2来说,f0/13是根口,处于转发状态,而f0/15却是阻断状态 S3#show spanning-tree brief VLAN1 Spanning tree enabled protocol ieee Root ID Priority 4097 Address 0018.ba11.f500 Cost 19 Port 1 (FastEthernet0/1) Hello Time 2 sec Max Age 20 sec Forward Delay 15 sec Bridge ID Priority 32768 Address 0009.b7a4.b181 Hello Time 2 sec Max Age 20 sec Forward Delay 15 sec Aging Time 300 Interface Designated Name Port ID Prio Cost Sts Cost Bridge ID Port ID -------------------- ------- ---- ----- --- ----- -------------------- ------- FastEthernet0/1 128.1 128 19 FWD 0 4097 0018.ba11.f500 128.17 FastEthernet0/2 128.2 128 19 FWD 19 32768 0009.b7a4.b181 128.2 //在S3上,对于VLAN1,S3的f0/1和f0/2都处于转发状态。 VLAN2 Spanning tree enabled protocol ieee Root ID Priority 4098 Address 0018.ba11.eb80 Cost 19 Port 2 (FastEthernet0/2) Hello Time 2 sec Max Age 20 sec Forward Delay 15 sec Bridge ID Priority 32768 Address 0009.b7a4.b182 Hello Time 2 sec Max Age 20 sec Forward Delay 15 sec Aging Time 300 Interface Designated Name Port ID Prio Cost Sts Cost Bridge ID Port ID -------------------- ------- ---- ----- --- ----- -------------------- ------- FastEthernet0/1 128.1 128 19 FWD 19 32768 0009.b7a4.b182 128.1 FastEthernet0/2 128.2 128 19 FWD 0 4098 0018.ba11.eb80 128.17 //S3上,对于VLAN2,S3的f0/1和f0/2也都处于转发状态。 (4) 步骤4:控制指定口 在步骤3中可以看到对于VLAN 1,S1成为了根桥,S1的f0/13和f0/15处于转发状态; S2的f0/13是根口,也处于转发状态;S3的f0/1是根口,也处于转发状态;然而S2和S3 之间的链路上,却是低端交换机S3的f0/2在转发数据,原因在于S2和S3在竞争指定口时, 由于S3的MAC较低而获胜了,这是不合理的。VLAN 2的情况类似。 我们要控制指定口,这可以通过改变优先级实现,如下: S2(config)#spanning-tree vlan 1 priority 8192 S1(config)#spanning-tree vlan 2 priority 8192 //对于VLAN 1来说,S2的优先级为8192,比S1的4096低,不至于成为根桥,但是比S3 的32768低,所以在竞争指定口时会获胜。VLAN 2的情况类似。 S3#show spanning-tree brief VLAN1 (此处省略) Interface Designated Name Port ID Prio Cost Sts Cost Bridge ID Port ID -------------------- ------- ---- ----- --- ----- -------------------- ------- FastEthernet0/1 128.1 128 19 FWD 0 4097 0018.ba11.f500 128.17 FastEthernet0/2 128.2 128 19 BLK 19 8193 0018.ba11.eb80 128.17 //S3上,对于VLAN1,S3的f0/1处于转发状态,而f0/2处于阻断状态。 VLAN2 (此处省略) Interface Designated Name Port ID Prio Cost Sts Cost Bridge ID Port ID -------------------- ------- ---- ----- --- ----- -------------------- ------- FastEthernet0/1 128.1 128 19 BLK 19 8194 0018.ba11.f500 128.17 FastEthernet0/2 128.2 128 19 FWD 0 4098 0018.ba11.eb80 128.17 // S3上,对于VLAN 2,S3的f0/1处于阻断状态,而f0/2处于转发状态,这样起到了负 载平衡的作用。 14.3 实验2: portfast、uplinkfast、backbonefast 1. 实验目的 通过本实验,读者可以掌握如下技能: (1) 理解portfast的工作场合和配置 (2) 理解uplinkfast的工作场合和配置 (3) 理解backbonefast的工作场合和配置 2. 实验拓扑 如图14-1。 3. 实验步骤 在实验1的基础上继续本实验,我们将只关心VLAN 1的STP树。 (1) 步骤1:配置portfast 图14-1中,S1的f0/5是用于接入计算机。当计算机接入时,f0/5接口立即进入 Listening状态,随后经过Learning,最后才成为Forwarding,这期间需要30秒的时间。 这对于有些场合是不可忍受的,可以配置portfast特性,使得计算机一接入,接口立即进 入Forwarding。 S1(config)#int f0/5 S1(config-if)#spanning-tree portfast %Warning: portfast should only be enabled on ports connected to a single host. Connecting hubs, concentrators, switches, bridges, etc... to this interface when portfast is enabled, can cause temporary bridging loops. Use with CAUTION %Portfast has been configured on FastEthernet0/5 but will only have effect when the interface is in a non-trunking mode. //交换机会警告该接口只能用于接入计算机或者路由器,不要接入其他的交换机 (2) 步骤2:配置uplinkfast 先确认实验1的STP树已经正确。在图14-1中的S1上,关闭f0/15接口,在S3上反 复执行“show spanning-tree vlan 1 brief”观察f0/2接口的状态变化: FastEthernet0/2 128.2 128 3019 LIS 19 8193 0018.ba11.eb80 128.17 大约15秒后变为: FastEthernet0/2 128.2 128 3019 LRN 19 8193 0018.ba11.eb80 128.17 大约15秒后变为: FastEthernet0/2 128.2 128 3019 FWD 19 8193 0018.ba11.eb80 128.17 合计大约15+15=30秒,f0/2变为转发状态。 S3(config)#spanning-tree uplinkfast S1(config)#int f0/15 S1(config-if)#no shutdown S1(config-if)#shutdown //等STP重新稳定后,才执行该语句 在S3上重复执行“show spanning-tree vlan 1 brief”,可以看到f0/2很快就进入了 Forwarding状态。 【技术要点】没有配置uplinkfast时,交换机S3如果能直接检测到f0/1接口上的链路故 障,f0/2会立即进入Listen状态,这样30秒就能进入Forward状态。然而如果S1和S3 之间存在一个Hub,S1上的f0/15接口故障了,S3将无法直接检测到故障,S3只能等待10 个周期没有收到S1的BPDU(每个周期2秒),20秒中后,S3的f0/2才进入Listen状态, 这样总共50秒才就能进入Forward状态。所以STP重新收敛的时间通常需要30—50秒。 (3) 步骤3:配置backbonefast 打开S1上f0/15接口,确认STP树已经正确。在图14-1中的S1上,关闭f0/13接口, 在S3上反复执行“show spanning-tree vlan 1 brief”观察f0/2接口的状态变化: FastEthernet0/2 128.2 128 3019 BLK 19 8193 0018.ba11.eb80 128.17 大约20秒后变为: FastEthernet0/2 128.2 128 3019 LIS 19 8193 0018.ba11.eb80 128.17 大约15秒后变为: FastEthernet0/2 128.2 128 3019 LRN 19 8193 0018.ba11.eb80 128.17 大约15秒后变为: FastEthernet0/2 128.2 128 3019 FWD 19 8193 0018.ba11.eb80 128.17 合计大约20+15+15=50秒,f0/2变为转发状态。 S1(config)#spanning-tree backbonefast S2(config)#spanning-tree backbonefast S3(config)#spanning-tree backbonefast S1(config)#int f0/13 S1(config-if)#no shutdown S1(config-if)#shutdown //等STP重新稳定后,才执行该语句 在S3上重复执行“show spanning-tree vlan 1 brief”,可以看到f0/2很快就进入了 Listening状态,合计大约15+15=30秒后,f0/2就变为转发状态,比之前的50秒少了 20秒。 【提示】uplinkfast命令只需要在S3配置即可,而backbonefast命令需要在S1、S2、S3 三台交换机上都配置。 14.4 实验3:RSTP 1. 实验目的 通过本实验,读者可以掌握如下技能: (1) 熟悉RSTP的配置 2. 实验拓扑
图14-2 实验3拓扑图 3. 实验步骤 (1) 步骤1:请把两台交换机的配置清除干净,重启交换机 S1#delete flash:vlan.dat S1#erase startup-config S1#reload S2#delete flash:vlan.dat S2#erase startup-config S2#reload (2) 步骤2:配置S1和S2之间的Trunk S1(config)#int f0/13 S1(config-if)#switchport trunk encapsulation dot1q S1(config-if)#switchport mode trunk S1(config)#int f0/14 S1(config-if)#switchport trunk encapsulation dot1q S1(config-if)#switchport mode trunk (3) 步骤3:配置S1成为根桥 S1(config)#spanning-tree vlan 1 priority 4096 在S1和S2上用“show spanning-tree”命令检查STP的情况,S2的f0/14应该处于阻断 状态。 【技术要点】S1是根桥,S2要选取到达S1的根路径,有两条路径,Cost都为19。这时由 于S2在f0/13接口上收到的BPDU中,发送者(S1)端口号为13;在f0/14接口上收到的 BPDU中,发送者端口号为14。所以f0/13被选举为根口了,f0/14则只能被阻断了。 (4) 步骤4:在S2上关闭f0/13接口,观察STP树的重新生成 在S2上关闭f0/13接口,重复执行“show spanning-tree”,可以看到f0/14经过30秒 后才进入了Forwarding状态。 (5) 步骤5:配置RSTP S1(config)#spanning-tree mode rapid-pvst S2(config)#spanning-tree mode rapid-pvst (6) 步骤6:在S2上关闭f0/13接口,观察STP树的重新生成 在S2上重新打开f0/13接口,确认STP稳定后,在S2上关闭f0/13接口,重复执行“show spanning-tree”,可以看到f0/14立即进入了Forwarding状态。说明RSTP的收敛比普通 STP有了很大的改善。 (7) 步骤7:配置链路类型 S1(config)#int range f0/13 -14 S1(config-if-range)#duplex full S1(config-if-range)#spanning-tree link-type point-to-point S2(config)#int range f0/13 -14 S2(config-if-range)#duplex full S2(config-if-range)#spanning-tree link-type point-to-point //S1和S2之间的链路是Trunk链路,自动协商为全双工,RSTP会自动把它们的链路类型标 识为点到点。我们这里强制配置了一遍。 【技术要点】RSTP中接口分为边界接口(Edge Port)、点到点接口(Point-to-Point Port)、 共享接口(Share Port)。如果接口上配置了spanning portfast,接口就为边界接口;如 果接口是半双工,接口就为共享接口;如果接口是全双工,接口就为点到点接口。在接口上 指明类型有利于RSTP的运行。 14.5 实验4: MST 1. 实验目的 通过本实验,读者可以掌握如下技能: (1) 理解MST的工作原理 (2) 掌握MST的配置 2. 实验拓扑 如图14-1。 3. 实验步骤 我们要在网络中创建4个VLAN,VLAN 1和VLAN 2使用MST实例1,VLAN 3和VLAN 4 使用MST实例2。 (1) 步骤1:利用VTP在交换机上创建VLAN,在S1和S2之间的链路配置Trunk S1(config)#vtp domain VTP-TEST Changing VTP domain name from NULL to VTP-TEST S1(config)#vlan 2 S1(config)#vlan 3 S1(config)#vlan 4 S1(config)#int f0/14 S1(config-if)#shutdown //关闭该接口,以免影响我们的实验 S1(config)#int f0/13 S1(config-if)#switchport trunk encapsulation dot1q S1(config-if)#switchport mode trunk S2(config)#int f0/13 S2(config-if)#switchport trunk encapsulation dot1q S2(config-if)#switchport mode trunk (2) 步骤2:配置MST 只有S1和S2才能支持MST。 S1(config)#spanning-tree mode mst //以上把生成树的模式改为MST,默认时是PVST。 S1(config)#spanning-tree mst configuration //以上是进入MST的配置模式下 S1(config-mst)#name TEST-MST //以上命名MST的名字 S1(config-mst)#revision 1 //以上配置MST的revision号,只有名字和revision号相同的交换机才是在同一个MST 区域 S1(config-mst)#instance 1 vlan 1-2 //以上是把VLAN 1和VLAN 2的生成树映射到实例1 S1(config-mst)#instance 2 vlan 3-4 //以上是把VLAN 3和VLAN 4的生成树映射到实例2,我们这里一共有三个MST实例,实例 0是系统要使用的 S1(config-mst)#exit //要退出,配置才能生效 S1(config)#spanning-tree mst 1 priority 8192 S1(config)#spanning-tree mst 2 priority 12288 //以上配置S1为MST实例1的根桥 S2(config)#spanning-tree mode mst S2(config)#spanning-tree mst configuration S2(config-mst)#name TEST-MST S2(config-mst)#revision 1 S2(config-mst)#instance 1 vlan 1-2 S2(config-mst)#instance 2 vlan 3-4 S2(config-mst)#exit S2(config)#spanning-tree mst 1 priority 12288 S2(config)#spanning-tree mst 2 priority 8192 //以上配置S2为MST实例2的根桥 (3) 步骤3:检查生成树 S1#show spanning-tree MST00 Spanning tree enabled protocol mstp //以上表明运行的是MST协议 Root ID Priority 32768 Address 0009.b7a4.b181 Cost 200000 Port 15 (FastEthernet0/13) Hello Time 2 sec Max Age 20 sec Forward Delay 15 sec Bridge ID Priority 32768 (priority 32768 sys-id-ext 0) Address 0018.ba11.f500 Hello Time 2 sec Max Age 20 sec Forward Delay 15 sec Interface Role Sts Cost Prio.Nbr Type ---------------- ---- --- --------- -------- -------------------------------- Fa0/13 Root FWD 200000 128.15 P2p Fa0/15 Altn BLK 200000 128.17 P2p Bound(PVST) //以上的MST00是系统要使用的实例,BPDU是通过它来发送的 MST01 Spanning tree enabled protocol mstp Root ID Priority 8193 Address 0018.ba11.f500 This bridge is the root Hello Time 2 sec Max Age 20 sec Forward Delay 15 sec Bridge ID Priority 8193 (priority 8192 sys-id-ext 1) Address 0018.ba11.f500 Hello Time 2 sec Max Age 20 sec Forward Delay 15 sec Interface Role Sts Cost Prio.Nbr Type ---------------- ---- --- --------- -------- -------------------------------- Fa0/13 Desg FWD 200000 128.15 P2p Fa0/15 Boun BLK 200000 128.17 P2p Bound(PVST) MST02 Spanning tree enabled protocol mstp Root ID Priority 8194 Address 0018.ba11.eb80 Cost 200000 Port 15 (FastEthernet0/13) Hello Time 2 sec Max Age 20 sec Forward Delay 15 sec Bridge ID Priority 12290 (priority 12288 sys-id-ext 2) Address 0018.ba11.f500 Hello Time 2 sec Max Age 20 sec Forward Delay 15 sec Interface Role Sts Cost Prio.Nbr Type ---------------- ---- --- --------- -------- -------------------------------- Fa0/13 Root FWD 200000 128.15 P2p Fa0/15 Boun BLK 200000 128.17 P2p Bound(PVST) //以上显示的是S1上的MST实例情况。 S3#show spanning-tree brie VLAN1 Spanning tree enabled protocol ieee Root ID Priority 32768 Address 0009.b7a4.b181 This bridge is the root Hello Time 2 sec Max Age 20 sec Forward Delay 15 sec Bridge ID Priority 32768 Address 0009.b7a4.b181 Hello Time 2 sec Max Age 20 sec Forward Delay 15 sec Aging Time 15 Interface Designated Name Port ID Prio Cost Sts Cost Bridge ID Port ID -------------------- ------- ---- ----- --- ----- -------------------- ------- FastEthernet0/1 128.1 128 19 FWD 0 32768 0009.b7a4.b181 128.1 FastEthernet0/2 128.2 128 19 FWD 0 32768 0009.b7a4.b181 128.2 (此处省略) //以上表明S3成为了所有VLAN的根桥,f0/1和f0/2都处于转发状态,这不是我们想要的。 (4) 步骤4:控制S1成为根桥 S1(config)#spanning-tree mst 0 priority 4096 //注意这里应该配置MST 0的优先级,只有MST 0才发送BPDU。 S3#show spanning-tree brief VLAN1 Spanning tree enabled protocol ieee Root ID Priority 4096 Address 0018.ba11.f500 Cost 19 Port 1 (FastEthernet0/1) Hello Time 2 sec Max Age 20 sec Forward Delay 15 sec //以上表明S1是VLAN 1的根桥了 Bridge ID Priority 32768 Address 0009.b7a4.b181 Hello Time 2 sec Max Age 20 sec Forward Delay 15 sec Aging Time 300 Interface Designated Name Port ID Prio Cost Sts Cost Bridge ID Port ID -------------------- ------- ---- ----- --- ----- -------------------- ------- FastEthernet0/1 128.1 128 19 FWD 0 4096 0018.ba11.f500 128.17 FastEthernet0/2 128.2 128 19 BLK 0 32768 0018.ba11.eb80 128.17 (此处省略) //对于S3上所有的VLAN来说,f0/2都是阻断的,无法取得负载平衡。 (5) 步骤5:控制负载平衡 S3(config)#int f0/2 S3(config-if)#spanning-tree vlan 3 cost 10 S3(config-if)#spanning-tree vlan 4 cost 10 //以上改变VLAN 3和VLAN 4在f0/2接口上的Cost值。这样对于VLAN 3和VLAN 4,S3 的f0/2接口就处于转发状态了。 14.6 实验5: STP保护 1. 实验目的 通过本实验,读者可以掌握如下技能: (1) ROOT GUARD的使用 (2) BPDU GUARD的使用 2. 实验拓扑
图 14-3 实验6拓扑图 3. 实验步骤 (1) 步骤1:关闭不需要的接口,配置S1和S2之间的Trunk, S1(config)#int f0/14 S1(config-if)#shutdown S1(config)#int f0/15 S1(config-if)#shutdown S1(config)#int f0/13 S1(config-if)#switchport trunk encapsulation dot1q S1(config-if)#switchport mode trunk (2) 步骤2:配置S1成为根桥 S1(config)#spanning-tree vlan 1 priority 8192 (3) 步骤3:在S2的f0/15上配置guard root S2(config)#int f0/15 S2(config-if)#spanning-tree guard root (4) 步骤4:把S3改为根桥,观察S2的动作 S3(config)#spanning-tree vlan 1 priority 4096 S2#show spanning-tree inconsistentports Name Interface Inconsistency -------------------- ---------------------- ------------------ VLAN0001 FastEthernet0/15 Root Inconsistent Number of inconsistent ports (segments) in the system : 1 //S2将从f0/15收到S3发送的更优的BPDU,然而由于该接口上配置Root guard,S2的接 口进入阻断状态。 S2#show spanning-tree VLAN0001 (此处省略) Interface Role Sts Cost Prio.Nbr Type ---------------- ---- --- --------- -------- -------------------------------- Fa0/13 Root FWD 19 128.15 P2p Fa0/15 Desg BKN*19 128.17 P2p *ROOT_Inc (5) 步骤5:配置BPDU Guard S2(config)#int f0/15 S2(config-if)#shutdown //关闭接口 S2(config-if)#no spanning-tree guard root //去掉之前的配置 S2(config-if)#spanning-tree portfast S2(config-if)#spanning-tree bpduguard enable //以上配置BPDU Guard S2(config)#int f0/15 S2(config-if)#no shutdown 0:28:49: %SPANTREE-2-BLOCK_BPDUGUARD: Received BPDU on port FastEthernet0/15 with BPDU Guard enabled. Disabling port. 00:28:49: %PM-4-ERR_DISABLE: bpduguard error detected on Fa0/15, putting Fa0/15 in err-disable state 00:28:50: %LINEPROTO-5-UPDOWN: Line protocol on Interface FastEthernet0/15, changed state to down //交换机从f0/15接口收到S3的BPDU,f0/15被disable了 S2#show interfaces f0/15 FastEthernet0/15 is down, line protocol is down (err-disabled) //可以看到f0/15接口关闭了。要重新开启,请先移除BPDU源,在接口下执行“shutdown”、 “no shutdown”命令。 14.7 本章小结 本章首先介绍了STP的作用和基本工作原理,交换机通过STP协议有选择性地阻断了某 些接口,从而构建无环路的转发路径,STP需要选取根桥、根口、指定口。802.1D的STP 需要较长时间才收敛,通常为30—50秒。本章还介绍减少STP收敛的措施:uplinkfast、 backbonefast和RSTP协议。默认时CISCO交换机为每个VLAN构建一棵树,这样方便控制 STP树,但导致STP树数量太多。MST则可以为多个VLAN共同构建一棵树。本章最后介绍了 保护STP树的两个简单措施:Root Guard和BPDU Guard。表14-1是本章出现的命令。 表14-1 本章命令汇总 命令 作用 show spanning-tree 查看STP树信息 spanning-tree vlan 1 priority 4096 配置VLAN1的桥优先级 spanning-tree portfast 配置接口为portfast,当有设备接入时立即 进入转发状态 spanning-tree uplinkfast 配置uplinkfast特性 spanning-tree backbonefast 配置backbonefast特性 spanning-tree mode rapid-pvst 把STP的运行模式设为RSTP+PVST spanning-tree link-type point-to-point把接口的链路类型改为点对点 spanning-tree mode mst 把生成树的模式改为MST spanning-tree mst configuration 进入MST的配置模式 name TEST-MST 命名MST的名字 revision 1 配置MST的revision号 instance 1 vlan 1-2 把VLAN 1和VLAN 2的生成树映射到实例1 spanning-tree guard root 在接口上配置root guard特性 spanning-tree bpduguard enable 在接口上配置bpduguard特性
|