发明内容:
针对上述路由器处理报文方法所存在的问题和不足,本发明的目的是提供一种不会造成转发中断的静态路由中虚拟路由组处理报文的优化方法。
本发明是这样实现的:一种静态路由中虚拟路由组处理报文的优化方法,所述虚拟路由组连接于WAN与LAN之间,该虚拟路由组包括一主路由器、一备用路由器和一组普通路由器,其中,所述主路由器用于数据报文的转发,并定时向所述备用路由器发送通告自己仍存在的消息;所述备用路由器负责向虚拟路由组里的主路由器和所有普通路由器定时广播该虚拟路由组信息,并定时检测主路由器是否处于Alive状态,若主路由器down掉或主动宣告不担当主路由器时,所述备用路由器直接迁移到主路由器状态,并担负主路由的工作;所述普通路由器定时检测所述备用路由器是否处于Alive状态,若没有,则竞选出新的备用路由器。
进一步地,所述主路由器down掉或主动宣告不担当主路由器时,直接变为普通路由器。
进一步地,所述虚拟MAC地址为路由器的硬件地址,并需设置到路由器的硬件中。
进一步地,所述虚拟路由组信息包括协议的版本号Version、报文类型TYPE和周期Interval、本地优先级Priority、该虚拟路由组的ID和虚拟IP地址、认证数据的信息。
进一步地,所述普通路由器作为一个IP子网的主路由器,同时也为另一个子网的备份路由器。
进一步地,所述认证数据包括认证类型、认证串。
本发明的路由器一起协同工作,组成一虚拟路由器组。该虚拟路由器组对外配有一个虚拟IP地址和MAC地址,并从路由器组中选出一台作为master,负责转发数据包。用户只需要把其主机的默认网关地址设置为虚拟路由器组的虚拟IP地址即可。主路由器Dwon掉时,虚拟路由组中不是通过全组竞选,而是快速直接从备用路由器迁移到主路由器状态进行报文转发;从而使主路由器Dwon掉对网络造成的影响比较小,过渡收敛时间更短,保证了用户的网络稳定;本发明在主路由器Dwon掉时或者优先级比PREMIER低时,主路由器不是直接降低到备用路由器,而是迁移到普通路由器状态,这样可以防止以为主路由器在某一段时间内的不稳定,而造成虚拟路由组内连续的竞选,从而导致网络的不稳定;本发明中主路由器负责处理的选举和通报报文少,可以使主路由器更专注于报文转发;并且,采用本发明的结构,需要维护的时钟计数器比较少。
具体实施方式:
如图1所示,本发明的虚拟路由组包括三种功能的路由器,分别为主路由器LORD、备用路由器PREMIER和一组普通路由器LOON,这些路由器均连接于LAN上组成路由组,并与外部的WAN和内部的PC连接。这里,LORD处于Active状态,担负数据报文转发,其定时向PREMIER发送通告自己仍存在(ALIVE)的消息,同时,在刚迁移到LORD时,主动向LAN内所有主机广播无理由ARP请求消息(Gratuitous ARP Response);PREMIER负责向虚拟路由组里面的Lord和所有普通路由器Loon定时广播虚拟路由组信息,定时检测Lord是否处于Alive状态,当主路由器LORD down掉或主动宣告不担当LORD时,PREMIER不需要竞选而直接迁移到LORD状态,担负主路由器角色;LOON则定时检测PREMIER是否处于Alive状态,如果没有,则在LOON中竞选出新的PREMIER。LORD down掉或主动宣告不担当LORD时,直接变为LOON。
本发明的时钟均以秒为单位,在LORD时钟周期(Lord-Alive-Timer)内,LORD向PREMIER发送通告自己仍存在(ALIVE)的消息一次,PREMIER检测LORD是否Down掉一次,这里LORD时钟周期为1秒,可根据路由器的个数对时钟周期进行调整,调整范围为1-255秒,同样地,在PREMIER时钟周期(PREMIER-Alive-Timer)内,LOON检测PREMIER是否Down掉一次,PREMIER时钟周期要长于LORD时钟周期,这里设为3秒。如图2所示,对于Event 1,若Premier-Alive-Timer超时或者LOON收到从PREMIER发出的低优先级HELLO报文,LOON则变为PREMIER。对于Event 2,PREMIER收到从LOON发出的高优先级HELLO报文时,PREMIER变为LOON。对于Event 3,若Lord-Alive-Timer超时或PREMIER收到从LORD发出的低优先级HELLO报文,PREMIER变为LORD。对于Event 4,LORD收到从PREMIER发出的高优先级HELLO报文,则直接变为LOON。若这些路由器不能工作了,均直接变为NONE状态。
本发明是基于UDP协议的,本发明报文目的目标IP地址为保留组播地址:224.0.0.19,报文源IP地址为路由器真实IP地址,报文TTL=1;本发明的虚拟MAC地址从虚IP地址映射而来,映射规则同RFC2338 7.3,此虚拟MAC地址也是路由器的硬件地址,需要设置到路由器的硬件中,当用户PC Ping其虚网关IP地址时(即虚拟路由组的虚拟IP地址),路由器的ARP处理模块必须以此虚拟硬件地址作为回应,但是不能对Ping数据报文进行回应,当路由器收到目的MAC为自身虚拟MAC的Ethernet报文时,必须按照正常的硬件转发规则进行三层硬件转发。224.0.0.19为保留组播地址,交换机硬件在做二层数据转发时必须把此地址映射成固定的物理硬件地址,并按二层多播转发规则进行相应转发。同时,目的硬件地址为01-00-5e-00-01-13的Ethernet报文的源地址应该封装为虚拟路由组的虚拟MAC地址。其它的交换机对源地址为MVRP的虚拟MAC地址的Ethernet帧必须进行源地址学习,并把把学习到的地址下发硬件FDB,以便能进行正确二层硬件转发,当路由器收到目的硬件地址为01-00-5e-00-01-13的数据报文后,应该拆装该报文并送CPU进行处理。
本发明包括两种报文,分别为LORD-ALIVE和VRG-ADV,LORD-ALIVE为LORD用于通告PREMIER LORD仍处于Active状态;VRG-ADV为PREMIER用于通告虚拟路由组成员该虚拟路由组的信息,其中,LORD-ALIVE包括有协议版本号Version、报文类型TYPE、周期Interval、LORD优先级Priority、虚拟路由组的ID和虚拟IP地址、认证数据等;VRG-ADV包括有协议版本号Version、报文类型TYPE、周期Interval、PREMIER优先级Priority、虚拟路由组的ID和虚拟IP地址、认证数据等。
本发明还包括报文协议的校验,校验内容包括:IPTTL是否为1、协议版本是否一致、数据包长度是否大于等于协议头长度,并验证协议的checksum是否正确,另外,还需要验证收到的报文ID是否和本地配置一致,收到的报文各时钟间隔是否和本地配置一致;如果报文带有认证信息,需要验证认证类型是否一致,认证串是否一致。若上述检查如有一个不通过,则丢弃收到的数据包。
如图2、图3所示,本发明的各路由器竞选的实现机制如下:
NONE状态的路由器,路由器未启动或者被用户手动设置为disable时,为NONE状态。
LOON状态的路由器:虚拟路由组刚启动(enable)时,各路由器的状态均变为LOON状态,并且均启动一定时时钟Premier-Alive-Timer,用于检测PREMIER在指定的周期内是否超时或者收到VRG-ADV报文。
如果Premier-Alive-Timer时钟超时,即在该时钟周期内没有收到其它Premier发出的VRG-ADV报文,则表明目前的LAN还不存在其它Premier,各路由器便认为自己是该虚拟路由组的Premier,于是角色迁移到Premier状态。然后在本地构造VRG-ADV报文,并在Premier-Alive-Timer时钟周期内向LAN内所有的其它路由器广播。VRG-ADV报文中包含协议版本号Version、报文类型TYPE、周期Interval、本地优先级Priority、虚拟路由组的ID和虚拟IP地址、认证数据等信息。迁移到Premier状态的路由器启动Lord-Alive-Timer时钟,等待接收Lord发出的LORD-ALIVE报文,该报文包含协议版本号Version、报文类型TYPE、周期Interval、LORD优先级Priority、虚拟路由组的ID和虚拟IP地址、认证数据等。
如果在Premier-Alive-Timer时钟内收到其它Premier发出的VRG-ADV报文,并且报文通过合法性校验,则根据VRG-ADV报文中的优先级和本地优先级进行比较;如果本地优先级大于收到的优先级,角色迁移到Premier状态;在本地构造VRG-ADV报文,并在Premier-Alive-Timer时钟周期内向LAN内所有的其它路由器广播;同时启动Lord-Alive-Timer时钟,等待接收Lord发出的LORD-ALIVE报文;如果本地优先级等于收到的优先级,则比较本地IP地址和接收到的IP地址数值的大小,如果本地IP地址大于接收到的IP地址,则迁移到Premier状态,并构造VRG-ADV报文启动Lord-Alive-Timer时钟,步骤同上述。
除上述情况的以外,保持LOON状态不变。
Premier状态的路由器:该状态的路由器需维护两个时钟,Lord-Alive-Timer时钟和Premier-Alive-Timer时钟。Premier-Alive-Timer时钟用于周期性的广播VRG-ADV报文,以便Lan中的其它路由器知道Premier仍然存在;Lord-Alive-Timer时钟判断在一个Lord-Alive-Timer周期内是否接收到Lord发出的LORD-ALIVE报文,以便决定是否迁移到Lord状态。
Premier-Alive-Timer时钟超时,广播VRG-ADV报文;Lord-Alive-Timer时钟超时,则迁移到Lord状态,并向LAN内所有主机广播无理由ARP请求消息(Gratuitous ARP Response)。
若在Lord-Alive-Timer时钟周期内收到LORD-ALIVE报文,且报文通过合法性校验,则比较本地优先级和接收到报文的优先级。若本地优先级大于接收到的优先级,则停止Premier-Alive-Timer时钟,并迁移到Lord状态,向LAN内所有主机广播无理由ARP请求消息(Gratuitous ARP Response);若本地优先级等于接收到的优先级,则比较本地IP地址和接收到的IP地址数值大小。如果本地IP地址大于接收到的地址,则停止Premier-Alive-Timer时钟,并迁移到Lord状态,向LAN内所有主机广播无理由ARP请求消息(Gratuitous ARP Response)。
除上述情况的以外,保持Premier状态不变。
Lord状态的路由器:该状态的路由器需要维护一个时钟:Lord-Alive-Timer,用于周期性的广播LORD-ALIVE报文,以便通告Lord仍然存在。
Lord-Alive-Timer时钟超时,发送LORD-ALIVE报文,如果接收到Premier广播的VRG-ADV,且报文通过合法性校验,则比较本地优先级和接收到的优先级。若本地优先级小于接收到的优先级,则停止Lord-Alive-Timer时钟,并迁移到LOON状态。若接收到的优先级相同,则比较本地IP地址和接收到的IP地址数值大小。若本地IP地址小于接收到的地址,则停止Lord-Alive-Timer时钟,并迁移到LOON状态。