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