背景技术
在网络通信技术中,VRRP(Virtual Router Redundancy Protocol,虚拟冗余路由器协议)是将多个具有网关功能的路由设备加入到VRRP备份组中,形成一个虚拟路由器,该VRRP备份组对外表现为一个具有唯一固定主IP地址(虚地址)和虚MAC(Media Access Control,媒体接入控制)地址,该VRRP备份组中的多个路由设备按照VRRP选举机制选举出一个担任主用角色的Master(主用)设备负责流量的转发,其它作为承担备用角色的Backup(备用)设备负责对Master设备进行监听,在监听到Master设备出现故障时,重新选举Master设备。
VRRPE(Virtual Router Redundancy Protocol Extend,扩展虚拟冗余路由器协议)是一种虚拟网关负载分担协议,是基于VRRP的扩展。它在VRRP协议提供的虚拟网关冗余备份功能基础上,扩展了负载均衡功能,使得VRRPE备份组内的各路由设备都能分担流量,避免了VRRP备份组中Backup设备始终处于空闲状态,网络资源利用率不高的问题。
VRRPE协议支持一个IP地址对应多个MAC地址,其组内的每个设备都是VF(Virtual Forwarder,虚拟转发器),各个VF拥有相同的IP地址,不同的MAC地址。VF分为主用VF和备用VF,各主用VF负责转发通过自己的网络流量,备用VF作为主用VF的备份,当某一个设备的主用VF失效后,其它设备的备用VF能够通过竞争成为主用VF,暂时接管流量,等接管时间超时后,将不再继续接管流量,这时客户端需要重新对网关地址发起ARP(Address Resolution Protocol,地址解析协议)请求来更新网关MAC地址。
VRRPE备份组内的Master设备在回复客户端对网关地址的ARP请求时,会根据客户端的MAC地址、按照配置的负载均衡算法、指定不同VF的虚MAC地址进行回应,将客户端流量定向到不同的VF设备上,从而实现网络流量负载分担。
图1示出了一种VRRPE备份组网架构,其中包含有3个路由器(Router A、Router B和Router C)和4个客户端(Client A、Client B、Client C和Client D)。4个客户端上配置的默认网关IP地址均为10.1.1.10,通过VRRPE的负载均衡算法所得到的网关MAC地址不一样,其中,Client A获取到的网关MAC地址是Router B的MAC地址,因此Client A的所有流量都被定向分担到Router B上;同样,Client B和Client D的流量被分担到Router A上,Client C的流量被分担到Router C上。
在实际组网应用中,如图2所示,如果VRRPE备份组内只有一个路由器Router A是正常工作的,组内其它路由器不存在或者出现故障了,这时该VRRPE备份组下挂的所有客户端的网关MAC地址都是Router A上的主用VF(用AVF标识)的虚MAC1,所有客户端访问Internet的上行流量只会经过Router A。
当VRRPE备份组内的路由器Router B恢复正常后,工作状态迁移到Backup状态,会向外发送请求报文,请求Master状态的路由器Router A分配当前未使用的虚MAC地址;Master状态的Router A给Router B回应应答报文,分配虚MAC地址为MAC2,同时Router A也感知到VRRPE备份组内增加了一个设备或原有设备已从故障状态恢复正常了,Router A上会增加一个VF,即同时存在两个VF,原来的主用VF对应MAC1,保持不变,新增的是备用VF(用LVF标识),对应MAC2。Router B上也会有两个VF,一个是备用VF,对应MAC1,一个是主用VF,对应MAC2。由于在VRRPE备份组内增加一个设备或原有设备已从故障状态恢复正常时新增一个VF,对于这个新增的VF,VRRPE备份组内路由器都不会发送免费ARP请求来更新客户端的网关MAC地址,这样所有客户端的网关MAC地址还是MAC1,如图3所示,客户端访问Internet的上行流量还是只会经过Router A,VRRPE的两个路由器无法进行负载分担。
如果客户端在学习到了网关ARP表项后一直存在到网关的流量,就有可能不会再去对该网关发起ARP请求,这就意味着在这种情况下,客户端的网关MAC地址一直得不到更新,即一直保持如图3所示的工作状态,VRRPE的两个路由器就无法进行负载分担。
如果客户端每隔一定时间对网关发起ARP请求,这时VRRPE备份组内的Master设备才会根据客户端的MAC地址、按照负载均衡算法、使用不同VF的虚MAC地址进行回应,将客户端流量定向到不同的VF设备上,从而达到网络流量的负载分担。如图4所示,Client C和Client E的网关MAC地址是MAC1,访问Internet的上行流量经过Router A,Client D和Client F运行一段时间后,主动对网关发起ARP请求,Master设备Router A会用LVF2对应的虚MAC2来进行回应,从而将Client D和Client F的网关MAC地址更新为MAC2,Client D和Client F访问Internet的上行流量由Router A切换到RouterB。
发明人在实现本发明的过程中,发现现有技术至少存在以下缺陷:
因VRRPE备份组内的路由器在整个状态切换过程中都不发送虚IP地址的免费ARP请求,如果下挂客户端学到ARP后但一直都有流量,就不再定时发送ARP请求,客户端就感知不到VRRPE备份组内设备的工作状态。当VRRPE备份组内一个故障路由器已恢复或新增一个路由器时,无法实现完全负载分担。即使下挂客户端每隔一定时间会发送ARP请求,但当VRRPE备份组内一个故障路由器已恢复或新增一个路由器时,在一定时间内也无法实现负载分担。
由此可见,现有技术方案中,在VRRPE备份组发生状态变化时,会影响VRRPE备份组的负载分担的效果,并且负载分担的效果很大程度上取决于下挂客户端是否及时针对网关发起ARP请求,这样将很难做到及时的负载分担。
具体实施方式
为解决上述现有技术存在的问题,本发明实施例中,当VRRPE备份组内发生故障的路由器恢复正常或新路由器加入到该VRRPE备份组时,流量负载分担的总体实现过程可如图5所示,主要包括:
步骤501,恢复正常的路由器或新增路由器发送虚MAC地址分配请求报文,以请求Master状态的路由器为其分配虚MAC地址。
该步骤可通过现有方式实现。具体的,该请求报文在VRRPE备份组内发送,该VRRPE备份组内的其它所有路由器都可以接收到该报文。
步骤502,Master状态的路由器接收到该请求报文后,为发送该请求报文的路由器分配当前还未使用过的虚MAC地址,并将分配的虚MAC地址携带于响应报文发送给组内的其它成员路由器(即所有Backup状态的路由器)。
该步骤可通过现有方式实现。具体的,Master状态的路由器上会增加一个VF,原来的AVF对应的虚MAC地址保持不变,新分配的虚MAC地址对应于LVF。该恢复正常的路由器或新增路由器上也会有两个VF,一个是LVF,对应的虚MAC地址是Master状态的路由器上的AVF对应的虚MAC地址,一个是AVF,对应的MAC地址为新分配的MAC地址。
步骤503,该VRRPE备份组内接收到该响应报文的所有路由器,根据各自的ARP表项进行负载分担计算,得到该ARP表项中的客户端的目标路由器的虚MAC地址,并将负载均衡计算得到的目标路由器虚MAC地址发送给相应客户端进行网关MAC地址更新。
具体的,由于VRRPE备份组内的所有其它路由器都可以接收到Master状态的路由器为该恢复正常的路由器或新加入的路由器所分配的虚MAC地址,因此VRRPE备份组内所有其它路由器都会感知到有路由器已恢复正常或新增路由器,进而VRRPE备份组内所有其它路由器都去检查各自的VLAN(VirtualLocal Area Network,虚拟局域网)内的所有ARP表项,并利用各自ARP表项中的客户端MAC地址来进行负载均衡计算,得到客户端的目标路由器虚MAC地址(即网关MAC地址),并将负载均衡计算得到的网关MAC地址通过ARP报文发送给下挂的客户端,以更新下挂客户端的网关MAC地址,达到及时进行负载分担的目的。
其中,用于承载负载均衡计算结果的ARP报文可以是单播的免费ARP报文,该报文中携带的源IP地址(即发送者IP地址)和目标IP地址均为该VRRPE备份组的虚IP地址,源MAC地址(即发送者MAC地址)为负载分担计算后的目标路由器的AVF对应的虚MAC地址,目标MAC地址为相应客户端的MAC地址。
下面针对不同的组网架构,进一步对图5所示的流程进行详细描述。
实施例一
本实施例描述了VRRPE备份组内只有一个路由器工作正常,之后该VRRPE备份组内之前发生故障的一个路由器恢复正常或一个路由器新加入到该VRRPE备份组后的流量负载分担实现过程。
如图6所示,VRRPE备份组内当前只有一个路由器Router A是正常工作的,VRRPE备份组配置在VLAN 2内,4个客户端(Client C、Client D、ClientE和Client F)的网关MAC地址都是MAC1,该4个客户端只能通过Router A来访问Internet。Router A上会有如表1所示的ARP表项:
表1
IP Address |
MAC Address |
VLAN ID |
Interface |
10.1.1.1 |
0000-0000-0001 |
2 |
interface GigabitEthernet1/0/0 |
10.1.1.2 |
0000-0000-0002 |
2 |
interface GigabitEthernet 1/0/0 |
10.1.1.3 |
0000-0000-0003 |
2 |
interface GigabitEthernet 1/0/0 |
10.1.1.4 |
0000-0000-0004 |
2 |
interface GigabitEthernet 1/0/0 |
其中,IP Address表示客户端的IP地址,MAC Address表示客户端的MAC地址,VLAN ID表示客户端的报文通过VLAN 2与Router A进行交互,Interface表示Router A与客户端相连的端口。
路由器Router B与Router A属于同一VRRPE备份组,但Router B当前为非正常状态(如故障状态)。当Router B恢复正常后,Router B立即在VRRPE备份组内发送虚MAC地址分配请求报文,以请求Master状态的Router A分配一个虚MAC地址;Master状态的Router A在接收到该请求报文后为Router B分配一个当前未使用的虚MAC地址(MAC2)。这时,Router B在VLAN 2内是没有ARP表项的,Router A在VLAN 2内有4条ARP表项,Router A利用该4条ARP表项进行负载均衡计算,从而得到这些客户端的目标路由器虚MAC地址(即网关MAC地址);然后Router A将负载均衡计算后的客户端的网关MAC地址通过单播免费ARP报文发送给该ARP表项中的所有客户端或仅发送给该ARP表项中网关MAC地址发生变化的客户端;客户端在接收到该单播免费ARP报文后,根据其中携带的网关MAC地址更新本客户端的网关MAC地址。
例如,Router A的负载均衡计算结果为:Client D和Client F应该以RouterB的MAC2为网关MAC地址,因此可以仅向网关MAC地址发生变化的ClientD和Client F发送单播免费ARP报文,以使Client D和Client F更新自己的网关MAC地址。这是因为本实施例组网架构中,在Router B恢复正常前仅有主用设备Router A承担组内所有客户端的报文转发操作,在Router B恢复正常后仅有2个路由器负责所有客户端的流量转发,此种情况下客户端的网关MAC地址发生变化应该是流量被重定向到Router B所引起的,因此只要通知网关MAC地址发生变化的客户端更新网关MAC地址即可。当然Router A也可以向其ARP表项中的所有客户端分别发送单播免费ARP报文,以通知这些客户端进行网关MAC地址更新。相比之下,前者可以节省网络资源开销。以RouterA仅向网关MAC地址发生变化的Client D和Client F发送单播免费ARP报文为例,该报文目的MAC地址分别是Client D和Client F的MAC,报文中携带的发送者IP地址和目标IP地址都是VRRPE备份组的虚IP(10.1.1.10),携带的发送者源MAC地址是Router B的AVF2对应的虚MAC2。Client D和ClientF在收到Router A发送过来的免费ARP报文后,更新网关MAC地址为MAC2,如图7所示。
本实施例中使用的负载均衡算法可以有很多,具体所采用的负载均衡算法不构成对本发明的限制。比如,可以根据客户端的MAC地址进行除2计算(MAC地址虽然是16进制的,也是可以进行除2计算的),如果余数是1,表示这个客户端应以Router A的AVF1对应的MAC1为网关MAC地址,如果余数是0,表示这个客户端应以Router B的AVF2对应的MAC2为网关MAC地址。
上述过程是以Router B为该VRRPE备份组内原有的路由器为例描述的,对于新加入到该VRRPE备份组的路由器,其在加入到该VRRPE备份组后会立即在该VRRPE备份组内发送虚MAC地址分配请求报文,其后的负载分担处理过程与上述过程类似,在此不再赘述。
实施例二
本实施例描述了VRRPE备份组内有2个路由器工作正常,之后该VRRPE备份组内之前发生故障的一个路由器恢复正常或一个路由器新加入到该VRRPE备份组后的流量负载分担实现过程。
如图8所示,VRRPE组内当前有2个路由器Router A和Router B是正常工作的,VRRPE备份组配置在VLAN 2内,Client D和Client F的网关MAC地址是MAC1,Client E和Client G的网关MAC地址是MAC2,4个客户端访问Internet时,可以通过Router A和Router B来进行负载分担。
理想情况下,Router A和Router B上会有4条ARP表项,Router A和RouterB上的ARP表项的Interface不同,表2示出了Router A上的ARP表项:
表2、Router A上的ARP表项
IP Address |
MAC Address |
VLAN ID |
Interface |
10.1.1.1 |
0000-0000-0001 |
2 |
interface GigabitEthernet 1/0/0 |
10.1.1.2 |
0000-0000-0002 |
2 |
interface GigabitEthernet1/0/0 |
10.1.1.3 |
0000-0000-0003 |
2 |
interface GigabitEthernet 1/0/0 |
10.1.1.4 |
0000-0000-0004 |
2 |
interface GigabitEthernet1/0/0 |
而实际情况是Router A上存在上述1、2、3或4条表项,Router B上存在上述1、2、3或4条表项,但是有一点可以保证的是:Router A和Router B上ARP表项的并集包含上述4条表项。
比如,实际情况下,Router A上会有如表3所示的2条ARP表项,RouterB上会有如表4所示的2条ARP表项:
表3
IP Address |
MAC Address |
VLAN ID |
Interface |
10.1.1.1 |
0000-0000-0001 |
2 |
interface GigabitEthernet 1/0/0 |
10.1.1.3 |
0000-0000-0003 |
2 |
interface GigabitEthernet 1/0/0 |
表4
IP Address |
MAC Address |
VLAN ID |
Interface |
10.1.1.2 |
0000-0000-0002 |
2 |
interface GigabitEthernet2/0/0 |
10.1.1.4 |
0000-0000-0004 |
2 |
interface GigabitEthernet2/0/0 |
路由器Router C与Router A和Router B属于同一VRRPE备份组,但RouterC当前为非正常状态(如故障状态)。当VRRPE组内第3个路由器Router C恢复正常后,Router C立即在VRRPE备份组内发送虚MAC地址分配请求报文,以请求Master状态的Router A分配一个虚MAC地址;Master状态的RouterA在接收到该请求报文后为Router C分配一个当前未使用的虚MAC地址(MAC3)并将其通过响应报文发送给组内的其它成员设备Router B和RouterC。这时,Router C在VLAN 2内是没有ARP表项的,Router A和Router B分别根据各自在VLAN 2内的ARP表项进行负载均衡计算,从而得到这些客户端的目标路由器虚MAC地址(即网关MAC地址);然后Router A和Router B分别将负载均衡计算后的客户端的网关MAC地址通过单播免费ARP报文发送给各自ARP表项中的所有客户端或各自ARP表项中网关MAC地址发生变化的客户端;客户端在接收到该单播免费ARP报文后,根据其中携带的网关MAC地址更新本客户端的网关MAC地址。
本实施例中使用的负载均衡算法可以有很多,具体所采用的负载均衡算法不构成对本发明的限制。比如,可能根据客户端的MAC地址进行除3计算(MAC地址虽然是16进制的,也是可以进行除3计算的),如果余数是1,表示这个客户端以Router A的AVF1对应的MAC1为网关MAC地址,如果余数是2,表示这个客户端以Router B的AVF2对应的MAC2为网关MAC地址,如果余数是0,表示这个客户端以Router C的AVF3对应的MAC3为网关MAC地址。
以上述理想情况为例,Router A和Router B通过负载均衡计算得知Client D和Client G应该以Router A的MAC1为网关MAC地址,客户端Client E应该以Router B的MAC2为网关MAC地址,Client F应该以Router C的MAC3为网关MAC地址。此种情况下,Router A和Router B可分别发送携带有负载均衡计算后得到的网关MAC地址的单播免费ARP报文给Client D、Client G、Client E和Client F,也可以仅向各自ARP表项中网关MAC地址发生变化的Client F和Client G发送携带有网关MAC地址的单播免费ARP报文,最后的结果如图9所示。
其中,发送给Client D、Client G的报文中,携带的发送者IP地址和目标IP地址都是VRRPE备份组的虚IP(10.1.1.10),携带的发送者MAC地址是路由器Router A的AVF1对应的虚MAC1,携带的目标MAC地址是相应客户端的MAC地址。Client D、Client G在收到Router A或Router B发送过来的免费ARP报文后,更新网关MAC地址为MAC1。
发送给Client E的报文中,携带的发送者IP地址和目标IP地址都是VRRPE备份组的虚IP(10.1.1.10),携带的发送者MAC地址是路由器Router B的AVF2对应的虚MAC2,携带的目标MAC地址是Client E的MAC地址。Client E在收到Router A或Router B发送过来的免费ARP报文后,更新网关MAC地址为MAC2。
发送给Client F的报文中,携带的发送者IP地址和目标IP地址都是VRRPE备份组的虚IP(10.1.1.10),携带的发送者MAC地址是路由器Router C的AVF3对应的虚MAC3,携带的目标MAC地址是Client F的MAC地址。Client F在收到Router A或Router B发送过来的免费ARP报文后,更新网关MAC地址为MAC3。
以上述的实际情况为例,Router A通过负载均衡计算得知Client D应该以Router A的MAC1为网关MAC地址,Client F应该以Router C的MAC3为网关MAC地址;Router B通过负载均衡计算得知Client E应该以Router B的MAC2为网关MAC地址,Client G应该以Router A的MAC1为网关MAC地址。此种情况下,Router A可分别发送携带有负载均衡计算后的网关MAC地址的单播免费ARP报文给Client D和Client F,更新Client D网关MAC地址为MAC1,更新Client F的网关MAC地址为MAC3,也可仅向网关MAC地址发生变化的Client F发送单播免费ARP报文。同理,Router B可分别发送单播免费ARP报文给Client E和Client G,更新Client E网关MAC地址为MAC2,更新Client G的网关MAC地址为MAC1,也可仅向网关MAC地址发生变化的Client G发送单播免费ARP报文。最后的结果如图9所示。
由4个或4个以上路由器组成的VRRPE备份组的情况,与上述3个路由器组成的VRRPE备份组的负载分担处理过程类似,在此不再赘述。
上述过程是以Router C为该VRRPE备份组内原有的路由器为例描述的,对于新加入到该VRRPE备份组的路由器,其在加入到该VRRPE备份组后会立即在该VRRPE备份组内发送虚MAC地址分配请求报文,其后的负载分担处理过程与上述过程类似,在此不再赘述。
基于相同的技术构思,本发明实施例还提供了一种可应用于上述流程的路由设备。
参见图10,为本发明实施例提供的路由设备的结构示意图,如图所示,该路由设备可包括:
虚MAC地址请求模块1001,用于在本路由设备加入VRRPE备份组时,向所述VRRPE备份组内的成员路由设备发送虚MAC地址分配请求;
虚MAC地址分配模块1002,用于在本路由设备作为所在VRRPE备份组内的主用设备的情况下,当接收到虚MAC地址分配请求后,为加入VRRPE备份组的路由设备分配虚MAC地址,并将分配的虚MAC地址发送给所述VRRPE备份组内的备用路由设备;
负载均衡模块1003,用于在本设备作为VRRPE备份组的主用设备为加入VRRPE备份组的路由设备分配虚MAC地址后,或作为VRRPE备份组的备用设备接收到主用设备为加入VRRPE备份组的路由设备分配的虚MAC地址后,根据本设备上的ARP表项进行负载均衡计算,得到所述ARP表项中的客户端的目标路由设备的虚MAC地址,并将负载均衡计算得到的目标路由设备的虚MAC地址发送给客户端进行网关MAC地址更新。
上述路由设备中,负载均衡模块1003具体用于:根据本设备上的ARP表项,通过负载均衡计算,得到本设备ARP表项中的各客户端的目标路由设备的虚MAC地址,并向本设备APR表项中目标路由设备的虚MAC地址发生变化的客户端发送更新后的目标路由设备的虚MAC地址。
上述路由设备中,负载均衡模块1003具体用于:通过向客户端发送单播免费ARP报文,将负载均衡计算得到的目标路由设备的虚MAC地址发送给客户端;其中,所述单播免费ARP报文中携带的源IP地址和目标IP地址均为所述VRRPE备份组的虚IP地址,源MAC地址为负载分担计算后的目标路由设备的主用虚拟转发器VF对应的虚MAC地址,目标MAC地址为相应客户端的MAC地址。
上述路由设备中,负载均衡模块1003具体用于:检查本设备所属的VRRPE备份组所在的虚拟局域网VLAN内的所有ARP表项,利用该ARP表项中的客户端MAC地址进行负载均衡计算,得到所述客户端各自的目标路由设备的虚MAC地址。
综上所述,本发明实施例当VRRPE备份组内一个故障路由器恢复正常或新增一个路由器时,VRRPE组内所有路由器检查该VRRPE备份组所有在VLAN内的ARP表项,利用ARP表项中的客户端MAC地址来进行负载均衡计算,并通过发送单播的免费ARP报文将更新后的网关MAC地址发送给相应客户端,以便更新下挂客户端的网关MAC地址,从而达到快速完全负载分担。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到本发明可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台终端设备(可以是手机,个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述的方法。
以上所述仅是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视本发明的保护范围。