目录

简介

先决条件

要求

使用的组件

规则

问题定义

单向链路检测协议 (UDLD) 工作原理

UDLD 运行模式

可用性

配置和监控

相关信息

简介

本文档介绍单向链路检测(UDLD)协议如何帮助防止交换网络中的环路和流量异常。

先决条件

要求

本文档没有任何特定的要求。

使用的组件

本文档不限于特定的软件和硬件版本。

本文档中的信息都是基于特定实验室环境中的设备编写的。本文档中使用的所有设备最初均采用原始（默认）配置。如果您的网络处于活动状态，请确保您了解所有命令的潜在影响。

规则

有关文档规则的详细信息，请参阅 Cisco 技术提示规则。

问题定义

生成树协议(STP)将冗余物理拓扑解析为无环树状转发拓扑。

为此，它会阻塞一个或多个端口。由于一个或多个端口被阻塞，因此转发拓扑中没有环路。STP 在其运行过程中依赖于网桥协议数据单元 (BPDU) 的接收和传送。如果端口处于阻塞状态的交换机上运行的STP进程没有从上游(指定)交换机接收BPDU，则STP最终会使该端口的STP信息老化，并将其转换为转发状态。

这可以创建STP环路，数据包在此环路路径中开始无限循环，并消耗越来越多的带宽和资源。这可能导致网络中断。

当端口处于打开状态时，交换机怎么可能不接收BPDU?原因是单向链路。

发生以下情况时，链路被视为单向链路：

- 在连接的两端，链路均已接通。

- 本地端不接收远程端发送的数据包，而远程端接收本地端发送的数据包。

请考虑这种情况。箭头指示 STP BPDU 的流向。

在正常运行期间，网桥B是链路B-C上的指定端口。网桥B将BPDU向下发送至C，C是阻塞端口的接口。C 在该链路上发现了来自 B 的 BPDU 时，该端口会被阻塞。

现在，考虑一下如果链路B-C在C方向上发生故障会发生什么情况。C不再接收来自B的流量，但是B仍然接收来自C的流量。

up

C不会在链路B-C上接收BPDU，而且会延长使用最后一个BPDU接收的信息。这最多需要20秒，具体取决于maxAge STP计时器。一旦该端口上的 STP 信息老化，该端口就会从 blocking state 转换成侦听状态、识别状态，并最终转换为转发 STP 状态。这会造成环路，因为三角形A-B-C中没有阻塞端口。数据包沿该路径循环（B仍接收来自C的数据包），这会消耗额外的带宽，直到链路完全被填满。

此方案可能会使网络瘫痪。单向链路可能引起的另一个问题是流量黑洞。

单向链路检测协议 (UDLD) 工作原理

UDLD 是与第 1 层 (L1) 机制一起工作以确定链路物理状态的第 2 层 (L2) 协议。在第 1 层中，自动协商负责物理信令和故障检测。UDLD执行自动协商无法执行的任务，例如检测邻居身份和关闭错误连接的端口。当同时启用自动协商和 UDLD 时，第 1 层和第 2 层检测将一起工作，以防止出现物理和逻辑单向连接以及其他协议无法正常工作的情况。

UDLD的工作方式是在相邻设备之间交换协议数据包。为了使UDLD正常工作，链路上的两台设备都必须支持UDLD并在各自的端口上启用它。

为UDLD配置的每个交换机端口都会发送UDLD协议数据包，其中包含端口设备/端口ID以及UDLD在该端口上看到的邻居设备/端口ID。相邻端口在从另一端接收的数据包中看到自己的设备/端口ID（回声）。如果在特定的持续时间内，该端口在传入的 UDLD 数据包中未看到其自己的设备/端口 ID，则该链路会被视为单向链路。

此回声算法允许检测以下问题：

- 链路两端均已接通，但是，只有一端可以接收数据包。

- 当接收和传输光纤未连接到远程端的同一端口时，发生连接（电线）错误。

一旦 UDLD 检测到单向链路，将禁用各自的端口，并将在控制台上输出以下信息：

UDLD-3-DISABLE: Unidirectional link detected on port 1/2. Port disabled

由UDLD关闭的端口将保持禁用状态，直到手动启用该端口，或者untlerrdisabletimeout过期（如果已配置）。

UDLD 运行模式

UDLD可以在两种模式下运行：正常模式和主动模式。

- 在正常模式下，如果确定端口的链路状态为双向，并且 UDLD 信息超时，UDLD 不会执行任何操作。UDLD 的端口状态标记为未确定。端口的行为与其STP状态一致。

- 在主动模式下，如果确定端口的链路状态为双向，并且在该端口上的链路仍处于接通状态时，UDLD 信息超时，则 UDLD 将尝试重建端口状态。如果不成功，则该端口被置于 errdisable 状态。

当运行UDLD的端口在保持时间不接收来自邻居端口的UDLD数据包时，会发生UDLD信息过期。端口的保留时间由远程端口决定，并且取决于远程端的消息间隔。消息间隔越短，保持时间越短，检测速度越快。UDLD 的最近实施允许配置消息间隔。UDLD 信息可能会由于端口上的错误率较高（由某个物理问题或双工不匹配导致）而老化。这种丢包并不意味着链路是单向的，正常模式下的UDLD不会禁用此类链路。

为了保证适当的检测时间，能够选择正确的消息间隔非常重要。消息间隔必须足够快，以便在创建转发环路之前检测单向链路，但是它不能使交换机CPU过载。默认消息间隔为15秒，并且足够快，可以在使用默认STP计时器创建转发环路之前检测单向链路。检测时间大约等于消息间隔的三倍。

例如：Tdetection~ message_interval x3

对于默认的消息间隔 15 秒，检测时间为 45 秒。

在单向链路发生故障时，STP需要Treconvergence=max_age + 2x forward_delay才能重新收敛。使用默认定时器，需要花费 20+2x15=50 秒。

建议保留Tdetection< Treconvergence并选择适当的消息间隔。

在主动模式下，一旦信息老化，UDLD将尝试重新建立链路状态，并在八秒内每秒发送一次数据包。如果仍然没有确定链路状态，将禁用该链路。

主动模式添加了对以下情况的额外检测：

- 端口停止响应（一端的端口既不传输也不接收，但是链路两端均处于接通状态）。

- 链路在一端处于接通状态，并在另一端处于断开状态。当本地端口上拔下传输光纤时，本地端口上的链路保持up状态，则光纤端口上会出现此问题。但是，在远程端，它处于关闭状态</tt>。

最近，为使链路两端在这些情况下都处于断开状态，光纤快速以太网硬件实施提供了远端故障指示 (FEFI) 功能。在GigabitEthernet上，链路协商提供类似的功能。铜缆端口通常不会受这类问题的影响，因为它们使用以太网链路脉冲监控链路。必须指出的是，在这两种情况下，由于端口之间没有连接，因此不会发生转发环路。但是，如果链路一端为开启状态，而另一端为关闭状态，则可能会发生流量黑洞。主动 UDLD 设计为可防止出现此问题。

可用性

UDLD在Cisco IOS®软件版本12及更高版本的正常和主动模式下可用。

配置和监控

运行命令show udld以验证接口上是否启用了UDLD:

Switch#show udld

Interface Gi1/0/1

---

Port enable administrative configuration setting: Disabled

Port enable operational state: Disabled

Current bidirectional state: Unknown

Interface Gi1/0/2

---

Port enable administrative configuration setting: Disabled

Port enable operational state: Disabled

Current bidirectional state: Unknown

Interface Gi1/0/3

---

Port enable administrative configuration setting: Disabled

Port enable operational state: Disabled

Current bidirectional state: Unknown

可以在接口上配置主动UDLD，使用  udld port aggressive 指令：

Switch#configure terminal

Enter configuration commands, one per line. End with CNTL/Z.

Switch(config)#interface gigabitEthernet1/0/1

Switch(config-if)#udld port aggressive

Switch(config-if)#end

Switch#

发出 show udld

和 show udld neighbors 命令验证端口上是否启用了UDLD以及链路和邻居状态是什么：

Switch#show udld GigabitEthernet1/0/1

Interface Gi1/0/1

---

Port enable administrative configuration setting: Enabled / in aggressive mode

Port enable operational state: Enabled / in aggressive mode

Current bidirectional state: Bidirectional

Current operational state: Advertisement - Single neighbor detected

Message interval: 15000 ms

Time out interval: 5000 ms

Port fast-hello configuration setting: Disabled

Port fast-hello interval: 0 ms

Port fast-hello operational state: Disabled

Neighbor fast-hello configuration setting: Disabled

Neighbor fast-hello interval: Unknown

Entry 1

---

Expiration time: 31600 ms

Cache Device index: 1

Current neighbor state: Bidirectional

Device ID: 346288238580

Port ID: Gi4/0/1

Neighbor echo 1 device: 70B4F35F080

Neighbor echo 1 port: Gi1/0/1

TLV Message interval: 15 sec

No TLV fast-hello interval

TLV Time out interval: 5

TLV CDP Device name: MXC.TAC.M.02-3850-01

Switch#show udld neighbors

Port      Device Name    Device ID   Port ID     Neighbor State

----      -----------    ---------   -------     --------------

Gi1/0/1   346288238580   1           Gi4/0/1     Bidirectional

Total number of bidirectional entries displayed: 1

请使用  udld message time  命令更改消息间隔：

Switch(config)#udld message time 10

UDLD message interval set to 10 seconds

间隔范围为1至90秒，默认值为15秒。

相关信息

- 思科技术支持和下载

- 对于Catalyst 3560交换机，请参阅配置UDLD。

- 对于运行Cisco IOS的Catalyst 4500/4000，请参阅配置UDLD。

- 对于Catalyst 9300交换机，请参阅如何配置UDLD

- 对于Catalyst 9500交换机，请参阅如何配置UDLD