# Cisco-HSRP協議

## HSRP原理
HSRP 是由 Cisco Systems 提出的 第一跳備援協定(FHRP, First Hop Redundancy Protocol),主要目的就是:
`確保 LAN 的 Default Gateway 不會因為單一 Router 故障而中斷。`
## HSRP 核心概念
在一個 LAN 中會有 兩台或以上的 Router,但 Client 只會看到一個 Gateway IP。
HSRP 一個 group 裡面會有 3 種角色:
|角色 |功能|
| -------- | -------- |
|Active Router |真正轉送封包的 Router|
|Standby Router |備援 Router|
|Virtual Router |虛擬 Gateway|
HSRP 會建立三個 IP:
| 類型 | 說明 |
| -------- | -------- |
| Real IP | Router 自己的 IP |
| Virtual IP | Client 的 Default Gateway |
| Virtual MAC | 對應 Virtual IP 的 MAC |

## Virtual Router MAC
HSRP 會創造一個 虛擬 MAC Address
```
EX:0000.0C07.ACXX
```
| 部分 | 意義 |
| ------- | ---------- |
| 0000.0C | Cisco OUI |
| 07AC | HSRP 固定碼 |
| XX | HSRP Group |
HSRP Group會將十進制改為十六進制
## HSRP Message
HSRP Router 之間會互相發送 Hello packet
| 項目 | 值 |
| --------- | --------- |
| Protocol | UDP |
| Port | 1985 |
| Multicast | 224.0.0.2 |
| TTL | 1 |
## HSRP Hello 機制
Active Router每3秒發 Hello給Standby Router若10秒沒收到則Standby接管
| Timer | 預設 |
| ----- | ---- |
| Hello | 3 秒 |
| Hold | 10 秒 |
## HSRP 狀態
HSRP 有 6 個狀態(State Machine),Router 會依序在這些狀態之間轉換。
| State | 說明 | 備註 |
| ------- | --------------- | --------------------------------------------------------- |
| Initial | 啟動 | |
| Learn | 學習 Virtual IP | 如果設定裡沒有指定 Virtual IP就會從 Hello packet 裡學習。 |
| Listen | 監聽 | 只監聽,不參與選舉 |
| Speak | 參與選舉 | 發送 Hello,參與選舉 |
| Standby | 備援 | |
| Active | 主 Router | |
當一台 Router 啟用 HSRP 時,它會依序經過幾個狀態,這些狀態代表它在 HSRP 選舉與運作中的角色變化。
`Router 啟動 → 學習虛擬閘道 → 監聽網路 → 參與選舉 → 成為 Active 或 Standby`
### 1. Initial(初始化)
當 Router 剛啟動 HSRP 時,它會進入 Initial 狀態。
在這個狀態下:
* HSRP process 剛開始
* Router 尚未參與任何 HSRP group
* 不會傳送 Hello 封包
* 也不會接收或處理 HSRP 封包
簡單說就是:HSRP 還沒真正開始運作。
### 2. Learn(學習)
接下來 Router 會進入 Learn 狀態。在這個狀態中,Router 會確認 Virtual IP(虛擬閘道)。
有兩種情況:
情況一:有設定 Virtual IP
```例如:
standby 50 ip 192.168.1.1
```
那 Router 就會直接知道 Gateway。
情況二:沒有設定 Virtual IP
Router 會從其他 Router 發送的 HSRP Hello 封包 中學習 Virtual IP。
也就是:從網路上其他 HSRP Router 得知 Gateway 是誰。
### 3. Listen(監聽)
Router 進入 Listen 狀態 時:
* 已經知道 Virtual IP
* 會開始接收 HSRP Hello
* 但 不參與 Active 選舉
這種 Router 通常稱為:Other Router
也就是說,如果一個 HSRP group 有三台 Router:
* Router A
* Router B
* Router C
可能會變成:
* Router A → Active
* Router B → Standby
* Router C → Listen
Listen Router 不會轉送 HSRP gateway 流量。
### 4. Speak(參與選舉)
當 Router 進入 Speak 狀態時,代表:
* Router 開始 發送 Hello packet
* Router 參與 Active Router 選舉
Hello 封包會送到:
```
224.0.0.2
UDP port 1985
```
Router 會比較幾個條件:
1. Priority(優先權)
1. IP Address(若 priority 相同)
Priority 預設是:
```100```
Priority 高的 Router 會比較有機會變成 Active。
### 5. Standby(備援)
當 Router 沒有贏得選舉,但排名第二時,就會進入 Standby 狀態。
Standby Router 的角色是:
持續監聽 Active Router 的 Hello
準備在 Active Router 故障時接管
不會轉送 gateway traffic
Hello timer 預設:
```
Hello = 3 秒
Hold = 10 秒
```
意思是:
如果 Standby Router 10 秒沒有收到 Active Hello,就會認為 Active 掛掉。
### 6. Active(主 Router)
Active Router 是整個 HSRP group 的 實際 Gateway(Virtual Gatway)。
Active Router 的工作:
1. 回應 Virtual IP 的 ARP
1. 使用 Virtual MAC address
1. 轉送 Client 流量
1. 定期發送 Hello packet
Client 實際上是把流量送到**Virtual MAC**,而這個 MAC 目前是 Active Router 在使用。
#### Failover 發生時
假設目前狀態:
```
Router A → Active
Router B → Standby
```
如果 Router A 掛掉
```
→ Router B 偵測不到 Hello → Hold timer 到期
→ Router B 變成 Active → Router B 接管 Virtual IP
→ Router B 使用 Virtual MAC
```
因為 Virtual MAC 不變,所以:
Client 不需要重新 ARP,整個過程通常只需要幾秒。
## Cisco HSRP 設定範例
Router A
```interface vlan10
interface vlan10
ip address 192.168.1.2 255.255.255.0
standby 1 ip 192.168.1.1
standby 1 priority 120
standby 1 preempt
```
Router B
```interface vlan10
interface vlan10
ip address 192.168.1.3 255.255.255.0
standby 1 ip 192.168.1.1
standby 1 priority 100
standby 1 preempt
```