[轉載]VRRP協議介紹

potato123發表於2009-06-16

來自:http://blog.chinaunix.net/u/12313/showart_235796.html

 

本文件的Copyleft歸yfydz所有,使用GPL釋出,可以自由拷貝,轉載,轉載時請保持文件的完整性,嚴禁用於任何商業用途。
msn: yfydz_no1@hotmail.com
來源:http://yfydz.cublog.cn

參考資料: RFC 3768

1. 前言

VRRP(Virtual Router Redundancy Protocol)協議是用於實現路由器冗餘的協議,最新協議在RFC3768中定義,原來的定義RFC2338被廢除,新協議相對還簡化了一些功能。

2. 協議說明

2.1 協議

VRRP協議是為消除在靜態預設路由環境下的預設路由器單點故障引起的網路失效而設計的主備模式的協議,使得在發生故障而進行裝置功能 切換時可以不影響內外資料通訊,不需要再修改內部網路的網路引數。VRRP協議需要具有IP地址備份,優先路由選擇,減少不必要的路由器間通訊等功能。

VRRP協議將兩臺或多臺路由器裝置虛擬成一個裝置,對外提供虛擬路由器IP(一個或多個),而在路由器組內部,如果實際擁有這個對外 IP的路由器如果工作正常的話就是MASTER,或者是通過演算法選舉產生,MASTER實現針對虛擬路由器IP的各種網路功能,如ARP請求,ICMP, 以及資料的轉發等;其他裝置不擁有該IP,狀態是BACKUP,除了接收MASTER的VRRP狀態通告資訊外,不執行對外的網路功能。當主機失效 時,BACKUP將接管原先MASTER的網路功能。

配置VRRP協議時需要配置每個路由器的虛擬路由器ID(VRID)和優先權值,使用VRID將路由器進行分組,具有相同VRID值的 路由器為同一個組,VRID是一個0~255的正整數;同一組中的路由器通過使用優先權值來選舉MASTER,優先權大者為MASTER,優先權也是一個 0~255的正整數。

VRRP協議使用多播資料來傳輸VRRP資料,VRRP資料使用特殊的虛擬源MAC地址傳送資料而不是自身網路卡的MAC地址,VRRP 執行時只有MASTER路由器定時傳送VRRP通告資訊,表示MASTER工作正常以及虛擬路由器IP(組),BACKUP只接收VRRP資料,不傳送數 據,如果一定時間內沒有接收到MASTER的通告資訊,各BACKUP將宣告自己成為MASTER,傳送通告資訊,重新進行MASTER選舉狀態。

2.2 MASTER選舉
如果對外的虛擬路由器IP就是路由器本身配置的IP地址的話,該路由器始終都是MASTER;否則如果不具備虛擬IP的話,將進行MASTER 選舉,各路由器都宣告自己是MASTER,傳送VRRP通告資訊,如果收到其他機器的發來的通告資訊的優先順序比自己高,將轉回BACKUP狀態,如果相等 的話,將比較路由器的實際IP,IP值較大的優先權高。不過如果對外的虛擬路由器IP就是路由器本身的IP的話,該路由器始終將是MASTER,這時的優 先級值為255。

2.3 協議狀態機

VRRP協議狀態比較簡單,就三種狀態,初始化,主機,備份機。
                      +---------------+
           +--------->|               |<-------------+
           |          |  Initialize   |              |
           |   +------|               |----------+   |
           |   |      +---------------+          |   |
           |   |                                 |   |
           |   V                                 V   |
   +---------------+                       +---------------+
   |               |---------------------->|               |
   |    Master     |                       |    Backup     |
   |               |<----------------------|               |
   +---------------+                       +---------------+

初始化:
    路由器啟動時,如果路由器的優先順序是255(最高優先順序,路由器擁有路由器地址),要傳送VRRP通告資訊,併傳送廣播ARP資訊通告路由器IP地址對應 的MAC地址為路由虛擬MAC,設定通告資訊定時器準備定時傳送VRRP通告資訊,轉為MASTER狀態;否則進入BACKUP狀態,設定定時器檢查定時 檢查是否收到MASTER的通告資訊。

主機:
    主機狀態下的路由器要完成如下功能:
 設定定時通告定時器;
 用VRRP虛擬MAC地址響應路由器IP地址的ARP請求;
 轉發目的MAC是VRRP虛擬MAC的資料包;
 如果是虛擬路由器IP的擁有者,將接受目的地址是虛擬路由器IP的資料包,否則丟棄;
 當收到shutdown的事件時刪除定時通告定時器,傳送優先權級為0的通告包,轉初始化狀態;
 如果定時通告定時器超時時,傳送VRRP通告資訊;
 收到VRRP通告資訊時,如果優先權為0,傳送VRRP通告資訊;否則判斷資料的優先順序是否高於本機,或相等而且實際IP地址大於本地實際IP,設定定時通告定時器,復位主機超時定時器,轉BACKUP狀態;否則的話,丟棄該通告包;
 
備機:
   備機狀態下的路由器要實現以下功能:
 設定主機超時定時器;
 不能響應針對虛擬路由器IP的ARP請求資訊;
 丟棄所有目的MAC地址是虛擬路由器MAC地址的資料包;
 不接受目的是虛擬路由器IP的所有資料包;
 當收到shutdown的事件時刪除主機超時定時器,轉初始化狀態;
 主機超時定時器超時的時候,傳送VRRP通告資訊,廣播ARP地址資訊,轉MASTER狀態;
 收到VRRP通告資訊時,如果優先權為0,表示進入MASTER選舉;否則判斷資料的優先順序是否高於本機,如果高的話承認MASTER有效,復位主機超時定時器;否則的話,丟棄該通告包;
 
2.4 ARP查詢處理

當內部主機通過ARP查詢虛擬路由器IP地址對應的MAC地址時,MASTER路由器回覆的MAC地址為虛擬的VRRP的MAC地址, 而不是實際網路卡的MAC地址,這樣在路由器切換時讓內網機器覺察不到;而在路由器重新啟動時,不能主動傳送本機網路卡的實際MAC地址。如果虛擬路由器開啟 的ARP代理(proxy_arp)功能,代理的ARP回應也回應VRRP虛擬MAC地址;
 
2.5 VRRP應用舉例
 
            +-----------+      +-----------+
            |   Rtr1    |      |   Rtr2    |
            |(MR VRID=1)|      |(BR VRID=1)|
            |(BR VRID=2)|      |(MR VRID=2)|
    VRID=1  +-----------+      +-----------+  VRID=2
    IP A ---------->*            *<---------- IP B
                    |            |
                    |            |
  ------------------+------------+-----+--------+--------+--------+--
                                       ^        ^        ^        ^
                                       |        |        |        |
                                     (IP A)   (IP A)   (IP B)   (IP B)
                                       |        |        |        |
                                    +--+--+  +--+--+  +--+--+  +--+--+
                                    |  H1 |  |  H2 |  |  H3 |  |  H4 |
                                    +-----+  +-----+  +--+--+  +--+--+
     Legend:
              ---+---+---+--  =  Ethernet, Token Ring, or FDDI
                           H  =  Host computer
                          MR  =  Master Router
                          BR  =  Backup Router
                           *  =  IP Address
                        (IP)  =  default router for hosts

這是通常VRRP使用拓撲,兩臺路由器執行VRRP互為備份,路由器1作為VRID組1的MASTER,IP地址A,VRID組2的 BACKUP,路由器2作為VRID組2的MASTER,IP地址B,VRID組1的BACKUP,內部網路中一部分機器的預設閘道器地址是IP地址A,一 部分是IP地址B,正常情況下以A為閘道器的資料將走路由器1,以B為閘道器的資料將走路由器2,如果一臺路由器發生故障,所有資料將走另一臺路由器。

3. 協議定義

3.1 以太頭

源MAC地址必須為虛擬MAC地址:00-00-5E-00-01-{VRID},VRID為虛擬路由器ID值,16進位制格式,所以同一網段中最多有255個VRRP路由器;目的MAC為多播型別的MAC。

3.2 IP頭引數

VRRP包的源地址是本機地址,目的地址必須為224.0.0.18,為一多播地址;IP協議號為112;IP包的TTL值必須為255。

3.3 VRRP協議資料格式
    0                   1                   2                   3
    0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |Version| Type  | Virtual Rtr ID|   Priority    | Count IP Addrs|
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |   Auth Type   |   Adver Int   |          Checksum             |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                         IP Address (1)                        |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                            .                                  |
   |                            .                                  |
   |                            .                                  |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                         IP Address (n)                        |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                     Authentication Data (1)                   |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                     Authentication Data (2)                   |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

其中:
version:版本,4位,在RFC3768中定義為2;
Type:型別,4位,目前只定義一種類型別:通告資料,取值為1;
Virtual Rtr ID:虛擬路由器ID,8位
Priority:優先順序,8位,具備冗餘IP地址的裝置的優先順序為255;
Count IP Addrs:VRRP包中的IP地址數量,8位;
Auth Type:認證型別,8位,RFC3768中認證功能已經取消,此欄位值定義0(不認證),為1,2只作為對老版本的相容;
Adver Int:通告包的傳送間隔時間,8位,單位是秒,預設是1秒;
Checksum:校驗和,16位,校驗資料範圍只是VRRP資料,即從VRRP的版本欄位開始的資料,不包括IP頭;
IP Address(es):和虛擬路由器相關的IP地址,數量由Count IP Addrs決定
Authentication Data:RFC3768中定義該欄位只是為了和老版本相容,必須置0。

3.4 接收資料時的必須檢查

收到VRRP資料包時要進行以下驗證,不滿足的資料包將被丟棄:
   -  TTL必須為255;
   -  VRRP版本號必須為2;
   -  一個包中資料欄位必須完整;
   -  校驗和必須正確;
   -  必須驗證在接收的網路卡上配置了VRID值,而且本地路由器不是路由IP地址的擁有者
   -  必須驗證VVRP認證型別和配置的一致;
 

4. 結論

VRRP實現了對路由器IP地址的冗餘功能,防止了單點故障造成的網路失效,VRRP本身是熱備形式的,但可以通過互相熱備實現路由器 的均衡處理,新版的VRRP較老版簡化了認證處理,實際不再進行資料的認證,這是因為在實際應用中經常出現認證成為造成多個MASTER同時使用的異常情 況。

相關文章