简介

HSRP(Hot Standby Router Protocol 热备份路由器协议)是Cisco的专有协议。HSRP把多台路由器组成一个“热备份组”,形成一个虚拟路由器。这个组内只有一个路由器是Active(活动)的,并由它来转发数据包,如果活动路由器发生了故障,备份路由器将成为活动路由器。从网络内的主机来看,网关并没有改变。

 

HSRP的工作过程:

HSRP路由器利用Hello包来互相监听各自的存在。当路由器长时间没有接收到Hello包时,就认为活动路由器故障,备份路由器就会成为活动路由器。HSRP协议利用优先级决定哪个路由器成为活动路由器。如果一个路由器的优先级比其它路由器的优先级高,则该路由器成为活动路由器。路由器的默认优先级是100。

    在一个组中,最多有一个活动路由器和一个备份路由器。
    HSRP路由器发送的组播(224.0.0.2)消息有以下三种:

Hello:通知其它路由器发送者的HSRP优先级和状态信息,HSRP路由器默认每3秒发送一个Hello消息。

Coup:当一个备用路由器变为一个活动路由器时发送一个Coup消息。

Resign:当活动路由器要当机或者当有优先级更高的路由器发送Hello消息时,主动发送一个Resign消息。

 

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路由器的6中状态:

1.Initial:HSRP启动时的状态,HSRP还没有运行,一般是在改变配置或端口刚刚启动时进入该状态。

2.Learn:在该状态下,路由器还没有决定虚拟IP地址,也没有看到认证的、来自活动路由器的Hello报文。路由

  器仍在等待活动路由器发来的Hello报文。

3.Listen:路由器已经得到了虚拟IP地址,但是它既不是活动路由器也不是等待路由器。它一直监听从活动路由

  器和等待路由器发来的Hello报文。

4.Speak:在该状态下,路由器定期发送Hello报文,并且积极参加活动路由器或等待路由器的竞选。如果选出活

  动路由和等待路由,则变成监听状态(Listen)。而此时只有活动路由器和等待路由处于说话状态。

5.Standby:处于该状态的路由器是下一个候选的活动路由器,它定时发送Hello报文。

6.Active:处于活动状态的路由器承担转发数据包的任务,这些数据包是发给该组的虚拟MAC地址的。它定时发

  出Hello报文。

HSRP的2个定时器:

HSRP使用2个定时器:Hello间隔和Hold时间。默认Hello间隔是3秒,默认的Hold间隔是10秒。Hello间隔定义了两组路由器之间交换信息的频率。Hlod间隔定义了经过多长时间后,没有收到其它路由器的信息,则活动路由器或者备用路由器就会被宣告为失败。配置计时器并不是越小越好,虽然计时器越小则切换时间越短。计时器的配置需要和STP等的切换时间相一致。另外,Hold间隔最少应该是Hello间隔的3倍。

 

 

实验

在路由器和三层交换机上都可以配置HSRP,这里是在路由器R1和R3上配置。

命令:
R1(config-if)#standby 1 ip 192.168.13.254 //启用HSRP功能,创建standby组1,并设置虚拟网关IP地址
R1(config-if)#standby priority 120  //设置HSRP的优先级,该值大的会抢占成Active路由器,默认为100

R1(config-if)#standby 1 preempt        //设置允许在该路由器优先级是最高时抢占为活动路由器
R1(config-if)#standby 1 timers 3 10        //设置Hellotime为3秒,Holdtime为10秒,默认即为该值
R1(config-if)#standby 1 authentication md5 key-string cisco        //配置认证密码

R1(config-if)#standby 1 track s0/0 30        //配置端口跟踪

说明:

①相同组号的路由器属于同一个HSRP组,所有属于同一个HSRP组的路由器的虚拟IP地址必须一致。

②“standby 1 preempt”命令:

1>如果不配置该命令,即使该路由器优先级再高,也不会成为Active路由;

2>如果再配置“standby 1 preempt delay minimum 1000”命令,则会延时1000毫秒才进行抢占。

③Hellotime:路由器每间隔多长时间发送Hello信息;Holdtime:在多长时间内同组的其它路由器没有收到活动路

由器的信息,则认为活动路由器发生故障;如果要更改默认值,所有同HSRP组的路由器该项设置必须一致。
④配置认证密码为了防止非法设备加入到HSRP组,并且同HSRP组的密码必须一致。

⑤端口跟踪:如果试验中没有配置s0/0的端口跟踪,当R1的s0/0接口出现问题,R1将没有到达R2的Loopback0接

口所在网段的路由。然而R1和R3之间的以太网仍然没有问题,HSRP的Hello包正常发送和接收。因此R1仍然是

虚拟网关192.168.13.254的活动路由器,Server的数据仍会发送给R1,这样会造成Server无法ping通R2的

Loopback接口。当配置路由跟踪后,端口跟踪使得R1发现s0/0上的链路出现问题后,把自己的优先级(我们设

置的为120)减去一个数字(我们设置的为30),成为了90。由于R3的优先级为默认值100,这样R3就成为了活动

路由器,Server的数据包将发往R3。降低的值应该选取合适的值,使得其他路由器能成为活动路由器。

⑥可以使用“standby 1 mac-address”命令修改虚拟MAC地址,系统默认的MAC地址为“0000.0c07.acXX”,

“XX”为HSRP的组号。

⑦可以使用“standby 1 name”命令设置HSRP组1的名字,如果没有设置,系统将自动生成。

⑧由于HSRP的两个版本version1和version2不兼容,可以使用“standby version”命令设置HSRP的版本。

配置IP地址及路由:

R1(config)#int f1/0

R1(config-if)#ip add 192.168.13.1 255.255.255.0

R1(config-if)#no sh

R1(config)#int s0/0

R1(config-if)#ip add 192.168.12.1 255.255.255.0

R1(config-if)#no sh

R1(config)#router rip
R1(config-router)#network 192.168.12.0
R1(config-router)#network 192.168.13.0
R1(config-router)#passive-interface f1/0        //防止从该接口发送RIP信息给R3

R2(config)#int lo0
R2(config-if)#ip add 192.168.2.2 255.255.255.0
R2(config)#int s0/0
R2(config-if)#ip add 192.168.12.2 255.255.255.0
R2(config-if)#clock rate 128000
R2(config-if)#no sh
R2(config)#int s0/1
R2(config-if)#ip add 192.168.23.2 255.255.255.0
R2(config-if)#clock rate 128000
R2(config-if)#no sh
R2(config)#router rip

R2(config-router)#network 192.168.2.0
R2(config-router)#network 192.168.12.0
R2(config-router)#network 192.168.23.0
R3(config)#int f1/0
R3(config-if)#ip add 192.168.13.3 255.255.255.0
R3(config-if)#no sh
R3(config)#int s0/1
R3(config-if)#ip add 192.168.23.3 255.255.255.0
R3(config-if)#no sh
R3(config)#router rip
R3(config-router)#network 192.168.23.0
R3(config-router)#network 192.168.13.0
R3(config-router)#passive-interface f1/0

配置HSRP:

R1(config)#int f1/0
R1(config-if)#standby 1 ip 192.168.13.254
R1(config-if)#standby priority 120

R1(config-if)#standby 1 preempt
R1(config-if)#standby 1 timers 3 10
R1(config-if)#standby 1 authentication md5 key-string cisco

R1(config-if)#standby 1 track s0/0 30

R3(config)#int f1/0
R3(config-if)#standby 1 ip 192.168.13.254
R3(config-if)#standby 1 preempt
R3(config-if)#standby 1 timers 3 10
R3(config-if)#standby 1 authentication md5 key-string cisco

R1(config-if)#standby 1 track s0/0 30

实验调试

R1#show standby brief   //查看HSRP简要信息

R1#show standby        //查看HSRP详细信息

 Server:ping 192.168.2.2 -t

R1(config)#int f1/0

R1(config)#sh

在Server上连续ping路由器R2的Loopback接口的IP地址(192.168.2.2),在R1上关闭F1/0接口,可以发现:当R1故障时,R3很快就替代了R1,计算机的通信几乎没有受到什么影响。

说明:如果重新打开R1的F1/0接口,由于再R1上配置了抢占(Preempt),因此R1又会成为活动路由器。

R3#debug standby        //以下是当R1的F1/0接口关闭后,R3成为活动路由器过程中的debug信息

 

配置多个HSRP组

之前的步骤已经虚拟了192.168.13.254网关,对于这个网关只能有一个活动路由器,于是这个路由器将承担全部的数据流量。我们可以再创建一个HSRP组,虚拟出另一个网关192.168.13.253,这时R3是活动路由器,让一部分计算机指向这个网关,这样就能做到负载平衡。

R1(config)#int f1/0

R1(config-if)#standby 1 ip 192.168.13.254

R1(config-if)#standby 1 priority 120

R1(config-if)#standby 1 preempt

R1(config-if)#standby 1 authentication md5 key-string cisco

R1(config-if)#standby 1 track s0/0 30

R1(config-if)#standby 2 ip 192.168.13.253

R1(config-if)#standby 2 preempt

R1(config-if)#standby 2 authentication md5 key-string cisco

R3(config)#int f1/0

R3(config-if)#standby 1 ip 192.168.13.254

R3(config-if)#standby 1 preempt

R3(config-if)#standby 1 authentication md5 key-string cisco

R3(config-if)#standby 2 ip 192.168.13.253

R3(config-if)#standby 2 priority 120

R3(config-if)#standby 2 preempt

R3(config-if)#standby 2 authentication md5 key-string cisco

R3(config-if)#standby 2 track s0/1 30

说明:我们这里创建了两个HSRP组,组1的IP为192.168.13.254,活动路由器为R1,一部分计算机的网关指向

  192.168.13.254。组2的IP为192.168.13.253,活动路由器为R2,其余计算机的网关指向192.168.13.253。这

  样,当网络全部正常时,一部分数据是由R1转发的,其余数据是由R2转发的,实现了负载平衡。当一个路由器

  出现问题时,则另一个路由器就成为两个HSRP组的活动路由器,承担全部的数据转发。通过这种方式实现负载

  平衡,要求不同的计算机在设置网关时有所不同,如果计算机的IP是DHCP分配的,那这种方法就不太方便了。

注意:HSRP实际上在局域网用的较多,由于局域网内大多使用三层交换机,所以这时HSRP是在交换机上配置的。

  另外,HSRP有Version1和Version2,两者不兼容,因此所有路由器或者交换机要使用相同的HSRP版本,可以使

  用“standby version”命令设置版本。

HSRP 详解的更多相关文章

  1. linux查看端口及端口详解

    今天现场查看了TCP端口的占用情况,如下图   红色部分是IP,现场那边问我是不是我的程序占用了tcp的链接,,我远程登陆现场查看了一下,这种类型的tcp链接占用了400多个,,后边查了一下资料,说E ...

  2. 网络-02-端口号-linux端口详解大全

    端口详解 1 tcpmux TCP Port Service Multiplexer 传输控制协议端口服务多路开关选择器  2 compressnet Management Utility compr ...

  3. Linq之旅:Linq入门详解(Linq to Objects)

    示例代码下载:Linq之旅:Linq入门详解(Linq to Objects) 本博文详细介绍 .NET 3.5 中引入的重要功能:Language Integrated Query(LINQ,语言集 ...

  4. 架构设计:远程调用服务架构设计及zookeeper技术详解(下篇)

    一.下篇开头的废话 终于开写下篇了,这也是我写远程调用框架的第三篇文章,前两篇都被博客园作为[编辑推荐]的文章,很兴奋哦,嘿嘿~~~~,本人是个很臭美的人,一定得要截图为证: 今天是2014年的第一天 ...

  5. EntityFramework Core 1.1 Add、Attach、Update、Remove方法如何高效使用详解

    前言 我比较喜欢安静,大概和我喜欢研究和琢磨技术原因相关吧,刚好到了元旦节,这几天可以好好学习下EF Core,同时在项目当中用到EF Core,借此机会给予比较深入的理解,这里我们只讲解和EF 6. ...

  6. Java 字符串格式化详解

    Java 字符串格式化详解 版权声明:本文为博主原创文章,未经博主允许不得转载. 微博:厉圣杰 文中如有纰漏,欢迎大家留言指出. 在 Java 的 String 类中,可以使用 format() 方法 ...

  7. Android Notification 详解(一)——基本操作

    Android Notification 详解(一)--基本操作 版权声明:本文为博主原创文章,未经博主允许不得转载. 微博:厉圣杰 源码:AndroidDemo/Notification 文中如有纰 ...

  8. Android Notification 详解——基本操作

    Android Notification 详解 版权声明:本文为博主原创文章,未经博主允许不得转载. 前几天项目中有用到 Android 通知相关的内容,索性把 Android Notificatio ...

  9. Git初探--笔记整理和Git命令详解

    几个重要的概念 首先先明确几个概念: WorkPlace : 工作区 Index: 暂存区 Repository: 本地仓库/版本库 Remote: 远程仓库 当在Remote(如Github)上面c ...

随机推荐

  1. C++类中的重载

    函数重载回顾 函数重载的本质为相互独立的不同函数 C++中通过函数名和函数参数确定函数调用 无法直接通过函数名得到重载函数的入口地址 函数重载必然发生在同一个作用域 类中的成员函数可以进行重载 构造函 ...

  2. 如何通过Java8的方式去统计程序执行时间?

    代码如下所示 import java.time.Duration; import java.time.Instant; import java.util.concurrent.TimeUnit; pu ...

  3. Beat our dice game and get the flag 击败我们的骰子游戏拿到旗子

    文件名:ebCTF-Teaser-BIN100-Dice.exe 话不多说 用PEID一看没壳 拖进OD 让我们摇出31337这五个数字才能拿到正确的flag cmp dword ptr ss:[eb ...

  4. 【java面试】网络通信篇

    1.说一下HTTP协议 HTTP协议是超文本传输协议,属于应用层协议,规定了客户端与服务端传输数据的格式:它是无状态的,对于前面传送过的信息没有记录:请求方式有GET,POST,HEAD,PUT,DE ...

  5. xpath写法大全(适用于selenium、robotframework)

    1.//input[contains(@id, 'txttags')] 定位出来是个ID,但是ID后面的“102”是个随机数,所以用定位ID的方法就不行了,用firepath生成的xpath也会包括这 ...

  6. jmeter使用—正则表达式提取器

    当我们测试接口的时候,有些请求参数是需要从上个接口返回获取的数据,这样的话我们就需要用到关联了.今天我们使用的关联是正则表达式提取器来进行获取需要关联的数据. 下面来具体说明正则表达式提取器的使用方法 ...

  7. 矩阵matrix变换的用法(css3属性transform: matrix)

    参数 2D矩阵的表示 matrix(a,b,c,d,e,f),其中6个参数在矩阵的分布: -- -- | a c e | | b d f | | 0 0 1 | -- -- 在CSS3中矩阵的原始值是 ...

  8. ios--->const 用法总结

    const 用法总结 宏.变量.常量区分 宏:只是在预处理器里进行文本替换,没有类型,不做任何类型检查,编译器可以对相同的字符串进行优化.只保存一份到 .rodata 段.甚至有相同后缀的字符串也可以 ...

  9. STM8 ADC 多个通道连续扫描缓冲区数据带中断模式的正确写法

    近日调试了STM8S的ADC采集多通道数据的程序,按照之前的立即,将ADC1设置为:扫描模式,连续采集,数据缓存模式,中断使能后应该可以在中断后读取到数值了,可是无论怎样都只能读取到第一个缓冲器的数据 ...

  10. 如何理解Unicode,UTF-8,UTF-16。