簡介
HSRP(Hot Standby Router Protocol 熱備份路由器協議)是Cisco的專有協議。HSRP把多臺路由器組成一個“熱備份組”,形成一個虛擬路由器。這個組內只有一個路由器是Active(活動)的,並由它來轉發數據包,如果活動路由器發生了故障,備份路由器將成爲活動路由器。從網絡內的主機來看,網關並沒有改變。
HSRP的工作過程:
HSRP路由器利用Hello包來互相監聽各自的存在。當路由器長時間沒有接收到Hello包時,就認爲活動路由器故障,備份路由器就會成爲活動路由器。HSRP協議利用優先級決定哪個路由器成爲活動路由器。如果一個路由器的優先級比其它路由器的優先級高,則該路由器成爲活動路由器。路由器的默認優先級是100。在一個組中,最多有一個活動路由器和一個備份路由器。HSRP路由器發送的組播(224.0.0.2)消息有以下三種:
Hello:通知其它路由器發送者的HSRP優先級和狀態信息,HSRP路由器默認每3秒發送一個Hello消息。
Coup:當一個備用路由器變爲一個活動路由器時發送一個Coup消息。
Resign:當活動路由器要當機或者當有優先級更高的路由器發送Hello消息時,主動發送一個Resign消息。
HSRP的報文格式:
②操作碼:用來描述數據包中報文的類型,可能的值爲0、1和2,分別表示是Hello、Coup和Resign消息。
③狀態:描述發出該報文的路由器的當前狀態。有0、1、2、4、8、16六種狀態,分別表示爲Initial、Learn、
Listen、Speak、Standby和Active狀態。
④呼叫時間(Hellotime):只在呼叫報文中有意義,表示路由器定時發送呼叫報文的間隔時間,以秒爲單位。如
果該參數沒有在路由器上配置,它可能要從活動路由器上學習獲得。默認值爲3秒。
⑤保持時間(Holdtime):只在呼叫報文中有意義,被接收路由器用來判斷該呼叫報文是否合法,單位爲秒,其值
至少是呼叫時間的3倍。如果該參數沒有配置,也同樣可以從活動路由器上學習。活動路由器不能從等待路由
器學習呼叫時間和保持時間,它只能繼續使用從先前的活動路由器學習來的該值。默認值爲10秒。
⑥優先級:該參數用來選擇活動和等待路由器,兩個具有不同優先級的路由器,優先級高的將成爲活動路由器。
兩個具有相同優先級的路由器,IP地址大的將成爲活動路由器。默認優先級爲100。
⑦組:用來標記路由器所在的熱等待組。對令牌環類型的網絡,合法的值是0、1和2,對於其它類型的網絡,合
法值是0-255。
⑧認證碼:包括8個明文的字符作爲密碼,如果沒有配置,默認值爲cisco。
⑨虛擬IP地址:用來指定本熱等待組的虛擬IP地址,它可以從活動路由器的呼叫報文中學習到。如果沒有配置該
地址,並且呼叫報文是需要認識的,那麼只能通過活動路由器學習。
HSRP路由器的6中狀態:
1.Initial:HSRP啓動時的狀態,HSRP還沒有運行,一般是在改變配置或端口剛剛啓動時進入該狀態。
2.Learn:在該狀態下,路由器還沒有決定虛擬IP地址,也沒有看到認證的、來自活動路由器的Hello報文。路由
器仍在等待活動路由器發來的Hello報文。
3.Listen:路由器已經得到了虛擬IP地址,但是它既不是活動路由器也不是等待路由器。它一直監聽從活動路由
器和等待路由器發來的Hello報文。
4.Speak:在該狀態下,路由器定期發送Hello報文,並且積極參加活動路由器或等待路由器的競選。如果選出活
動路由和等待路由,則變成監聽狀態(Listen)。而此時只有活動路由器和等待路由處於說話狀態。
5.Standby:處於該狀態的路由器是下一個候選的活動路由器,它定時發送Hello報文。
6.Active:處於活動狀態的路由器承擔轉發數據包的任務,這些數據包是發給該組的虛擬MAC地址的。它定時發
出Hello報文。
HSRP的2個定時器:
HSRP使用2個定時器:Hello間隔和Hold時間。默認Hello間隔是3秒,默認的Hold間隔是10秒。Hello間隔定義了兩組路由器之間交換信息的頻率。Hlod間隔定義了經過多長時間後,沒有收到其它路由器的信息,則活動路由器或者備用路由器就會被宣告爲失敗。配置計時器並不是越小越好,雖然計時器越小則切換時間越短。計時器的配置需要和STP等的切換時間相一致。另外,Hold間隔最少應該是Hello間隔的3倍。
實驗
在路由器和三層交換機上都可以配置HSRP,這裏是在路由器R1和R3上配置。
命令:
R1(config-if)#standby 1 ip 192.168.13.254 //啓用HSRP功能,創建standby組1,並設置虛擬網關IP地址
R1(config-if)#standby priority 120 //設置HSRP的優先級,該值大的會搶佔成Active路由器,默認爲100
R1(config-if)#standby 1 preempt //設置允許在該路由器優先級是最高時搶佔爲活動路由器
R1(config-if)#standby 1 timers 3 10 //設置Hellotime爲3秒,Holdtime爲10秒,默認即爲該值
R1(config-if)#standby 1 authentication md5 key-string cisco //配置認證密碼
R1(config-if)#standby 1 track s0/0 30 //配置端口跟蹤
說明:
①相同組號的路由器屬於同一個HSRP組,所有屬於同一個HSRP組的路由器的虛擬IP地址必須一致。
②“standby 1 preempt”命令:
1>如果不配置該命令,即使該路由器優先級再高,也不會成爲Active路由;
2>如果再配置“standby 1 preempt delay minimum 1000”命令,則會延時1000毫秒才進行搶佔。
③Hellotime:路由器每間隔多長時間發送Hello信息;Holdtime:在多長時間內同組的其它路由器沒有收到活動路
由器的信息,則認爲活動路由器發生故障;如果要更改默認值,所有同HSRP組的路由器該項設置必須一致。
④配置認證密碼爲了防止非法設備加入到HSRP組,並且同HSRP組的密碼必須一致。
⑤端口跟蹤:如果試驗中沒有配置s0/0的端口跟蹤,當R1的s0/0接口出現問題,R1將沒有到達R2的Loopback0接
口所在網段的路由。然而R1和R3之間的以太網仍然沒有問題,HSRP的Hello包正常發送和接收。因此R1仍然是
虛擬網關192.168.13.254的活動路由器,Server的數據仍會發送給R1,這樣會造成Server無法ping通R2的
Loopback接口。當配置路由跟蹤後,端口跟蹤使得R1發現s0/0上的鏈路出現問題後,把自己的優先級(我們設
置的爲120)減去一個數字(我們設置的爲30),成爲了90。由於R3的優先級爲默認值100,這樣R3就成爲了活動
路由器,Server的數據包將發往R3。降低的值應該選取合適的值,使得其他路由器能成爲活動路由器。
⑥可以使用“standby 1 mac-address”命令修改虛擬MAC地址,系統默認的MAC地址爲“0000.0c07.acXX”,
“XX”爲HSRP的組號。
⑦可以使用“standby 1 name”命令設置HSRP組1的名字,如果沒有設置,系統將自動生成。
⑧由於HSRP的兩個版本version1和version2不兼容,可以使用“standby version”命令設置HSRP的版本。
配置IP地址及路由:
R1(config)#int f1/0
R1(config-if)#ip add 192.168.13.1 255.255.255.0
R1(config-if)#no sh
R1(config)#int s0/0
R1(config-if)#ip add 192.168.12.1 255.255.255.0
R1(config-if)#no sh
R1(config)#router rip
R1(config-router)#network 192.168.12.0
R1(config-router)#network 192.168.13.0
R1(config-router)#passive-interface f1/0 //防止從該接口發送RIP信息給R3
R2(config)#int lo0
R2(config-if)#ip add 192.168.2.2 255.255.255.0
R2(config)#int s0/0
R2(config-if)#ip add 192.168.12.2 255.255.255.0
R2(config-if)#clock rate 128000
R2(config-if)#no sh
R2(config)#int s0/1
R2(config-if)#ip add 192.168.23.2 255.255.255.0
R2(config-if)#clock rate 128000
R2(config-if)#no sh
R2(config)#router rip
R2(config-router)#network 192.168.2.0
R2(config-router)#network 192.168.12.0
R2(config-router)#network 192.168.23.0
R3(config)#int f1/0
R3(config-if)#ip add 192.168.13.3 255.255.255.0
R3(config-if)#no sh
R3(config)#int s0/1
R3(config-if)#ip add 192.168.23.3 255.255.255.0
R3(config-if)#no sh
R3(config)#router rip
R3(config-router)#network 192.168.23.0
R3(config-router)#network 192.168.13.0
R3(config-router)#passive-interface f1/0
配置HSRP:
R1(config)#int f1/0
R1(config-if)#standby 1 ip 192.168.13.254
R1(config-if)#standby priority 120
R1(config-if)#standby 1 preempt
R1(config-if)#standby 1 timers 3 10
R1(config-if)#standby 1 authentication md5 key-string cisco
R1(config-if)#standby 1 track s0/0 30
R3(config)#int f1/0
R3(config-if)#standby 1 ip 192.168.13.254
R3(config-if)#standby 1 preempt
R3(config-if)#standby 1 timers 3 10
R3(config-if)#standby 1 authentication md5 key-string cisco
R1(config-if)#standby 1 track s0/0 30
實驗調試
R1#show standby brief //查看HSRP簡要信息
R1#show standby //查看HSRP詳細信息
Server:ping 192.168.2.2 -t
R1(config)#int f1/0
R1(config)#sh
在Server上連續ping路由器R2的Loopback接口的IP地址(192.168.2.2),在R1上關閉F1/0接口,可以發現:當R1故障時,R3很快就替代了R1,計算機的通信幾乎沒有受到什麼影響。
說明:如果重新打開R1的F1/0接口,由於再R1上配置了搶佔(Preempt),因此R1又會成爲活動路由器。
R3#debug standby //以下是當R1的F1/0接口關閉後,R3成爲活動路由器過程中的debug信息
配置多個HSRP組
之前的步驟已經虛擬了192.168.13.254網關,對於這個網關只能有一個活動路由器,於是這個路由器將承擔全部的數據流量。我們可以再創建一個HSRP組,虛擬出另一個網關192.168.13.253,這時R3是活動路由器,讓一部分計算機指向這個網關,這樣就能做到負載平衡。
R1(config)#int f1/0
R1(config-if)#standby 1 ip 192.168.13.254
R1(config-if)#standby 1 priority 120
R1(config-if)#standby 1 preempt
R1(config-if)#standby 1 authentication md5 key-string cisco
R1(config-if)#standby 1 track s0/0 30
R1(config-if)#standby 2 ip 192.168.13.253
R1(config-if)#standby 2 preempt
R1(config-if)#standby 2 authentication md5 key-string cisco
R3(config)#int f1/0
R3(config-if)#standby 1 ip 192.168.13.254
R3(config-if)#standby 1 preempt
R3(config-if)#standby 1 authentication md5 key-string cisco
R3(config-if)#standby 2 ip 192.168.13.253
R3(config-if)#standby 2 priority 120
R3(config-if)#standby 2 preempt
R3(config-if)#standby 2 authentication md5 key-string cisco
R3(config-if)#standby 2 track s0/1 30
說明:我們這裏創建了兩個HSRP組,組1的IP爲192.168.13.254,活動路由器爲R1,一部分計算機的網關指向
192.168.13.254。組2的IP爲192.168.13.253,活動路由器爲R2,其餘計算機的網關指向192.168.13.253。這
樣,當網絡全部正常時,一部分數據是由R1轉發的,其餘數據是由R2轉發的,實現了負載平衡。當一個路由器
出現問題時,則另一個路由器就成爲兩個HSRP組的活動路由器,承擔全部的數據轉發。通過這種方式實現負載
平衡,要求不同的計算機在設置網關時有所不同,如果計算機的IP是DHCP分配的,那這種方法就不太方便了。
注意:HSRP實際上在局域網用的較多,由於局域網內大多使用三層交換機,所以這時HSRP是在交換機上配置的。
另外,HSRP有Version1和Version2,兩者不兼容,因此所有路由器或者交換機要使用相同的HSRP版本,可以使
用“standby version”命令設置版本。