本文档说明了单向链路检测 (UDLD) 协议如何在交换网络中帮助避免形成转发环路和数据流黑洞。
本文档没有任何特定的要求。
本文档不限于特定的软件和硬件版本。
有关文档规则的详细信息,请参阅 Cisco 技术提示规则。
生成树协议 (STP) 将冗余物理拓扑解析为一个无环路的树形转发拓扑。
这是通过阻塞一个或多个端口完成的。通过阻塞一个或多个端口,使转发拓扑中没有环路。STP 在其运行过程中依赖于网桥协议数据单元 (BPDU) 的接收和传送。 如果带有阻塞端口的交换机上运行的 STP 进程停止在此端口上接收来自其上游(指定的)交换机的 BPDU,则 STP 最终将使该端口的 STP 信息老化,并将它转换到转发状态。这将生成一个转发环路或 STP 环路。
数据包开始沿环路无限地循环,并且占用越来越多的带宽。这可能导致网络中断。
当端口接通时,交换机怎么可能停止接收 BPDU 呢?原因在于单向链路。发生以下情况时,链路被视为单向链路:
在连接的两端,链路均已接通。当远程端接收本地端发送的数据包时,本地端不接收远程端发送的数据包。
请考虑这种情况。箭头指示 STP BPDU 的流向。
在正常操作期间,网桥B在链路B-C上指定。网桥B向下发送BPDU到C,这会阻塞端口。C 在该链路上发现了来自 B 的 BPDU 时,该端口会被阻塞。
现在,设想如果链路 B-C 沿 C 方向出现故障时会发生什么情况。C 将停止接收来自 B 的数据流,但是 B 仍然接收来自 C 的数据流。
C 将停止在链路 B-C 上接收 BPDU,并使上次使用 BPDU 接收的信息老化。这最多花费 20 秒,具体取决于 maxAge STP 定时器。一旦该端口上的 STP 信息老化,该端口就会从 blocking state 转换成侦听状态、识别状态,并最终转换为转发 STP 状态。这会造成转发环路,因为三角形A-B-C中没有阻塞端口。数据包沿路径循环(B仍然接收来自C的数据包),在链路完全填满之前,会占用额外的带宽。这使网络中断。
可由单向链路引起的另一个可能的问题是数据流黑洞。
为了在生成转发环路之前检测到单向链路,Cisco 设计并实施了 UDLD 协议。
UDLD 是与第 1 层 (L1) 机制一起工作以确定链路物理状态的第 2 层 (L2) 协议。在第 1 层中,自动协商负责物理信令和故障检测。UDLD 执行自动协商不能执行的任务,例如,检测邻居身份和关闭错误连接的端口。当同时启用自动协商和 UDLD 时,第 1 层和第 2 层检测将一起工作,以防止出现物理和逻辑单向连接以及其他协议无法正常工作的情况。
UDLD 的工作方式为与相邻设备交换协议数据包。为了使 UDLD 发挥作用,链路上的两个设备必须支持 UDLD,并且已在各自的端口上启用了 UDLD。
为 UDLD 配置的每个交换机端口将发送 UDLD 协议数据包,这些数据包中包含该端口自己的设备/端口 ID,以及由该端口上的 UDLD 发现的邻接设备/端口 ID。邻接端口应在接收自另一端的数据包中查看它们自己的设备/端口 ID(回声)。
如果在特定的持续时间内,该端口在传入的 UDLD 数据包中未看到其自己的设备/端口 ID,则该链路会被视为单向链路。
此回声算法允许检测以下问题:
链路两端均已接通,但是,只有一端可以接收数据包。
当接收和传输光纤未连接到远程端上的同一端口时发生的配线错误。
一旦 UDLD 检测到单向链路,将禁用各自的端口,并将在控制台上输出以下信息:
UDLD-3-DISABLE:在端口1/2上检测到单向链路。端口已禁用
由 UDLD 关闭的端口将保持禁用状态,直到手动重新启用该端口,或直到 errdisable 超时到期(如果已配置)。
UDLD 能够以两种模式运行:正常和主动。
在正常模式下,如果确定端口的链路状态为双向,并且 UDLD 信息超时,UDLD 不会执行任何操作。UDLD 的端口状态标记为未确定。该端口根据其 STP 状态运行。
在主动模式下,如果确定端口的链路状态为双向,并且在该端口上的链路仍处于接通状态时,UDLD 信息超时,则 UDLD 将尝试重建端口状态。如果不成功,则该端口被置于 errdisable 状态。
当运行 UDLD 的端口在保留时间段内不接收来自邻接端口的 UDLD 数据包时,会发生 UDLD 信息老化的情况。端口的保留时间由远程端口决定,并且取决于远程端的消息间隔。消息间隔越短,保留时间就越短,检测速度也越快。UDLD 的最近实施允许配置消息间隔。
UDLD 信息可能会由于端口上的错误率较高(由某个物理问题或双工不匹配导致)而老化。这样的数据包丢弃并不意味着链路是单向的,以正常模式运行的 UDLD 不会禁用这样的链路。
为了保证适当的检测时间,能够选择正确的消息间隔非常重要。消息间隔应该足够短,以便可以在生成转发环路之前检测到单向链路,但是,它不应使交换机 CPU 过载。默认的消息间隔为 15 秒,完全能够在用默认 STP 定时器生成转发环路之前检测到单向链路。检测时间大约等于消息间隔的三倍。
例如:检测~ message_interval x3
对于默认的消息间隔 15 秒,检测时间为 45 秒。
STP需要Treconvergence =max_age + 2x forward_delay才能在单向链路发生故障时重新收敛。使用默认定时器,需要花费 20+2x15=50 秒。
建议通过选择适当的消息间隔来保持Tdetection < Treconvergence。
在主动模式下,一旦信息老化,UDLD 将尝试通过每秒发送一次数据包(共持续 8 秒)的方式来重建链路状态。如果仍然没有确定链路状态,将禁用该链路。
主动模式添加了对以下情况的附加检测:
端口停止响应(一端的端口既不传输也不接收,但是链路两端均处于接通状态)。
链路在一端处于接通状态,并在另一端处于断开状态。这是光纤端口可能出现的问题。从本地端口上拔下传输光纤后,链路仍然在本地端处于接通状态。但是,它在远程端已断开。
最近,为使链路两端在这些情况下都处于断开状态,光纤快速以太网硬件实施提供了远端故障指示 (FEFI) 功能。在千兆以太网上,链路协商提供了一个相似的功能。铜缆端口通常不会受这类问题的影响,因为它们使用以太网链路脉冲监控链路。必须指出的是,在这两种情况下,由于端口之间没有任何连接,所以不会存在任何转发环路。但是,如果链路的一端接通,而另一端断开,则可能发生数据流黑洞。主动 UDLD 设计为可防止出现此问题。
在正常模式下,UDLD 对以下软件版本可用:
用于 Catalyst 4500/4000、5500/5000 和 6500/6000 系列交换机的 Catalyst OS 版本 5.1.1 及更高版本
用于 Catalyst 2900XL 和 3500XL 交换机的 Cisco IOS® 软件版本 12.0(5)XU 及更高版本
用于 Catalyst 2940 交换机的 Cisco IOS 软件版本 12.1(13) AY 及更高版本
用于 Catalyst 2950 交换机的 Cisco IOS 软件版本 12.0(5)WC(1) 或更高版本
用于 Catalyst 2955 交换机的 Cisco IOS 软件版本 12.1(12c)EA1 或更高版本
用于 Catalyst 2970 交换机的 Cisco IOS 软件版本 12.1(11)AX 或更高版本
用于 Catalyst 3550 交换机的 Cisco IOS 软件版本 12.1(4)EA1 或更高版本
用于 Catalyst 3560 交换机的 Cisco IOS 软件版本 12.1(19)EA1 或更高版本
用于 Catalyst 3750 交换机的 Cisco IOS 软件版本 12.1(11)AX 或更高版本
用于运行 Cisco IOS 系统软件的 Catalyst 6500/6000 交换机的 Cisco IOS 软件版本 12.1(2)E 及更高版本
用于运行 Cisco IOS 系统软件的 Catalyst 4500/4000 交换机的 Cisco IOS 软件版本 12.1(8a)EW 及更高版本
从以下软件版本开始,实施了主动模式:
用于 Catalyst 4500/4000、5500/5000 和 6500/6000 系列交换机的 Catalyst OS 版本 5.4.3 及更高版本
用于运行 Cisco IOS 系统软件的 Catalyst 6500/6000 交换机的 Cisco IOS 软件版本 12.1(3a)E3 及更高版本
用于 Catalyst 2950 交换机的 Cisco IOS 软件版本 12.1(6)EA2 或更高版本
用于 Catalyst 2955 交换机的 Cisco IOS 软件版本 12.1(12c)EA1 或更高版本
用于 Catalyst 2970 交换机的 Cisco IOS 软件版本 12.1(11)AX 或更高版本
用于 Catalyst 3550 交换机的 Cisco IOS 软件版本 12.1(4)EA1 或更高版本
用于 Catalyst 3750 交换机的 Cisco IOS 软件版本 12.1(11)AX 或更高版本
通过使用以下命令详细说明了运行 CatOS 的 Catalyst 交换机上的 UDLD 配置。首先需要使用以下命令全局启用 UDLD(默认为禁用状态):
Vega> (enable) set udld enable UDLD enabled globally
发出以下命令:以验证是否已启用 UDLD
Vega> (enable) show udld UDLD: enabled Message Interval: 15 seconds
还需要对必要的端口使用以下命令启用 UDLD:
Vega> (enable) set udld enable 1/2 UDLD enabled on port 1/2
要验证是否已对端口启用 UDLD 以及链路状态是什么状态,请发出 show udld port 命令:
Vega> (enable) show udld port UDLD : enabled Message Interval : 15 seconds Port Admin Status Aggressive Mode Link State -------- ------------ --------------- ---------------- 1/1 enabled disabled undetermined 1/2 enabled disabled bidirectional
使用 set udld aggressive-mode enable <module/port> 命令,对每个端口启用主动 UDLD:
Vega> (enable) set udld aggressive-mode enable 1/2 Aggressive UDLD enabled on port 1/2. Vega> (enable) show udld port 1/2 UDLD : enabled Message Interval : 15 seconds Port Admin Status Aggressive Mode Link State -------- ------------ --------------- ---------------- 1/2 enabled enabled undetermined
发出以下命令以更改消息间隔:
Vega> (enable) set udld interval 10 UDLD message interval set to 10 seconds
间隔范围可为 7 秒到 90 秒,默认值是 15 秒。
有关 IOS UDLD 配置的详细信息,请参阅以下文档:
对于运行 Cisco IOS 系统软件的 Catalyst 6500/6000 交换机,请参阅配置 UDLD。
对于 Catalyst 2900xl/3500XL 交换机,请参阅配置交换机端口的“配置单向链路检测 (UDLD)”部分。
对于 Catalyst 2940 交换机,请参阅配置 UDLD。
对于 Catalyst 2950/2955 交换机,请参阅配置 UDLD。
对于 Catalyst 2970 交换机,请参阅配置 UDLD。
对于 Catalyst 3550 交换机,请参阅配置 UDLD。
对于 Catalyst 3560 交换机,请参阅配置 UDLD。
对于运行 Cisco IOS 的 Catalyst 4500/4000,请参阅配置 UDLD。
版本 | 发布日期 | 备注 |
---|---|---|
1.0 |
09-Jul-2007 |
初始版本 |