标题：HSRP协议
HSRP 的概念
HSRP 是 Hot Standby Routing Protocol（热备份路由协议）的缩写。它的作用是能够把一台或多台路由器用来做备份，所谓热备份是指当使用的路由器不能正常工作时，候补的路由器能够实现平滑的替换，尽量不被察觉。 通常，我们的网络上主机设置一条缺省路由，指向主机所在网段内的一个路由器 R，这样，主机发出的目的地址不在本网段的报文将被通过缺省路由发往路由器 R，从而实现了主机与外部网络的通信。在这种情况下，当路由器 R 坏掉时，本网段内所有以路由器 R 为缺省路由下一跳的主机将断掉与外部的通信。HSRP 实现容错备份功能，可以有效解决上述可靠性问题。 
HSRP 解决的问题
主机 Pat 设置缺省网关 Router A，这样访问主机 Marceau 需要通过 Router A 来进行。一旦 Router A 出现故障，主机 Pat 将失去与主机 Marceau 的联系，除非主机 Pat 重新指定其它的缺省网关，如 Router B。
HSRP 的引入
让我们看一下引入 HSRP 是如何解决问题的。通过在 Router A 和Router B上配置 HSRP，使它们共同组
成一个备份组，可以把这个组抽象成一个虚拟路由器，它有自己的 IP 地址和 MAC 地址，分别称作虚拟 
IP 地址和虚拟 MAC 地址。这样主机 Pat 可以把自己的缺省网关设置成虚拟 IP 地址，访问主机 
Marceau 就可以通过虚拟路由器来进行。当然，虚拟路由器是一个抽象的概念，实际的网关工作是由 
Router A 和Router B中的一个来完成的，我们称完成实际网关工作的路由器为活动路由器，另外一个路
由器为备份路由器。如果活动路由器出现故障，就像前面提到的 Router A 发生故障，备份路由器（如
Router B）会接替成为活动路由器，因此，主机 Pat 在不察觉情况下，仍然可以通过 Router B来访问主
机 Marceau。
HSRP 的用途
HSRP 用于广播或多播局域网上的路由器热备份，并适于静态的路由配置，实际上 HSRP 正是解决设备不
能动态适应路由改变的问题。 HSRP 主要用途： 1、主机设置缺省网关 假设主机 A 是局域网中一台需要
访问远程数据的服务器，要求远程访问能力可靠。由于主机 A 中静态设置缺省网关，一旦想更换网关，
必须在主机中重新配置。 通过使用 HSRP，主机中设置虚拟路由器为缺省网关，具体由虚拟路由器中的哪
台路由器完成网关的实际工作，主机并不关心，这就为应用提供了较好的可靠性和灵活性。 2、设置静态
路由 可以通过配置静态缺省路由指向虚拟路由器来实现另外一种备份。
HSRP的实现
HSRP 工作原理
当采用 HSRP， 用户看到的是一台虚拟路由器，该虚拟路由器有自己的虚拟 IP 地址和虚拟 MAC 地址，
该虚拟路由器是由一组路由器组成的，这组路由器称为备份组。备份组内由一台活动路由器、一台备份路
由器，以及群众路由器构成。一般情况下，一旦活动路由器坏掉，该备份路由器成为活动路由器，然后备
份组内选举组内的另一台路由器为备份路由器。 组内路由器通过接受来自活动路由器的周期性 Hello 报
文来判断活动路由器是否工作正常。如果组内备份路由器 R 在一定时间间隔未收到活动路由器 Hello 报
文，就认为活动路由器坏掉了，优先级高的备份路由器最终成为活动路由器。备份路由器也是通过类似过
程产生的。这样总能保证备份组中有一台活动路由器，一台备份路由器。
HSRP 状态
备份组内的路由器处于各自的状态，根据相互间发送 HSRP 报文来调整新的状态。 HSRP 状态： 
（1）init:所有备份组内组员的初始状态为 INIT，当组员配置属性或端口 UP 时，进入 INIT 状态。
（2）learn:该组员未设定虚拟 IP 地址，并等待从本组活动路由器发出的认证的 Hello 报文中学习得到自己的虚拟 IP 地址。 
（3）listen :该组员已得知或设置了虚拟 IP 地址，通过监听 Hello 报文监视活动/备份路由器，一旦发现活动/备份路由器长时间未发送 Hello 报文，则进入 SPEAK 状态，开始竞选。 
（4）speak: 参加竞选活动/备份路由器的组员所处的状态，通过发送 Hello 报文使竞选者间相互比较、竞
争。 
（5）standby: 组内备份路由器所处的状态，备份组员监视活动路由器，准备随时在活动路由器坏掉时接替活动路由器。备份路由器也周期性发送 Hello 报文告诉其他组员自己没有坏掉。 
（6）ACTIVE:组内活动路由器即负责虚拟路由器实际路由工作的组员所处的状态。活动路由器周期性发送 Hello 报文告诉其他组员自己没有坏掉。
HSRP 状态转换
HSRP 协议中定义了一个自动状态机，不同的触发事件会产生相应的状态变化和动作。
HSRP 报文
􀁺 Version ：1 Byte HSRP 报文的版本号。本文档的 HSRP 报文版本为 0 。 􀁺 Oper Code ：1 Byte 
描述了 HSRP 报文的类型，共有3 种报文类型： （1）0 —— Hello Hello 类型报文说明发送者处在运
行状态，有能力成为活动/备份路由器。 （2）1 —— COUP COUP 类型报文说明发送者希望成为活动路由
器。 （3）2 —— RESIGN COUP 类型报文说明发送者不再是活动路由器。 􀁺 State ：1 Byte 描述发送
者发送报文时所处的状态。 􀁺 Hello Time ：1 Byte 该域只在 Hello 报文中有意义。它包含发送者发
送 Hello 报文的时间间隔，以秒计； 如果路由器上未配置 Hello Time 值，它可以从组中活动路由器发
送的 Hello 报文中学习到，但须本路由器认证该 Hello 报文； 如果路由器上既未配置 Hello Time，也
未学习到，则赋予缺省值 3。
􀁺 Hold Time ：1 Byte 该域只在 Hello 报文中有意义。它包含发送者发送 Hello 报文的持有时间，以
秒计； Hold Time 必须大于 Hello Time ，而且最好大于三倍 Hello Time ；
如果路由器上未配置 Hold Time ，它可以从组中活动路由器发送的 Hello 报文中学习到，但须本路由器
认证该 Hello 报文； 如果路由器上既未配置 Hello Time ，也未学习到，则赋予缺省值10 。 􀁺 
Priority ：1 Byte 该域用来选举活动/备份路由器。当选举过程中出现竞争（多个路由器都想成为活动/
备份路由器）时，优先级最高的竞争者胜，对于优先级相等的竞争者，IP 地址最大的竞争者胜。 􀁺 
Group ：1 Byte 此域中记录发送者所在的备份组号。对于以太网，Group 取值范围为0-255 。 􀁺 
Authentication Data ：8 Byte 8 字符长的的口令，用于组内成员相互鉴别。 􀁺 Vritual IP Address 
：4 Byte 备份组的虚拟IP地址，备份组模拟的虚拟路由器的 IP 地址。虚拟路由器还有一 MAC 地址，它
由组号直接映射而成：0X00 00 0C 07 AC ** ，其中“**”为备份组号。 组内各成员须至少有如下信息
： （1）备份组号（Group）； （2）虚拟 MAC 地址（Virtual MAC Address）； （3）优先级
（Priority）； （4）Authentication Data； （5）Hello Time； （6）Hold Time； 至少一位组员有
如下信息： （1）虚拟 IP 地址（Virtual IP Address）； 每位组员可选择配置如下信息：
（1）抢占标志（Preempt）； 如果某位组员的 Preempt 置位，又收到活动路由器的 Hello 报文，发现
自己的优先级比活动路由器高，则该组员可强行取代成为活动路由器。
HSRP 多备份组（MHSRP）
在一网段内，多个备份组可以共存。每个备份组模拟成一虚拟路由器，每个这样的虚拟路由器配置一虚拟 
MAC 地址和一虚拟 IP 地址。该虚拟IP地址应属于本网段，而且不与网段内的任何路由器和主机的IP地址
相同，也不与网段内的其他虚拟路由器的虚拟IP地址相同。 一台路由器也可以参加多个备份组，为多个
组作备份。 路由器的 HSRP 配置是针对具体接口的，因此需要在接口模式下配置。在一台路由器上，备
份组由（接口，组号）唯一确定。每个备份组都有属于自己的数据和状态。 如果一台路由器有两个以太
网口，可以分别在两个接口上配置两个 HSRP 备份组，为不同网段使用。
HSRP 的配置方法
􀁺 [no] standby [group-number] ip [virtual ip address] 说明： 使路由器在指定局域网段加入或退
出一个备份组。需要指定备份组号和虚拟 IP 地址。备份组号范围从 0 到 255，如 group-number 不指
定，备份组号缺省为 0，virtual ip address 如果不指定，路由器不会参与备份，直到从备份组中的活
动路由器获得虚拟 IP 地址。注意虚拟 IP 地址应该是接口所在网段的地址。一旦退出 HSRP 备份组，则
路由器在该备份组上设置的所有 HSRP 特性不再有效（如优先级，授权字等）。 􀁺 standby [group-
number] priority [priority-value] 说明： HSRP 中根据优先级来确定参与备份组的每台路由器的地位
，备份组中优先级最大并且已获得虚拟 IP 地址的路由器将成为活动路由器，优先级其次的路由器将成为
备份路由器。优先级缺省值是 100，可设置范围从 0 到 255。 􀁺 standby [group-number] preempt 说
明： 一旦备份组中的某台路由器成为活动路由器，只要它没有出现故障，其它路由器即使随后被配置更
高的优先级，也不会成为活动路由器，除非被设置抢占方式。路由器如果设置抢占方式，它一旦发现自己
的优先级比当前的活动路由器的优先级高，就会成为活动路由器。相应地，原活动路由器会退出活动态，
成为备份路由器或其它。缺省方式是不抢占。 􀁺 standby [group-number] authentication string 说
明： HSRP 授权字确认同备份组间其它路由器的有效性。授权字 string 的长度不超过 8 个字节。注意
：同一备份组要设置相同的授权字。 􀁺 standby [group-number] timers [hello_time] [hold_time] 
说明： HSRP 备份组路由器之间通过定时发送 Hello 报文确认相互的状态，超过一定时间（hold time）
没有收到某台路由器的 Hello 报文，则认为它已关机或出现故障。用户可以调整发送 Hello 报文的间隔
时间（hello time）和超时时间（hold time）。缺省值分别是 3 秒和 10 秒。时间单位是秒。注意：同
一备份组要设置相同的 hello time 和 hold time。 􀁺 standby [group-number] track 
interface_name [priority-reduced] 说明： HSRP 监视接口功能，更好地扩充了备份功能，即不仅在路
由器出现故障时提供备份功能，而且在某网络接口不可用时，也可以使用备份功能。命令作用是监视接口 
interface_name，如果接口变为不可用，则将优先级减少 priority-reduced （priority-reduced 缺省
值为 10） 。
HSRP分析
1) 交换机和HSRP虚拟MAC的关系
每次HSRP Active变更时，都会导致交换MAC表的虚拟MAC接口的改变。
例，当一个路由器 (A) 宣告是Active时，所发送的Hello, Coup, ARP Reply包用的MAC源地址是HSRP虚拟MAC. 如果另一个路由器 (B) 稍前才宣告自己是Active, 交换机MAC表的虚拟MAC条目会指向B。 在收到A发送的Hello, Coup, ARP Reply时，交换机会把其MAC表的虚拟MAC条目的接口从指向B改为指向A。
2) ARP Reply 在HSRP的作用
主机发送的数据包，其目的MAC地址是网关的MAC地址， 即HSRP虚拟MAC地址。
局域网中，主机和网关间可能若有好几个交换机。那么，如何能让所有的交换机都把其（虚拟MAC，接口）指向当前的路由器呢？
HSRP用了一个简单巧妙的方法：把ARP Reply设为广播包，并配置其目的MAC地址为虚拟MAC，目的IP设为虚拟IP。其作用有二：
1。 所有的交换机都会收到这个ARP Reply, 并更新MAC表，把 (虚拟MAC，接口)指向Active路由器。
2。主机收到 ARP Reply时，看到报文里的target ip不是自己的IP，就会丢弃，所以ARP Reply没有副作用。
3) HSRP路由器发送Hello 所使用的MAC源地址
这得根据路由器的状态而定。如果是Active, Hello 的souce MAC是虚拟MAC。
如果是Standby或Speak，Hello 的souce MAC是路由器接口的MAC。