本文档介绍旨在提高第 2 层网络稳定性的生成树协议功能。
本文档假设读者熟悉生成树协议(STP)的基本操作。
有关详细信息,请参阅了解和配置Catalyst交换机上的生成树协议(STP)。
本文档基于运行Cisco IOS的Catalyst交换机,但所描述功能的可用性取决于所使用的软件版本。
本文档中的信息都是基于特定实验室环境中的设备编写的。本文档中使用的所有设备最初均采用原始(默认)配置。如果您的网络处于活动状态,请确保您了解所有命令的潜在影响。
有关文档规则的详细信息,请参阅思科技术提示规则。
生成树协议 (STP) 将物理上冗余的拓扑解析为无环路的树形拓扑。STP的一个问题是硬件故障可能导致故障,从而导致转发环路(STP环路)。 这些环路可能导致严重的网络故障。
本文档介绍旨在提高第2层网络稳定性的STP环路防护功能。还介绍了网桥协议数据单元(BPDU)迟滞检测。BPDU 迟滞检测是一种诊断功能,用于在未及时收到 BPDU 的情况下生成 syslog 消息。
STP环路防护功能在适用于Catalyst 4500交换机的Cisco IOS®软件版本12.1(12c)EW和适用于Catalyst 6500的Cisco IOS软件版本12.1(11b)EX中引入。
在内部,STP 分配给每个网桥(或交换机)端口一个角色,该角色基于拓扑中的该端口的配置、拓扑、相对位置以及其他考虑事项。
端口角色从 STP 的角度定义了端口的行为。根据端口角色,端口发送或接收 STP BPDU,然后转发或阻塞数据流。
此列表提供了每个 STP 端口角色的概要:
指定 - 为每个链路(网段)选择一个指定的端口。 指定的端口是最接近根网桥的端口。此端口将 BPDU 发送到链路(网段)上并向根网桥转发数据流。在 STP 收敛网络中,每个指定的端口都处于 STP 转发状态。
根 — 网桥只能有一个根端口。根端口是通向根网桥的端口。在 STP 收敛网络中,根端口处于 STP 转发状态。
备用 — 备用端口通向根网桥,但不是根端口。替代端口保持 STP 阻塞状态。
备份 — 当同一交换机之间的两个或多个端口直接或通过共享介质连接在一起时,这是一种特殊情况。在这种情况下,一个端口被指定,其余端口被阻塞。此端口的角色是备用端口。
STP 环路防护功能提供了额外保护,以防出现第 2 层转发环路(STP 环路)。 当冗余拓扑中的 STP 阻塞端口错误地转换到转发状态时,会生成 STP 环路。发生这种情况的原因通常是物理冗余拓扑中的某个端口(不一定是 STP 阻塞端口)不再接收 STP BPDU。STP 在其运行过程中依赖于基于端口角色的 BPDU 的连续接收或传送。指定的端口传输 BPDU,非指定的端口接收 BPDU。
当物理冗余拓扑中的某个端口不再接收 BPDU 时,STP 将认为该拓扑无环路。最终,来自备用或备用端口的阻塞端口变为指定状态并进入转发状态(这种情况会导致环路)。
环路防护功能可创建其他检查。如果未在非指定端口上收到BPDU,并且启用了环路防护,则该端口将进入STP环路不一致的阻塞状态,而不是侦听/学习/转发状态。如果不使用环路防护功能,端口将承担指定的端口角色。该端口将转换到 STP 转发状态,并且会生成环路。
当环路防护阻塞了一个不一致的端口时,会将以下消息记录到日志中:
%SPANTREE-2-LOOPGUARD_BLOCK: Loop guard blocking port FastEthernet0/24 on VLAN0050.
一旦处于环路不一致 STP 状态的端口收到 BPDU,该端口就会转换到其他 STP 状态。对于收到的BPDU,这意味着恢复是自动进行的,无需干预。在恢复之后,会将以下消息记录到日志中:
%SPANTREE-2-LOOPGUARD_UNBLOCK: Loop guard unblocking port FastEthernet0/24 on VLAN0050.
请考虑以下示例来说明此行为:
交换机 A 是根交换机。由于交换机 B 和交换机 C 之间的链路发生单向链路故障,交换机 C 没有接收到来自交换机 B 的 BPDU。
单向链路故障
如果没有环路防护,交换机C上的STP阻塞端口将在max_age计时器到期时转换为STP侦听状态,然后转换为forward_delay时间的两倍的转发状态。这种情况将导致生成环路。
创建环路
启用环路防护后,当max_age计时器到期时,交换机C上的阻塞端口会转换为STP环路不一致状态。处于STP环路不一致状态的端口不会传递用户流量,因此不会创建环路。环路不一致状态实际上等于阻塞状态。
启用环路防护可防止环路
环路防护功能是基于每个端口启用的。但是,只要它在 STP 级别阻塞端口,环路防护就会基于每个 VLAN 阻塞不一致的端口(因为是每 VLAN STP)。
也就是说,如果只在一个特定VLAN的TRUNK端口上未收到BPDU,则只有该VLAN会被阻止(移至环路不一致STP状态)。 由于同样的原因,如果在 EtherChannel 接口上启用,则将阻塞特定 VLAN 的整个通道,而不只是阻塞一条链路(因为从 STP 角度看,EtherChannel 被视为一个逻辑端口)。
哪些端口启用了环路防护?最显而易见的答案是在阻塞端口上。但是,这并非100%正确。对于所有可能的活动拓扑组合,必须在非指定端口(更准确地说,在根端口和备用端口)上启用环路防护。只要环路防护不是每个VLAN的功能,就可以为一个VLAN指定同一(中继)端口,为另一个VLAN指定非指定端口。
还必须考虑可能的故障切换方案。
示例
启用环路防护的端口
默认情况下,环路防护处于禁用状态,此命令用于在指定接口上启用环路防护:
Router(config)#interface gigabitEthernet 1/1 Router(config-if)#spanning-tree guard loop
可以在所有点对点链路上启用环路防护。可以通过链路的双工状态检测到点对点链路。如果双工为全双工,则将该链路视为点对点链路。仍可以逐个端口配置或覆盖全局设置。
发出以下命令以全局启用环路防护:
Router(config)#spanning-tree loopguard default
发出以下命令以逐个接口禁用环路防护:
Router(config-if)#no spanning-tree guard loop
发出以下命令以全局禁用环路防护:
Router(config)#no spanning-tree loopguard default
发出以下命令以验证环路防护状态:
Router#show spanning-tree summary Switch is in pvst mode Root bridge for: none EtherChannel misconfig guard is enabled Extended system ID is disabled Portfast Default is disabled PortFast BPDU Guard Default is disabled Portfast BPDU Filter Default is disabled Loopguard Default is enabled UplinkFast is disabled BackboneFast is disabled Pathcost method used is short Name Blocking Listening Learning Forwarding STP Active ---------------------- -------- --------- -------- ---------- ---------- Total 0 0 0 0 0
就防止由单向链路引起的 STP 故障而言,环路防护和单向链路检测 (UDLD) 有一部分功能重叠。但是,这两种功能在功能上以及它们处理问题的方式上有所不同。
此表描述环路防护和 UDLD 功能:
| 功能 | 环路防护 | UDLD |
|---|---|---|
| 配置 | 每个端口 | 每个端口 |
| 操作粒度 | 每个 VLAN | 每个端口 |
| 自动恢复 | Yes | 是,具有 err-disable 超时功能 |
| 防止单向链路引起的 STP 故障 | 是,在冗余拓扑中的所有根端口和替代端口上启用时。 | 是,在冗余拓扑中的所有链路上启用时 |
| 防止软件中的问题导致的 STP 故障(指定的交换机不发送 BPDU) | Yes | 无 |
| 防止接线错误。 | 无 | Yes |
基于各种设计考虑,可以选择 UDLD 或环路防护功能。在STP方面,这两个功能之间最明显的区别是UDLD中缺少针对软件问题引起的STP故障的保护。
因此,指定的交换机不发送 BPDU。但是,这种类型的故障(数量级)比单向链路导致的故障更罕见。反过来,在EtherChannel上使用单向链路时,UDLD可以更加灵活。在这种情况下,UDLD仅禁用故障链路,并且信道可以保持正常运行和链路保留。在发生此类故障时,环路防护会将其置于环路不一致状态,以阻塞整个信道。
另外,在共用链路上,或者在链路自接通以来已是单向链路的情况下,环路防护不起作用。在最后一种情况下,端口从不接收 BPDU,并会成为指定端口。由于此行为可能是正常的,因此环路防护不涵盖此特定情况。UDLD 可以防止出现这样的情况。如上所述,当同时启用了 UDLD 和环路防护时,将提供最高级别的保护。
根保护
根防护与环路防护是互相排斥的。根防护用于指定的端口,并且它不允许端口变为非指定的端口。环路防护用于非指定的端口,并且不允许该端口通过 max_age 的到期变为指定的端口。不能对启用了环路防护的端口启用根防护。如果在端口上配置了环路防护,它会禁用在同一端口上配置的根防护。
Uplink Fast和Backbone Fast
Uplink Fast 和 Backbone Fast 对环路防护都是透明的。当快速骨干网在重新收敛时跳过max_age时,它不会触发环路防护。有关uplink fast和backbone fast的详细信息,请参阅:
PortFast 和 BPDU 防护以及动态 VLAN
在启用portfast的端口上无法启用环路防护。因为 BPDU 防护用于启用了 PortFast 的端口,所以一些限制条件适用于 BPDU 防护。因为在动态 VLAN 端口上已启用 PortFast,所以在这些端口上无法启用环路防护。
共用链路
不得在共享链路上启用环路防护。如果在共享链路上启用环路防护,则来自连接到共享网段的主机的流量可能会被阻止。
多生成树 (MST)
环路防护在 MST 环境中可以正常工作。
| 版本 | 发布日期 | 备注 |
|---|---|---|
3.0 |
01-Jun-2026
|
更新的拼写、语法、句子结构、间距等 |
2.0 |
18-Dec-2023
|
重新认证 |
1.0 |
14-Oct-2022
|
初始版本 |