祝偉華,徐 強
(重慶大學 軟件學院,重慶 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.