一种VRRP网关、VRRP系统和双主探测及修复方法
技术领域
本发明涉及数据通信技术,特别涉及VRRP协议(Virtual Router RedundancyProtocol,虚拟路由冗余协议)中网络异常时自动修复的技术。
背景技术
目前部分客户在接入层面,一般还是会采用VRRP组网,但VRRP组网往往为了简单,会将两个三层交换机或一体机(即VRRP网关)的接口串联起来,其他接口直接与终端连接,其组网系统的示意图参见图1,其包括两个VRRP网关,分别记为第一VRRP网关N1及第二VRRP网关N2,两个VRRP网关之间互联,还包括多个终端,每个终端只与一个VRRP网关一一对应连接,可见在VRRP网关中,其互联端口和连接终端的端口都在同一个VLAN中,并且两个VRRP网关都启用三层接口及VRRP协议。当两个VRRP网关之间的线路故障时,必然就会出现双主现象,双主现象是指:VRRP组网在正常情况下,两个VRRP网关之中只有一个主设备,另一个为备用设备,当网络出现异常情况时,例如VRRP心跳不通时,两个VRRP网关都成为主设备,这种状态为双主现象,其中,每个启用了VRRP协议的VRRP网关都具有VRRP定时器,其作用在于周期的发送协议报文,即VRRP心跳,当该VRRP网关在一定时间内未收到协议报文,就认为对端设备故障。出现双主现象时,就会导致上端网络回包到原来备用设备节点的报文被丢弃,从而导致部分终端不通。
在现有技术中,为避免出现VRRP双主现象,通常增加了VRRP冗余心跳链路,规避了出现双主现象,但该方式还是无法解决部分终端的通信问题,仍然需要手工修复。且无论双主是否出现,当VRRP心跳出现问题时,都需要人工手动修复,其时间通常较长,用户体验很差。
出现该类问题时,从物理连接和三层IP连接上来看,其实终端和网络是联通的,其主要问题在于网络无法适应相同的网段出现在两个不同的物理位置,因此检测故障出现,并自动调整网络以适应这种情况就显得非常必要。
发明内容
本发明的目的就是解决目前VRRP组网系统中,当出现双主现象时,VRRP网关不能自动修复的问题,提供一种VRRP网关、VRRP系统和双主探测及修复方法。
本发明解决其技术问题,采用的技术方案是,一种VRRP网关,包括VRRP处理模块、隧道建立模块、状态探测模块及静态路由生成模块,
所述VRRP处理模块,用于运行VRRP协议,并指明自身的心跳地址,将自身的心跳地址通过网络发布出去,接收对端网关的心跳地址,当VRRP定时器超时且未收到对端网关VRRP报文时,按照VRRP协议进行处理,保持或切换至VRRP主设备,通知状态探测模块探测对端网关VRRP状态,接收状态探测模块发送来的通知,若当前并非为双主状态,则保持当前状态,若当前为双主状态则,清除自身接口上所有的ARP(Address Resolution Protocol,地址解析协议)信息,且重新学习ARP,并将学习到的ARP对应的终端地址通告给对端网关,若接收到对端网关通告来的终端地址,则通知静态路由生成模块,并判断该终端地址是否与已学习的ARP相对应,若是则删除该ARP,否则不处理,当VRRP协议恢复,则通知静态路由生成模块,删除对应的隧道上的静态路由;
所述隧道建立模块,用于在自身的心跳地址及对端网关的心跳地址之间生成并维护一条通信隧道;
所述状态探测模块,用于根据VRRP处理模块的通知通过对端网关的心跳地址来探测对端网关当前的VRRP状态,若探测到当前为双主则通知VRRP处理模块,否则通知VRRP处理模块并继续探测;
所述静态路由生成模块用于根据VRRP处理模块的通知中的终端地址在通信隧道上形成基于该终端的静态路由,若已存在该终端地址对应的ARP,则删除该ARP,若接收到VRRP处理模块通知的VRRP协议恢复,则清除通信隧道上的所有静态路由。
具体的,所述状态探测模块根据VRRP处理模块的通知通过对端网关的心跳地址来探测对端网关当前的VRRP状态,具体为:状态探测模块根据对端网关的心跳地址发送探测报文,若对端网关无应答,则判定为对端网关故障,当前并非双主状态,若接收到对端网关的应答,则根据该应答判断当前是否为双主状态,若是则判定为双主状态,否则为非双主状态。
进一步的,所述探测报文中包含VRRP组ID、VRRP接口实地址、VRRP虚地址、VRF(Virtual Routing Forwarding,VPN路由转发表)的RD((Route-Distinguisher,路由区分符)及PIM(Protocol Independent Multicast,协议无关组播)的DR(Designated Router,指定路由器,即pim协议中的组播信息转发者也是IGMP的查询器)竞选相关信息。
具体的,所述探测报文采用check和ack方式,所述通信隧道不限于为GRE(GenericRouting Encapsulation,通用路由封装)通信隧道或VXLAN(Virtual Extensible LAN,虚拟可扩展局域网)通信隧道。
再进一步的,所述将学习到的ARP对应的终端地址通告给对端网关中,所述通告以有序且周期的方式进行。
VRRP组网系统,包括至少两个VRRP网关及多个终端,各VRRP网关之间通过接口连接,每个终端只与一个VRRP网关一一对应连接,各VRRP网关与网络连接,其特征在于,所述VRRP网关为上述一种VRRP网关。
双主探测及修复方法,应用于上述VRRP组网系统中,其特征在于,包括以下步骤:
步骤1、所有VRRP网关分别配置VRRP,并指明自身的心跳地址,将自身的心跳地址通过网络发布出去,分别接收各对端网关的心跳地址,VRRP配置完成后,形成VRRP主设备及VRRP备用设备;
步骤2、各VRRP网关在自身的心跳地址及对端网关的心跳地址之间生成并维护一条通信隧道;
步骤3、当各VRRP网关能够正常接收到对端网关VRRP报文时,正常运行VRRP协议,不进行其他处理,当某一VRRP网关的VRRP定时器超时且未收到对端网关VRRP报文时,则按照VRRP协议进行处理,保持或切换至VRRP主设备,且探测对端网关VRRP状态;
步骤4、若该VRRP网关探测到当前并非为双主状态,则保持当前状态,若当前为双主状态则进入步骤5;
步骤5、该VRRP网关清除自身接口上所有的ARP信息,且重新学习ARP;
步骤6、该VRRP网关将新学习到的ARP对应的终端地址通告给对端网关;
步骤7、若该VRRP网关接收到对端网关通告来的终端地址,则在通信隧道上形成基于该终端的静态路由,并判断该终端地址是否与已学习的ARP相对应,若是则删除该ARP;如果新学到ARP,则判断是否存在该ARP对应的终端地址是否在隧道存在静态路由,如果存在,就删除静态路由,并回到步骤6;
步骤8、该VRRP网关进行报文转发;
步骤9、该VRRP网关时刻判断VRRP协议是否恢复,若恢复,则清除通信隧道上的所有静态路由,若该VRRP网关在步骤3中切换至VRRP主设备,则此时需要切换回VRRP备用设备,回到步骤3,若该VRRP网关在步骤3中保持为VRRP主设备,则此时仍保持为VRRP主设备,回到步骤3,若未恢复则回到步骤6。
具体的,步骤4中,若当前为双主状态,在进入步骤5之前,产生周期性告警信息。
具体的,步骤8中,在该VRRP网关进行报文转发的过程中,若无法命中静态路由,就会命中直连接口路由,如果此时有ARP,则按照ARP转发,如果没有ARP,则除了在该直连接口学习ARP外,还应该将该报文通过隧道转发到对端,以便对端学习ARP。
进一步的,步骤8中,在该VRRP网关进行报文转发的过程中,若接收到ARP请求本网段其他终端地址解析时,则查找该VRRP网关中的静态路由,若存在对应终端的静态路由,则以ARP代理的方式应答,若不存在对应终端的静态路由,则缓存该终端地址,并通过通信隧道向该终端地址发送报文进行探测,触发对端网关的ARP解析。
若接收到网络中的组播报文,则在该VRRP网关与与其直连的终端组成的局域网中转发,若之前有IGMP(Internet Group Management Protocol,互联网组管理协议)对应组播组的加入报文,则还通过通信隧道进行转发;
若接收到通信隧道中传输来的报文,则仅在该VRRP网关与与其直连的终端组成的局域网中转发;
若通过该VRRP网关与与其直连的终端组成的局域网接受到组播报文,则判断其DR是否在本地,若是则在该VRRP网关与与其直连的终端组成的局域网中转发,否则通过通信隧道发送给对应的DR。
本发明的有益效果是,通过上述一种VRRP网关、组网系统、双主探测及修复方法,可以解决现有VRRP常用组网中,网络故障导致VRRP出现双主时,不能自动修复的问题,相对于终端来说,其相当于缩短了故障修复时间,终端用户体验较好。
附图说明
图1是现有技术及本发明实施例中VRRP组网系统的示意图;
图2是本发明中一种VRRP网关的系统框图;
图3是本发明实施例中双主探测及修复方法应用在VRRP主设备及备用设备上的流程图。
具体实施方式
下面结合实施例及附图,详细描述本发明的技术方案。
本发明的一种VRRP网关,其系统框图参见图2,包括VRRP处理模块、隧道建立模块、状态探测模块及静态路由生成模块,其中,VRRP处理模块,用于运行VRRP协议,并指明自身的心跳地址,将自身的心跳地址通过网络发布出去,接收对端网关的心跳地址,当VRRP定时器超时且未收到对端网关VRRP报文时,按照VRRP协议进行处理,保持或切换至VRRP主设备,通知状态探测模块探测对端网关VRRP状态,接收状态探测模块发送来的通知,若当前并非为双主状态,则保持当前状态,若当前为双主状态则,清除自身接口上所有的ARP(AddressResolution Protocol)信息,且重新学习ARP,并将学习到的ARP对应的终端地址通告给对端网关,若接收到对端网关通告来的终端地址,则通知静态路由生成模块,并判断该终端地址是否与已学习的ARP相对应,若是则删除该ARP,否则不处理,当VRRP协议恢复,则通知静态路由生成模块,删除对应的隧道上的静态路由;隧道建立模块,用于在自身的心跳地址及对端网关的心跳地址之间生成并维护一条通信隧道;状态探测模块,用于根据VRRP处理模块的通知通过对端网关的心跳地址来探测对端网关当前的VRRP状态,若探测到当前为双主则通知VRRP处理模块,否则通知VRRP处理模块并继续探测;静态路由生成模块用于根据VRRP处理模块的通知中的终端地址在通信隧道上形成基于该终端的静态路由,若已存在该终端地址对应的ARP,则删除该ARP,若接收到VRRP处理模块通知的VRRP协议恢复,则清除通信隧道上的所有静态路由。
本发明的VRRP组网系统,包括至少两个VRRP网关及多个终端,各VRRP网关之间通过接口连接,每个终端只与一个VRRP网关一一对应连接,各VRRP网关与网络连接,其中,VRRP网关为上述一种VRRP网关。
本发明的双主探测及修复方法,应用于上述VRRP组网系统中,具体为:首先所有VRRP网关分别配置VRRP,并指明自身的心跳地址,将自身的心跳地址通过网络发布出去,分别接收各对端网关的心跳地址,VRRP配置完成后,形成VRRP主设备及VRRP备用设备,然后各VRRP网关在自身的心跳地址及对端网关的心跳地址之间生成并维护一条通信隧道,当各VRRP网关能够正常接收到对端网关VRRP报文时,正常运行VRRP协议,不进行其他处理,当某一VRRP网关的VRRP定时器超时且未收到对端网关VRRP报文时,则按照VRRP协议进行处理,保持或切换至VRRP主设备,且探测对端网关VRRP状态,若该VRRP网关探测到当前并非为双主状态,则保持当前状态,若当前为双主状态则该VRRP网关清除自身接口上所有的ARP信息,且重新学习ARP,该VRRP网关再将新学习到的ARP对应的终端地址通告给对端网关,若该VRRP网关接收到对端网关通告来的终端地址,则在通信隧道上形成基于该终端的静态路由,并判断该终端地址是否与已学习的ARP相对应,若是则删除该ARP;如果新学到ARP,则判断是否存在该ARP对应的终端地址是否在隧道存在静态路由,如果存在,就删除静态路由,并回到VRRP网关再将新学习到的ARP对应的终端地址通告给对端网关那一步,该VRRP网关进行报文转发,且该VRRP网关时刻判断VRRP协议是否恢复,若恢复,则清除通信隧道上的所有静态路由,若该VRRP网关在之前是切换至VRRP主设备,则此时需要切换回VRRP备用设备,回到正常运行VRRP协议那一步,若该VRRP网关在之前是保持为VRRP主设备,则此时仍保持为VRRP主设备,回到正常运行VRRP协议那一步,若未恢复则回到该VRRP网关将新学习到的ARP对应的终端地址通告给对端网关那一步。
实施例
本发明实施例中一种VRRP网关,其系统框图参见图2,包括VRRP处理模块、隧道建立模块、状态探测模块及静态路由生成模块。
其中,VRRP处理模块用于运行VRRP协议,并指明自身的心跳地址,将自身的心跳地址通过网络发布出去,接收对端网关的心跳地址,当能够正常接收到对端网关VRRP报文时,正常运行VRRP协议,不进行其他处理,当VRRP定时器超时且未收到对端网关VRRP报文时,按照VRRP协议进行处理,保持或切换至VRRP主设备,通知状态探测模块探测对端网关VRRP状态,接收状态探测模块发送来的通知,若当前并非为双主状态,则保持当前状态,若当前为双主状态则周期性产生告警信息,并清除自身接口上所有的ARP信息,且重新学习ARP,并将新学习到的ARP对应的终端地址通告给对端网关,该通告可以以有序且周期的方式进行,例如采用TCP方式,若接收到对端网关通告来的终端地址,则通知静态路由生成模块,并判断该终端地址是否与已学习的ARP相对应,若是则删除该ARP,否则不处理,当VRRP协议恢复,则通知静态路由生成模块。
隧道建立模块用于在自身的心跳地址及对端网关的心跳地址之间生成并维护一条通信隧道。该通信隧道可以为GRE通信隧道或VXLAN通信隧道等。
状态探测模块用于根据VRRP处理模块的通知通过对端网关的心跳地址来探测对端网关当前的VRRP状态,若探测到当前为双主则通知VRRP处理模块,否则通知VRRP处理模块并继续探测。这里,根据VRRP处理模块的通知通过对端网关的心跳地址来探测对端网关当前的VRRP状态,具体为:状态探测模块根据对端网关的心跳地址发送探测报文,若对端网关无应答,则判定为对端网关故障,当前并非双主状态,若接收到对端网关的应答,则根据该应答判断当前是否为双主状态,若是则判定为双主状态,否则为非双主状态。探测报文中包含VRRP组ID、VRRP接口实地址、VRRP虚地址、VRF的RD及PIM的DR竞选相关信息等,这些信息能够帮助VRRP网关完成双主状态的探测和PIM协议中DR选举等。探测报文采用check和ack方式,即每个探测报文都会收到对端网关的应答。
静态路由生成模块用于根据VRRP处理模块的通知中的终端地址在通信隧道上形成基于该终端的静态路由,若已存在该终端地址对应的静态路由,则删除该静态路由,若接收到VRRP处理模块通知的VRRP协议恢复,则清除通信隧道上的所有静态路由。
本发明实施例中的VRRP组网系统,其系统框图参见图1,包括两个VRRP网关及四个终端,两个VRRP网关分别为VRRP网关N1及VRRP网关N2,VRRP网关N1及VRRP网关N2之间通过接口连接,四个终端分别为终端H1、终端H2、终端H3及终端H4,终端H1及终端H2分别与VRRP网关N1的接口连接,终端H3及终端H4分别与VRRP网关N2的接口连接,VRRP网关N1及VRRP网关N2与网络连接,其中,VRRP网关N1及VRRP网关N2均采用上述的一种VRRP网关。
使用时,其流程图参见图3,具体步骤如下:
步骤1、所有VRRP网关分别配置VRRP,并指明自身的心跳地址,将自身的心跳地址通过网络发布出去,分别接收各对端网关的心跳地址,VRRP配置完成后,形成VRRP主设备及VRRP备用设备。
这里,本例中由于采用两个VRRP网关,即VRRP网关N1及VRRP网关N2,则其各自的心跳地址举例为N1_IP1及N2_IP1,本例以VRRP网关N1为VRRP主设备,而VRRP网关N2为VRRP备用设备为例,则VRRP网关N1的对端网关即为VRRP网关N2,而VRRP网关N2的对端网关即为VRRP网关N1。
步骤2、各VRRP网关在自身的心跳地址及对端网关的心跳地址之间生成并维护一条通信隧道。
则本例中即是VRRP网关N1与VRRP网关N2在N1_IP1及N2_IP1之间生成并维护一条通信隧道。
步骤3、当各VRRP网关能够正常接收到对端网关VRRP报文时,正常运行VRRP协议,不进行其他处理,当某一VRRP网关的VRRP定时器超时且未收到对端网关VRRP报文时,则按照VRRP协议进行处理,保持或切换至VRRP主设备,且探测对端网关VRRP状态。
则本例中,若VRRP网关N1的VRRP定时器超时且未收到VRRP网关N2的VRRP报文时,则按照VRRP协议进行处理,保持为VRRP主设备;若VRRP网关N2的VRRP定时器超时且未收到VRRP网关N1的VRRP报文时,则按照VRRP协议进行处理,切换为VRRP主设备。
步骤4、若该VRRP网关探测到当前并非为双主状态,则保持当前状态,若当前为双主状态则周期性产生告警信息,并进入步骤5。
步骤5、该VRRP网关清除自身接口上所有的ARP信息,且重新学习ARP。
步骤6、该VRRP网关将新学习到的ARP对应的终端地址通告给对端网关。
这里,VRRP网关N1将新学习到的ARP对应的终端地址通过N2_IP1发送给VRRP网关N2,而VRRP网关N2将新学习到的ARP对应的终端地址通过N1_IP1发送给VRRP网关N1。
步骤7、若该VRRP网关接收到对端网关通告来的终端地址,则在通信隧道上形成基于该终端的静态路由,若已存在该终端地址对应的ARP,若是则删除该ARP,如果新学到ARP,则判断是否存在该ARP对应的终端地址是否在隧道存在静态路由,如果存在,就删除静态路由,并回到步骤6。
步骤8、该VRRP网关进行报文转发。
本步骤中,在该VRRP网关进行报文转发的过程中,若所接收到的报文经过查询但未查询到对应的静态路由时,会查询到对应的该VRRP网关的输出接口,在该输出接口进行报文转发,且此时该VRRP网关学习该报文中的ARP信息,同时转发给对端设备,使对端网关同时学习该ARP。即若无法命中静态路由,就会命中直连接口路由,如果此时有ARP,则按照ARP转发,如果没有ARP,则除了在该直连接口学习ARP外,还应该将该报文通过隧道转发到对端,以便对端学习ARP。
若接收到ARP请求本网段其他终端地址解析时,则查找该VRRP网关中的静态路由,若存在对应终端的静态路由,则以ARP代理的方式应答,若不存在对应终端的静态路由,则缓存该终端地址,并周期性的通过通信隧道向该终端地址发送报文进行探测,触发对端网关的ARP解析。
若接收到网络中的报文,若该报文的目的地址在对端网关时,则会匹配到对应终端的静态路由,通过通信隧道发送到对端网关,对端网关再进行ARP转发;若接收到网络中的组播报文,则在该VRRP网关与与其直连的终端组成的局域网中转发,若之前有IGMP对应组播组的加入报文,则还通过通信隧道进行转发;若接收到通信隧道中传输来的报文,则仅在该VRRP网关与与其直连的终端组成的局域网中转发;若该VRRP网关需要发出协议组播报文,则分别在该VRRP网关与与其直连的终端组成的局域网中及通信隧道进行转发;若通过该VRRP网关与与其直连的终端组成的局域网接受到组播报文,则判断其DR是否在本地,若是则在该VRRP网关与与其直连的终端组成的局域网中转发,否则通过通信隧道发送给对应的DR。
步骤9、该VRRP网关时刻判断VRRP协议是否恢复,若恢复,则清除通信隧道上的所有静态路由,若该VRRP网关在步骤3中切换至VRRP主设备,则此时需要切换回VRRP备用设备,回到步骤3,若该VRRP网关在步骤3中保持为VRRP主设备,则此时仍保持为VRRP主设备,回到步骤3,若未恢复则回到步骤6。
本例中,参见图3可见,若VRRP协议恢复,则VRRP网关N1此时保持为VRRP主设备,而VRRP网关N2此时则切换回VRRP备用设备。
本例中,若VRRP网关不止两个时,其具体方案与上述相同,只是非数据转发报文还可以采用组播的方式发送给所有其他VRRP网关。
通过上述方案可见,由于VRRP网关之间可通过心跳地址进行协议通信,则可完成VRRP组网系统的状态探测和PIM的DR选举等,且由于VRRP网关间维护一条通信隧道,则可用于双主状态出现后的数据报文转发,在双主状态出现后,通过在通信隧道上形成终端的静态路由,使得报文转发优先走通信隧道,从而实现了数据报文的转发,对终端而言,相当于缩短了故障修复时间,不会因双主状态而影响数据报文的转发。