名稱
HSRP:熱備份路由器協定(HSRP:Hot Standby Router Protocol)
介紹
所謂的熱備份路由協定(HSRP)主要是向我們提供了這樣一種機制,它的設計目的主要在於支持IP傳輸失敗情況下的不中斷服務。具體說,就是本協定用於在源主機無法動態地學習到首跳路由器IP位址的情況下防止首跳路由的失敗。它主要用於多接入,多播和廣播區域網路(例如乙太網)。
當然HSRP並不是有意要取代現有的動態路由發現機制,而這些現有的路由協定仍可以繼續使用只不過不是在任何可能的情況下。以前的大部分主機都不支持動態路由發現協定,他們是通過配置預設路由來進行工作的。而HSRP卻為它們提供了一種失敗服務機制在HSRP中所涉及到的所有路由器都被假設為已經配好了合適的IP路由協定,並且也已經存在了若干條路由。
熱備份路由協定(HSRP)的目的在於使主機看上去只使用了一個路由器,並且即使在它當前所使用的首跳路由器失敗的情況下仍能夠保持路由的連通性。此協定中所涉及到的多路由器都映射為一個虛擬的路由器。本協定保證同時有且只有一個路由器在代表虛擬路由器進行包的傳送。而終端則是把數據包發向該虛擬路由器。這個轉發包的路由器被成為活路由器。如果這個活路由器在某個時候由於某種原因而無法工作的話,則那個備份的路由器將被選擇來代替原來的活路由器。本協定為活路由器和備份路由器的定義提供了一種機制。在協定所設計到的路由器上使用IP位址,如果這個活路由器失效的話則那個備份路由器馬上代替活路由器工作而不會在對主機的連通性上產生大的中斷。
在使用HSRP時,一組路由器的工作將一致的表現為區域網路上通往主機的一個虛擬路由器的工作。這組路由器就稱為一個HSRP組,或備份組。這個組中將選出一個路由器來負責轉發由主機發給虛擬路由器的數據包。這個路由器就是所謂的活路由器。另一台路由器將被選為備份路由器。在活路由器失效的情況下,備份路由器將承擔活路由器的包的轉發功能。即使你可以任意制定運行HSRP的路由器的數量,但只有活路由器才能轉發傳送給虛擬路由器的數據包。
為了把網路阻塞降到最底限度,網路中只有活路由器和備份路由器可以在完成HSRP協定選擇過程後傳送一次HSRP訊息包。如果活路由器失效,則備份路由器將取代它作為新的活路由器工作。而當備份路由器失效或者它變成了活路由器時,另外一個路由器將被選為備份路由器。在某個區域網路里,多個熱備組可以共存和重疊。每個備份組都仿效一個虛擬路由器。對於每個備份組來說都有一個為別人所知的MAC地址,以及一個IP位址。而這個IP位址應該是這個區域網路中第一個子網中的地址,但必須不同於設定在所有路由器連線埠上的地址和區域網路中主機的地址,甚至包括為其他HSRP組設的地址。
如果在一個區域網路中設定了多個HSRP組,那么分配主機給不同的備份組就會使網路產生負載爆炸。
HSRP的工作原理
HSRP協定利用一個優先權方案來決定哪個配置了HSRP協定的路由器成為默認的主動路由器。如果一個路由器的優先權設定的比所有其他路由器的優先權高,則該路由器成為主動路由器。路由器的預設優先權是100,所以如果只設定一個路由器的優先權高於100,則該路由器將成為主動路由器。
通過在設定了HSRP協定的路由器之間廣播HSRP優先權,HSRP協定選出當前的主動路由器。當在預先設定的一段時間內主動路由器不能傳送hello訊息時,優先權最高的備用路由器變為主動路由器。路由器之間的包傳輸對網路上的所有主機來說都是透明的。
配置了HSRP協定的路由器交換以下三種多點廣播訊息:
Hello———hello訊息通知其他路由器傳送路由器的HSRP優先權和狀態信息,HSRP路由器默認為每3秒鐘傳送一個hello訊息;
coup———當一個備用路由器變為一個主動路由器時傳送一個coup訊息;
Resign———當主動路由器要宕機或者當有優先權更高的路由器傳送hello訊息時,主動路由器傳送一個resign訊息。在任一時刻,配置了HSRP協定的路由器都將處於以下六種狀態之一:
Initial———HSRP啟動時的狀態,HSRP還沒有運行,一般是在改變配置或連線埠剛剛啟動時進入該狀態。
learn———路由器已經得到了虛擬IP位址,但是它既不是活動路由器也不是等待路由器。它一直監聽從活動路由器和等待路由器發來的HELLO報文。
Listen———路由器正在監聽hello訊息。
Speak———在該狀態下,路由器定期傳送HELLO報文,並且積極參加活動路由器或等待路由器的競選。
Standby———當主動路由器失效時路由器準備接管包傳輸功能。
Active———路由器執行包傳輸功能。
本方案的特點:
1.高度的可靠性,兩台路由器之間採用HSRP(熱備份冗餘協定)協定,來保證兩台路由器中的任意一台down掉,或路由器的廣域網口down,都會迅速切換到另外一台。如果兩條線路均出現問題,就採用路由策略停掉郵政子網業務,啟用撥號線路。
2.有效的實現了負載均衡,在STAR-S1924F+上劃分出各自的VLAN,儲蓄子網VLAN在左側路由器上的HSRP的優先權較高,默認使用網通的FR線路;郵政系統(辦公、報刊、EMS、VOIP等等)子網VLAN在右側路由器上的HSRP的優先權較高,默認使用聯通的FR線路。充分利用了頻寬資源,而且實現了負載均衡。
3.充分利用了多以太口路由器在劃分多業務網段上的功能,也只有多以太口路由器在HSRP套用中才能實現兩個路由器間的負載分擔,這是具有四個以太口路由器的極大的優點。
4.在右側路由器上啟用QoS策略,VOIP業務需要較低的延時,所以將VoIP業務設定成較高的優先權。
5.通過在交換機上設定VLAN,有效的控制了兩個子網間的安全。
6.不存在單點故障問題。
使用前提
Cisco系統公司已在美國為HSRP申請了專利號5,473,599[2].如果任何套用中需要使用專利5,473,599中的任何聲明,需要cisco公司對標準的使用者一視同仁的依據給予許可證。另外這個許可證付費後只能使用一次。
定義
活路由器-當前代表虛擬路由器轉發數據包的路由器
備份路由器-第一備份路由器
備份組-參與到HSRP中,用已仿效虛擬路由器的一組路由器
Hellotime-一個給定路由器成功地發出兩個HSRPhello訊息包之間的間隔
HoldTime-假定傳送路由器失敗的情況下,收到兩個hello訊息包之間的間隔
範圍
本文檔描述的是關於包、信息、狀態以及事件在本協定中的使用。本文檔不討論關於網路管理或者網際網路的套用問題
術語本文檔將會使用到RFC2119[3]中的相關協定語言。
定義
活路由器-當前代表虛擬路由器轉發數據包的路由器
備份路由器-第一備份路由器
備份組-參與到HSRP中,用已仿效虛擬路由器的一組路由器
Hellotime-一個給定路由器成功地發出兩個HSRPhello訊息包之間的間隔
HoldTime-假定傳送路由器失敗的情況下,收到兩個hello訊息包之間的間隔
協定
在備份組裡,路由器通過傳送各種不同的訊息周期性的廣播狀態信息
包格式
備份協定運行在UDP層上,使用1985連線埠號。包傳送個多播地址224.0.0.2,TTL為1
在包的格式里,路由器使用他們的真IP位址做為源地址,而不使用虛擬地址。這對於使HSRP路由器們能夠準確定義彼此是非常重要的。
下面是UDP幀格式的數據部分的格式
版本號:1個位元組
HSRP信息的版本號,本文所描述的版本號為0
操作碼:1個位元組
操作碼說明的是包含在這個包里的信息的類型,可能的值有:
0-Hello1-Coup2-Resign
Hello類型訊息是用來表明路由器正在工作,並且有能力成為活路由器或者備份路由器。
Coup類型訊息是在當一個路由器希望變成活路由器是才被傳送的信息。
Resign類型訊息則是當一個路由器不希望再做活路由器是才被傳送的信息。
狀態:1個位元組
在備份組中的每個路由器都在運行著一個狀態機制。這個狀態域描述的是傳送訊息的路由器的當前狀態。每種狀態的具體描述將在後面說明。可能的狀態值有:
0-Initial
1-Learn
2-Listen
4-Speak
8-Standby
16–Active
Hellotime:1個位元組
這個域在Hello訊息中是非常有意義的。它包含了路由器傳送Hello訊息的大約的間隔時間。這個時間是用秒來表示的。
如果路由器上沒有配置Hellotime,那么它將會向活路由器傳送的Hello訊息學習。
而如果Hellotime沒有被設定而且Hello訊息已經被授權,則只能通過學習來獲取Hellotime.傳送Hello訊息的路由器必須引入在Hello訊息中的Hellotime域中使用的Hellotime值。如果沒有從活路由器發過來的Hello訊息中學習到Hellotime並且也沒有手工配置Hellotime,那么將把它的值預設的定為3秒鐘。
Holdtime:1個位元組
這個域只在Hello訊息中有效。它標明了當前的Hello訊息的有效期。這個時間也是用秒來表示的。
如果一個路由器傳送Hello訊息,那么接受者會認為在一個Holdtime時間內這個Hello訊息是有效的。Holdtime的值必須要比Hellotime的值大而且至少是Hellotime值的3倍。如果一個路由器上沒有配置Holdtime值,則它會向由活路由器發來的Hello訊息學習到一個Holdtime值。如果Hello訊息是被認證授權過的,則Holdtime值就只能通過學習來得到了。
同Hellotime一樣,一個路由器必須引入那個在Hello訊息中的Holdtime域所定義的Holdtime值。
一個狀態為活的路由器不能向其他路由器學習Hellotime和Holdtime值,儘管它也許會繼續使用從前一任活路由器那學到的Hellotime和Holdtime值。另外,它也許會使用手工配置的值。而活路由器也不能使用一個配置的時間或一個學習來的時間值。如果它沒有學習到,而且也沒有配置Holdtime,則它會使用10秒作為預設值。
優先權:1個位元組
這個域用來選擇活路由器和備份路由器。當把兩個路由器的優先權進行比較時,優先權數值高的將獲勝。如果兩個路由器的優先權相同的話,則IP位址高的將獲勝。
組:1個位元組
這個域定義了備份組。在令牌環網路中,它的值為0到2,而在其他媒質中,它的值為0到255之間的數。
授權數據:8位元組
這個域包含了8個用做password的文本字元如果授權數據沒有被設定,則使用推薦的預設值:0x630x690x730x630x6F0x000x000x00.
虛擬IP位址:4位元組
虛擬IP位址將在組中使用
如果一台路由器本身沒有配置虛擬IP位址,那么他可以從活路由器那發來的Hello訊息中學到。而如果路由器沒有設定而且這個虛擬IP位址,而且Hello訊息已經被授權,則只能通過學習來獲取這個地址。
操作參數
在備份組裡,每個路由器必須了解以下的信息。當然,討論這些信息是如何決定的則超出了本文的範圍。
備份組號
虛擬MAC地址
優先權
授權數據
Hellotime
Holdtime
下面的信息則是每個備份組中必須至少有一台路由器要掌握的信息,當然,也有可能這個組中的每一台路由器都知道它。
虛擬IP位址
下面的信息可以在任何一台路由器上配置優先權能力
如果一個路由器具有比活路由器高的優先權,而且也配置了優先權,則它就可以使用Coup訊息來取代當前的活路由器。
狀態
備份組中的每一台路由器都通過執行一個簡單的狀態機制來參與到這個協定中來。下面我們就來描述一下這個狀態機制在表面上我們所能看到的一些運行情況。運行時可能會根據狀態機制對不同功能的規定而在內部產生不同的操作過程。
所有的路由器都從初試狀態開始。這一段討論每種狀態的目的。為了詳細說明每一種狀態下所發生的動作,請看5,7節的狀態轉換表
1.Initial初始狀態
這是個開始的狀態,它表明HSRP不在運行中。當配置改變或連線埠首次啟動時就會進入這個狀態。
2.Learn學習
這是在路由器還沒有確定虛擬IP位址,並且還沒有收到一個從活路由器傳送來的已經認證過的Hello訊息時的狀態。在這個狀態中,路由器仍然在等待著從活路由器那裡接受信息。
3.Listen監聽
路由器知道了虛擬IP位址,但它既不是活路由器也不是備份路由器。並且該路由器是在從活路由器或備份路由器那裡監聽Hello訊息。
4.Speak會話
路由器周期地傳送Hello訊息,並且積極地參與到活路由器或備份路由器的選拔中。
只有在它已經有了虛擬IP位址的前提下,它才能進入到這個狀態。
5.Standby備份
這個狀態下的路由器作為下一個活路由器的侯選者,周期性地傳送Hello訊息。除了極短暫的情況外,每個組中最多只能有一個處於備份狀態的路由器。
6.Active激活
路由器的當前狀態為把數據包轉發到組的虛擬MAC地址。路由器周期地傳送Hello訊息。除了極短暫的情況外,每個組中最多只能有一個處於激活狀態的路由器。
時鐘
每台路由器都要維護3個時鐘,一個激活時鐘,一個備份時鐘,和一個Hello時鐘。
激活時鐘是用來監視活路由器的,在任何時候,只要路由器發現了從活路由器發過來的被認證過的Hello訊息,激活時鐘就開始計時,直到到達Hello訊息中所設定的Holdtime值為止。
備份時鐘用於監視備份路由器。該時鐘也是在路由器發現了從活路由器發過來的被認證過的Hello訊息,隨時開始計時,直到到達Hello訊息中所設定的Holdtime值為止。
Hello時鐘是在每一個Hellotime時間段終止一次。如果路由器是處於會話、備份或激活狀態下,它會在Hello時鐘停止時產生一個Hello訊息。Hello訊息必須是不穩定的。
事件
下面是在HSRP有限的狀態機制下所能發生的事件
a-在一個使能的連線埠上配置HSRP
b-在一個連線埠上禁用HSRP,或這個連線埠被禁用。
c-活時鐘期滿。活時鐘從路由器收到從活路由器傳送來的最後一個Hello訊息開始計時,時長為Hello訊息中所設定的Holdtime值。
d-備份時鐘期滿。備份時鐘從路由器收到從活路由器傳送來的最後一個Hello訊息開始計時,時長為Hello訊息中所設定的Holdtime值。
e-Hello時鐘期滿。用於傳送Hello訊息的周期性時鐘期滿。
f-收到一個發自一台處於對話狀態路由器的高優先權Hello訊息。
g-收到一個發自活路由器的高優先權的Hello訊息。
h-收到一個來自活路由器的低優先權的Hello訊息。
i-收到一個來自活路由器的Resign訊息。
j-收到一個來自一台高優先權路由器的Coup訊息。
k-收到一個來自備份路由器的高優先權的Hello訊息。
l-收到一個來自備份了路由器的低優先權的Hello訊息。
操作
本節說明了這種狀態機制中所要採取的一系列操作
A、啟動活時鐘
如果這個動作是作為從活路由器接受到認證過的Hello訊息的結果來發生的話,那么活時鐘要在Hello訊息中的Holdtime域中設定。否則,活時鐘將使用路由器當前的Holdtime值啟動。
B、啟動備份時鐘
如果這個動作是由於從備份路由器接受到認證過的Hello訊息而導致發生的話,那么備份時鐘要在Hello訊息中的Holdtime域中設定。否則,備份時鐘將使用路由器當前的Holdtime值啟動。
C、終止活時鐘
活時鐘被終止。
D、終止備份時鐘
備份時鐘被終止。
E、學習參數
這個動作在接收到一個來自活路由器的一個已認證的訊息時發生。如果這個組沒有手工配置虛IP位址,它就會從訊息中學到一個虛IP位址。路由器也可能從訊息中學習Hellotime和Holdtime值。
F、傳送Hello訊息
路由器以它當前的狀態、Hellotime和Holdtime值來傳送Hello訊息。
G、傳送Coup訊息路由器傳送Coup訊息包給活路由器,通知它發現了一個更高優先權的路由器。
H、傳送Resign訊息
路由器傳送Resign訊息來允許其他路由器成為活路由器。
I、傳送無償ARP訊息
路由器通過廣播ARP應答包來把組的虛IP位址和虛MAC地址廣播出去。如同ARP包一樣,這個包使用虛擬MAC地址作為鏈路層包頭中的源MAC地址。
狀態過渡
下面的表格說明了這種狀態機制的各狀態間的轉換過程。對於每個時間以及路由器所處的每個狀態來說,路由器必須執行前面已說明的一系列操作並轉換為即定的狀態。如果沒有操作被事先聲明,也就不會有任何操作發生,如果沒有聲明任何狀態改變,也不會有任何的狀態的改變。
下面表中所使用的符號是在5,6節的操作列表中所列出的一系列操作所對應的字母。狀態則是用在5,3節中的狀態列表中個狀態所對應的數字來表示。斜線(‘/’)是操作和狀態的分隔設定。狀態的轉變可以是二選一的,這主要取決於外部狀態。二選一的狀態用‘|’來分隔。
詳細情況請見附加說明
說明
+如果配置了虛IP位址,應設為狀態3(監聽),如果沒有設定虛IP位址,應設為狀態2(學習)。這兩種情況都使用操作A和B
*如果路由器被配置為優先占取,則採用操作B,G,F,和I,而且設為狀態6(激活)。
如果路由器沒有被設為優先占取,則採用操作A,並且沒有狀態變化。
對MAC地址的考慮
概述
每個HSRP組都有一個眾所周知的聯合的虛擬MAC地址。在令牌環網路上,這些地址實際上屬於功能地址。下面這三個地址:0xC00x000x000x010x000x00,0xC00x000x000x020x000x00,以及0xC00x000x000x040x000x00分別與組0,1,2相聯繫。
在其他媒質上,虛MAC地址為0x000x000x0C0x070xACXX,其中XX代表HSRP的組號。凡執行HSRP都要儘可能地使用這種公認的HSRPMAC地址作為該組的虛MAC地址。
活路由器必須接收和傳送用於定義組的虛MAC地址的數據包。它在離開激活狀態後則必須停止傳送或接受這種包。
若且唯若路由器處於激活狀態下時,路由器必須使用組虛擬MAC地址作為它的Hello訊息包的源MAC地址。這對於處於學習狀態的網橋來說是非常必要的,這樣可以使網橋能夠斷定這個虛MAC地址是處於哪個網段的。
對於每個組來說,都要有一個虛擬IP位址和一個虛擬MAC地址。這是個非常理想的情況,因為這樣使得ARP表處於一種最終狀態,而不需要象HSRP活路由器那樣隨著活路由器人選的改變而隨時改變表中的數據。
另外,對於HSRP在網橋環境下工作時,網橋必須能夠在虛MAC地址改變時很快地進行自我刷新。雖然處於學習狀態的網橋理論上能夠作到這一點,但有些還是在這方面存在著問題的。因此推薦只有真正處於學習狀態的網橋才能使用HSRP.虛MAC地址的改變可能會對那些與MAC地址捆綁的附加狀態的環境產生負面的影響。
例如令牌環網路。如果源路由網橋正在使用的話,RIF將以虛MAC地址存在主機的RIF快取里。RIF指出了用於到達MAC地址的路徑和最後的環。在路由器轉為活路由器時,它們將不會影響在帶橋的環上的主機的RIF快取。這也許會導致數據包被轉發到上一級活路由器的環上。
在這種環境下,一台路由器也許會使用它標準的MAC地址作為虛MAC地址。這種做法是非常不被提倡的。在這種模式下,虛IP位址將會逾時路由到不同的MAC地址,而最終會在路由的終點產生問題,因為ARP表是假設了一個在MAC地址和IP位址見相對靜態的關係。而在這種情況下,只要當路由終點接受到一個進入激活狀態的路由器所產生的毫無根據的ARP應答時,則ARP表就會進行更新。
地址過濾器
正如前面所提到的,路由器正在以它們的組的MAC地址和IP位址仿效著一個虛路由器。MAC地址理論上是由路由器的連線埠控制器的一個地址過濾器或MAC地址列表來提供的。這對於路由器來說,在維護它們的主MAC地址時增加一個或多個虛MAC地址到它們的控制器的MAC地址過濾器中是非常理想的。
不幸的是,有些連線埠控制器只支持一個unicastMAC地址的地址過濾器。或者說,在令牌環網路中,那些應由HSRP所使用的功能性地址已經被其他協定所占用了。這種情況下,這些路由器仍舊能夠執行HSRP,但當路由器假設或放棄作為活路由器進行控制時,HSRP必定改變端口的主MAC地址。
這就存在著一些潛在的問題,因為有些傳輸可能會希望使用路由器的主MAC地址。但問題也許會因為路由器傳送那些無端的ARP包來回答它沒有運行HSRP的IP位址來減輕。
儘管如此,其他網路實體也應該在使用IP時通過刷新ARP表來反映路由器當前正使用的是組的虛MAC地址,而不是它的主MAC地址。
有些協定也許因為連線埠主MAC地址的改變而不能與備份協定同時運行。舉例說,DECnetIV和HSRP就不會同時運行在同一台設備上。
ICMP重定向
當運行HSRP時,防止主機發現備份組中路由器的主MAC地址是非常重要的。因此應該禁用任何可能把路由器的主MAC地址通知給主機的協定。所以,凡HSRP所涉及到的路由器,即使它只有一個連線埠運行了HSRP,都不能在運行HSRP的連線埠傳送ICMP重定向包。
ARP 代理
一般地說,主機在通過它們預設路由的配置來學習HSRP的虛IP位址。這些主機把包傳送給虛IP位址用以達到它在局域網之外的目的地。在某些情況下,主機可能使用由ARP代理來路由到區域網路之外。這時,主機使用由ARP代理應答提供的MAC地址。如果ARP代理應答說明了HSRP虛MAC地址,則HSRP功能將被保留。
如果一台HSRP路由器被配置為支持ARP代理的HSRP,那么這台路由器必須在它所產生的任何ARP代理應答中說明HSRP虛MAC地址。ARP代理應答一定不要受HSRP狀態機制的約束。狀態機制的約束可能會導致ARP代理應答的匱乏,因為這些ARP代理應答可能會受到其他一些因素的限制,如水平分割原則。
安全上的考慮
這種協定沒有提供安全方面的保證。訊息中的認證域對於防止錯誤配置是非常有用的。該協定很容易被區域網路中的入侵者攻擊,這可能會導致一個黑洞的產生和拒絕服務。
但從區域網路外面是很難對該協定進行攻擊的,因為大多數路由器不會轉發到多播地址(224.0.0.2)的數據包。
***************
譯者
譯者:程靜([email protected])
譯文發布時間:2001-5-24
著作權:本中文翻譯文檔著作權歸中國互動出版網所有。可以用於非商業用途自由轉載,但必
須保留本文檔的翻譯及版權資訊。
NetworkWorkingGroupT.Li
RequestforComments:2281JuniperNetworks
Category:InformationalB.Cole
JuniperNetworks
P.Morton
CiscoSystems
D.Li
CiscoSystems
March1998