Part I: HSRP基础概念
HSRP(热备份路由器协议)是Cisco私有的一种第三层协议,专门为IP网络提供高可用性网络冗余。简单来说,它的核心作用是确保当网络边界设备或接入电路发生故障时,用户流量能够立即、透明地恢复——用户几乎感觉不到任何中断。
在一个局域网(LAN)中,多台路由器共同组成一个HSRP组。其中一台路由器负责转发该LAN的数据流,而其他路由器则仅发送HSRP Hello报文来维持组内关系。该组共享一个虚拟IP(VIP)地址和一个虚拟MAC(VMAC)地址。每台路由器可以同时加入多个HSRP组。
一个HSRP组由三部分组成:
- Active Router(活跃路由器):负责转发发往VIP的数据流,并持续向其他组成员发送Hello报文,最终处于Active状态。
- Standby Router(备用路由器):不转发VIP数据流,但会发送Hello报文并监控Active路由器的状态,最终处于Standby状态。
- Other Routers(其他路由器):不转发VIP数据流,也不发送Hello报文,仅监听组内的Hello报文。它们执行普通路由器的功能,只转发目标为自己的接口的数据包,不转发目标为VIP的数据包,最终处于Listen状态。
Part II: HSRP工作原理
当Standby路由器在一定时间内没有收到Active路由器的Hello报文时,它会认为Active路由器已发生故障,并立即接管Active角色。由于主机设备始终使用VIP和VMAC作为网关,它们根本不会察觉到这种切换,也不会感受到服务中断。
那么,Active路由器是如何选举出来的呢?
- 优先级(Priority)较高的路由器胜出,默认优先级值为100。
- 如果优先级相同,则比较MAC地址,较小的MAC地址获胜。
为了实现负载均衡,一台路由器可以属于多个HSRP组,每个组拥有独立的VIP和VMAC地址。一个LAN最多支持255个HSRP组。
当主机设备发送数据包给VIP对应的VMAC地址时,由Active路由器负责转发。如果主机设备发出对VIP的ARP请求,Active路由器会用相应的VMAC来应答。
Part III: VMAC地址格式
VMAC地址由三部分组成:
- Vendor ID(厂商ID):MAC地址的前3个字节,代表设备厂商。
- HSRP Code(HSRP代码):2个字节,通常为
07.ac,表明这是一个HSRP路由器。 - Group ID(组ID):MAC地址的最后一个字节,对应HSRP的组号。

Part Ⅶ: HSRP常用命令参考
下面列出常用的HSRP配置命令,每个命令都附有默认值及典型应用场景。
1. standby {group-number} ip {virtual-ip-address}
group-number缺省为0,可配置范围0-255。注意:使用HSRP时,主机设备无法获知HSRP路由器的真实MAC地址,因此Cisco设备会自动禁用ICMP重定向(no ip redirects)。
2. standby {group-number} priority {priority-value}
priority缺省为100,可配置范围0-255。优先级最高的路由器成为Active路由器;若优先级相同,则IP地址最高的路由器成为Active路由器。
3. standby {group-number} preempt
允许一台路由器只要拥有更高的优先级,就可以立即抢占成为Active路由器。
4. standby {group-number} {hellotime} {holdtime}
hellotime缺省为3秒,可配置1-255秒;holdtime缺省为10秒,可配置1-255秒。
5. standby {group-number} track {type number} {interface-priority}
type number指定要监控的接口。如果该接口down掉,则HSRP priority值减去interface-priority(惩罚值)。
6. show standby {type number} {group} {brief}
示例输出:
Switch#show standby Vlan11 11 Vlan11 - Group 11 Local state is Active, priority 110 Hellotime 3 holdtime 10 Next hello sent in 00:00:02.944 Hot standby IP address is 172.16.11.115 configured Active router is local Standby router is 172.16.11.114 expires in 00:00:08 Standby virtual mac address is 0000.0c07.ac01
7. debug standby [errors] [events] [packets]
监控HSRP所有的状态变化以及Hello报文的发送情况。
8. debug standby terse
监控HSRP所有的errors、events和packets信息(不包括hello及advertisement packets)。
Part Ⅷ: HSRP配置实例
来看一个实际配置示例,实现负载均衡:
RouterA配置:
interface Vlan10 ip address 172.16.10.32 255.255.255.0 no ip redirects standby 1 priority 150 standby 1 ip 172.16.10.110 standby 2 priority 50 standby 2 ip 172.16.10.120
RouterB配置:
interface Vlan10 ip address 172.16.10.33 255.255.255.0 no ip redirects standby 1 priority 50 standby 1 ip 172.16.10.110 standby 2 priority 150 standby 2 ip 172.16.10.120
查看状态:
RouterA#show standby brief P indicates configured to preempt. Interface Grp Prio P State Active Standby Virtual IP Vl10 1 150 Active local 172.16.10.33 172.16.10.110 Vl10 2 50 Standby 172.16.10.33 local 172.16.10.120
这里RouterA在组1中作为Active,在组2中作为Standby;RouterB则相反,实现了流量分担。
Part Ⅸ: HSRP调优技巧
亚秒级故障切换
HSRP的Hello时间和Hold时间可以配置为毫秒级别,从而将故障检测时间缩短到1秒以内。例如:
switch(config-if)#standby 1 timers msec 200 msec 750
抢占延迟与路由器启动时间对齐
Preempt是HSRP的重要特性,它允许主路由器在故障恢复后重新成为Active路由器。但需要注意的是,当主路由器重启后,HSRP应等待它与其他相连设备建立好通信连接后再进行抢占,否则可能导致数据包不可达。
解决方法是在Preempt之前设置一个延迟,等待路由器完成通信连接或路由信息收集。这个延迟通常需要根据设备启动时间设定,一般建议比启动时间大一倍,以确保主路由器有能力接管Active角色。配置命令如下:
switch(config-if)#standby 1 preempt switch(config-if)#standby 1 preempt delay minimum 180
