STP
{Back to Index}
Table of Contents
以太网交换机使用生成树协议 STP ,可以在提高网络可靠性的同时,又避免环路带来的各种问题:
- 无论交换机之间采用怎样的物理连接,交换机都能够 自动计算并构建一个逻辑上没有环路的网络 ,其逻辑拓扑结构必须是 树形 的(即无逻辑环路)
- 最终生成的树形逻辑拓扑要确保连通整个网络的每一部分
- 当首次连接交换机或网络物理拓扑发生变化时(人为改变或是故障),交换机都将进行生成树的 重新计算
1 STP (802.1D)
1.1 生成树算法
1.1.1 选举1根桥
根桥的选举条件是:桥 ID 最小者当选。
根桥的角色是 可被抢占 的。
桥 ID 包含两部分:
优先级
SW2#show spanning-tree VLAN0001 Spanning tree enabled protocol ieee Root ID Priority 8193 Address aabb.cc00.2000 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 aabb.cc00.2000 Hello Time 2 sec Max Age 20 sec Forward Delay 15 sec Aging Time 300 sec Interface Role Sts Cost Prio.Nbr Type ------------------- ---- --- --------- -------- -------------------------------- Et0/0 Desg FWD 100 128.1 P2p Et0/2 Desg FWD 100 128.3 P2p Et0/3 Desg FWD 100 128.4 P2p
通过
SW2(config)#spanning-tree vlan 1 priority <prio>
进行修改。基本 MAC 地址
SW2#show interfaces | include bia Hardware is Ethernet, address is aabb.cc00.2000 (bia aabb.cc00.2000) # 第一行 MAC 地址既是基本 MAC ,也称为背板 MAC Hardware is Ethernet, address is aabb.cc00.2010 (bia aabb.cc00.2010) Hardware is Ethernet, address is aabb.cc00.2020 (bia aabb.cc00.2020) Hardware is Ethernet, address is aabb.cc00.2030 (bia aabb.cc00.2030)
1.1.2 在每个非根桥上选举根端口
根端口可以看成是朝向根桥的端口(离根桥最近)。
每个非根交换机上有且只有一个根端口(RP),用于接收根桥发来的 BPDU ,也用来转发流量。
选举规则:
- 端口到根桥的路径成本最小
- 对端桥 ID 最小
- 对端端口 ID 最小
1.1.3 为每个 Segment 选举指定端口
每个 Segment 有且只有一个 指定端口(DP),用于转发根交换机发来的 BPDU 和数据流量。
DP 可以看做是 网段上离根桥最近的接口。
选举规则:
- 根桥的所有端口都是 DP
- 根端口的对端一定是 DP
- 端口到根桥的路径成本最小
- 本网桥 ID 最小
1.1.4 阻塞非指定端口
非指定端口即为 备用端口 (AP),将其阻塞。
1.2 端口状态
状态 | 收发数据 | 收 BPDU | 发 BPDU | 学习 MAC |
---|---|---|---|---|
Disable | ❌ | ❌ | ❌ | ❌ |
Blocking | ❌ | ✅ | ❌ | ❌ |
Listening | ❌ | ✅ | ✅ | ❌ |
Learning | ❌ | ✅ | ✅ | ✅ |
Forwarding | ✅ | ✅ | ✅ | ✅ |
Figure 1: STP 端口状态转换过程
1.3 收敛时间
初次收敛
30s = 15s(Listen) + 15(Learn)
- 拓扑发生变化
本地存在阻塞端口
若其他端口断开,所有阻塞端口进入 Listen 状态(选举),结果若为启用,则再将进入 Learn 状态,前后总共需要 30s 。
本地不存在阻塞端口 (参考 SW2 )
若某个根端口断开,则会通过 DP 发送次优 BPDU ,由于对端交换机端口无视该 BPDU ,则 20s Max Age 超时后 对端端口 会进入 Listen 状态,接着进入 Learn 状态,因此总共需要 50s 网络才能收敛。
1.4 配置
1.4.1 设置桥优先级
Switch(config)# spanning-tree vlan VlanId priority Pri
1.4.2 设置主次根
Switch(config)# spanning-tree vlan VlanId root {primary | secondary} [diameter Diameter]
在全网使用默认优先级(32768
)的情况下:
- 如果是 primary ,则该交换机针对该VLAN生成树优先级调整为
24576
- 如果是 secondary,则为
28672
实际上这条命令就是检测目前网络中的其他设备的网桥优先级,并且来调整自己的优先级。
Diameter 参数会影响 STP 计时器,不同的值将导致交换机自动调整 forward-delay
及 max-age
计时器,这条命令一般在根桥上配置,这样计时器的值会通过 BPDU 传递到其他交换机。
1.4.3 设置接口 Cost
Switch(config-if)# spanning-tree [vlan VlanId ] cost Cost
1.4.4 设置接口优先级
Switch(config-if)# spanning-tree [vlan VlanId ] port-priority Pri
2 RSTP (802.1w) 2
2.1 端口状态
Figure 2: 与 STP 端口状态比较
当 AP 和 BP 有朝一日被唤醒时,会先进入 Learning 状态,然后进入 Forwarding 状态。
2.2 端口角色
Figure 3: 端口角色
2.2.1 Alternative 与 Backup 区别
- AP 是 不同交换机端口之间 进行优先级比较的结果,即 AP 会从其他交换机的 DP 收到更佳 BPDU 。 AP 可以看作是 RP 的备份,因为它 为本交换机 提供 通往根桥的后备路径 。
- Backup 是 同一交换机端口之间 比较的结果,即 BP 会从本交换机的 DP 收到更佳 BPDU 。 BP 为所在网段 提供通往根桥的后备路径,因此 BP 可以看作 DP 的备份,当 DP 挂掉,BP 成为新的 DP 。
2.3 Link Type
2.3.1 Edge
类似于 STP 中的 portfast ,允许该接口由 Discarding 直接进入 Forwaring ,同时该接口也不会产生 TCN 。
RSTP 中沿用命令 spanning-tree portfast
来对接口进行配置。
2.3.2 P2P
将 Full Duplex Port 判定为 Point to Point Port ,并使用 RSTP 相互通信。
2.3.3 Shared
将 Half Duplex Port 判定为 Shared Port ,并使用传统 STP 相互通信。
2.4 Synchronization Process (PA) 3
每当有新交换机加入,就会发起 Synchronization ,新加入者会假设自己是根桥并 通过 P2P Port 向相邻的交换机发出 Proposal 消息,希望对方 同意 自己成为根桥。
收到 Proposal 的交换机根据实际情况(新成员是否比当前根桥更理想)回复对方:
不接收新成员成为根桥
Figure 4: 新成员无法成为根桥的流程
同意新成员成为根桥
3 MSTP (802.1s)
使用 Instance 的概念来划分 VLAN 组。
3.1 配置
需指定:
- Domain Name
- Revision Number
- VLAN Association Table
spanning-tree mode mst spanning-tree mst configuration name cisco.com revision 1 instance 1 vlan 10, 30, 50 instance 2 vlan 20, 40, 60 spanning-tree mst 1 priority 24576 # 这条配置是由该命令生成:spanning-tree mst 1 root primary spanning-tree mst 2 priority 28672 # 这条配置是由该命令生成:spanning-tree mst 2 root secondary
4 用于加快收敛的特性
4.1 portfast 4
该特性使得接口可以绕过 listening
和 learning
状态直接进入 forwarding
状态。
与该特性接口相连的通常是 路由器或 PC ,如果连的是交换机,这个接口仍然要接受 STP 的计算,如果计算结果是 blocking ,那么这个接口仍然会被阻塞。 这就是为什么执行该条命令,交换机会提示可能会造成短暂的环路:
%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 will be configured in 2 interfaces due to the range command but will only have effect when the interfaces are in a non-trunking mode.
Figure 7: 实验环境
初始配置
---------- SW --------------- en debug spanning-tree events conf t hostname SW no ip do lo line con 0 exec-timeout 0 0 logging synchronous exit int range e0/0-1 sh ! shutdown at first exit
不启用时接口状态变化
SW(config)#int e0/0 SW(config-if)#no sh SW(config-if)# *Jul 6 12:54:45.464: set portid: VLAN0001 Et0/0: new port id 8001 *Jul 6 12:54:45.464: STP: VLAN0001 Et0/0 -> listening SW(config-if)# *Jul 6 12:54:47.464: %LINK-3-UPDOWN: Interface Ethernet0/0, changed state to up *Jul 6 12:54:48.464: %LINEPROTO-5-UPDOWN: Line protocol on Interface Ethernet0/0, changed state to up SW(config-if)# *Jul 6 12:55:00.468: STP: VLAN0001 Et0/0 -> learning SW(config-if)# *Jul 6 12:55:15.469: STP[1]: Generating TC trap for port Ethernet0/0 *Jul 6 12:55:15.469: STP: VLAN0001 Et0/0 -> forwarding
启用 portfast
int range e0/0-1 switchport mode access spanning-tree portfast
启用 portfast 后接口状态变化
SW(config)#int e0/0
SW(config-if)#no sh
SW(config-if)#
*Jul 6 13:00:27.708: set portid: VLAN0001 Et0/0: new port id 8001
*Jul 6 13:00:27.709: STP: VLAN0001 Et0/0 ->jump to forwarding from blocking
SW(config-if)#
4.2 uplinkfast 5
Figure 8: 实验环境
本质上是为了实现 RP 的快速切换。
当关闭 SW3 的 e0/2 端口(模拟 SW1 与 SW3 之间的 uplink 发生故障),由于 SW3 知道 uplink 已经 down 了, 因此 e0/1 直接进入 forwarding 状态。6
初始配置
----------------- SW1 ---------------------- en debug spanning-tree events conf t hostname SW1 no ip do lo line con 0 exec-timeout 0 0 logging synchronous exit spanning-tree vlan 1 root primary ----------------- SW2 ---------------------- en debug spanning-tree events conf t hostname SW2 no ip do lo line con 0 exec-timeout 0 0 logging synchronous exit spanning-tree vlan 1 root secondary ----------------- SW3 ---------------------- en debug spanning-tree events conf t hostname SW3 no ip do lo line con 0 exec-timeout 0 0 logging synchronous exit
关闭 SW3 e0/2 口后,e0/1 的状态变化
SW3(config)#int e0/2 SW3(config-if)#sh SW3(config-if)# *Jul 6 14:27:00.201: STP: VLAN0001 new root port Et0/1, cost 200 *Jul 6 14:27:00.201: STP: VLAN0001 Et0/1 -> listening *Jul 6 14:27:00.201: STP[1]: Generating TC trap for port Ethernet0/2 SW3(config-if)# *Jul 6 14:27:02.204: %LINK-5-CHANGED: Interface Ethernet0/2, changed state to administratively down SW3(config-if)# *Jul 6 14:27:02.204: STP: VLAN0001 sent Topology Change Notice on Et0/1 *Jul 6 14:27:03.208: %LINEPROTO-5-UPDOWN: Line protocol on Interface Ethernet0/2, changed state to down SW3(config-if)# *Jul 6 14:27:15.208: STP: VLAN0001 Et0/1 -> learning SW3(config-if)# *Jul 6 14:27:30.208: STP[1]: Generating TC trap for port Ethernet0/1 *Jul 6 14:27:30.208: STP: VLAN0001 sent Topology Change Notice on Et0/1 *Jul 6 14:27:30.209: STP: VLAN0001 Et0/1 -> forwarding SW3(config-if)#
配置 uplinkfast
SW3(config)#spanning-tree uplinkfast SW3(config)# *Jul 6 14:41:39.392: setting bridge id (which=1) prio 49153 prio cfg 49152 sysid 1 (on) id C001.aabb.cc00.3000 *Jul 6 14:41:39.392: STP: VLAN0001 Et0/1 -> blocking (uplinkfast) *Jul 6 14:41:39.392: %SPANTREE_FAST-7-PORT_FWD_UPLINK: VLAN0001 Ethernet0/2 moved to Forwarding (UplinkFast). SW3(config)# *Jul 6 14:41:39.392: STP[1]: Generating TC trap for port Ethernet0/2 *Jul 6 14:41:39.392: STP: VLAN0001 sent Topology Change Notice on Et0/2
查看 SW3 状态
SW3(config)#do sh spanning-tree ! 降低优先级和增加 cost 的目的在于不让 SW3 变为新的根桥 VLAN0001 Spanning tree enabled protocol ieee Root ID Priority 24577 Address aabb.cc00.1000 Cost 3100 ! cost 增加 Port 3 (Ethernet0/2) Hello Time 2 sec Max Age 20 sec Forward Delay 15 sec Bridge ID Priority 49153 (priority 49152 sys-id-ext 1) ! 优先级降低 Address aabb.cc00.3000 Hello Time 2 sec Max Age 20 sec Forward Delay 15 sec Aging Time 300 sec Uplinkfast enabled Interface Role Sts Cost Prio.Nbr Type ------------------- ---- --- --------- -------- -------------------------------- Et0/0 Desg FWD 3100 128.1 P2p Et0/1 Altn BLK 3100 128.2 P2p Et0/2 Root FWD 3100 128.3 P2p Et0/3 Desg FWD 3100 128.4 P2p SW3#sh spanning-tree uplinkfast UplinkFast is enabled Station update rate set to 150 packets/sec. UplinkFast statistics ----------------------- Number of transitions via uplinkFast (all VLANs) : 0 Number of proxy multicast addresses transmitted (all VLANs) : 0 Name Interface List -------------------- ------------------------------------ VLAN0001 Et0/2(fwd), Et0/1 ! 表明如果 e0/2 down 了,e0/1 立即转为 fwd
再次关闭 e0/2 口,并观察现象
SW3(config)#int e0/2
SW3(config-if)#
SW3(config-if)#sh
SW3(config-if)#
*Jul 6 14:51:08.996: STP: VLAN0001 new root port Et0/1, cost 3200
*Jul 6 14:51:08.996: %SPANTREE_FAST-7-PORT_FWD_UPLINK: VLAN0001 Ethernet0/1 moved to Forwarding (UplinkFast).
SW3(config-if)#
*Jul 6 14:51:08.996: STP[1]: Generating TC trap for port Ethernet0/1
*Jul 6 14:51:08.996: STP[1]: Generating TC trap for port Ethernet0/2
SW3(config-if)#
*Jul 6 14:51:10.995: %LINK-5-CHANGED: Interface Ethernet0/2, changed state to administratively down
SW3(config-if)#
*Jul 6 14:51:10.999: STP: VLAN0001 sent Topology Change Notice on Et0/1
SW3(config-if)#
*Jul 6 14:51:11.995: %LINEPROTO-5-UPDOWN: Line protocol on Interface Ethernet0/2, changed state to down
4.3 backbonefast 7
不启用特性时的逻辑:
- 当 SW2 发现链路断开,会向 SW3 发送 BPDU (声明自己为 Root)
- SW3 e0/1 接口收到 次优 BPDU (因为之前收到的 BPDU 声明的 Root 是 SW1)
- SW3 e0/1 接口会忽略次优 BPDU 并持续等待原先较优的 BPDU ,最终会在 20s 后超时,然后历经 Listen 和 Learn 最后进入 Forward 状态 (耗时 50s)
启用特性后的逻辑:
- SW3 e0/1 接口收到 次优 BPDU
- SW3 通过 RP 接口发出 RLQ (Root Link Query) 消息用于检测原根桥是否仍然存在
- SW1 收到 RLQ 后回复 RLQ Reply
- SW3 收到 RLQ Reply 后,将 e0/1 接口直接从 BLK 状态转为 LISTEN 状态
Figure 9: 实验环境
初始配置
----------------- SW1 ---------------------- en debug spanning-tree events conf t hostname SW1 no ip do lo line con 0 exec-timeout 0 0 logging synchronous exit spanning-tree vlan 1 root primary ----------------- SW2 ---------------------- en debug spanning-tree events conf t hostname SW2 no ip do lo line con 0 exec-timeout 0 0 logging synchronous exit spanning-tree vlan 1 root secondary ----------------- SW3 ---------------------- en debug spanning-tree events conf t hostname SW3 no ip do lo line con 0 exec-timeout 0 0 logging synchronous exit
shutdown SW2/e0/0 观察 SW3
SW3# *Jul 9 14:22:57.241: STP: VLAN0001 heard root 28673-aabb.cc00.2000 on Et0/1 ! SW2/e0/0 一下电,SW3 就开始收到次优 BPDU SW3# *Jul 9 14:22:58.424: STP: VLAN0001 heard root 28673-aabb.cc00.2000 on Et0/1 SW3# *Jul 9 14:23:00.429: STP: VLAN0001 heard root 28673-aabb.cc00.2000 on Et0/1 SW3# *Jul 9 14:23:02.432: STP: VLAN0001 heard root 28673-aabb.cc00.2000 on Et0/1 SW3# *Jul 9 14:23:04.437: STP: VLAN0001 heard root 28673-aabb.cc00.2000 on Et0/1 SW3# *Jul 9 14:23:06.445: STP: VLAN0001 heard root 28673-aabb.cc00.2000 on Et0/1 SW3# *Jul 9 14:23:08.450: STP: VLAN0001 heard root 28673-aabb.cc00.2000 on Et0/1 SW3# *Jul 9 14:23:10.454: STP: VLAN0001 heard root 28673-aabb.cc00.2000 on Et0/1 SW3# *Jul 9 14:23:12.462: STP: VLAN0001 heard root 28673-aabb.cc00.2000 on Et0/1 SW3# *Jul 9 14:23:14.466: STP: VLAN0001 heard root 28673-aabb.cc00.2000 on Et0/1 *Jul 9 14:23:15.238: STP: VLAN0001 Et0/1 -> listening ! 经历了 20s SW3# *Jul 9 14:23:16.275: STP: VLAN0001 Topology Change rcvd on Et0/1 *Jul 9 14:23:16.275: STP: VLAN0001 sent Topology Change Notice on Et0/2 SW3# *Jul 9 14:23:30.238: STP: VLAN0001 Et0/1 -> learning SW3# *Jul 9 14:23:45.238: STP[1]: Generating TC trap for port Ethernet0/1 *Jul 9 14:23:45.238: STP: VLAN0001 sent Topology Change Notice on Et0/2 *Jul 9 14:23:45.238: STP: VLAN0001 Et0/1 -> forwarding
为每个 SW 开启特性
----------------- SW1 ---------------------- en debug spanning-tree events conf t hostname SW1 no ip do lo line con 0 exec-timeout 0 0 logging synchronous exit spanning-tree backbonefast spanning-tree vlan 1 root primary ----------------- SW2 ---------------------- en debug spanning-tree events conf t hostname SW2 no ip do lo line con 0 exec-timeout 0 0 logging synchronous exit spanning-tree backbonefast spanning-tree vlan 1 root secondary ----------------- SW3 ---------------------- en debug spanning-tree events conf t hostname SW3 no ip do lo line con 0 exec-timeout 0 0 logging synchronous exit spanning-tree backbonefast
shutdown SW2/e0/0 再次观察 SW3
SW3(config)# *Jul 9 14:40:47.652: STP: VLAN0001 heard root 28673-aabb.cc00.2000 on Et0/1 *Jul 9 14:40:47.653: STP: VLAN0001 Et0/1 -> listening *Jul 9 14:40:48.653: STP: VLAN0001 Topology Change rcvd on Et0/1 *Jul 9 14:40:48.653: STP: VLAN0001 sent Topology Change Notice on Et0/2 SW3#sh spanning-tree backbonefast BackboneFast is enabled BackboneFast statistics ----------------------- Number of transition via backboneFast (all VLANs) : 1 Number of inferior BPDUs received (all VLANs) : 1 Number of RLQ request PDUs received (all VLANs) : 0 Number of RLQ response PDUs received (all VLANs) : 1 Number of RLQ request PDUs sent (all VLANs) : 1 Number of RLQ response PDUs sent (all VLANs) : 0
5 用于保护 Topology 的特性
5.1 BPDUGuard
- 该接口在收到 BPDU 报文后(即接口接到交换机上),会立即切换到
err-disable
状态 - 常搭配 portfast 特性在接口上一起使用,用于连接主机,并预防误接交换机
Figure 10: 实验环境
初始配置(先配置 SW2)
----------------- SW1 ----------------------
en
debug spanning-tree events
conf t
hostname SW1
no ip do lo
line con 0
exec-timeout 0 0
logging synchronous
exit
int e0/0
spanning-tree portfast
spanning-tree bpduguard enable
----------------- SW2 ----------------------
en
debug spanning-tree events
conf t
hostname SW2
no ip do lo
line con 0
exec-timeout 0 0
logging synchronous
exit
int e0/0
sh ! shutdown at first
开启 SW2 e0/0 端口并观察 SW1
SW1(config-if)# *Jul 10 15:49:17.752: %SPANTREE-2-BLOCK_BPDUGUARD: Received BPDU on port Et0/0 with BPDU Guard enabled. Disabling port. *Jul 10 15:49:17.753: %PM-4-ERR_DISABLE: bpduguard error detected on Et0/0, putting Et0/0 in err-disable state SW1(config-if)# *Jul 10 15:49:17.753: STP: VLAN0001 we are the spanning tree root *Jul 10 15:49:18.756: %LINEPROTO-5-UPDOWN: Line protocol on Interface Ethernet0/0, changed state to down SW1(config-if)# *Jul 10 15:49:19.756: %LINK-3-UPDOWN: Interface Ethernet0/0, changed state to down SW1#show interfaces status err-disabled Port Name Status Reason Err-disabled Vlans Et0/0 err-disabled bpduguard
5.2 BPDUFilter
5.2.1 全局配置
spanning-tree portfast edge bpdufilter default
- 接口在上电后会发送 a few BPDU (出于防环和收敛目的),此后不再发送 BPDU
- 接口在收到 BPDU 后立即丢失 portfast 及 bpdufilter 特性,成为一个普通的 spanning-tree 接口
5.2.2 接口配置
spanning-tree bpdufilter enable
- 和 BPDUGuard 作用类似 ,但是不会使接口进入 err-disable 状态,仅仅是 忽略 收到的 BPDU
- 接口也 不会发送 BPDU
- 等效于在接口上关闭 STP 功能,可能导致环路
- 接口上配置,不一定必须具备 portfast 特性,可独立设置
5.3 RootGuard
交换机会让使用该特性的端口强制成为 DP ,如该端口上收到了更优的 BPDU ,则会进入 root-inconsistent
状态,并标记为 broken ,也不会转发流量。
如果一段时间内没有再收到更优的 BPDU ,则会自动消除 inconsistent 状态。
该特性能有效巩固当前环境中根桥的地位。
Figure 11: 实验环境
初始配置(先配置 SW4)
----------------- SW1 ---------------------- en debug spanning-tree events conf t hostname SW1 no ip do lo line con 0 exec-timeout 0 0 logging synchronous exit spanning-tree vlan 1 root primary ----------------- SW2 ---------------------- en debug spanning-tree events conf t hostname SW2 no ip do lo line con 0 exec-timeout 0 0 logging synchronous exit spanning-tree vlan 1 root secondary ----------------- SW3 ---------------------- en debug spanning-tree events conf t hostname SW3 no ip do lo line con 0 exec-timeout 0 0 logging synchronous exit int e0/0 spanning-tree guard root ----------------- SW4 ---------------------- en debug spanning-tree events conf t hostname SW4 no ip do lo line con 0 exec-timeout 0 0 logging synchronous exit spanning-tree vlan 1 priority 4096 int e0/0 shutdown ! shutdown at first启用 SW4 e0/0 并观察SW3
SW3(config-if)# *Jul 11 01:58:36.046: %SPANTREE-2-ROOTGUARD_CONFIG_CHANGE: Root guard enabled on port Ethernet0/0. SW3(config-if)# *Jul 11 01:59:24.800: STP: VLAN0001 heard root 4097-aabb.cc00.4000 on Et0/0 *Jul 11 01:59:24.800: supersedes 24577-aabb.cc00.1000 *Jul 11 01:59:24.800: %SPANTREE-2-ROOTGUARD_BLOCK: Root guard blocking port Ethernet0/0 on VLAN0001. SW3(config-if)# *Jul 11 01:59:24.800: STP: VLAN0001 sent Topology Change Notice on Et0/1 *Jul 11 01:59:24.800: STP[1]: Generating TC trap for port Ethernet0/0 *Jul 11 01:59:24.800: STP: VLAN0001 Et0/0 -> blocking SW3(config-if)# *Jul 11 01:59:25.883: STP: VLAN0001 heard root 4097-aabb.cc00.4000 on Et0/0 *Jul 11 01:59:25.883: supersedes 24577-aabb.cc00.1000 SW3(config-if)# *Jul 11 01:59:27.891: STP: VLAN0001 heard root 4097-aabb.cc00.4000 on Et0/0 *Jul 11 01:59:27.891: supersedes 24577-aabb.cc00.1000 SW3(config-if)# *Jul 11 01:59:29.895: STP: VLAN0001 heard root 4097-aabb.cc00.4000 on Et0/0 *Jul 11 01:59:29.895: supersedes 24577-aabb.cc00.1000 SW3#sh spanning-tree interface e0/0 Vlan Role Sts Cost Prio.Nbr Type ------------------- ---- --- --------- -------- -------------------------------- VLAN0001 Desg BKN*100 128.1 P2p *ROOT_Inc SW3#sh spanning-tree inconsistentports Name Interface Inconsistency -------------------- ------------------------ ------------------ VLAN0001 Ethernet0/0 Root Inconsistent Number of inconsistent ports (segments) in the system : 1
再次下电 SW4 e0/0 并观察SW3
SW3(config-if)# *Jul 11 01:59:55.912: %SPANTREE-2-ROOTGUARD_UNBLOCK: Root guard unblocking port Ethernet0/0 on VLAN0001. SW3(config-if)# *Jul 11 01:59:55.913: STP: VLAN0001 Et0/0 -> listening SW3(config-if)# *Jul 11 02:00:10.913: STP: VLAN0001 Et0/0 -> learning SW3(config-if)# *Jul 11 02:00:25.920: STP[1]: Generating TC trap for port Ethernet0/0 *Jul 11 02:00:25.920: STP: VLAN0001 sent Topology Change Notice on Et0/1 *Jul 11 02:00:25.920: STP: VLAN0001 Et0/0 -> forwarding
6 用于防环的技术 8 , 9
Figure 12: 使用环路保护前
Figure 13: 使用环路保护后
6.1 LoopGuard
Figure 14: 配置 loop guard , 主要作用于 RP 和 AP
主要的思想在于,不会因为收不到 BPDU ,而将端口从 BLK 状态转到 FWD 状态。(如果贸贸然转为 FWD 状态,可能导致环路)
6.2 UDLD
主要用于 光纤口单向链路检测 。需要链路两端的设备都支持 UDLD 。
全局模式配置
SW3(config)#udld ? aggressive Enable UDLD protocol in aggressive mode on fiber ports except where locally configured ! 若检测出环路,直接 shutdown 接口 enable Enable UDLD protocol on fiber ports except where locally configured ! 若检测出环路,会通过 syslog 提示 message Set UDLD message parameters
接口模式配置
SW3(config-if)#udld port ? aggressive Enable UDLD protocol in aggressive mode on this interface
6.3 LoopGuard 与 UDLD 的区别
UDLD 主要针对硬件环境,LoopGuard 主要针对软件环境(如因为 CPU 负载过高导致收不到 BPDU)。
Figure 15: 两种防环技术对比