本文档介绍单向链路检测 (UDLD) 协议如何帮助防止交换网络中出现环路和流量异常。
本文档没有任何特定的要求。
本文档介绍一般的UDLD操作。本文档中的配置和验证示例已在运行Cisco IOS XE 17.X版本的Cisco Catalyst 9300系列交换机上验证。
注意:命令语法、默认值、计时器范围和输出可能因平台和软件版本而异。
本文档中的信息都是基于特定实验室环境中的设备编写的。本文档中使用的所有设备最初均采用原始(默认)配置。如果您的网络处于活动状态,请确保您了解所有命令的潜在影响。
有关文档规则的详细信息,请参阅 Cisco 技术提示规则。
生成树协议 (STP) 将冗余物理拓扑解析为无环路的树状转发拓扑。为此,它会阻止一个或多个端口。在一个或多个端口被阻止的情况下,转发拓扑中没有环路。STP 在其运行过程中依赖于网桥协议数据单元 (BPDU) 的接收和传送。 如果处于STP阻塞或丢弃状态的端口停止从指定网桥接收BPDU,STP最终会陈旧与该端口相关的信息,并将其转换为转发状态。
这会导致STP环路,数据包会沿环路路径无限循环,并消耗更多带宽和资源。这可能导致网络中断。
当端口处于正常运行状态时,交换机为何无法接收 BPDU?这是单向链路导致的。
在以下情况下,链路被视为单向链路:
在连接的两端,链路均已接通。
本地端不接收远程端发送的数据包,而远程端接收本地端发送的数据包。
考虑下一个场景,箭头指示STP BPDU的流动:
STP端口状态拓扑
在此拓扑图中所示的条件下,交换机B上面向交换机C的接口是B-C网段的指定端口,并向交换机C传输BPDU。交换机C上面向交换机B的接口是传统IEEE 802.1D STP中的非指定端口。或者是RSTP中的备用端口,在接收和处理来自交换机B的BPDU时,该端口保持阻塞/丢弃状态。虽然交换机C上的接口处于阻塞或丢弃状态,但该端口继续接收和处理BPDU;这些状态会阻止端口转发数据帧,但不会阻止其接收BPDU。
设想一下,如果B-C链路变为单向且B-C方向发生故障,→会发生什么情况。交换机C不再能接收来自交换机B的BPDU,而交换机B能接收交换机C发送的BPDU。交换机C会保留从最后一个BPDU获取的信息,直到该信息过期。使用传统IEEE 802.1D STP和默认的最大老化时间20秒,这可能需要最多20秒。一旦STP信息老化,交换机C便不再认为交换机B在该网段上优于交换机B,并且端口可以从阻塞转换到侦听,然后转换到学习,最后转换到转发。
这会形成第2层转发环路,因为A-B-C三角形中不再有阻塞端口。广播、未知单播和组播帧可能会在环路中重复循环,消耗带宽和CPU,并可能导致广播风暴。
此场景可能导致网络瘫痪,这是单向链路(如流量黑洞)导致的另一个可能问题。
STP BPDU 流
UDLD是第2层协议,通过识别直连设备之间的单向通信和特定布线不一致来补充第1层链路检测机制。
在第1层,自动协商可解决物理信令和故障检测。UDLD执行自动协商无法执行的任务,例如检测邻居身份和关闭错误连接的端口。当同时启用自动协商和UDLD时;第1层和第2层检测协同工作,防止物理和逻辑单向连接以及其他协议的故障。
UDLD 通过在相邻设备之间交换协议数据包来工作。要建立双向UDLD邻居关系,两个直接连接的设备必须支持UDLD并在连接的接口上启用它。检验两台设备上的双向状态。
为 UDLD 配置的每个交换机端口都会发送 UDLD 协议数据包,其中包含端口设备/端口 ID 以及 UDLD 在该端口上发现的邻居设备/端口 ID。
相邻端口在从另一端接收的数据包中发现自己的设备/端口 ID(回应)。如果在特定的持续时间内,该端口在传入的 UDLD 数据包中未看到其自己的设备/端口 ID,则该链路会被视为单向链路。
此回声算法允许检测以下问题:
链路两端均已接通,但是,只有一端可以接收数据包。
接收和传输光纤未连接到远程端的同一端口时会出现连接(线路)错误。
UDLD检测到单向条件后,会将检测本地接口置于err-disable状态。远程接口状态取决于远程UDLD检测和物理链路行为。控制台上会显示类似消息:
UDLD-3-DISABLE: Unidirectional link detected on port 1/2. Port disabled
被UDLD禁用的接口将保持为err-disable状态,直到手动恢复或启用的errdisable恢复计时器过期。在恢复之前更正光纤、收发器、布线或远程接口故障。使用shutdown和no shutdown进行手动恢复。在支持它的平台上,udld reset会重置UDLD禁用/关闭的接口。恢复后,运行show interfaces status err-disabled、show udld <interface-id>和show udld neighbors命令,以确认接口运行正常且UDLD关系是双向的。查看系统日志,确认故障不再发生。
UDLD 能够以两种模式运行:正常和主动:
在支持的接口上启用UDLD时,除非明确配置主动模式,否则正常模式是默认操作模式。UDLD与第1层机制(如自动协商)配合使用来验证链路。第1层机制检测物理信令和链路故障,而UDLD识别相邻设备并检验连接到正确端口的光纤束。
在正常模式下,当光纤束在端口之间连接不当,并且第1层机制未检测到布线错误时,UDLD会检测单向情况。如果光纤束连接到正确的端口,但流量仅沿一个方向流动,则UDLD正常模式会将逻辑链路标记为undetermined,并且不会禁用该端口。此行为依赖于第1层机制来检测物理故障。如果一条光纤链断开连接且自动协商检测到物理故障,链路不会保持运行。UDLD不执行关闭操作,因为第1层已检测到该问题,并且UDLD逻辑链路状态未确定。
主动模式包括正常模式的检测功能,并为点对点光纤和双绞线链路提供额外的保护。它检测光纤束连接错误,以及终端无法发送或接收流量、一个端口保持打开而另一个端口关闭或一个光纤束断开的情况。
UDLD hello数据包充当点对点链路的心跳。如果在链路建立为双向后,UDLD停止接收这些数据包,则主动模式会尝试重新建立双向关系。如果UDLD无法恢复关系,它会禁用受影响的本地端口,以防止继续使用双向操作无法验证的链路。
当两个光纤束看起来都可用于第1层时,主动UDLD会验证它们是否连接到正确的相邻端口,以及流量在预期邻居之间双向流动。自动协商无法执行此邻居和端口身份验证,因为它在第1层运行。
当运行UDLD的端口在保持时间期间未收到来自相邻端口的UDLD数据包时,UDLD信息将过期。这些计时器适用于正常模式和主动模式下的UDLD邻居信息维护;到期后的操作取决于配置的模式和检测到的条件。端口的保留时间由远程端口决定,并且取决于远程端的消息间隔。消息间隔越短,保持时间越短,检测速度越快。最近实施的UDLD允许配置消息间隔。UDLD 信息可能会由于端口上的错误率较高(由某个物理问题或双工不匹配导致)而老化。此类数据包丢弃并不意味着链路是单向的,正常模式下的UDLD不会禁用链路。
选择正确的消息间隔以确保适当的检测时间非常重要。消息间隔必须足够快,以便在形成转发环路之前检测到单向链路,但是,它不能使交换机CPU过载。本示例中的默认消息间隔为15秒。对于所描述的典型IEEE 802.1D STP计时器场景,估计的UDLD信息过期时间小于阻塞端口达到转发状态的估计时间。
这种比较不能保证主动UDLD在STP更改转发拓扑之前将接口置于err-disable状态。UDLD邻居信息的到期时间大约是消息间隔的三倍。例如:
Texpiration ≈ message_interval × 3
使用默认消息间隔Texpiration ≈ 15 × 3 = 45秒。对于传统IEEE 802.1D STP操作,阻塞端口使其存储的STP信息老化,并通过侦听和学习状态转换到转发状态的大概时间为:
Tforward = max_age + (2 × forward_delay)
使用默认STP计时器时:Tforward = 20 +(2 × 15)= 50秒 — 将UDLD邻居信息到期与STP端口转换进行比较时,选择消息间隔,该间隔将保持:Texpiration < Tforward
在主动模式下,UDLD邻居信息过期后,UDLD会尝试通过每秒发送一条消息来重新建立双向关系,持续八秒。如果无法重新建立双向状态,UDLD会禁用本地端口。
注意:这些计算是近似的,适用于本文档中介绍的UDLD行为和传统IEEE 802.1D STP计时器场景。部署的平台、软件版本、STP模式、配置的计时器以及发生故障的时间会影响实际计时。
注意:传统STP计算Treconvergence = max_age +(2 × forward_delay)不适用于普通RSTP快速收敛。如果连续三个Hello间隔内未收到BPDU,或者达到适用的最长老化时间条件,则RSTP协议信息可能会过期。然后,符合条件的备用端口可以快速转换到转发状态。总转换时间取决于拓扑、端口角色、链路类型、同步过程和故障条件。因此,固定计时器计算不能保证UDLD在RSTP更改转发拓扑之前检测或禁用单向链路。验证已部署平台、软件版本、拓扑和计时器配置上UDLD和RSTP之间的交互。
主动模式检测到的其他条件示例包括:
某些以太网PHY实施提供远程故障信令或链路协商机制,可导致一个或两个链路终端在特定物理故障后发生故障。行为因平台、接口类型、收发器、介质和协商模式而异。UDLD为物理层信令无法检测的单向条件提供第2层验证。当一个终端无法传输/接收时,或者当一个终端启动而另一个终端关闭时,发生故障的链路本身不提供完整的转发路径,也不形成转发环路。但是,保持正常运行的接口可以继续将流量转发到不起作用的路径,从而导致流量黑洞。主动UDLD检测双向通信丢失,如果受影响的本地端口无法重新建立UDLD关系,则禁用该端口。
在连接的两个接口上启用UDLD。在两个终端上配置相同的UDLD模式,以提供一致的本地故障检测和错误禁用行为:
9300-1#configure terminal
Enter configuration commands, one per line. End with CNTL/Z.
9300-1(config)#interface TenGigabitEthernet1/1/6
9300-1(config-if)#udld port
9300-1(config-if)#end
9300-2#configure terminal
Enter configuration commands, one per line. End with CNTL/Z.
9300-2(config)#interface TenGigabitEthernet1/1/6
9300-2(config-if)#udld port
9300-2(config-if)#end
注意:全局UDLD命令及其接口范围因平台而异;在使用全局命令之前,请验证target platform命令参考。
在两个链路终端上运行show udld <interface-id>和show udld neighbors命令。确认每个接口都处于操作启用状态,当前状态为双向,并显示预期的邻居设备和端口标识符:
9300-1#show udld TenGigabitEthernet1/1/6
Interface Te1/1/6
---
Port enable administrative configuration setting: Enabled
Port enable operational state: Enabled
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: 37500 ms
Cache Device index: 1
Current neighbor state: Bidirectional
Device ID: F87A41A8CA00
Port ID: Te1/1/6
Neighbor echo 1 device: F87A41A8C180
Neighbor echo 1 port: Te1/1/6
TLV Message interval: 15 sec
No TLV fast-hello interval
TLV Time out interval: 5
TLV CDP Device name: 9300-2
9300-1#show udld neighbors
Port Device Name Device ID Port ID Neighbor State
---- ----------- --------- ------- --------------
Te1/1/6 F87A41A8CA00 1 Te1/1/6 Bidirectional
Total number of bidirectional entries displayed: 1
9300-2#show udld TenGigabitEthernet1/1/6
Interface Te1/1/6
---
Port enable administrative configuration setting: Enabled
Port enable operational state: Enabled
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: 32500 ms
Cache Device index: 1
Current neighbor state: Bidirectional
Device ID: F87A41A8C180
Port ID: Te1/1/6
Neighbor echo 1 device: F87A41A8CA00
Neighbor echo 1 port: Te1/1/6
TLV Message interval: 15 sec
No TLV fast-hello interval
TLV Time out interval: 5
TLV CDP Device name: 9300-1
9300-2#show udld neighbors
Port Device Name Device ID Port ID Neighbor State
---- ----------- --------- ------- --------------
Te1/1/6 F87A41A8C180 1 Te1/1/6 Bidirectional
Total number of bidirectional entries displayed: 1
可以使用udld port aggressive命令在接口上配置主动UDLD:
9300-1#configure terminal
Enter configuration commands, one per line. End with CNTL/Z.
9300-1(config)#interface TenGigabitEthernet1/1/6
9300-1(config-if)#udld port aggressive
9300-1(config-if)#end
9300-2#configure terminal
Enter configuration commands, one per line. End with CNTL/Z.
9300-2(config)#interface TenGigabitEthernet1/1/6
9300-2(config-if)#udld port aggressive
9300-2(config-if)#end
在两台终端上运行show udld <interface-id>命令以验证主动模式是否处于操作启用状态:
9300-1#show udld TenGigabitEthernet1/1/6
Interface Te1/1/6
---
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: 31200 ms
Cache Device index: 1
Current neighbor state: Bidirectional
Device ID: F87A41A8CA00
Port ID: Te1/1/6
Neighbor echo 1 device: F87A41A8C180
Neighbor echo 1 port: Te1/1/6
TLV Message interval: 15 sec
No TLV fast-hello interval
TLV Time out interval: 5
TLV CDP Device name: 9300-2
9300-2#show udld TenGigabitEthernet1/1/6
Interface Te1/1/6
---
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: 38600 ms
Cache Device index: 1
Current neighbor state: Bidirectional
Device ID: F87A41A8C180
Port ID: Te1/1/6
Neighbor echo 1 device: F87A41A8CA00
Neighbor echo 1 port: Te1/1/6
TLV Message interval: 15 sec
No TLV fast-hello interval
TLV Time out interval: 5
TLV CDP Device name: 9300-1
运行udld message time命令以更改消息间隔:
9300-1#configure terminal
Enter configuration commands, one per line. End with CNTL/Z.
9300-1(config)#udld message time ?
<1-90> Time in seconds between sending of messages in steady state
在Cisco Catalyst 3000和9000系列交换机上,udld message time值范围为1到90秒,默认值为15秒。请参阅命令参考指南,验证其他系统上接受的范围和默认值。
对于Catalyst 3560交换机,请参阅配置UDLD
| 版本 | 发布日期 | 备注 |
|---|---|---|
2.0 |
18-Aug-2026
|
更新了拼写、语法,插入了水平线以分隔各个部分,便于阅读。 |
1.0 |
09-Jul-2007
|
初始版本 |