祝伟华,徐 强
(重庆大学 软件学院,重庆 400044)
在Internet技术快速发展的时代,用户对网络的依赖程度越来越高,对网络的恢复性和冗余性的要求也随之加强。IETF制定了一系列的协议来增强网络的可靠性,其中VRRP协议就是用于在边缘网络中,避免在静态配置缺省路由器环境下存在的单点故障的问题。当局域网内默认网关出现故障时,在不改变现有组网环境的前提下,其他设备可以及时地充当网关为用户服务,保障网络通信的连续性。该协议要求在用户主机第一跳节点最少配备2台设备,其中一台设备作为Master为用户转发数据,另外一台作为Backup。当Master出现故障时,Backup设备能够快速地切换为Master,保证路由器间的连通性。但是在这样配置下,Backup设备在Master设备正常工作时不承担任何流量转发的功能,无法进行流量的负载分担,极大地浪费资源。本文就是基于该点,设计虚拟转发器,在VRRP协议的基础上,实现动态负载分担,解决Backup设备在空闲状态下无法转发流量的问题,提高资源的利用率。
VRRP的基本原理:若干台配置VRRP协议路由器,组成1个虚拟路由器备份组。该备份组对外发布一个统一的虚拟IP地址,局域网内用户使用虚拟IP地址作为自己的默认网关,其中组内路由器时刻扮演着Master和Backup角色。在一个备份组内,只有扮演Master角色的设备,负责相应下挂主机的ARP请求和转发IP报文,其他设备均处于Backup状态,周期性接收Master设备发送的协议报文,而且不能参与流量转发。在标准的VRRP协议中,如果要提高资源的利用率,需要在每台设备上配置多个VRRP备份组,使所有设备都参与流量的转发,因此在具有N台设备的情况下,需要配置N组虚拟路由器,对外发布N个虚拟IP地址,每台设备在N个备份组内互为Master和Backup设备,负责各自备份组内的流量转发。虽然配置多个备份组可以实现负载均衡的目的,但是配置过于复杂,必须固定用户组,每个用户组需要配备不同的虚拟IP地址,完全依赖用户的配置,无形中给网络管理员增加额外的负担,无法实现动态负载分担的功能。
改进的VRRP+协议正是基于标准VRRP协议不足而提出的。该协议只需在局域网中配置一个VRRP备份组,对外发布一个虚拟IP地址作为默认网关,当下挂主机发送ARP请求网关MAC时,由备份组内的Master设备回应不同的虚拟MAC地址,每个虚拟MAC对应VRRP备份组的不同的设备,从而将不同主机的流量动态的定向到备份组内不同设备上。这种实现无论是对网络管理员还是用户来讲都是透明的,并且完全可以动态实现资源优化以及负载分担。
基于上述想法,通过对VRRP标准协议报文的研究分析,在原有的VRRP标准协议报文进行改进,添加Option字段,设计虚拟转发器以及相应的状态机,增加报文和定时器类型,改进设计报文交互机制,在保证标准VRRP状态机的正常报文交互的前提下,达到动态负载均衡的目的。
2.1.1 VRRP 协议管理状态机
VRRP协议管理状态机是成功实现负载均衡的第1步。状态机保证备份组内设备状态正常切换,确定备份组中每台路由器的各自的地位和职能。Master负责相应用户主机的ARP请求,Backup设备通过周期性的接收Master设备的Advertise报文,对Master进行监控,使整个VRRP组能够及时的响应下挂主机的ARP请求。
2.1.2 虚拟转发状态机
标准VRRP状态机确定了备份组内各个设备的角色,无法实现动态负载均衡,因此为实现VRRP动态负载分担需要设计新的转发器和状态转换机制。参考VRRP协议管理状态机,本转发器对应的状态机设置Initial、Listen、Active三种状态,同时后2种状态对应的转发器实例称为BVF和AVF。每个设备对应1个虚拟 MAC,每个虚拟MAC对应1个转发器实例。每个设备将自己的MAC对应的转发器实例的状态设置为Active,并且负责转发该Mac对应的流量,同时将备份组内其他设备的MAC对应的转发器实例状态设置为Listen。
Advertise Message:在VRRP+备份组内的设备,周期性发送Advertise报文用于通告本路由器上备份组和状态机的状态,其他设备接收到该报文之后,进行相应的状态转换,包括VRRP状态机的Master抢占、虚拟转发机的接管等等。与标准VRRP协议不同的是,在VRRP组内无论Master设备还是Backup设备均允许发送和接收此报文。
Request Message:由于在VRRP+备份组内,处于Master设备在应答主机的ARP请求时,需要回应不同的虚拟MAC地址,因此Request报文是由处于Backup状态的路由器发送至Master路由器,请求分配虚拟MAC地址。
Reply Message:Master路由器在接收到 Request报文之后,分配一个当前未曾使用的虚拟MAC地址,并将分配的MAC地址填充到Reply报文的Option字段发送至Back设备。设备接收到报文之后,创建虚拟MAC地址对应的转发机实例,并且设定该虚拟MAC地址对应的转发机实例状态为Active。
Release Message:当虚拟转发机中AVF实例出现故障或者退出,不能在继续转发流量,接替其转发的设备发送Release报文,通告备份组内其他设备删除出现故障的Active实例。
ActiveVF Time:抢占定时器。与VRRP协议管理状态机的Hold_Timer定时器作用类似,是用来设置LVF更新为AVF的时间间隔。该定时器只存在处于Listen状态下。
Redirect Timer:重定向定时器。本定时器用于当某个设备上的AVF无法转发流量时,通过选举机制确定备份组内某个设备接替其进行流量转发,同时开启重定向定时器。该定时器超时前,Master路由器仍然会采用该 AVF对应的虚拟MAC地址应答主机的ARP请求。待定时器超时之后,Master路由器不再使用AVF对应的MAC进行应答。
TimeOut Timer:生存定时器。与Redirect Timer的工作场景一样,但是本定时器是用来限制某个设备接替出现故障AVF的工作期限,在定时器超时前,备份组内设备都会保留该实例,一旦该定时器超时之后,备份组内所有设备删除该实例,并且不再转发目的MAC地址为该VF实例对应的虚MAC地址的报文,需要主机重新进行ARP解析,请求虚拟MAC地址。
RequestMac Timer:请求MAC定时器。当进行完整的VRRP配置之后,VRRP协议管理状态机由Initial变为Backup状态时,设备会向Master发送Request报文,请求虚拟MAC地址,同时开启该定时器。在定时器超时前,如果获取到MAC之后,则创建自己的AVF实例。超时之后,设备的状态更新为Initial状态。
VRRP协议管理状态机仍然使用VRRP标准协议规定的3种状态:Initial/Backup/Master。但是为了实现动态负载分担,一个接口IP地址唯一标识一个接口,备份组的虚IP地址对应多个转发机实例,这些实例需要加入相应的ARP信息,如果用户希望对网络设备进行管理,就可能出现控制非期望设备的情况,因此对VRRP协议管理状态机进行改造,不存在IP地址拥有者,即不存在Initial状态直接切换到Master状态(图1)。
图1 VRRP协议管理状态机状态转换
下面是管理状态机各个状态的迁移规则:
Initial状态:初始化状态。在该状态下,VRRP进程已经启动,但是配置不尚未完备。如果VRRP虚IP与接口IP在同一个网段,那么:设备创建Hold_Time定时器,设置为Master_Down_Interval;创建RequestMAC定时器,发送Request报文,请求虚拟MAC地址;状态迁移至Backup状态。
Backup状态:该状态下设备存在Hold_time定时器和Hello_Time定时器,如果Hello_Time定时器超时,设备发送Adevertise报文,报文中携带设备上AVF实例信息。如果设备上还没有创建自己的AVF实例,发送Request报文,请求虚拟MAC地址,并且设置RequestVF Time定时器。同时接收其他设备发送的Advertise报文,并根据报文中携带的实例信息,创建备份实例。
如果设备接收Master发送的VRRP通告报文,当通告报文中的优先级字段为零时,设备重置Hold_time定时器值为Skew_Time;当设备开启抢占模式或通告报文携带的优先级大于等于设备本地优先级时,设备重置Hold_time定时器值为Master_Down_Interal,状态保持为Backup状态,否则,丢弃报文,等待Hold_Time定时器超时。
如果配置VRRP的接口关闭,那么设备删除Hold_time定时器和Hello_Time定时器,状态更新为Initial。
如果Hold_Time定时器超时,那么设备删除Hold_time定时器,更新状态为Master。
如果Hello_Time定时器超时,那么设备发送Adevertise报文,状态更新为Backup。
Master状态:该状态下设备仅存在Hello_Time定时器,定时器超时时发送Advertise报文,同时监听下挂主机的ARP请求和其他设备请求虚拟MAC地址的Request报文。当接收到主机发送的ARP请求时,Master设备根据负载均衡算法,使用不同的虚拟MAC地址进行回应。当接收到Request报文时,Master设备查看自己的MAC地址池,分配空闲的虚拟MAC地址。
如果配置VRRP的接口关闭,那么设备删除Hello_Time定时器,并且发送Advertise报文,报文中携带的优先级为零,同时更新状态为Initial。
如果设备监听到其他设备的Advertise报文携带的优先级大于等于本地优先级(如果优先级等于,设备会比较报文中接口的IP地址,大者按照如下规则转换,如果小于就丢弃报文),那么设备创建Hold_time定时器,设置Master超时定时器为Master_Down_Interal,同时更新状态为Backup Else设备,直接丢弃报文。
处于Backup状态和Master状态的设备都会定时发送Adevertise报文,报文中必须携带本设备上AVF实例信息,以便其他设备能够及时的给予更新。当接收到其他设备发送的Release报文时,解析出报文中携带的VF实例所对应的虚拟MAC地址,并查询本地实例表,然后删除相应的转发器实例表项,Master回收相应的MAC地址。
Intital状态:初始化状态是由于设备上的虚拟MAC地址没有下发到底层驱动,无法接收和发送任何报文。待VRRP配置完备之后,Inital状态向其他状态转换的规则如下:
如果设备上没有虚拟转发实例(设备的VRRP协议管理状态机刚由Initial转换为 Backup),当设备监听到Master回应的Reply报文时,设备解析Reply报文,提取分配的虚拟MAC地址,创建自己的实例,直接状态迁移至 Active,设置优先级为255,同时发送Advertise报文。
如果设备监听到其他设备发送的Advertise报文,那么设备解析Advertise报文,提取虚拟MAC地址,创建相应的实例,设置优先级为127,开启ActiveVF定时器同时状态迁移至Listen。
如果设备上拥有VF实例(此时VRRP配置重新生效,例如权重从下限值以下恢复到下限值以上),那么设备将自己虚拟MAC对应的VF实例状态迁移至Active,同时向驱动下发虚MAC,将其他的VF实例状态迁移至为Listen,并且分别开启对应的ActiveVF定时器。
Listen状态:在Listen状态下,设备主要是用来备份其他设备的AVF实例信息,当某个设备的AVF不能转发流量时,能够进行选举及时接管流量,恢复网络通信。该状态下的VF实例是无法进行流量转发的。下面是该状态向其他状态转换规则:
如果设备监听到Advertise报文,当报文中VF实例对应的优先级为零 时,设备删除该实例对应的ActiveVF定时器,接口下发虚MAC地址,同时发送Hello报文,启动该VF实例的Redirect定时器和TimeOut定时器,状态更新为Active。
如果报文中的VF实例对应的优先级高于等于本地优先级(如果等于,但是接口IP地址大于本地),那么设备重置ActiveVF定时器值为VF_Active_Time,状态保持为Listen;否则,设备重置ActiveVF定时器值为VF Prempt_Delay_Time,状态继续保持为Listen。
如果ActiveVF定时器超时,那么设备删除该VF实例对应的 ActiveVF定时器,接口下发虚MAC地址,同时发送Advertise报文,启动该VF实例的Redirect定时器和TimeOut定时器,状态更新为Active。
如果虚拟转发器实例的权重下降到下限值以下或接口接收到关闭事件 ,那么设备删除ActiveVF定时器,状态迁移至Initial。
Acitve状态:在Active状态的VF实例能够转发目的MAC地址为该VF实例对应的虚MAC地址报文。下面是该状态向其他状态转换规则:
如果配置VRRP的接口关闭或 VF实例权重下降到下限值以下,那么设备发送Advertise报文,报文中携带优先级为零,接口删除虚拟MAC,状态迁移至Initial。
如果TimeOut定时器超时,那么设备发送Release报文,通知其他设备删除VF实例,并且从接口上删除虚 MAC,删除 Redirect定时器,删除TimeOut定时器,状态先迁移至Initial,然后删除。
如果设备监听到Hello报文中的VF实例优先级大于等于本地优先级(优先级相等但是接口IP地址大于本地IP地址),那么设备创建VF Active定时器,从接口上删除虚MAC,状态迁移至Listen。
图2 VRRP+转发器状态机状态转换图(三角)
标准的VRRP协议之所以不能实现动态负载分担,其主要原因是由于一个虚拟IP地址只能对应一个MAC,虽然可以通过设置多个备份组来达到负载均衡的目的,但是需要划分用户群,每个用户群固定用户数量,在设备上配备不同的备份组,配置比较负载,不能实现动态的负载均衡。而本文中提出的VRRP+协议,可以完美的解决上述的问题,只需要在设备上配置一个备份组,发布一个虚IP地址,就可以实现动态负载均衡,方便用户主机的管理,最大程度上提高了资源利用率,在现在网络流量激增的时代,具有很大的实用意义。
[1]RFC3768,Virtual Router Redundancy Protocol(VRRP)[S].
[2]RFC5798,Virtual Router Redundancy Protocol(VRRP)Version 3 for IPv4 and IPv6[S].
[3]Sambasivam P,Murthy A,Belding-Royer E M.Dynamically Adaptive Multipath Routing Based on AODV[C]//Proc of the 3rd Annual Mediterranean Ad Hoc Networding Workshop.[S.l.]:[s.n.],2004.
[4]Li J,Mohapatra P.LAKER:location Aided Knowledge Extraction Routing for Mobile Ad Hoc Networks[C]//Proc of WCNC’03.[S.l.]:[s.n.],2003:1180 -1184.
[5]郑艳涛.VRRP协议应用和改进研究[D].杭州:浙江大学,2007.
[6]邹润生.VRRP技术实现网络的路由冗余和负载均衡[J].计算机与信息技术,2006(6):54 -56.
[7]徐效美,张国才.Cisco路由器下线路负载均衡技术的实现[J].计算机应用与软件,2004,21(4):126 -128.
[8]黄伟强,孟克勋.VRRP路由协议的应用[J].华南师范大学学报:自然科学版,2004(4):53-58.