UDLD (UniDirectional Link Detection 单向链路检测):是一个Cisco私有的二层协议,用于监听利用光纤或双绞线连接的以太链路的物理配置,当出现单向链路(只能向一个方向传输,比如我能把数据发给你,你也能收到,但是你发给我的数据我收不到)时,UDLD可以检测出这一状况,关闭相应接口并发送警告信息。单向链路可能引起很多问题,尤其是生成树,可能会造成回环。注意:UDLD需要链路两端设备都支持才能正常运行。

 
 

编辑本段工作模式

UDLD支持两种工作模式;普通(normal)模式(默认)和激进(aggressive)模式。
udld

  udld

普通(normal)模式:这个模式下,UDLD可以检测单向链路,并标记端口为undetermined状态产生系统日志,In other words, normal
mode will shut down a port only if it can explicitly determine that
the associated link is faulty for an extended period of time.
激进(aggressive)模式:这个模式下,UDLD可以检测到由单向链路。并且会尝试重建链路,连续发送8秒的UDLD message,如果此间没有任何的UDLD echo应答,此端口会被放置于errdisable状态

编辑本段工作原理

维护邻居数据库

UDLD 周期性的在每个活动接口上发送hello包(也叫通告advertisement或探针probe)。
交换机收到hello包后,存储这一信息直到老化时间到期,当老化时间到期前再次收到hello时,则刷新老化时间。

检测和回报

交换机会向其邻居发送回复(echo),当邻居在一定时间内没有收到回复,则认为与邻居间的链路出现问题。如果是普通模式,链路有可能会被认为是不确定的状态而不会被关闭(强调一下,普通模式只能检测光纤误解,比如Tx、Rx插反了)。如果是激进模式,则链路会被认为是单向的而被关闭(接口置于err-disable状态)。
以上我只是大概的说了一下,Cisco官方文档中内容很多的,想详细了解的话可以查一下。

编辑本段配置

注意:
UDLD默认不在全局或任何接口下启用。
UDLD不支持ATM接口。
确保链路两端接口设备都支持UDLD,并且需要工作在相同的UDLD模式下。
conf t
udld {aggressive | enable | message time 间隔时间} '全局启用UDLD,aggressive设置为激进模式,enable设置为普通模式,message time设置hello间隔,范围是1-90,默认15。
int fa0/10
udld port [aggressive] '接口下启用UDLD,不加aggressive为普通模式。
show udld [接口名] '查看UDLD信息。
udld reset '特权模式下重启所有被UDLD关闭的接口。
有的IOS配置命令可能是下面的:
(config)# udld {enable | aggressive}
(config-if)# udld port [aggressive]
(config)# udld message time 间隔
还有,刚才提到过,UDLD检测到单向链路后会将接口置为err-disable状态,我们可以用以下命令恢复:
(config)# errdisable recovery cause udld
Shutdown、No Shutdown 被置为Err-disable的端口
errdisable recovery cause udld 可以将UDLD置为err-disable状态的接口恢复,不过前提条件是链路已经不再是单向的了,要不然会再次被UDLD关闭。回头再仔细说说关于errdisable recovery。
当链路保持“up”状态的时候,但接口却没有传递流量,udld协议能够监测到 交换机端口上的单向链路的情形。这种情形通常会出现在以下几种情况之中:gbic(吉比特 接口转换器)或接口出现 故障、软件故障、硬件失效或其他异常表现。udld有助于防止在上述几种失效中发生灾难性的事件,当监测到有单向链路,它将停止端口发送信息。
udld是一种第2层协议,它与第1层机制 协同工作来确定链路的物理状态。在第1层中,自动协商功能将照顾到物理信令和 故障监测。udld能够执行自动协商不能执行的任务,例如监测邻居身份和关闭连接不当的端口。当同时启用自动协商和udld的时候,第1层和第2层监测将 协同工作来防止物理或逻辑上的单向连接,并且还可以其他协议的 故障
udld有两种模式:通常模式和广泛模式。通常模式是默认的,当监测吉比特接口出现了 故障,它会监测到单向性链路,防止出现问题。如果某个端口连接正确没有 故障,但只是传输是单向的,udld不会监测到单向链路,因为第1层机制没有问题,它也不会非法这个端口。
广泛模式下,当出现一下情况时,它会监测到单向链路,它将非法端口:
* 一个光纤吉比特端口或双绞线链路中,其中一个端口不能发送或接收 数据包
* 一个光纤吉比特端口或双绞线链路中,其中一个端口断了而其他端口是活动
* 一个光纤线缆的一头连接错误
积极模式udld是udld的一种变种,它能够提供额外的好处。在启用积极模式udld的情况下,当端口停止接收udld数据包的时候,udld将尝试重新建立与邻居的连接。但如果尝试次数超过8次之后,那么端口状态就将变更为“error-disable”状态,它将有效地禁用端口。

编辑本段算法

学习邻居的信息并将信息保存在一个本地cache中,一但检测到一个新的邻居或一个邻居请求重新同步cache时,就发送一系列的udld probe/echo(hello)包。
udld在所有端口上持续的发送probe/echo信息,当在端口上收到一个udld响应信息时触发一个"detection-phase"和验证进程。如果所有的有效条件都达满足(端口是双向连接,并且线缆正确),这个端口被启用。否则,该端口被禁用,并触发如下所示的syslog信息:
"udld-3-disable: unidirectional link detected on port mod/port. port disabled"()
"udld-4-onewaypath: a unidirectional link from port mod/port to port mod/port of device [chars] was detected"
一但一个链路建立起来并被标志为双向的,udld会继续每隔15秒发送一个probe/echo信息。