HSRP协议介绍

本文档的Copyleft归yfydz所有,使用GPL发布,可以自由拷贝,转载,转载时请保持文档的完整性,严禁用于任何商业用途。

msn: [email protected]
来源:http://yfydz.cublog.cn

参考资料: RFC2281
1. 前言

HSRP(Hot Standby Router Protocol)是CISCO公司制定的专有路由器备份协议,支持多台路由器形成热备而消除单台设
备失效造成的网络中断。HSRP并不是IETF的相关工作组制定的,只是因为CISCO设备应用广泛,所以由其提交的协议就
采纳为RFC,使其他厂商也可以实现,但Cisco申请了专利,要得到Cisco的授权(巨FT)。

2. 协议说明

HSRP协议基本是用在终端主机的第一跳路由器上,而不是骨干网络中运行动态路由协议的路由器上。HSRP可以在多台路
由器上运行,但有且只有一台路由器是活动(active)、真正进行网络数据转发的,其他都是备份,但会根据设备优先级
选出一台作为第一热备机(standby),主机失效后由其替代,其他备份机再重新选standby。

HSRP是按网络接口配置的,即配置HSRP协议具体运行在哪个接口卡上。

HSRP协议数据只周期性在active机和standby机之间通信,其他机就只接收数据不发送数据。

HSRP协议可以同时运行多个组,每个组代表应该虚拟路由器,而一台路由器可以同时加入多个HSRP组。每个组只有一个
虚拟IP和一个虚拟MAC地址。

运行HSRP必须要配置的参数为:
备份组号:      Standby group number
虚拟MAC地址:   Virtual MAC address
优先级:        Priority
认证数据(口令):Authentication Data
Hello间隔时间: Hellotime
失效时间:      Holdtime
组内至少有一台设备必须配置而其他设备可能配置的参数为:
虚拟IP地址:    Virtual IP Address

任何设备可选配置:
抢占能力:      Preemption capability
 
HSRP协议状态说明
   1. 初始化: Initial
      这是个起始状态表示HSRP还没运行下,通过改变路由器配置或网卡第一次启动时会进入这个状态。
   2. 学习:Learn
      这时路由器还没确定虚拟IP地址,也没收到认证过的活动路由器的Hello信息,这个状态下路由器
      仍在等待来自活动路由器的信息。
   3. 监听:Listen
      路由器已经知道虚拟IP地址,但本身既不是活动路由器也不是热备路由器,本机接收来自其他路由
      器的hello信息。
   4. 说话:Speak
      路由器周期性的发送发送hello信息,并主动参加活动路由器和热备路由器的选举。如果路由器已
      经拥有虚拟IP地址的话就不进入此状态。
   5. 热备:Standby
      路由器是下一个活动路由器的候选,并周期地发送hello信息,除了及其短暂的时间内,一个组里
      最多只能有一个热备路由器。
   6. 活动:Active
      路由器当前要进行目的MAC是HSRP组的虚拟MAC地址的网络数据的转发,并周期性的发送Hello信息。
      除了及其短暂的时间内,一个组里 最多只能有一个活动路由器。
 
以下是HSRP协议事件有限状态机的事件说明:
      a - HSRP协议被配置到一个网卡使能
      b - HSRP在一个网卡上禁用,或者网卡停用
      c - 活动定时器超时,在失效时间内没收到hello信息
      d - 热备定时器超时,在热备失效时间内没收到hello信息
      e - Hello定时器超时,定时发送hello信息
      f - 在说话状态下接收到有更高优先权的路由器的hello信息
      g - 接收到来自活动路由器的更高优先权的hello信息
      h - 接收到来自活动路由器的更低优先权的hello信息
      i - 接收到活动路由器的退出消息
      j - 接收到更高优先权的路由器的Coup消息
      k - 接收到从热备路由器发来的更高优先权的hello消息

HSRP协议动作说明:
      A  启动活动定时器:Start Active Timer
         如果接收到认证过的活动路由器的hello信息时该事件触发,此定时器的超时设置为
         hello信息中的失效时间(hold time);没收到的话超时设为路由器自身配置的失效
         时间,活动定时器启动。

      B  启动热备定时器:Start Standby Timer
         如果接收到认证过的热备路由器的hello信息时该事件触发,此定时器的超时设置为
         hello信息中的失效时间(hold time);没收到的话超时设为路由器自身配置的失效
         时间,热备定时器启动。
      C  停止活动定时器:Stop Active Timer
         活动定时器停止。
      D  停止活动定时器:Stop Standby Timer
         热备定时器停止。
      E  学习参数:Learn Parameters
         当接收到经过认证的活动路由器的消息时进行动作,如果该路由器没有手动配置
         虚拟IP地址,则虚拟IP地址可以从这些消息中学习到,路由器也可以从信息中学
         习到hello间隔时间和失效时间。
      F  发送hello消息:Send Hello Message
         路由器发送hello消息,描述自身状态,hello间隔时间和失效时间。
      G  发送Coup消息:Send Coup Message
         路由器发送Coup消息来通知活动路由器现在有优先权更高的路由器存在。
      H  发送退出消息:Send Resign Message
         路由器发送退出消息允许其他路由器成为活动路由器。
      I  发送假ARP消息:Send Gratuitous ARP Message
         路由器发送对应HSRP组的虚拟IP和虚拟MAC的ARP广播信息,这些消息中的源MAC地址
         为虚拟MAC地址。
 
HSRP协议状态转换表(RFC里没画状态状态图,就给了这个表,看起来费劲一些,凑合看吧)
                               States
+-----+----------+----------+----------+----------+----------+----------+
|     |    1     |     2    |    3     |    4     |    5     |     6    |
|     |  Initial |  Learn   |  Listen  |  Speak   |  Standby |   Active |
+-----+----------+----------+----------+----------+----------+----------+
|Event|                                                                 |
+-----+----------+----------+----------+----------+----------+----------+
|  a  |  AB/2|3+ |          |          |          |          |          |
+-----+----------+----------+----------+----------+----------+----------+
|  b  |          |   CD/1   |   CD/1   |   CD/1   |   CD/1   |   CDH/1  |
+-----+----------+----------+----------+----------+----------+----------+
|  c  |          |          |   AB/4   |          |  CDFI/6  |          |
+-----+----------+----------+----------+----------+----------+----------+
|  d  |          |          |   B/4    |   D/5    |          |          |
+-----+----------+----------+----------+----------+----------+----------+
|  e  |          |          |          |    F     |    F     |    F     |
+-----+----------+----------+----------+----------+----------+----------+
|  f  |          |          |          |   B/3    |   B/3    |          |
+-----+----------+----------+----------+----------+----------+----------+
|  g  |          |   EAB/3  |    EA    |   EA     |   EA     |   AB/4   |
+-----+----------+----------+----------+----------+----------+----------+
|  h  |          |   EAB/3  | A|BGFI/6*| A|BGFI/6*| A|BGFI/6*|    G     |
+-----+----------+----------+----------+----------+----------+----------+
|  i  |          |          |   AB/4   |   A      |  CFI/6   |          |
+-----+----------+----------+----------+----------+----------+----------+
|  j  |          |          |          |          |          |   ABH/4  |
+-----+----------+----------+----------+----------+----------+----------+
|  k  |          |          |    B     |   B/3    |  B/3     |    B     |
+-----+----------+----------+----------+----------+----------+----------+
|  l  |          |          |    B/4   |   D/5    |          |    B     |
+-----+----------+----------+----------+----------+----------+----------+
 
3. 协议定义
 
3.1 包头头参数

HSRP包的源地址是本机地址,目的地址为224.0.0.2,为一多播地址,IP包的TTL值为1,因此数据不能跨网段;使用UDP
协议,目的端口为1985(纪念CISCO公司的成立年份?)。

3.2 HSRP协议数据格式
                          1                   2                   3
   0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |   Version     |   Op Code     |     State     |   Hellotime   |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |   Holdtime    |   Priority    |     Group     |   Reserved    |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                      Authentication  Data                     |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                      Authentication  Data                     |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                      Virtual IP Address                       |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
其中:
   Version: HSRP版本号,1字节,RFC2281中定义为0;
   Op Code: 操作码,1字节,描述该HSRP信息的类型,可能的取值为:
         0 - Hello,正常通告信息
         1 - Coup,路由器希望成为活动路由器时发送
         2 - Resign,路由器不再作为活动路由器时发送
   State: 状态,1字节,用于描述路由器的状态,可能取值为:
         0 - Initial
         1 - Learn
         2 - Listen
         4 - Speak
         8 - Standby
        16 - Active
   Hellotime: Hello信息的间隔时间,1字节,只在Hello包中有效,时间数值单位为秒,
        通常是系统配置的,如果没有配置,则可从活动路由器的的经过认证的Hello信息中获取。
        如果没从hello消息中学习到,缺省为3秒。

   Holdtime: 失效时间,1字节,数值以秒为单位。只在Hello包中有效,时间数值单位为秒,
        失效时间最少是hello时间的3倍,通常是手动配置的,如果没有配置,则可从活动路
        由器的的经过认证的Hello信息中获取。发送hello信息的路由器必须设置失效时间。
        路由器已经处于活动状态时不准再从hello信息中学习新的失效时间。
        如果没从hello消息中学习到,缺省为10秒。
 
   Priority: 优先权值,1字节,用来选举活动和热备路由器,数值大者优先级高,相同时IP地
        址大者优先级高
 
   Group: 组号,1字节,标志热备组,对于Token Ring,有效值为0~2,其他类型网络0~255都有效;
 
   Authentication Data: 认证数据,8字节,明文的8字节口令值,缺省是:
          0x63 0x69 0x73 0x63 0x6F 0x00 0x00 0x00.
 
   Virtual IP Address: 虚拟IP地址,4字节,本组内使用的虚拟IP地址,如果该地址没有
         配置到路由器上,则是通过经过了认证的Hello信息得到。

4. 结论
 
HSRP是比较早的路由器热备协议,对后来的热备协议有较大影响,VRRP和HSRP就很类似,不过这些协议最大的问题就是内部安全,如果攻击者在内部发送虚假协议信息的话是容易得手的,而从外部则比较难攻击。

猜你喜欢

转载自cxw06023273.iteye.com/blog/867207
今日推荐