在技术学习之路坚持走下去
分类: 系统运维
2009-05-03 22:30:21
单向链路检测(UDLD) 特性用于检测光纤或铜缆以太网链路上的故障:
监视物理电缆的配置,并将通过"ErrDisabled"状态将配置不正确的端口给down掉。
避免出现单向连接,当检测到一个因为介质或端口故障导致的单向连接时,将端口shutdown并标识为"ErrDisabled"状态,同时产生一个syslog信息。
由于生成树具有单向的BPDU流,对这种故障相当敏感。在一个端口突然不能发送BPDUs的时候,引起邻居的STP状态改变,导致邻居的"blocking"端口切换到"forwarding"状态。由于原forwarding端口仍然可以接收包,从而引起环路。
UDLD是一个工作在LLC层之上的二层协议,使用01-00-0c-cc-cc-cc为目的mac地址,SNAP HDLC的协议类似为0x0111,当和第一层的FEFI、自动协商机制一起运行时,可以验证一条链路在物理层和逻辑链路层的完整性。
UDLD 可以完成一些FEFI和自动协商不可能提供的功能,如检测并缓存邻居的信息、down掉任何一个错误配置的端口,检查非点对点的逻辑端口的让的故障和失效等。
UDLD使用两个基本机制:学习邻居的信息并将信息保存在一个本地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信息。
端口状态 |
注释 |
---|---|
Undetermined |
正在检查,或邻居未启用UDLD |
Not applicable |
UDLD被禁用 |
Shutdown |
检测到单向连接,端口被禁用 |
Bi-directional |
已检测到双向连接 |
邻居缓存的维护: UDLD在每个活动的接口上周期性的发送probe/echo包,以维护邻居缓存的完整性。一量收到一个hello信息,将它缓存到内存中,并保存一个通过hold-time定义的时间间隔。如果一个hold-time超时,相应的cache被清空,如果在hold-time定义的时间间隔内收到新的hello信息,则新的替代老的,并将计时器清零。
为了维护UDLD cache的完整性,一旦一个启用了UDLD的接口被禁用,或该接口上的设备被重启,该接口存在的所有缓存均会被清除,UDLD传送至少一个信息让邻居清空响应的缓存条目。
回显检测机制:回显机制构成了检测算法的基础。一旦一个UDLD设备学习到了一个新的邻居或从一个非同步状态的邻居收到一了个重新同步的请求。它将启动或重启本端的检测窗口,并发送一个完全同意的回显信息。由要求所有的邻居都必须有这个相应的行为,回显的发送者期待收到一个响应的echos。如果检测窗口结束,而没有合法的响应信息收到,这个链路被认为是单向连接。就触发链路重连接或端口shutdown进程。
为了防止出现生成树循环,从CatOS 5.4(3)开始,将UDLD的缺省的消息间隔从60秒修改为15秒,这样可以在blocking端口切换到转发状态之前禁用掉单向连接的端口。UDLD检测到一个单向连接故障需要的时为(2.5*时间间隔+4秒),在间隔为15秒时约需要41秒时间检测到单向连接端口。这刚好小于STP重新收敛用的50秒时间。
这样UDLD就依赖于缺省的生成树计时器,当生成树被调整为比UDLD收敛更快时,就应该考虑使用一另外一个机制,从CatOS6.2开始提供的Loopguard特性。
注意: 注意较老的版本的UDLD使用一个不可配置的60秒的缺省消息间隔,这样,它对生成树的环路避免并没有那么有效。
这个特性提供了在如下情况下避免单向链路带来的危险的一个增强保护机制:
链路的一边有端口短路(不管是收还是发)
一端的链路保持UP状态,而另一端已经down了,这减少了对物理层的FEFI的信心。
在8次失败后,端口切换为ErrDisable状态,并产生一个syslog信息。message logged.
在这些情况下,UDLD的激进模式将使链路的两端的端口均处于ErrDisable状态,减少流量的损失。
激进模式的UDLD也允许将probe/echo的时间间隔从默认的15秒手工配置为7-90秒中的任何一个值.
为了最大程度上避免出现单向连接所引起的各种症状,建议在交换机之间的点对点的百兆/千兆链路上启用UDLD的激进(aggressive模式),消息间隔可以保留为缺省的15秒。
在默认状态下,UDLD是全局禁用的,在光接口上是启用就绪的。UDLD仅在交换机之间的链路上适用的一个底层协议。在电口上,它默认是禁用的。使用如下命令启用UDLD:
set udld enable
!一旦全局启用,所有的百兆和千兆光口上的UDLD都启用了。
set udld enable
!如果有电口需要启用,可以使用如上的命令。
set udld aggressive-mode enable
!所有的点对点连接都需要配置。
注意: Cat2900xl、3500XL目前都不兼容激进模式的UDLD,并且消息间隔是被硬件设置为60秒的。这就不被考虑用来避免潜在的生成树环。
在实验室中,由于没有真正的故障或单向连接组件,是很难被测试的。例如,如果拨掉一对光纤中的一条,你期待看到"ErrDisable"状态,但实际上由于没有关闭第一层的自动协商,这就会重置UDLD消息的通信,本地接口会down掉,而远种接口会切换到""undetermined"状态,而不是"ErrDisable"状态。
最后,如果一个接口处于ErrDisabled状态,在缺省情况下,它将保持这种状态,可以使用如下命令让接口在规定的时间后(缺省是300秒)重新启用:
> (enable) set errdisable-timeout enable ?
bpdu-guard
!BPDU端口保护引起的
channel-misconfig
!通道不匹配引起的
duplex-mismatch
udld
other
!因为其它原因引起的.
all
!所有的
因为单向连接引起的error-diasabled状态,必须手工使用set port enable命令重新启用接口。
如果对方设备(如路由器或主机)不兼容UDLD,则不要运行该协议,可以使用如下命令:
set udld disable
注意: UDLD并不能捕捉每一种STP失效的情况。例如因为CPU在(2*FwdDelay+maxage)时间内没有发送BPDUs的情况下。这时可以考虑在CatOS6.2中所提供的Loopguard特性。