具体实施方式
为解决现有技术存在的上述问题,本发明实施例利用链路检测机制,判断连接EC双网口的两个交换机的连通性,并根据交换机的连通情况对交换机连接EC的端口状态进行设置,以防止环路的产生和链路的快速切换。
本发明实施例中定义如下交换机端口状态:
ACTIVE(转发)状态:该状态下的端口可转发数据报文;
STANDBY(待命)状态:该状态下的端口不转发数据报文,但能够接收和发送链路检测协议报文;
LEARN(学习)状态:该状态下的端口只转发和接收链路检测协议报文;
阻塞状态:该状态下的端口不接收和发送任何报文。
下面结合附图,对本发明实施进行详细描述。
本发明实施例仍以图1所示的组网架构为例,其中,交换机S 1的端口E1和交换机S2的端口E2属于同一VLAN。
在连接EC双网口的两个二层交换机(S1、S2)的对应端口(E1、E2)上配置链路检测协议,本发明实施例以CFD(Connectivity Fault Detection,连通错误检测)协议为例,在交换机S1连接EC的端口E1,以及交换机S2连接EC的端口E2上配置CFD的内向维护端点。另外,还要使能维护端点的CCM(Continuity Check Message,连续性检测报文)发送功能。在端口E1和端口E2上进行如上配置后,端口E1和端口E2进入LEARN状态。该状态下的端口只转发和接收CCM报文。
在进行如上配置时,可将端口E1和端口E2上的内向维护端点配置为同一维护域的同一维护集,并对应该维护集设置服务实例。根据CFD协议提供的连通性检测功能,交换机会周期性的向同一服务实例内的维护端点发送CCM报文。本实施例中,两个交换机可通过比较接收到的CCM报文的源MAC地址信息决定端口的状态,从而使两个处于LEARN状态的端口中的一个端口切换为ACTIVE状态,另一个端口切换为STANDBY状态。
具体实施时,可约定源MAC地址小的设备优先,比如交换机S2接收到交换机S1发送的CCM报文的源MAC地址小于本设备发送CCM报文的源MAC地址,则将端口E2阻塞,状态由LEARN状态切换为STANDBY状态,只允许CCM报文的发送和接收;另一方面,交换机S1接收到交换机S2发送的CCM报文的源MAC地址大于本设备发送CCM报文的源MAC地址,则将端口E1状态由LEARN状态切换为ACTIVE状态。此后,交换机S1可以转发EC与其他设备之间的流量。也可通过扩展链路检测报文,使得链路检测报文携带设备优先级,或端口优先级等信息,将这类优先级信息作为比较的依据,从而确定端口状态。
根据CFD协议提供的连通性检测功能,交换机会周期性的向同一服务实例内的维护端点发送报文。当某交换机未能在一定时间内(CFD协议中规定为3.5个报文发送周期)接收到对端交换机发送的CCM报文时,将判断对端交换机故障或对应链路发生故障。
为了在发生链路故障的情况下,保证流量的正常转发,本发明实施例中,当端口状态为STANDBY的交换机在设定长时间内未接收到对端交换机发送的CCM报文时,则判断对端交换机故障或对应链路故障,此时,该交换机将该STANDBY状态的端口切换为ACTIVE状态,从而实现链路切换。其中,所述设定长时间的时间长度,可参照CFD协议制定,如在3.5个CCM报文发送周期内未收到对端维护端点发来的CCM报文,则认为链路有问题。
进一步的,为加速网络收敛,当交换机的端口由STANDBY状态切换至ACTIVE状态时,该交换机可通过该ACTIVE状态的端口发送特定报文,以使与该端口连接的EC能够根据该报文刷新本地的MAC地址表,从而节省EC进行MAC地址学习的时间。该特定报文可以是一系列的单播报文,该单播报文的源MAC地址分别为该交换机的MAC地址表中的MAC地址,该单播报文的目的MAC地址是该交换机之前接收到的CCM报文中的源MAC地址。一方面,通过将该单播报文的源MAC地址设置为该交换机的MAC地址表中的MAC地址,可以使EC在接收到该报文后学习到这些MAC地址以刷新相应端口上的MAC地址表,即借助于交换机构造并发送的这些单播报文使EC能够实现MAC地址刷新;另一方面,通过将单播报文的目的MAC地址设置为该交换机接收到的CCM报文的源MAC地址,可以保证这些单播报文仅在本交换机和发送该CCM报文的交换机之间的链路上转发,不会影响网络上其它设备的MAC地址学习。
进一步的,交换机发送完构造的单播报文后,再通过与该发送端口同VLAN内的其他端口发送Flush报文,以通知同VLAN内的其他网络设备进行MAC地址转发表项,以及ARP(Address Resolution Protocol,地址解析协议)或/和ND(Neighbor Discover,邻居发现)等表项的刷新操作。当然发送Flush报文的操作与上述发送特定单播报文的操作在时序上没有严格要求。
考虑到交换机的MAC地址表中还包括与该端口(即状态从STANDBY切换到ACTIVE的端口)连接的EC的MAC地址,为了避免从该端口发出去的单播报文的源MAC地址为与该端口连接的EC的MAC地址,即为了避免EC接收到源MAC地址为自己的报文,本发明实施例中,在构造上述单播报文时,可不包括源MAC地址为该ACTIVE状态端口作为出端口所对应的MAC地址(即不包括出端口为该ACTIVE状态端口的MAC地址)。
在具体实施时,以图1所示的组网架构为例,当交换机S2通过CFD协议提供的连通性检测功能检测到交换机S1出现故障,或EC的P1端口与交换机S1的E1端口间链路出现故障,导致交换机S2接收不到交换机S1发送的CCM报文时,交换机S2将状态为STANDBY的端口E2设置为ACTIVE状态。此后,交换机S1可转发EC与其他设备之间的流量。其链路切换流程可如图2所示,当交换机S2的端口E2在设定长时间内未接收到交换机S1发送的CCM报文时,该流程可包括:
步骤201,交换机S2将状态为STANDBY的端口E2切换为ACTIVE状态。
步骤202,交换机S2根据其上的MAC地址表,构造一系列单播报文,并通过端口E2发送这些单播报文,EC的端口P2接收到这些单播报文后,根据该单播报文的源MAC地址刷新该端口上的MAC地址表。
其中,这些单播报文的源MAC地址为端口E2所在VLAN内、出端口不为端口E2的其他所有MAC地址,目的MAC地址为从交换机S1接收的CCM报文的源MAC地址。
步骤203,交换机S2向该VLAN的其他端口发送Flush报文,以通知同VLAN内的其他网络设备进行MAC地址转发表项,以及ARP或/和ND表项的刷新操作。
当发生故障的交换机恢复正常,或交换机与EC间的链路故障恢复后,交换机可以向对端交换机发送CCM报文以及接收对端设备发送的CCM报文,这样,使得两交换机的CFD机制检测到链路正常。此时,原故障交换机或故障链路上的交换机与EC连接的端口的状态为LEARN状态,而对端交换机与EC连接的端口的状态为ACTIVE状态,这种情况下,双方交换机通过比较各自接收到的CCM报文来确定各自与EC连接的端口的状态,从而实现将其中一个交换机与EC连接的端口设置为ACTIVE状态,另一个交换机与EC连接的端口设置为STANDBY状态。具体根据CCM报文确定端口状态的方式可如前所述,如根据MAC地址大小或端口优先级来确定,在此不再赘述。
进一步的,为了加速网络收敛速度,当有端口从ACTIVE状态切换为STANDBY状态时,该发生端口状态变化的交换机通过与该端口属于同一VLAN中除与该端口以外的所有其他端口发送Flush报文,以通知同VLAN内的其他网络设备进行MAC地址表,以及ARP/ND等表项的刷新操作。并且,在该端口上(即该发生状态变化的端口上)快速进行shutdown和up切换操作,使得EC能感知链路的down和up,促使EC清空与该链路连接的端口上的MAC表。
在具体实施时,以图1所示的组网架构为例,当交换机S1恢复正常,或交换机S1的端口E1与EC的端口P1间链路恢复正常后,使得交换机S1和交换机S2的CFD机制检测到链路正常,此时,交换机S1上的端口E1的状态为LEARN状态,交换机S2上的端口E2的状态为ACTIVE状态,双方交换机均可发送CCM报文以及接收对端发送的CCM报文,其后的链路切换流程可如图3所示,包括:
步骤301,交换机S2比较接收到的CCM报文中的源MAC地址与本设备发送的CCM报文的源MAC地址,根据前述的原则(即MAC地址小的端口应设为ACTIVE状态),由于交换机S2的MAC地址大于交换机S1的MAC地址,因此交换机S1上的端口E1由LEARN状态切换为ACTIVE状态,交换机S2上的端口E2由ACTIVE状态切换为STANDBY状态。
步骤302,交换机S2通过端口E2所在VLAN内除端口E2以外的所有其他端口发送Flush报文,通知同VLAN内的其他网络设备进行MAC地址转发表项和ARP/ND表项的刷新操作。
步骤303,交换机S2在端口E2上快速进行shutdown和up切换操作,使得EC能感知链路的down和up。EC在感知端口P2所在链路的down和up变化后,删除P2端口上的MAC地址信息。此时,由于端口E2进行了down和up切换操作,可能会使得该端口由STANDBY状态切换为LEARN状态,重新收到CCM报文后,再切换回STANDBY状态,而交换机S1可能由于交换机S2上端口E2的down和up切换,短时间内未收到CCM报文,但端口E1当前处于ACTIVE状态,不会影响流量转发,因此端口E1上的ACTIVE状态维持不变。
图3所示流程中的步骤302和步骤303的时序没有严格要求。
通过如上的处理,可以使得EC在不改变现有机制的情况下,快速响应网络拓扑变化,保证链路切换时,业务能在较短时间内得到恢复,如可以实现毫秒级的恢复。
本发明实施例上述在交换机与EC连接的端口上所实现的功能,包括:端口状态的确定、端口状态变化时所执行的处理机制等,可称为EC联动机制。更优的,交换机连接EC的端口上的EC联动机制还可以与上行链路CFD CC机制联动,即,在交换机与上行链路上的网络设备上配置CFD或其他链路检测协议并进行链路检测,当交换机之间CFD检测到链路正常,端口状态为ACTIVE的交换机发现联动的上行链路发生故障,则将本设备上与EC连接的当前为ACTIVE状态的端口阻塞,以阻止该端口接收EC的流量。此后,如果发生故障的链路恢复正常,则将原阻塞的端口恢复为LEARN状态,在LEARN状态下的端口可以发送CCM报文,根据前述描述,此种情况下,该交换机与对端交换机将根据CCM报文确定各自端口的状态,最终实现其中的一个端口为ACTIVE状态,另一个端口为STANDBY状态,其中,从ACTIVE状态切换为SDANDBY状态的端口所在的交换机将按照前述方式,通过发送报文以使其他设备的MAC地址等表项进行更新。
在具体实施时,比如若图1中的交换机S1的端口E1当前为ACTIVE状态,交换机S1到网关设备S3的链路出现故障,以及后续该链路故障恢复的过程中,如图4所示,包括以下步骤:
步骤401,交换机S1将本设备上与EC连接的端口E1阻塞,不发送CCM报文。
步骤402,交换机S2超时接收不到CCM报文,则将本设备的端口E2的状态由STANDBY切换为ACTIVE状态,并按照图2所示的流程中的步骤202~203的方式,通过交换机S2发送报文以更新其他相关设备的MAC地址等表项。
步骤403,交换机S1与S3间链路恢复正常,交换机S1将原阻塞的端口E1恢复为LEARN状态,该状态下可以发送CCM报文。
步骤404,交换机S1和交换机S2根据接收和发送的CCM报文的源MAC地址,确定各自与EC连接的端口的状态。由于交换机S1的MAC地址小于交换机S2的MAC地址,则交换机S1的端口E1由LEARN状态切换为ACTIVE状态,交换机S2上的端口E2由ACTIVE状态切换为STANDBY状态。
步骤405,交换机S2按照图3所示流程中的步骤302~303,通过发送报文以及快速切换与EC连接的链路状态的方式,更新相应设备上的MAC地址等表项。
通过上述描述可以看出,本发明实施例一方面,通过在网络机双网口连接的两个交换即上与EC连接的端口上配置链路检测协议,并根据在该端口上所配置的链路检测协议进行链路检测,从而可以及时发现链路故障情况;另一方面,当有交换机检测到对端交换设备链路故障,且本端交换机与EC连接的端口为待命状态时,将该待命状态的端口切换为转发状态,从而在发生链路故障时及时进行链路故障切换;再一方面,在进行端口状态切换后,交换机根据其上的MAC地址表生成单播报文,通过该端口发送所生成的单播报文,以使EC根据该单播报文进行MAC地址表更新,并通过该端口所属VLAN内除了该端口以外的其他端口发送Flush报文,以通知同VLAN内的其他网络设备更新包括MAC地址表在内的相关表项,从而使其他设备及时更新各自的MAC地址表等相关表项。与现有技术相比,减少了链路切换的时延。
需要说明的是本发明的上述实施例是以视频监控系统的组网架构为例描述的,事实上本发明实施例也可应用于类似网络架构以及有类似需求的组网系统,如,对于某些双网口设备,其不支持STP、RRPP等特性的情况,采用本发明实施例也可减少链路切换时延,提高链路切换效率。
基于相同的技术构思,本发明实施例还提供了一种可应用于上述流程的交换设备。如图5所示,该交换设备可包括:
链路检测配置模块501,用于在与网络设备双网口连接的端口上配置链路检测协议;
链路检测模块502,用于根据在与所述网络设备连接的端口上所配置的链路检测协议与连接于所述所述网络设备双网口中的另一网口的对端交换设备之间进行链路检测;
端口状态管理模块503,用于在本端交换设备检测到对端交换设备链路故障,且本端交换设备上与所述网络设备连接的端口为待命状态时,将该待命状态的端口切换为转发状态;
表项刷新通知模块504,用于根据本端交换设备上的MAC地址表生成单播报文,通过切换为转发状态的端口发送所生成的单播报文,并通过该端口所属VLAN内除了该端口以外的其他端口发送Flush报文;其中,所述单播报文的源MAC地址分别为所述MAC地址表中该端口所属VLAN内的MAC地址,且各单播报文的源MAC地址各不相同,所述单播报文的目的MAC地址为所述本端交换设备从对端交换设备接收过的链路检测报文的源MAC地址,所述单播报文用于使接收到该报文的网络设备根据该报文进行MAC地址表更新。
上述交换设备中,表项刷新通知模块504在根据MAC地址表生成单播报文时,可针对MAC地址表中所述端口所属VLAN内除了该端口作为出端口所对应的MAC地址以外,分别使用其他MAC地址作为源MAC地址生成单播报文。
上述交换设备中,端口状态管理模块503还可在链路检测配置模块501配置链路检测协议之后,使本端交换设备上与所述网络设备连接的端口进入学习状态,根据本端交换设备发送的和从对端交换设备接收的链路检测报文,将该端口从学习状态切换为转发状态或待命状态。
上述交换设备中,表项刷新通知模块504还用于:在本端交换设备上与所述网络设备连接的端口为转发状态的情况下,本端交换设备检测到对端交换设备链路故障恢复,并将该端口从转发状态切换为待命状态之后,通过该端口所属的VLAN内除该端口以外的其他端口发送Flush报文;以及,在该端口上进行shutdown和up的快速切换操作,以使所述网络设备感知该链路的状态变化并在感知到该链路状态变化后清空与该链路连接的端口上的MAC地址表。
上述交换设备中,端口状态管理模块503还用于:在本端交换设备为发生链路故障的交换设备且链路故障恢复时,将与所述网络设备连接的端口进入学习状态,根据本端交换设备发送的和从对端交换设备接收的链路检测报文,将本端交换设备上与所述网络设备连接的端口从学习状态切换为转发状态或待命状态;以及,在本端交换设备上当前与所述网络设备连接的端口为转发状态,并检测到对端交换设备链路故障恢复时,根据本端交换设备发送的和从对端交换设备接收的链路检测报文,将本端交换设备上与所述网络设备连接的端口从转发状态切换为待命状态或保持转发状态。
上述交换设备中,链路检测配置模块501还可与上行链路上的设备之间配置链路检测协议。相应的,链路检测模块502根据与上行链路上的设备之间配置的链路检测协议,与上行链路上的设备进行链路检测。端口状态管理模块503还用于:在本端交换设备上与所述网络设备连接的端口为转发状态的情况下,检测到上行链路故障时,将本端交换设备上与所述网络设备连接的当前为转发状态的端口阻塞。
上述交换设备中,端口状态管理模块503还用于:在本端交换设备上与所述网络设备连接的端口为阻塞状态的情况下检测到上行链路故障恢复后,将阻塞的端口恢复为学习状态,根据本端交换设备发送的和从对端交换设备接收的链路检测报文,将该端口从学习状态切换为转发状态或待命状态。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到本发明可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台终端设备(可以是手机,个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述的方法。
以上所述仅是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视本发明的保护范围。