简介
本文档介绍单向链路检测(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将尝试重新建立链路状态,并在八秒内每秒发送一次数据包。如果仍然没有确定链路状态,将禁用该链路。
主动模式添加了对以下情况的额外检测:
最近,为使链路两端在这些情况下都处于断开状态,光纤快速以太网硬件实施提供了远端故障指示 (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秒。
相关信息