Cisco私有协议—热备份路由协议HSRP详解

HSRP简介HSRP(Hot Standby Router Protocol 热备份路由器协议)是Cisco的专有协议 。HSRP把多台路由器组成一个“热备份组”,形成一个虚拟路由器 。这个组内只有一个路由器是Active(活动)的,并由它来转发数据包,如果活动路由器发生了故障,备份路由器将成为活动路由器 。从网络内的主机来看,网关并没有改变 。
HSRP工作原理HSRP(Hot Standby Router Protocol 热备份路由器协议)把多台路由器组成一个虚拟路由器(Virtual Router) 。PC上设置网关后,如果网关down了就断网了,导致网络连接不稳定 。因此需要备用网关,即冗余网关,确保网络连接正常 。HSRP可以提供冗余网关的解决方案 。
VR虽然是虚拟路由器,但同样需要有三层IP地址和二层mac地址 。三层IP地址是手动配的,但不能乱配,需要配置成和真实路由器处于同一网段的IP地址 。VR的二层地址是自动生成的 。例如0000.0c07.ac01,前6位0000.0c是Cisco买来的 。中间4位07.ac是HSRP号 。最后2位01是HSRP Group组号 。每个HSRP组内只能有一个路由器是Active(活动)的,一个路由器是Standby备份的,其余路由器将处于监听状态 。通过Active路由器来转发数据,如果Active路由器down了,Standby备份路由器将成为Active路由器,以保证网络的正常运行 。属于同一个HSRP组的路由器的虚拟三层IP地址必须一致 。
例如将真实路由器A和B捆绑成虚拟路由器VR后,谁成为Active路由器,谁成为Standby备份路由器呢?HSRP用优先级来决定,优先级高的成为Active路由器 。优先级默认都是100,可以修改 。如果优先级相同,IP地址高的成为Active路由器 。路由器间通过组播(224.0.0.2)Hello包来互相监听各自的存在 。Hello包默认每3秒发一次,如果长期收不到Active路由器发出的Hello包,就认为Active路由器出故障了,Standby备份路由器就将成为Active路由器 。
HSRP报文格式

Cisco私有协议—热备份路由协议HSRP详解

文章插图
  • 版本:指示HSRP的版本信息 。
  • 操作码:用来描述数据包中报文的类型,可能的值为0、1和2,分别表示是Hello、Coup和Resign消息 。
  • 状态:描述发出该报文的路由器的当前状态 。有0、1、2、4、8、16六种状态,分别表示为Initial、Learn、Listen、Speak、Standby和Active状态 。
  • 呼叫时间(Hellotime):只在呼叫报文中有意义,表示路由器定时发送呼叫报文的间隔时间,以秒为单位 。如果该参数没有在路由器上配置,它可能要从活动路由器上学习获得 。默认值为3秒 。
  • 保持时间(Holdtime):只在呼叫报文中有意义,被接收路由器用来判断该呼叫报文是否合法,单位为秒,其值至少是呼叫时间的3倍 。如果该参数没有配置,也同样可以从活动路由器上学习 。活动路由器不能从等待路由 器学习呼叫时间和保持时间,它只能继续使用从先前的活动路由器学习来的该值 。默认值为10秒 。
  • 优先级:该参数用来选择活动和等待路由器,两个具有不同优先级的路由器,优先级高的将成为活动路由器 。两个具有相同优先级的路由器,IP地址大的将成为活动路由器 。默认优先级为100 。
  • 组:用来标记路由器所在的热等待组 。对令牌环类型的网络,合法的值是0、1和2,对于其它类型的网络,合法值是0-255 。
  • 认证码:包括8个明文的字符作为密码,如果没有配置,默认值为cisco 。
  • 虚拟IP地址:用来指定本热等待组的虚拟IP地址,它可以从活动路由器的呼叫报文中学习到 。如果没有配置该地址,并且呼叫报文是需要认识的,那么只能通过活动路由器学习 。
HSRP状态【Cisco私有协议—热备份路由协议HSRP详解】Initial
初始状态,Hold时间10s后进入Listen
Learn
例如路由器A上新建了VR并设置了VR的IP,B加入了该VR但没有设置VR的IP,那B会从A那里学习到VR的IP 。当然如果A和B都手动设了同样的VR的IP,就不会有这个状态
Listen
路由器加入进VR后,此时它既不是Active也不是Standby路由器,因此它监听Active和Standby发出的Hello包 。如果收不到,Hold时间10s后进入Speak
Speak
路由器主动发送Hello包,包含自己的优先级,自己的IP地址,VR的IP地址等 。参加竞选,竞争成为Active或Standby备份路由器 。
Standby
竞选成为Standby路由器后,将定时发送Hello包 。如果Standby状态下收不到Active路由器的Hello包,不经过Hold时间马上将自己置为Active 。
Active
竞选成为Active路由器后,将定时发送Hello包 。并承担转发数据的责任 。
(Hello时间默认3s,Hold时间默认10s,是可以修改的,你可以改小点,比如改成500ms,但时间越短,占的资源就越多,需要你权衡利弊 。通常Hold时间最少应是Hello时间的3倍) 。


推荐阅读