udld
UDLD (UniDirectional Link Detection 单向链路检测):是个Cisco私有的二层协定,用于监听利用光纤或双绞线连线的以太链路的物理配置,当出现单向链路(只能向一个方向传输,比如我能把数据发给你,你也能收到,但是你发给我的数据我收不到)时,UDLD可以检测出这一状况,关闭相应接口并传送警告信息。单向链路可能引起很多问题,尤其是生成树,可能会造成迴环。注意:UDLD需要链路两端设备都支持才能正常运行。
基本介绍
- 中文名:单向链路检测
- 外文名:UniDirectional Link Detection
- 性质:私有的二层协定
- 分类:普通模式和激进模式
工作模式
UDLD支持两种工作模式;普通(normal)模式(默认)和激进(aggressive)模式。
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.
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信息。