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就很类似,不过这些协议最大的问题就是内部安全,如果攻击者在内部发送虚假协议信息的话是容易得手的,而从外部则比较难攻击。