DLDP(Device Link Detection Protocol,设备连接检测协议)主要用于防止网络中出现单向链路故障。
所谓单向链路是指本端设备可以通过链路层收到对端设备发送的报文,但对端设备不能收到本端设备的报文。单向链路会引起一系列问题,比如生成树拓扑环路等。
以光纤为例,单向链路分为两种类型:
l 一种是光纤交叉相连,如所示;
l 一种是一条光纤未连接或一条光纤断路,如所示(图中的空心线表示一条光纤未连接或一条光纤断路的情况)。
DLDP(Device Link Detection Protocol,设备连接检测协议)可以监控光纤或铜质双绞线(如超五类双绞线)的链路状态。如果发现单向链路存在,DLDP会根据用户配置,自动关闭或通知用户手工关闭相关端口,以防止网络问题的发生。
DLDP协议有如下特点:
l DLDP是链路层协议,它与物理层协议协同工作来监控设备的链路状态:物理层的自动协商机制进行物理信号和故障的检测;DLDP进行对端设备的识别、单向链路的识别和关闭不可达端口等工作。
l 如果两端链路在物理层都能独立正常工作,DLDP会在链路层检测这些链路是否正确连接、两端是否可以正确的交互报文(这种检测不能通过自动协商机制实现)。
DLDP协议主要通过收发下述类型的报文来检测链路状态。
表1-1 DLDP报文类型
DLDP报文类型 |
功能 |
Advertisement报文 |
发送Advertisement报文的目的是告诉邻居自己的存在,该报文中只有本端口的信息,不需要对方回应报文 |
RSY-Advertisement报文(下文称为RSY报文) |
Advertisement报文的一种,报文中RSY FLAG标志置位。当本端口没有邻居信息或者邻居信息老化超时后发送,目的是请求同步邻居的信息 |
Flush-Advertisement报文(下文中称为Flush报文) |
Advertisement报文的一种,报文中Flush FLAG标志置位。报文中不携带任何邻居信息,只带本端口信息,用于通知邻居删除本端信息 |
Probe报文 |
用于探测邻居的存在性,需要对方回应Echo报文。报文中携带本端口信息,可以选择携带邻居信息也可以不携带。如果不携带邻居信息,表示对所有的邻居进行探测,如果携带邻居信息,则表示仅对指定邻居进行探测 |
Echo报文 |
邻居对本端发送的Probe报文的应答,携带了应答端口的端口信息和保存的邻居信息。收到Echo报文时,端口需要检查Echo报文中携带的邻居信息是否和本端口信息一致。如果相同,则认为本端口和该邻居之间是双向连通的 |
Disable报文 |
Disable状态通知报文,目的是知会对方,本端进入了Disable状态。Disable报文中不带邻居信息,只带本端口信息。当端口检测到单向链路进入Disable状态时,向邻居发送Disable报文。收到Disable报文的端口也即刻进入Disable状态 |
LinkDown报文 |
用于知会单向链路的紧急情况(本端口Down但对端Up)。该报文中不带邻居信息,只带本端口信息。在某些情况下,一端的物理层能够发现链路出现了异常,例如端口光纤的Rx线中断,但Tx线完好,此时本端设备认为该端口物理Down,但对端则由于物理层能检测Rx信号,认为端口的工作状态正常。该情况称为单向链路的紧急情况。 为了避免对端需要等待邻居老化定时器超时(3倍的Advertisement Interval)才能发现链路异常,DLDP立即向对方发送LinkDown报文。对端收到该报文后,如果工作在加强模式下,则迁移到DISABLE状态,端口设为DLDP Down(自动关闭模式)或者向用户告警(手动关闭模式) |
Recover Probe报文 |
用于端口的自动恢复机制,检测链路是否恢复。该报文不携带邻居信息,只携带本端口信息,需要对端以自动恢复应答报文(Recover Echo)作为响应。处于DLDP Down的端口每2秒发送一次 |
Recover Echo报文 |
对Recover Probe报文的应答,用于端口的自动恢复机制。发送Recover Probe的端口收到Recover Echo报文后,如果发现RecoverEcho报文中的邻居信息与本端口相同,则认为链路已经恢复双向连通 |
DLDP协议有如下状态:Initial(初始化)、Inactive(未连通)、Active(活动)、Advertisement(通告)、Probe(探测)、Disable(单通)、DelayDown状态。
协议状态说明
状态 |
说明 |
Initial |
DLDP协议未开启时的初始化状态 |
Inactive |
DLDP协议已开启,但是链路Down时所处的状态 |
Active |
DLDP协议已开启且链路Up,或者清空邻居表项后所处的状态 |
Advertisement |
所有邻居双向连通(two way)或者处于Active状态超过5秒后进入的状态,这是一种没有发现单向链路时的比较稳定的状态 |
Probe |
发送探测报文检测链路是否为单向链路。该状态启动Probe发送定时器,为每个需要探测的邻居启动一个Echo等待定时器 |
Disable |
DLDP协议检测到单向链路,或在加强模式下邻居消失情况下的状态。此时DLDP协议只接受和发送Recover Probe 和Recover Echo报文 |
DelayDown |
当DLDP状态处于Active状态、Advertisement状态或Probe状态时,如果收到端口Down事件,不会立即删除邻居并进入Inactive状态,而是先进入临时的DelayDown状态 在该状态下,DLDP邻居信息仍然被保留,同时启动DelayDown定时器;DelayDown定时器超时后,DLDP邻居信息将被删除 |
DLDP协议工作过程中需要用到如下定时器:
协议中的定时器
定时器 |
说明 |
Advertisement发送定时器 |
发送Advertisement报文的时间间隔,可以通过命令行进行配置 默认状态下,Advertisement发送定时器的时间间隔为5秒 |
Probe发送定时器 |
Probe发送定时器的时间间隔为0.5秒,在Probe状态下每秒发送2个探测报文 |
Echo等待定时器 |
DLDP状态切换到Probe时启用,超时时间为10秒 如果Echo等待定时器超时,还未收到来自此邻居应答本端的Echo报文,则将本端状态置为单通,并将状态机转到Disable状态,输出日志和跟踪信息,发送Flush报文,并根据用户配置的DLDP Down模式,手动或者自动关闭掉本端端口,同时删除该邻居表项 |
Entry老化定时器 |
每个新邻居加入时都要建立邻居表项,并启用相应的Entry老化定时器 每次收到邻居报文时都会刷新邻居表项,并更新相应的Entry老化定时器 普通模式下:如果Entry老化定时器超时,还未收到邻居发来的报文,则发送带有RSY标记的Advertisement报文,同时删除该邻居表项 加强模式下:如果Entry老化定时器超时,还未收到邻居发来的报文,则启用加强定时器 Entry老化定时器的时间间隔是Advertisement定时器的3倍 |
加强定时器 |
在加强模式下:当Entry老化定时器超时,还未收到邻居发来的报文,则对该邻居启用加强定时器。加强定时器的超时时间为10秒 加强定时器启用后,每秒向相应的邻居发送1个Probe报文,连续发送8个 如果加强定时器超时,还未收到来自此邻居应答本端的Echo报文,则将此本端状态置为单通,并将状态机转到Disable状态,输出日志和跟踪信息,发送Flush报文,并根据用户配置的DLDP Down模式,手动或者自动关闭掉本端端口,同时删除该邻居表项 |
DelayDown定时器 |
当DLDP状态处于Active状态、Advertisement状态或Probe状态时,如果收到端口Down事件,不会立即删除邻居、进入Inactive状态,而是先进入临时的DelayDown状态 在该状态下,DLDP邻居信息仍然被保留,同时启动DelayDown定时器(定时器长度可配置,取值范围为1~5秒) 在该状态下,系统只响应端口Up事件 如果该定时器超时后,系统还没有收到端口Up事件,则删除DLDP邻居信息并进入Inactive状态;如果在定时器超时前收到端口Up事件,则自动返回到原来的DLDP状态 |
DLDP协议有两种工作模式:普通模式、加强模式。
协议工作模式与邻居表项老化
(1) 如果开启了DLDP的端口链路状态为Up,DLDP会向对端发送DLDP报文,同时分析处理对端设备发送过来的DLDP报文。DLDP处在不同的状态时发送的报文类型不同。
表1-5 DLDP发送报文类型
(2) DLDP对接收到的报文进行如下分析和处理:
l 在认证模式下首先对报文进行认证。如果报文通不过认证,DLDP丢弃该报文。
l 对DLDP报文进行处理,其处理过程请参见。
报文的处理过程
收到报文类型 |
处理过程 |
||||
Advertisement报文 |
取出邻居信息 |
如果本机上没有该邻居表项,则建立该邻居表项,启动此表项的Entry老化定时器,并把DLDP状态切换到Probe状态 |
|||
如果本机上存在该邻居表项,则刷新此表项的Entry老化定时器 |
|||||
Flush报文 |
删除本机上该邻居表项 |
||||
Probe报文 |
向对端发送包含邻居信息和自己信息的Echo报文 |
如果本机上没有该邻居,则建立该邻居表 |
|||
如果本机上有该邻居的表项,则刷新此表项的Entry老化定时器 |
|||||
Echo报文 |
检查本机状态是否为Probe状态 |
否 |
丢弃该Echo报文 |
||
是 |
检查报文携带的邻居信息是否和本机相同 |
不同 |
丢弃该Echo报文 |
||
相同 |
将该邻居标志位置为双向连通(two way) |
||||
如果所有邻居状态都为双向连通,则DLDP状态由Probe切换为Advertisement,同时将Echo定时器置0 |
(3) 如果DLDP没有收到邻居的Echo应答报文,会做如下处理:
表1-7 未收到邻居Echo应答报文时的处理过程
DLDP邻居的状态有两种,可以通过display dldp命令查看。
表1-8 DLDP邻居状态
如果端口的关闭模式被设置为系统自动关闭,当DLDP检测到单向链路时,把端口设置为DLDP Down。DLDP Down端口不会转发业务报文,也不能收发除DLDP之外的任何协议报文。
处于DLDP Down状态端口能在链路恢复之时,从DLDP Down状态中恢复。DLDP Down状态下的端口仍然会周期性的发送链路恢复探测报文(Recover Probe),一旦收到正确的恢复回应报文(Recover Echo),则说明单向链路已经变为双向链路,DLDP将此端口重新Up。其具体过程如下:
l DLDP Down的端口向外每2秒发送一次Recover Probe报文。报文中只携带本端口的信息。
l 对端如果收到该报文,则以Recover Echo报文作为应答。
l 一旦本端收到Recover Echo报文,检查Recover Echo报文中携带的邻居信息是否和本端口信息相同。如果相同,则认为本端口和该邻居之间已经恢复双向连通,则端口从Disable状态转变到Active状态,开始重新建立邻居关系。
表1-9 DLDP基本配置
|
命令 |
说明 |
||
进入系统视图 |
system-view |
- |
||
开启DLDP |
全局开启所有光纤端口的DLDP功能 |
dldp enable |
二者必选其一 缺省情况下,DLDP功能处于关闭状态 |
|
开启当前光纤/非光纤以太网口的DLDP功能 |
进入以太网端口视图 |
interface interface-type interface-number |
||
开启DLDP |
dldp enable |
|||
设置与对方端口间的认证模式和认证密码 |
dldp authentication-mode { none | simple simple-password | md5 md5-password } |
可选 缺省情况下,认证方式为none |
||
设定所有开启DLDP的端口(处于Advertisement状态时)发送Advertisement报文的时间间隔 |
dldp interval timer-value |
可选 缺省值为5秒 |
||
配置DelayDown定时器的超时时间 |
dldp delaydown-timer delaydown-time |
可选 缺省值为1秒 |
||
设置发现单向链路后的操作模式 |
dldp unidirectional-shutdown { auto | manual } |
可选 缺省情况下,发现单向链路后的操作模式为auto |
||
设置DLDP的工作模式 |
dldp work-mode { enhance | normal } |
可选 缺省情况下,DLDP协议工作在normal模式 |
在DLDP基本配置过程中,请注意如下事项:
l 在链路未连通的情况下,DLDP不起作用,因此在使能DLDP之前,请先连接好光纤或铜质双绞线。
l 为确保检测出单向链路,要保证两端设备的DLDP处于开启状态、DLDP Advertisement报文发送时间间隔相等、认证方式和密码相同。
l DLDP Advertisement报文的时间间隔是可调整的(缺省值是5秒,可配置范围为1~100秒),以便根据不同的网络环境使DLDP对链路失效作出更快的响应。如果设定的时间太长,DLDP在没有关闭单向链路的情况下已出现STP环路。如果设定的时间太短,则会增加网络的流量,减少端口的带宽。因此,建议此时间间隔应该小于STP收敛时间(通常情况下为30秒)的三分之一。
l DLDP不处理任何LACP(Link Aggregation Control Protocol,链路聚合控制协议)事件,DLDP将端口汇聚组中的每条链路视为独立的链路进行处理。
l 当运行DLDP的两台设备进行对接时,请保证两台设备的软件版本一致,否则DLDP的运行可能出现问题。
l 系统视图下的dldp enable / dldp disable命令用来全局开启/关闭交换机上所有光纤端口的DLDP功能;且以上命令仅对设备上当前已有的光纤端口有效,对设备后续新增的光纤端口不起作用。
l 如果用户配置了DLDP的认证模式和认证密码,则要确保本端端口与对端端口设置了相同的认证模式和认证密码,否则DLDP不能通过认证。
l 当将DLDP协议的工作模式配置为enhance 模式时时,系统能识别两种类型的单向链路:一种是光纤交叉相连,另一种是一条光纤未连接或一条光纤断路。
l 当将DLDP协议的工作模式配置为normal模式时,系统只能识别一种类型的单向链路:光纤交叉连接。
l 当设备业务繁忙、CPU利用率较高时,可能会出现DLDP误报的情况。建议用户把DLDP发现单向链路后的操作模式配置为manual,减小DLDP误报造成的影响。
当DLDP探测到单向链路并将端口DLDP Down掉后,可以通过重置命令使端口状态恢复,重新进行DLDP探测。
状态重置配置
表1-11 DLDP配置显示
如所示:
l Switch A和Switch B通过两对光纤相连(相关端口均工作于强制全双工和1000Mbits/s速率下),两台交换机均支持DLDP;
l Switch A与Switch B间出现了光纤交叉连接的情况,DLDP检测出单向链路后,自动断开单向链路;
l 当网管人员正确连接光纤后,恢复被DLDP Down掉的端口。
(1) 配置Switch A
# 配置端口工作在强制全双工模式,速率为1000Mbits/s。
<SwitchA> system-view
[SwitchA] interface gigabitethernet 1/0/50
[SwitchA-GigabitEthernet1/0/50] duplex full
[SwitchA-GigabitEthernet1/0/50] speed 1000
[SwitchA-GigabitEthernet1/0/50] quit
[SwitchA] interface gigabitethernet 1/0/51
[SwitchA-GigabitEthernet1/0/51] duplex full
[SwitchA-GigabitEthernet1/0/51] speed 1000
[SwitchA-GigabitEthernet1/0/51] quit
# 全局开启DLDP。
[SwitchA] dldp enable
# 设置发送DLDP报文的时间间隔为15秒。
[SwitchA] dldp interval 15
# 配置DLDP协议的工作模式为加强模式。
[SwitchA] dldp work-mode enhance
# 配置DLDP单向链路操作模式为自动模式。
[SwitchA] dldp unidirectional-shutdown auto
# 查看DLDP状态。
[SwitchA] display dldp 1
当光纤交叉连接时,可能有两个或三个端口处于Disable状态,剩余端口处于Inactive状态。
当光纤一端连接正确,一端未连接时:
l 如果DLDP的工作模式为normal,则有收光的一端处于Advertisement状态,没有收光的一端处于Inactive状态。
l 如果DLDP的工作模式为enhance,则有收光的一端处于Disable状态,没有收光的一端处于Inactive状态。
# 恢复被DLDP协议Down掉的端口。
[SwitchA] dldp reset
(2) 配置Switch B
Switch B上的配置与Switch A上的配置xx一致,此处不再赘述。