---
# System prepended metadata

title: Cisco-HSRP協議

---

# Cisco-HSRP協議

![image](https://hackmd.io/_uploads/SJ037W2FWx.png)

## 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     | 
![image](https://hackmd.io/_uploads/rJtE2W3K-l.png)

## 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
 ```