发明内容
有鉴于此,本发明的目的在于提供了一种堆叠链路聚合故障检测方法,该方法能够实现堆叠设备跨越传输设备进行数据传输,使堆叠设备可以分别放置在足够远的位置。
为了达到上述目的,本发明提供了一种堆叠链路聚合故障检测方法,应用于堆叠系统中,该堆叠系统中的堆叠设备间通过传输设备相连,包括以下步骤:
A1、堆叠设备的第一探测端口为Selected_UP或Unselected_UP状态时,从第一探测端口发送探询KeepAlive报文;
A2、等待接收确认ACK报文,如果在第一设定时间内接收到ACK报文,则判断所述接收到的ACK报文是否是邻居堆叠设备针对该KeepAlive报文发送的ACK报文,若是,则将当前第一探测端口为Selected_UP状态的保持其状态不变,将当前第一探测端口为Unselected-UP状态的设置为Selected_UP状态,若不是,则继续等待接收ACK报文;如果在第一设定时间内未收到邻居堆叠设备针对该KeepAlive报文发送的ACK报文,若未超过最大重试次数,则进行再一次的探测,若超过预设的最大重试次数,则将当前第一探测端口为Selected_UP状态的设置为Unselected-UP状态,将当前第一探测端口为Unselected-UP状态的保持其状态不变;
其中,第一探测端口为发送KeepAlive报文并接收ACK报文的端口;端口Selected_UP状态为物理状态为启动UP,通过该端口的本端堆叠设备与传输设备之间的链路及传输设备与对端堆叠设备之间的链路均正常时该端口的工作状态;Unselected-UP状态为物理状态为启动UP,通过该端口的的本端堆叠设备与传输设备之间的链路正常,且传输设备与对端堆叠设备间的链路故障时该端口的工作状态。
本发明还提供了另外一种堆叠链路聚合故障检测方法,应用于堆叠系统中,该堆叠系统中的堆叠设备间通过传输设备相连,包括以下步骤:
B1、堆叠设备的第一探测端口为Selected_UP或Unselected_UP状态时,从第一探测端口发送探询KeepAlive报文;
B2、等待接收确认ACK报文,如果在第一设定时间内接收到ACK报文,则判断所述接收到的ACK报文是否是邻居堆叠设备针对该KeepAlive报文发送的ACK报文,若是,则将当前第一探测端口为Selected_UP状态的保持其状态不变,将当前第一探测端口为Unselected-UP状态的设置为Selected_UP状态,若不是,则继续等待接收ACK报文;如果在第一设定时间内未收到邻居堆叠设备针对该KeepAlive报文发送的ACK报文,若未超过第二设定时间,则进行再一次的探测,若超过第二设定时间,则将当前第一探测端口为Selected_UP状态的设置为Unselected-UP状态,将当前第一探测端口为Unselected-UP状态的保持其状态不变;
其中,第一探测端口为发送KeepAlive报文并接收ACK报文的端口;端口Selected_UP状态为物理状态为启动UP,通过该端口的本端堆叠设备与传输设备之间的链路及传输设备与对端堆叠设备之间的链路均正常时该端口的工作状态;Unselected-UP状态为物理状态为启动UP,通过该端口的的本端堆叠设备与传输设备之间的链路正常,且传输设备与对端堆叠设备间的链路故障时该端口的工作状态。
本发明还提供了第三种堆叠链路聚合故障检测方法,应用于堆叠系统中,该堆叠系统中的堆叠设备间通过传输设备相连,包括:
堆叠设备的第二探测端口为Selected_UP或Unselected_UP状态时,在第二探测端口等待接收KeepAlive报文,如果在第一设定时间内接收到KeepAlive报文,则判断所述接收到的KeepAlive报文是否是第二探测端口侧邻居堆叠设备发来KeepAlive报文,若是,则将当前第二探测端口为Selected_UP状态的保持其状态不变,将当前第二探测端口为Unselected-UP状态的设置为Selected_UP状态,若不是,则继续等待接收KeepAlive报文;如果在第一设定时间内未收到第二探测端口侧邻居堆叠设备发来KeepAlive报文,若未超过预设的最大重试次数,则进行再一次的探测,若超过预设的最大重试次数,则将当前第二探测端口为Selected_UP状态的设置为Unselected-UP状态,将当前第二探测端口为Unselected-UP状态的保持其状态不变;
其中,第二探测端口为等待接收KeepAlive报文并发送ACK报文的端口;端口Selected_UP状态为物理状态为启动UP,通过该端口的本端堆叠设备与传输设备之间的链路及传输设备与对端堆叠设备之间的链路均正常时该端口的工作状态;Unselected-UP状态为物理状态为启动UP,通过该端口的的本端堆叠设备与传输设备之间的链路正常,且传输设备与对端堆叠设备间的链路故障时该端口的工作状态。
本发明还提供了第四种堆叠链路聚合故障检测方法,应用于堆叠系统中,该堆叠系统中的堆叠设备间通过传输设备相连,包括:
堆叠设备的第二探测端口为Selected_UP或Unselected_UP状态时,在第二探测端口等待接收KeepAlive报文,如果在第一设定时间内接收到KeepAlive报文,则判断所述接收到的KeepAlive报文是否是第二探测端口侧邻居堆叠设备发来KeepAlive报文,若是,则将当前第二探测端口为Selected_UP状态的保持其状态不变,将当前第二探测端口为Unselected-UP状态的设置为Selected_UP状态,若不是,则继续等待接收KeepAlive报文;如果在第一设定时间内未收到第二探测端口侧邻居堆叠设备发来KeepAlive报文,若未超过第三设定时间,则进行再一次的探测,若超过第三设定时间,则将当前第二探测端口为Selected_UP状态的设置为Unselected-UP状态,将当前第二探测端口为Unselected-UP状态的保持其状态不变;
其中,第二探测端口为接收KeepAlive报文并发送ACK报文的端口;端口Selected_UP状态为物理状态为启动UP,通过该端口的本端堆叠设备与传输设备之间的链路及传输设备与对端堆叠设备之间的链路均正常时该端口的工作状态;Unselected-UP状态为物理状态为启动UP,通过该端口的的本端堆叠设备与传输设备之间的链路正常,且传输设备与对端堆叠设备间的链路故障时该端口的工作状态。
本发明还提供了一种堆叠设备,该堆叠设备在第一探测端口侧通过传输设备与其所在的堆叠系统中的其它堆叠设备相连;该堆叠设备包括:
第一配置单元、第一控制单元、第一收发单元;
所述的第一配置单元,用于预先配置第一设定时间、最大重试次数;用于存储该堆叠设备中第一探测端口的工作状态;
所述的第一控制单元,用于在第一配置单元中存储的第一探测端口为Selected_UP或Unselected_UP状态时,通知第一收发单元发送探询KeepAlive报文;用于等待接收到第一收发单元发来的接收到ACK报文的通知,如果在第一设定时间内接收到第一收发单元的通知,则判断第一收发单元接收到的ACK报文是否是邻居堆叠设备针对第一收发单元发送的KeepAlive报文发送的ACK报文,若是,则将当前第一探测端口为Selected_UP状态的保持其状态不变,将当前第一探测端口为Unselected-UP状态的设置为Selected_UP状态,若否,则继续等待接收第一收发单元发来接收到ACK报文的通知;如果在第一设定时间内未接收到第一收发单元的通知,若未超过最大重试次数,则进行再一次的探测,若超过最大重试次数,则将当前第一探测端口为Selected_UP状态的设置为Unselected-UP状态,将当前第一探测端口为Unselected-UP状态的保持其状态不变;
所述的第一收发单元,用于在接收到第一控制单元发来的发送探询KeepAlive报文通知后,从第一探测端口发送KeepAlive报文;用于等待接收ACK报文,并在接收到ACK报文后,通知第一控制单元;
其中,第一探测端口为发送KeepAlive报文并接收ACK报文的端口;端口Selected_UP状态为物理状态为启动UP,通过该端口的本端堆叠设备与传输设备之间的链路及传输设备与对端堆叠设备之间的链路均正常时该端口的工作状态;Unselected-UP状态为物理状态为启动UP,通过该端口的的本端堆叠设备与传输设备之间的链路正常,且传输设备与对端堆叠设备间的链路故障时该端口的工作状态。
本发明还提供了另外一种堆叠设备,该堆叠设备在第一探测端口侧通过传输设备与其所在的堆叠系统中的其它堆叠设备相连;该堆叠设备包括:第二配置单元、第二控制单元、第二收发单元;
所述的第二配置单元,用于预先配置第一设定时间、第二设定时间;用于存储该堆叠设备中第一探测端口的工作状态;
所述的第二控制单元,用于在第二配置单元中存储的第一探测端口为Selected_UP或Unselected_UP状态时,通知第二收发单元发送探询KeepAlive报文;用于等待接收到第二收发单元发来的接收到ACK报文的通知,如果在第一设定时间内接收到第二收发单元的通知,则判断第二收发单元接收到的ACK报文是否是邻居堆叠设备针对第二收发单元发送的KeepAlive报文发送的ACK报文,若是,则将当前第一探测端口为Selected_UP状态的保持其状态不变,将当前第一探测端口为Unselected-UP状态的设置为Selected_UP状态,若否,则继续等待接收第二收发单元发来接收到ACK报文的通知;如果在第一设定时间内未接收到第二收发单元的通知,若未超过第二设定时间,则进行再一次的探测,若超过第二设定时间,则将当前第一探测端口为Selected_UP状态的设置为Unselected-UP状态,将当前第一探测端口为Unselected-UP状态的保持其状态不变;
所述的第二收发单元,用于在接收到第二控制单元发来的发送探询KeepAlive报文通知后,从第一探测端口发送KeepAlive报文;用于等待接收ACK报文,并在接收到ACK报文后,通知第二控制单元;
其中,第一探测端口为发送KeepAlive报文并接收ACK报文的端口;端口Selected_UP状态为物理状态为启动UP,通过该端口的本端堆叠设备与传输设备之间的链路及传输设备与对端堆叠设备之间的链路均正常时该端口的工作状态;Unselected-UP状态为物理状态为启动UP,通过该端口的的本端堆叠设备与传输设备之间的链路正常,且传输设备与对端堆叠设备间的链路故障时该端口的工作状态。
本发明还提供了第三种堆叠设备,该堆叠设备在第二探测端口侧通过传输设备与其所在的堆叠系统中的其它堆叠设备相连;该堆叠设备包括:第三配置单元、第三控制单元、第三收发单元;
所述的第三配置单元,用于预先配置第一设定时间、最大重试次数;用于存储该堆叠设备中第二探测端口的工作状态;
所述的第三控制单元,用于在第三配置单元中存储的第二探测端口为Selected_UP或Unselected_UP状态时,通知第三收发单元等待接收探询KeepAlive报文,并等待接收第三收发单元发来的接收到KeepAlive报文的通知,如果在第一设定时间内接收到第三收发单元发来的接收到KeepAlive报文的通知,则判断第三收发单元接收到的KeepAlive报文是否是邻居堆叠设备发来的KeepAlive报文,若是,则将当前第二探测端口为Selected_UP状态的保持其状态不变,将当前第二探测端口为Unselected-UP状态的设置为Selected_UP状态,并通知第三收发单元从当前第二探测端口发送ACK报文,若否,则继续等待接收第三收发单元发来接收到KeepAlive报文的通知;如果在第一设定时间内未接收到第三收发单元发来的接收到KeepAlive报文的通知,若未超过最大重试次数,则进行再一次的探测,若超过最大重试次数,则将当前第二探测端口为Selected_UP状态的设置为Unselected-UP状态,将当前第二探测端口为Unselected-UP状态的保持其状态不变;
所述的第三收发单元,用于接收到第三控制单元发来的等待接收KeepAlive报文的通知后,在第二探测端口等待接收KeepAlive报文;用于接收到KeepAlive报文后,通知第三控制单元接收到KeepAlive报文;用于接收到第三控制单元发来的发送ACK报文的通知后,从当前第二探测端口发送ACK报文;
其中,第二探测端口为接收KeepAlive报文并发送ACK报文的端口;端口Selected_UP状态为物理状态为启动UP,通过该端口的本端堆叠设备与传输设备之间的链路及传输设备与对端堆叠设备之间的链路均正常时该端口的工作状态;Unselected-UP状态为物理状态为启动UP,通过该端口的的本端堆叠设备与传输设备之间的链路正常,且传输设备与对端堆叠设备间的链路故障时该端口的工作状态。
本发明还提供了第四种堆叠设备,该堆叠设备在第二探测端口侧通过传输设备与其所在的堆叠系统中的其它堆叠设备相连;该堆叠设备包括:第四配置单元、第四控制单元、第四收发单元;
所述的第四配置单元,用于预先配置第一设定时间、第三设定时间;用于存储该堆叠设备中第二探测端口的工作状态;
所述的第四控制单元,用于在第四配置单元中存储的第二探测端口为Selected_UP或Unselected_UP状态时,通知第四收发单元等待接收探询KeepAlive报文,用于在通知第四收发单元等待接收KeepAlive报文后,等待接收第四收发单元发来的接收到KeepAlive报文的通知,如果在第一设定时间内接收到第四收发单元发来的接收到KeepAlive报文的通知,则判断第四收发单元接收到的KeepAlive报文是否是邻居堆叠设备发来的KeepAlive报文,若是,则将当前第二探测端口为Selected_UP状态的保持其状态不变,将当前第二探测端口为Unselected-UP状态的设置为Selected_UP状态,并通知第四收发单元从当前第二探测端口发送ACK报文,若否,则继续等待接收第四收发单元发来接收到KeepAlive报文的通知;如果在第一设定时间内未接收到第四收发单元发来的接收到KeepAlive报文的通知,若未超过第三设定时间,则进行再一次的探测,若超过第三设定时间,则将当前第二探测端口为Selected_UP状态的设置为Unselected-UP状态,将当前第二探测端口为Unselected-UP状态的保持其状态不变;
所述的第四收发单元,用于接收到第四控制单元发来的等待接收KeepAlive报文的通知后,在第二探测端口等待接收KeepAlive报文;用于接收到KeepAlive报文后,通知第四控制单元接收到KeepAlive报文;用于接收到第四控制单元发来的发送ACK报文的通知后,从当前第二探测端口发送ACK报文;
其中,第二探测端口为接收KeepAlive报文并发送ACK报文的端口;端口Selected_UP状态为物理状态为启动UP,通过该端口的本端堆叠设备与传输设备之间的链路及传输设备与对端堆叠设备之间的链路均正常时该端口的工作状态;Unselected-UP状态为物理状态为启动UP,通过该端口的的本端堆叠设备与传输设备之间的链路正常,且传输设备与对端堆叠设备间的链路故障时该端口的工作状态。
综上所述,本发明的这种堆叠链路聚合故障检测方法,周期性从第一探测端口发送KeepAlive报文并等待接收ACK报文,如果最大重试次数或最大重试时间内未收到邻居堆叠设备针对发出的KeepAlive报文发送的ACK报文,则确定通过该第一探测端口的链路发生故障,将该第一探测端口设置为不参与报文转发,进而及时发现链路故障并减少数据流量损失;周期性在第二探测端口等待接收KeepAlive报文,如果在最大重试次数或最大重试时间内接收到邻居堆叠设备发来的KeepAlive报文,则确定该第二探测端口对应的链路发生故障,将该第二探测端口设置为不参与报文转发,进而及时发现链路故障并减少数据流量损失。可见,采用本发明的方法可以及时发现链路故障,并作故障处理,因而能够实现跨越传输设备进行数据传输,进而可以利用传输设备将各堆叠设备放置在足够远的位置。
具体实施方式
为了使本发明的目的、技术方案及其优点更加清楚明白,下面结合附图并据实施例,对本发明进行详细说明。
本发明的技术方案中,保留Hello报文的原有功能,包括对堆叠设备的左右拓扑信息收集功能,下面以图6、7为例,对堆叠设备的左右拓扑信息进行说明。
图6是环式堆叠设备拓扑图,以其中的堆叠设备A为例,其拓扑如表一所示:
左拓扑 |
堆叠设备D |
堆叠设备C |
堆叠设备B |
右拓扑 |
堆叠设备B |
堆叠设备C |
堆叠设备D |
表一
图7是链式堆叠设备拓扑图,其中的堆叠设备A的拓扑如表二所示,没
有左拓扑:
表二
堆叠设备B的拓扑如表三所示:
表三
堆叠设备C的拓扑如表四所示,没有右拓扑:
表四
本发明新增加两个新的报文:探询(KeepAlive)报文和确认(ACK)报文,用于对聚合的每条链路进行检测,KeepAlive报文和ACK报文的生存时间均为一跳,均包括表五所示的字段:
Flag |
SMEM ID |
DMEM ID |
Domain ID |
Seq |
表五
其中,Flag用于标识该报文是KeepAlive报文还是ACK报文。
SMEM_ID,是发送该报文的源堆叠设备ID,唯一标识此堆叠系统中的一台堆叠设备。
DMEM_ID,是该报文的目标堆叠设备ID,唯一标识此堆叠系统中的一台堆叠设备。
Domain_ID,是堆叠系统ID,唯一标识此堆叠系统,如果两个报文的Domain_ID相同,则说明两个报文在同一堆叠系统中。
Seq,标识所发出的KeepAlive报文的序列号,和ACK报文配合使用,用于识别接收到的对端堆叠设备发来的ACK报文是对本端堆叠设备发送的哪个KeepAlive报文的响应。
另外,KeepAlive报文中还可以包括预留位,例如,当从堆叠设备的控制端口发送KeepAlive报文时,可以在预留位中携带控制端口的标记,以便邻居堆叠设备能够识别是否从控制端口发来的KeepAlive报文。
本发明的技术方案中,将堆叠的堆叠设备的端口的工作状态分为Selected_UP、Unselected_UP、Unselected_DOWN三种,其中,
Selected_UP状态,标识该端口属于堆叠聚合成员组,端口的物理状态为启动(UP)状态,且该端口被选中参与报文转发,可以正常收发报文。如图5中堆叠设备A的端口1和堆叠设备B的端口1的状态均是Selected_UP状态;
Unselected_DOWN状态,标识该端口属于堆叠聚合成员组,端口的物理状态为故障(DOWN)状态,导致该端口处于此状态的可能原因是:该端口被手动关闭(shut_down),或和该端口直连的链路故障,或和该端口直连的对端端口被shut down。如图5中堆叠设备B的端口2就处于此状态。
Unselected_UP状态,标识该端口属于堆叠聚合成员组,端口的物理状态为UP,且对端堆叠设备和传输设备间出现故障,导致该端口的物理状态虽然是UP,但是不能正常收发报文。如图5中堆叠设备A的端口2就处于此状态。
另外,为了减少检测过程中重复发送的报文数目,本发明还预先为KeepAlive报文和ACK报文选择一个发送方向,具体来说,是根据堆叠设备的左右拓扑信息,预先设定从堆叠系统中每个堆叠设备的左侧端口或右侧端口中的一侧端口发送KeepAlive报文并等待接收回应的ACK报文,在另一侧端口等待接收KeepAlive报文并回应ACK报文,例如,在图6中,采用顺时针发送KeepAlive报文,逆时针发送ACK报文,在图7中,采用从左到右的方向发送KeepAlive报文,采用从右到左的方向发送ACK报文。图6、7中的KeepAlive报文和ACK报文的方向也可以采用与上述方向相反的方向,无论采用哪种发送方向,都不会影响链路检测结果。
为了便于描述,将发送KeepAlive报文并等待接收ACK报文的端口称为第一探测端口,将等待接收KeepAlive报文并发送ACK报文的端口称为第二探测端口。假设图5中KeepAlive报文的发送方向为从左到右,ACK报文的发送方向为从右到左,则图5中,堆叠设备A的右侧端口1、2就属于A的第一探测端口,而堆叠设备B的左侧端口1、2就属于B的第二探测端口。
需要说明的是,在堆叠设备执行链路故障检测的过程中,还需要持续检测自身各个端口的物理状态,并根据端口的物理状态变化,设置端口的状态,例如,在端口的物理状态从UP转变为DOWN时,将端口的状态设置为Unselected_DOWN;在端口的物理状态从DOWN转变为UP时,将端口的状态设置为Unselected_UP状态。
本发明有两种实施方式,一种是利用最大重试次数,在最大重试次数内多次对堆叠设备的第一探测端口和第二探测端口对应的链路分别进行检测,并根据检测结果设置端口对应的工作状态,图8、10是采用该实施方法分别对第一探测端口和第二探测端口的检测流程图;另一种是利用最大等待时间,在最大等待时间内多次对堆叠设备的第一探测端口和第二探测端口对应的链路分别进行检测,并根据检测结果设置端口对应的工作状态,图9、11是采用该实施方法分别对第一探测端口和第二探测端口的检测流程图。下面对图8、9、10、11分别进行说明:
参见图8,图8是本发明实施例一堆叠设备第一探测端口链路故障检测方法流程图,包括以下步骤:
步骤801、初始化当前端口的序列号Seq,设置最大重试次数。
这里的当前端口是堆叠设备的其中一个第一探测端口,在首次对当前端口进行检测时,需要为当前端口配置一个初始的序列号Seq,以后每次对当前端口的链路检测过程中使用的Seq都将在前一次端口链路检测过程中使用的Seq的基础上递增。
最大重试次数,表示在一次链路检测的过程中,最多重试发送KeepAlive报文的次数,如果连续发送最大重试次数的KeepAlive报文均未收到回应的ACK报文,则认为链路故障。
本步骤只在首次对当前端口进行链路检测时执行。
步骤802、将序列号Seq加1,第一重试次数清零。
这里,每完成一次对当前链路的检测,需要先将Seq的序列号加1,第一重试次数清零,再开始新一次对当前端口的链路检测。
步骤803、判断当前端口的工作状态是否是Selected_UP或Unselected_UP,如果是,则转至步骤805执行,否则,转至步骤804执行。
步骤804、结束当前检测流程。
这里,当前端口已经处于Unselected_DOWN状态,不能执行报文的收发功能,因此,不再继续对当前端口的链路检测流程,堆叠设备会持续的检测当前端口的物理状态,在检测发现当前端口的物理状态从DOWN转变为UP时,堆叠设备会将当前端口的状态设置为Unselected_UP状态,并重新对当前端口执行链路检测流程。
步骤805、将KA定时器清零,第一重试次数加1,从当前端口发送KeepAlive报文。
KA定时器,表示从当前端口发送KeepAlive报文的时间间隔,每隔KA定时器时间,从当前端口发送一次KeepAlive报文。
步骤806、等待接收邻居堆叠设备回应的ACK报文。
这里,所述的邻居堆叠设备是指第一探测端口侧的邻居堆叠设备。
步骤807、KA定时器时间内,收到ACK报文,转至步骤809执行。
步骤808、KA定时器已超时,未收到邻居堆叠设备发来的ACK报文,则转至步骤812执行。
本步骤中,如果KA定时器超时,未接收到邻居堆叠设备发来的ACK报文,则会在第一重试次数未超过最大重试次数时,再次重试发送KeepAlive报文。
步骤809、判断ACK报文中Seq是否与从当前端口发送的KeepAlive报文中的Seq相同,且SMEM_ID为邻居成员设备ID,Domain_ID为本堆叠系统,如果是,则执行步骤810,否则,返回步骤806执行。
这里,在接收到邻居堆叠设备发来的ACK报文后,还需要判断接收到的ACK报文是否是对从当前端口发送的KeepAlive报文的回应消息,因此,需要判断ACK报文中的Seq、Domain_ID是否分别与发送的KeepAlive报文中的Seq、Domain_ID相同,且ACK报文中的SMEM_ID为邻居堆叠设备ID,如果是,则说明该ACK报文是对从当前端口发送的KeepAlive报文的回应消息;如果接收到的ACK报文不是对发出的KeepAlive报文的回应消息,则还需要返回步骤806继续等待接收ACK报文。
步骤810、判断当前端口是否为Unselected_UP状态,如果是,则执行步骤811,否则,执行步骤815。
步骤811、将当前端口设置为Selected_UP状态,参与报文转发。
这里,当前端口能够接收和发送报文,因此,该端口对应的链路正常,能够参与报文转发。
步骤812、判断第一重试次数是否超过最大重试次数,如果是,则执行步骤813,否则,执行步骤803。
步骤813、判断当前端口是否是Selected_UP状态,如果是,则执行步骤814,否则执行步骤815。
步骤814、将当前端口设置为Unselected_UP状态。
这里,因为当前端口无法正常接收报文,因此,该端口对应的链路故障,不能参与报文转发。
步骤815、本次通过当前端口的链路故障检测结束。
这里,由于链路随时都有可能发生故障或从故障中恢复,因此,需要不断的对链路进行检测,因此,对当前端口对应的链路进行一次检测之后,需要在KA定时器超时后,再次返回步骤802开始执行下一次对当前端口对应的链路的检测。
参见图9,图9是本发明实施例二堆叠设备第一探测端口链路故障检测方法流程图,在首次对当前端口进行检测时,需要为当前端口配置一个序列号Seq,并将Seq清零,包括以下步骤:
步骤901、初始化当前端口的序列号Seq。
这里的当前端口是堆叠设备的其中一个第一探测端口。本步骤只在首次对当前端口对应的链路进行故障检测时执行。
步骤902、将当前端口的Wait_ACK定时器清零,序列号Seq加1。
这里的Wait_ACK定时器,用于表示本次对当前端口的检测过程中最大检测接收邻居堆叠设备回应ACK报文的时间,是KA定时器时间的n倍,n是大于0的自然数。如果在Wait_ACK定时器时间内收到了对在该Wait_ACK定时器时间内发出的KeepAlive报文的ACK报文,则该端口对应的链路正常,否则,该端口对应的链路故障。
步骤903、判断当前端口的工作状态是否为Selected_UP或Unselected_UP状态,如果是,则执行步骤905,否则,执行步骤904。
步骤904、结束当前检测流程。
这里,当前端口已经处于Unselected_DOWN状态,不能执行报文的收发功能,因此,不再继续对当前端口的链路检测流程,堆叠设备会持续的检测当前端口的物理状态,在检测发现当前端口的物理状态从DOWN转变为UP时,堆叠设备会将当前端口的状态设置为Unselected_UP状态,并重新对当前端口执行链路检测流程。
步骤905、将KA定时器清零,从当前端口发送KeepAlive报文。
这里的KA定时器用于控制从当前端口发送KeepAlive报文的时间间隔,每KA定时器时间,从当前端口发送一次KeepAlive报文。
一般来说,步骤901中的Wait_ACK定时器时间应该是KA定时器时间的倍数,例如,Wait_ACK定时器时间等于KA定时器时间与最大重试次数的乘积。
步骤906、等待接收邻居堆叠设备回应的ACK报文,直到接收到邻居堆叠设备发来的ACK报文,或KA定时器超时。
这里,所述的邻居堆叠设备是第一探测端口侧邻居堆叠设备。
步骤907、KA定时器时间内,收到ACK报文,转至步骤909执行。
步骤908、KA定时器超时,未收到邻居堆叠设备发来的ACK报文,转至步骤912执行。
步骤909、判断ACK报文中Seq是否与从当前端口发送的KeepAlive报文中的Seq相同,且SMEM_ID为邻居成员设备ID,Domain_ID为本堆叠系统ID,如果是,则执行步骤910,否则,转至步骤906执行。
这里,在接收到邻居堆叠设备发来的ACK报文后,还需要判断接收到的ACK报文是否是对从当前端口发送的KeepAlive报文的回应消息,因此,需要判断ACK报文中的Seq、Domain_ID是否分别与发送的KeepAlive报文中的Seq、Domain_ID相同,且ACK报文中的SMEM_ID为邻居堆叠设备ID,如果接收到的ACK报文不是对发出的KeepAlive报文的回应消息,则还需要返回步骤906继续等待接收ACK报文。
步骤910、判断当前端口的工作状态是否为Unselected_UP,如果是,则执行步骤911,否则,执行步骤915。
步骤911、将当前端口的工作状态设置为Selected_UP状态。
这里,当前端口能够正常接收和发送报文,因此,该端口对应的链路正常,能够参与报文转发。
步骤912、判断Wait_ACK定时器是否超时,如果是,则执行步骤913,否则,执行步骤903。
步骤913、判断当前端口的工作状态是否为Selected_UP状态,如果是,则执行步骤914,否则,执行步骤915。
步骤914、将当前端口的工作状态设置为Unselected_UP状态。
这里,因为当前端口无法正常接收报文,因此,该端口对应的链路故障,不能参与报文转发。
步骤915、本次通过当前端口的链路故障检测结束。
这里,由于链路随时都有可能发生故障或从故障中恢复,因此,需要不断的对链路进行检测,因此,对当前端口对应的链路进行一次检测之后,需要在KA定时器超时后,再次返回步骤902开始执行下一次对当前端口对应的链路的检测。
图8、9给出了两种对堆叠设备的一个第一探测端口对应的链路进行故障检测的方法,在实际应用中,堆叠设备可以包括多个第一探测端口,对其中每一个第一探测端口对应的链路均可以采用上述图8或9所示方法进行故障检测。
参见图10,图10是本发明实施例一堆叠设备第二探测端口链路故障检测流程图,包括以下步骤:
步骤1001、设置最大重试次数。
这里的最大重试次数与图8中的最大重试次数相同。
这里的最大重试次数是等待接收邻居堆叠设备发来的KeepAlive报文的最大次数。
步骤1002、将第二重试次数清零。
步骤1003、判断当前端口的工作状态是否是Selected_UP或Unselected_UP,如果是,则执行步骤1005,否则,执行步骤1004。
这里的当前端口是堆叠设备的其中一个第二探测端口。
步骤1004、结束当前检测流程。
这里,当前端口已经处于Unselected_DOWN状态,不能执行报文的收发功能,因此,不再继续对当前端口的链路检测流程,堆叠设备会持续的检测当前端口的物理状态,在检测发现当前端口的物理状态从DOWN转变为UP时,堆叠设备会将当前端口的状态设置为Unselected_UP状态,并重新对当前端口执行链路检测流程。
步骤1005、将KA定时器清零,第二重试次数加1。
这里的KA定时器的时间长度与图8中第一探测端口的KA定时器的时间长度相同。
步骤1006、等待接收邻居堆叠设备发来的KeepAlive报文。
步骤1007、KA定时器时间内,收到KeepAlive报文,转至步骤1009执行。
步骤1008、KA定时器已超时,未收到邻居堆叠设备发来的KeepAlive报文,转至步骤1013执行。
步骤1009、判断收到的KeepAlive报文中的Domain_ID是本堆叠系统ID,SMEM_ID是邻居堆叠设备ID,如果是,则转至步骤1010执行,否则,返回步骤1006继续等待接收邻居堆叠设备发来KeepAlive报文。
这里,在接收到邻居堆叠设备发来的KeepAlive报文后,需要检测该KeepAlive报文是否是邻居堆叠设备发来的,且该邻居堆叠设备与本堆叠设备在同一个堆叠系统,因而需要检测KeepAlive报文中的Domain_ID是否是本堆叠设备所在的堆叠系统的ID,且SMEM_ID是邻居堆叠设备ID。
步骤1010、向邻居堆叠设备发送ACK报文。
本步骤中,在从当前端口接收到邻居堆叠设备发来的KeepAlive报文后,需要向邻居堆叠设备发送ACK报文。
步骤1011、判断当前端口是否为Unselected_UP状态,如果是,则执行步骤1012,否则,执行步骤1016。
步骤1012、将当前端口设置为Selected_UP状态,参与报文转发。
这里,由于当前端口能够在规定的重试次数内接收到邻居堆叠设备发来的KeepALive报文,因此当前端口对应的链路正常,参与报文转发。
步骤1013、判断第二重试次数是否超过最大重试次数,如果是,则执行步骤1014,否则,执行步骤1003。
步骤1014、判断当前端口是否是Selected_UP状态,如果是,则执行步骤1015,否则,执行步骤1016。
步骤1015、将当前端口设置为Unselected_UP状态。
这里,由于当前端口未在规定的重试次数内收到邻居堆叠设备发来的KeepAlive报文,因此,当前端口对应的链路故障,不参与报文转发。
步骤1016、本次通过当前端口的链路故障检测结束。
这里,由于链路随时都有可能发生故障或从故障中恢复,因此,需要不断的对链路进行检测,因此,对当前端口对应的链路进行一次检测之后,需要在KA定时器超时后,再次返回步骤1002开始执行下一次对当前端口对应的链路的检测。
参见图11,图11是本发明实施例二堆叠设备第二探测端口链路故障检测流程图,包括以下步骤:
步骤1101、将Wait_KA定时器清零。
这里的Wait_KA定时器的时间长度与图9中Wait_ACK定时器的时间长度相同,表示本次对当前端口的检测过程中最大等待接收邻居堆叠设备发来KeepAlive报文的时间。
步骤1102、判断当前端口的状态是否为Selected UP或Unselected_UP状态,如果是,则执行步骤1104,否则,执行步骤1103。
这里,这里的当前端口是堆叠设备的其中一个第二探测端口。在对当前端口对应的链路进行检测前,需要判断端口的当前工作状态,如果已经处于Unselected_DOWN状态,则不需要继续对该连路进行检测。
步骤1103、结束当前检测流程。
这里,当前端口已经处于Unselected_DOWN状态,不能执行报文的收发功能,因此,不再继续对当前端口的链路检测流程,堆叠设备会持续的检测当前端口的物理状态,在检测发现当前端口的物理状态从DOWN转变为UP时,堆叠设备会将当前端口的状态设置为Unselected_UP状态,并重新对当前端口执行链路检测流程。
步骤1104、将KA定时器清零。
步骤1105、等待接收KeepAlive报文。
这里,在将KA定时器清零后,会在当前端口等待接收KeepAlive报文。所述的邻居堆叠设备是第二探测端口侧邻居堆叠设备。
步骤1106、KA定时器时间内,收到KeepALive报文,转至步骤1108执行。
步骤1107、KA定时器超时,未收到邻居堆叠设备发来的KeepAlive报文,转至步骤1112执行。
步骤1108、判断收到的KeepAlive报文中的Domain_ID是本堆叠系统ID,SMEM_ID是邻居堆叠设备ID,如果是,则转至步骤1109执行,否则,返回步骤1105继续等待接收邻居堆叠设备发来KeepAlive报文。
这里,在接收到邻居堆叠设备发来的KeepAlive报文后,需要检测该KeepAlive报文是否是邻居堆叠设备发来的,且该邻居堆叠设备与本堆叠设备在同一个堆叠系统,因而需要检测KeepAlive报文中的Domain_ID是本堆叠设备所在的堆叠系统的ID,SMEM_ID是邻居堆叠设备ID。
步骤1109、从当前端口向邻居堆叠设备发送ACK报文。
本步骤中,由于在KA定时器时间内收到了邻居堆叠设备发来的KeepAlive报文,因此,需要回应ACK报文到邻居堆叠设备。
步骤1110、判断当前端口的工作状态是否为Unselected_UP状态,如果是,则执行步骤1111,否则,执行步骤1115。
步骤1111、将当前端口的工作状态设置为Selected_UP状态。
这里,由于当前端口在KA定时器时间内收到邻居堆叠设备发来的KeepAlive报文,因此,当前端口对应的链路正常,能够参与报文转发。
步骤1112、判断wait_KA定时器是否超时,如果是,则执行步骤1113,否则,执行步骤1102。
步骤1113、判断当前端口的状态是否为Selected_UP状态,如果是,则执行步骤1114,否则,执行步骤1115。
步骤1114、将当前端口的状态设置为Unselected_UP状态。
这里,由于当前端口在Wait_KA定时器时间内未收到邻居堆叠设备发来的KeepAlive报文,因此,当前端口对应的链路故障,不能够参与报文转发。
步骤1115、本次通过当前端口的链路故障检测结束。
这里,由于链路随时都有可能发生故障或从故障中恢复,因此,需要不断的对链路进行检测,因此,对当前端口对应的链路进行一次检测之后,需要在KA定时器超时后,再次返回步骤1101开始执行下一次对当前端口对应的链路的检测。
图10、11给出了两种对堆叠设备的一个第一探测端口对应的链路进行故障检测的方法,在实际应用中,堆叠设备可以包括多个第一探测端口,对其中的每一个第一探测端口对应的链路均可以采用上述图10或11所示方法进行故障检测。
需要说明的是,采用本发明的检测机制进行堆叠设备的控制端口选择,可以解决一端堆叠设备重启后,特殊情况下出现的堆叠无法成功的问题。假设堆叠设备的右侧端口为第一探测端口,则采用本发明的检测机制进行控制端口选择方法如下:
A、从所有物理状态为UP的右侧端口发送KeepAlive报文,并等待接收右侧邻居堆叠设备回应的ACK报文,每个右侧端口均按照图8或图9所示的流程处理;
B、将第一个接收到ACK报文的右侧端口选择为右控制端口;
C、后续从该右控制端口发送的KeepAlive报文中携带控制端口标记,右侧堆叠设备收到此携带控制端口标记的KeepAlive报文后,将接收到此KeepAlive报文的端口设置为自身的左控制端口。至此,两台相邻的堆叠设备间的一对控制端口确定。
在控制端口确定之后,对堆叠设备中状态为selected_UP所有第一探测端口仍采用图8所示的流程进行端口链路故障检测,只有在右控制端口的状态转变为Unselected_DOWN或Unselected_UP时,说明该右控制端口对应的链路故障,无法正常收发控制报文,因此需要重新选择控制端口,执行上述步骤A、B、C重新进行该堆叠设备的控制端口选择。因此,当采用本发明的链路故障检测方法将堆叠设备中的某一个第一探测端口设置为Unselected_DOWN或Unselected_UP后,进一步包括:判断该第一探测端口是否是该堆叠设备的控制端口,如果是,则需要执行上述步骤A、B、C重新进行控制端口的选择。
由上面的实施例的内容可以看出,本发明是堆叠设备对与其相邻的左右两个堆叠设备间端口链路的故障检测,因此,无论是环式堆叠组网还是链式堆叠组网,都适用。
应用本发明,本端堆叠设备能够及时发现传输设备和对端堆叠设备间的链路故障,因而能够支持跨越传输设备,进而可以将堆叠设备分别放在较远的位置。另外,本发明采用单向发送KeepAlive报文和ACK报文的机制,还能够节约带宽,降低负载度,而且易于定位故障链路,在多台设备堆叠情况下,这种优点尤为明显。
本发明还提供了一种堆叠设备,该堆叠设备在第一探测端口侧通过传输设备与其所在的堆叠系统中的其它堆叠设备相连。该堆叠设备能够跨越传输设备进行数据传输,使堆叠设备可以分别放置在足够远的位置。
参见图12,图12是本发明实施例一在第一探测端口实现链路故障检测的堆叠设备结构图,包括:第一配置单元1201、第一控制单元1202、第一收发单元1203;其中,
第一配置单元1201,用于预先配置第一设定时间、最大重试次数;用于存储该堆叠设备中第一探测端口的工作状态;
第一控制单元1202,用于在第一配置单元1201中存储的第一探测端口为Selected_UP或Unselected_UP状态时,通知第一收发单元1203发送探询KeepAlive报文;用于等待接收到第一收发单元1203发来的接收到ACK报文的通知,如果在第一设定时间内接收到第一收发单元1203的通知,则判断第一收发单元1203接收到的ACK报文是否是邻居堆叠设备针对第一收发单元1203发送的KeepAlive报文发送的ACK报文,若是,则将当前第一探测端口为Selected_UP状态的保持其状态不变,将当前第一探测端口为Unselected-UP状态的设置为Selected_UP状态,若否,则继续等待接收第一收发单元1203发来接收到ACK报文的通知;如果在第一设定时间内未接收到第一收发单元1203的通知,若未超过最大重试次数,则进行再一次的探测,若超过最大重试次数,则将当前第一探测端口为Selected_UP状态的设置为Unselected-UP状态,将当前第一探测端口为Unselected-UP状态的保持其状态不变;
第一收发单元1203,用于在接收到第一控制单元1202发来的发送探询KeepAlive报文通知后,从第一探测端口发送KeepAlive报文;用于等待接收ACK报文,并在接收到ACK报文后,通知第一控制单元1202;
其中,第一探测端口为发送KeepAlive报文并接收ACK报文的端口;端口Selected_UP状态为物理状态为启动UP,通过该端口的本端堆叠设备与传输设备之间的链路及传输设备与对端堆叠设备之间的链路均正常时该端口的工作状态;Unselected-UP状态为物理状态为启动UP,通过该端口的的本端堆叠设备与传输设备之间的链路正常,且传输设备与对端堆叠设备间的链路故障时该端口的工作状态。
所述的第一配置单元1201还预先为第一探测端口配置了序列号Seq;
所述的KeepAlive报文和ACK报文均包括Seq、SMEM_ID、Domain_ID字段,其中,Seq用于标识KeepAlive报文或ACK报文的序列号;SMEM_ID用于标识发送KeepAlive报文或ACK报文的源堆叠设备ID;Domain_ID用于标识发送KeepAlive报文或ACK报文的源堆叠设备所在的堆叠系统ID;
所述第一控制单元1202,在判断第一收发单元1203接收到的ACK报文是否是邻居堆叠设备针对第一收发单元1203发送的KeepAlive报文发送的ACK报文时,用于:判断第一收发单元1203接收到的ACK报文中的Seq、Domain_ID是否与第一收发单元1203发送的KeepAlive报文中的Seq、Domain_ID分别相同,且ACK报文中的SMEM_ID是第一探测端口侧的邻居堆叠设备ID,如果是,则第一收发单元1203接收到的ACK报文是邻居堆叠设备针对第一收发单元1203发送的KeepAlive报文发送的ACK报文,否则,第一收发单元1203接收到的ACK报文不是邻居堆叠设备针对第一收发单元1203发送的KeepAlive报文发送的ACK报文。
所述的第一配置单元1201还用于存储该堆叠设备的控制端口信息;
该堆叠设备还包括:第一端口状态检测单元1204、第一控制端口选择单元1205;其中,
第一端口状态检测单元1204,用于持续检测该堆叠设备中第一探测端口的物理状态,当第一探测端口的物理状态从启动UP转变为故障DOWN时,将该端口设置为Unselected_DOWN状态,当第一探测端口的物理状态从DOWN转变为UP时,将该端口设置为Unselected_UP状态;
第一控制端口选择单元1205,用于在第一配置单元1201中第一探测端口被设置为Unselected_DOWN或Unselected_UP状态后,判断该第一探测端口是否为控制端口,如果是,则从所有物理状态为UP的第一探测端口发送KeepAlive报文,并将第一个接收到ACK报文的第一探测端口选择为控制端口,修改第一配置单元1201中存储的控制端口信息;
所述的第一收发单元1203,在发送KeepAlive报文之前进一步用于:判断当前第一探测端口是否为控制端口,如果是,则在KeepAlive报文中携带控制端口标记。
本发明还提供了一种堆叠设备,该堆叠设备在第一探测端口侧通过传输设备与其所在的堆叠系统中的其它堆叠设备相连。该堆叠设备能够跨越传输设备进行数据传输,使堆叠设备可以分别放置在足够远的位置。
参见图13,图13是本发明实施例二在第一探测端口实现链路故障检测的堆叠设备结构图,包括:第二配置单元1301、第二控制单元1302、第二收发单元1303;其中,
第二配置单元1301,用于预先配置第一设定时间、第二设定时间;用于存储该堆叠设备中第一探测端口的工作状态;
第二控制单元1302,用于在第二配置单元1301中存储的第一探测端口为Selected_UP或Unselected_UP状态时,通知第二收发单元1303发送探询KeepAlive报文;用于等待接收到第二收发单元1303发来的接收到ACK报文的通知,如果在第一设定时间内接收到第二收发单元1303的通知,则判断第二收发单元1303接收到的ACK报文是否是邻居堆叠设备针对第二收发单元1303发送的KeepAlive报文发送的ACK报文,若是,则将当前第一探测端口为Selected_UP状态的保持其状态不变,将当前第一探测端口为Unselected-UP状态的设置为Selected_UP状态,若否,则继续等待接收第二收发单元1303发来接收到ACK报文的通知;如果在第一设定时间内未接收到第二收发单元1303的通知,若未超过第二设定时间,则进行再一次的探测,若超过第二设定时间,则将当前第一探测端口为Selected_UP状态的设置为Unselected-UP状态,将当前第一探测端口为Unselected-UP状态的保持其状态不变;
第二收发单元1303,用于在接收到第二控制单元1302发来的发送探询KeepAlive报文通知后,从第一探测端口发送KeepAlive报文;用于等待接收ACK报文,并在接收到ACK报文后,通知第二控制单元1302;
其中,第一探测端口为发送KeepAlive报文并接收ACK报文的端口;端口Selected_UP状态为物理状态为启动UP,通过该端口的本端堆叠设备与传输设备之间的链路及传输设备与对端堆叠设备之间的链路均正常时该端口的工作状态;Unselected-UP状态为物理状态为启动UP,通过该端口的的本端堆叠设备与传输设备之间的链路正常,且传输设备与对端堆叠设备间的链路故障时该端口的工作状态。
所述的第二配置单元1301还预先为第一探测端口配置了序列号Seq;
所述的KeepAlive报文和ACK报文均包括Seq、SMEM_ID、Domain_ID字段,其中,Seq用于标识KeepAlive报文或ACK报文的序列号;SMEM_ID用于标识发送KeepAlive报文或ACK报文的源堆叠设备ID;Domain_ID用于标识发送KeepAlive报文或ACK报文的源堆叠设备所在的堆叠系统ID;
所述第二控制单元1302,在判断第二收发单元1303接收到的ACK报文是否是邻居堆叠设备针对第二收发单元1303发送的KeepAlive报文发送的ACK报文时,用于:判断第二收发单元1303接收到的ACK报文中的Seq、Domain_ID是否与第二收发单元1303发送的KeepAlive报文中的Seq、Domain_ID分别相同,且ACK报文中的SMEM_ID是第一探测端口侧的邻居堆叠设备ID,如果是,则第二收发单元1303接收到的ACK报文是邻居堆叠设备针对第二收发单元1303发送的KeepAlive报文发送的ACK报文,否则,第二收发单元1303接收到的ACK报文不是邻居堆叠设备针对第二收发单元1303发送的KeepAlive报文发送的ACK报文。
所述的第二配置单元1301还用于存储该堆叠设备的控制端口信息;
该堆叠设备还包括:第二端口状态检测单元1304、第二控制端口选择单元1305;其中,
第二端口状态检测单元1304,用于持续检测该堆叠设备中第一探测端口的物理状态,当第一探测端口的物理状态从启动UP转变为故障DOWN时,将该端口设置为Unselected_DOWN状态,当第一探测端口的物理状态从DOWN转变为UP时,将该端口设置为Unselected_UP状态;
第二控制端口选择单元1305,用于在第二配置单元1301中第一探测端口被设置为Unselected_DOWN或Unselected_UP状态后,判断该第一探测端口是否为控制端口,如果是,则从所有物理状态为UP的第一探测端口发送KeepAlive报文,并将第一个接收到ACK报文的第一探测端口选择为控制端口,修改第二配置单元1301中存储的控制端口信息;
所述的第二收发单元1303,在发送KeepAlive报文之前进一步用于:判断当前第一探测端口是否为控制端口,如果是,则在KeepAlive报文中携带控制端口标记。
本发明还提供了第三种堆叠设备,该堆叠设备在第二探测端口侧通过传输设备与其所在的堆叠系统中的其它堆叠设备相连。该堆叠设备能够跨越传输设备进行数据传输,使堆叠设备可以分别放置在足够远的位置。
参见图14,图14是本发明实施例一在第二探测端口实现链路故障检测的堆叠设备结构图,包括:第三配置单元1401、第三控制单元1402、第三收发单元1403;其中
第三配置单元1401,用于预先配置第一设定时间、最大重试次数;用于存储该堆叠设备中第二探测端口的工作状态;
第三控制单元1402,用于在第三配置单元1401中存储的第二探测端口为Selected_UP或Unselected_UP状态时,通知第三收发单元1403等待接收探询KeepAlive报文,并等待接收第三收发单元1403发来的接收到KeepAlive报文的通知,如果在第一设定时间内接收到第三收发单元1403发来的接收到KeepAlive报文的通知,则判断第三收发单元1403接收到的KeepAlive报文是否是邻居堆叠设备发来的KeepAlive报文,若是,则将当前第二探测端口为Selected_UP状态的保持其状态不变,将当前第二探测端口为Unselected-UP状态的设置为Selected_UP状态,并通知第三收发单元1403从当前第二探测端口发送ACK报文,若否,则继续等待接收第三收发单元1403发来接收到KeepAlive报文的通知;如果在第一设定时间内未接收到第三收发单元1403发来的接收到KeepAlive报文的通知,若未超过最大重试次数,则进行再一次的探测,若超过最大重试次数,则将当前第二探测端口为Selected_UP状态的设置为Unselected-UP状态,将当前第二探测端口为Unselected-UP状态的保持其状态不变;
第三收发单元1403,用于接收到第三控制单元1402发来的等待接收KeepAlive报文的通知后,在第二探测端口等待接收KeepAlive报文;用于接收到KeepAlive报文后,通知第三控制单元1402接收到KeepAlive报文;用于接收到第三控制单元1402发来的发送ACK报文的通知后,从当前第二探测端口发送ACK报文;
其中,第二探测端口为接收KeepAlive报文并发送ACK报文的端口;端口Selected_UP状态为物理状态为启动UP,通过该端口的本端堆叠设备与传输设备之间的链路及传输设备与对端堆叠设备之间的链路均正常时该端口的工作状态;Unselected-UP状态为物理状态为启动UP,通过该端口的的本端堆叠设备与传输设备之间的链路正常,且传输设备与对端堆叠设备间的链路故障时该端口的工作状态。
所述的KeepAlive报文和ACK报文均包括SMEM_ID、Domain_ID字段,其中,SMEM_ID用于标识发送KeepAlive报文或ACK报文的源堆叠设备ID;Domain_ID用于标识发送KeepAlive报文或ACK报文的源堆叠设备所在的堆叠系统ID;
所述的第三控制单元1402在判断第三收发单元1403接收到的KeepAlive报文是否是邻居堆叠设备发来的KeepAlive报文时,用于:判断接收到的KeepAlive报文中的Domain_ID是否与本堆叠设备所在堆叠系统ID相同,且KeepAlive报文中的SMEM_ID是第二探测端口侧的邻居堆叠设备ID,如果是,则第三收发单元1403接收到的KeepAlive报文是邻居堆叠设备发来的KeepAlive报文,否则,第三收发单元1403接收到的KeepAlive报文不是邻居堆叠设备发来的KeepAlive报文。
所述的第三配置单元1401还用于存储控制端口信息;用于持续检测该堆叠设备中第二探测端口的物理状态,当第二探测端口的物理状态从启动UP转变为故障DOWN时,将该端口设置为Unselected_DOWN状态,当第二探测端口的物理状态从DOWN转变为UP时,将该端口设置为Unselected_UP状态;
所述的第三收发单元1403接收到KeepAlive报文后,通知第三控制单元1402接收到KeepAlive报文之前进一步用于:判断接收到的KeepAlive报文是否携带控制端口标记,如果是,则将接收到该KeepAlive报文的第二探测端口选择为控制端口,并修改第三配置单元1401中存储的控制端口信息。
本发明还提供了第四种堆叠设备,该堆叠设备在第二探测端口侧通过传输设备与其所在的堆叠系统中的其它堆叠设备相连。该堆叠设备能够跨越传输设备进行数据传输,使堆叠设备可以分别放置在足够远的位置。
参见图15,图15是本发明实施例二在第二探测端口实现链路故障检测的堆叠设备结构图,包括:第四配置单元1501、第四控制单元1502、第四收发单元1503;其中,
第四配置单元1501,用于预先配置第一设定时间、第三设定时间;用于存储该堆叠设备中第二探测端口的工作状态;
第四控制单元1502,用于在第四配置单元1501中存储的第二探测端口为Selected_UP或Unselected_UP状态时,通知第四收发单元1503等待接收探询KeepAlive报文,用于在通知第四收发单元1503等待接收KeepAlive报文后,等待接收第四收发单元1503发来的接收到KeepAlive报文的通知,如果在第一设定时间内接收到第四收发单元1503发来的接收到KeepAlive报文的通知,则判断第四收发单元1503接收到的KeepAlive报文是否是邻居堆叠设备发来的KeepAlive报文,若是,则将当前第二探测端口为Selected_UP状态的保持其状态不变,将当前第二探测端口为Unselected-UP状态的设置为Selected_UP状态,并通知第四收发单元1503从当前第二探测端口发送ACK报文,若否,则继续等待接收第四收发单元1503发来接收到KeepAlive报文的通知;如果在第一设定时间内未接收到第四收发单元1503发来的接收到KeepAlive报文的通知,若未超过第三设定时间,则进行再一次的探测,若超过第三设定时间,则将当前第二探测端口为Selected_UP状态的设置为Unselected-UP状态,将当前第二探测端口为Unselected-UP状态的保持其状态不变;
第四收发单元1503,用于接收到第四控制单元1502发来的等待接收KeepAlive报文的通知后,在第二探测端口等待接收KeepAlive报文;用于接收到KeepAlive报文后,通知第四控制单元1502接收到KeepAlive报文;用于接收到第四控制单元1502发来的发送ACK报文的通知后,从当前第二探测端口发送ACK报文;
其中,第二探测端口为接收KeepAlive报文并发送ACK报文的端口;端口Selected_UP状态为物理状态为启动UP,通过该端口的本端堆叠设备与传输设备之间的链路及传输设备与对端堆叠设备之间的链路均正常时该端口的工作状态;Unselected-UP状态为物理状态为启动UP,通过该端口的的本端堆叠设备与传输设备之间的链路正常,且传输设备与对端堆叠设备间的链路故障时该端口的工作状态。
所述的KeepAlive报文和ACK报文均包括SMEM_ID、Domain_ID字段,其中,SMEM_ID用于标识发送KeepAlive报文或ACK报文的源堆叠设备ID;Domain_ID用于标识发送KeepAlive报文或ACK报文的源堆叠设备所在的堆叠系统ID;
所述的第四控制单元1502在判断第四收发单元1503接收到的KeepAlive报文是否是邻居堆叠设备发来的KeepAlive报文时,用于:判断接收到的KeepAlive报文中的Domain_ID是否与本堆叠设备所在堆叠系统ID相同,且KeepAlive报文中的SMEM_ID是第二探测端口侧的邻居堆叠设备ID,如果是,则第四收发单元1503接收到的KeepAlive报文是邻居堆叠设备发来的KeepAlive报文,否则,第四收发单元1503接收到的KeepAlive报文不是邻居堆叠设备发来的KeepAlive报文。
所述的第四配置单元1501还用于存储控制端口信息;用于持续检测该堆叠设备中第二探测端口的物理状态,当第二探测端口的物理状态从启动UP转变为故障DOWN时,将该端口设置为Unselected_DOWN状态,当第二探测端口的物理状态从DOWN转变为UP时,将该端口设置为Unselected_UP状态;
所述的第四收发单元1503接收到KeepAlive报文后,通知第四控制单元1502接收到KeepAlive报文之前进一步用于:判断接收到的KeepAlive报文是否携带控制端口标记,如果是,则将接收到该KeepAlive报文的第二探测端口选择为控制端口,并修改第四配置单元1501中存储的控制端口信息。
以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明保护的范围之内。