当前位置: 首页 > 编程日记 > 正文

理解并实施:HSRP(CCNA200-120新增考点)

理解并实施:HSRP


思科热备路由器协议HSRP(HotStandby Router Protocol)是企业级网络路由器的故障冗余服务。如图9.116所示,192.168.2.0/24的子网需要与目标192.168.5.2的计算机通信。192.168.2.0/24的子网有两台出口路由器,一台是R1(192.168.2.1),另一台是R2(192.168.2.2)。现在HSRP可以实现将192.168.2.1的网关地址与192.168.2.2的网关地址虚拟融合成一个IP地址(192.168.2.100)。此时192.168.2.0/24子网的主机在填写网关时,只需要填写192.168.2.100就可以与整个网络通信。而且就算R1或R2任意一台路由器故障,也不会中断192.168.2.0/24的子网与192.168.5.2的持续通信。故障会在R1与R2之间切换,并且在192.168.2.0/24子网的主机无须更改网关。为企业网络做到了透明容错的目标。思科HSRP协议是思科的厂商私有标准,其他厂商的路由器不支持,有一个代替HSRP的标准三层容错协议叫做VRRP,在下一小节将描述VRRP。


120934139.png

现在需要思考两个问题:


问题1192.168.2.0/24子网的主机填写的网关是192.168.2.100(既包括R1又包括了R2的路由器),那么如果在两台路由器都正常的情况下,是哪台路由器负责通信流量的转发,或者说两台都负责通信流量转发吗?


事实上在HSRP的虚拟热融组中,任意一个时刻只有一台路由器进行通信流量的转发,不会两台同时转发通信流量,思科HSRP协议的核心包含了一台活动路由器(Active Router)和备份路由器(Standby Routers),其中活动路由器负责数据包的转发。一旦活动路由器出现故障,备份路由器将取代活动路由器实现数据的转发(并且不会导致主机出现连连续中断通信的现象)。对于活动路由器和备份路由器的选择原则,主要通过路由器的HSRP优先级,优先级最高的为活动路由器,次高优先级为备份路由器。如果网络中HSRP的优先级相同时,则比较其IP地址的大小,IP地址大的将会被选举为活动路由器。默认情况下在如9.116所示的网络环境中,R2将会是一台活动路由器(ActiveRouter),因为默认情况下网络中HSRP路由器的优先级都是相同的,由于R2具备更大的IP地址,所以它将成为活动路由器。那么流量转发和故障切换的过程将如9.117所示。现在192.168.2.0/24子网的所有流量都通过R2转发,因为R2是热容组中的Active Router,直到某个时候,R2故障了,那么流量才会从R2切换到路由器R1

121026953.png

这就产生了另一个问题如果R1和R2都不产生故障,那么就会产生对热容组流量转发的利用率就不充分,在这种情况下,路由器R1将永远不被用于流量转发,单纯处于备用状态,因为它不是Active Router,有没有一种高利用率的方案,比如:当路由器R1和R2没有产生故障时,将转发到主干的流量进行负载均衡,当任意一台路由器故障后,对流量转发进行故障切换?答案是:当然有,如下图9.118所示,建立两个不同的热容组,一个热容组的IP配置为192.168.2.100;另一个配置为192.168.2.101;一个组的活动路由器设置为R1,另一个组的活动路由器设置为R2,如果192.168.2.0子网有100台主机,那么其中50台填写默认网关为192.168.2.100;另外50台填写默认网关为192.168.2.101,此时,如果路由器R1和R2都正常工作,那么就执行流量均衡,如果其中的一台故障,那么流量会自动切换到另一台路由器。

121129255.png

问题2192.168.2.0/24子网的主机填写的网关是192.168.2.100(既包括R1又包括了R2的路由器),那么这个热容组虚拟的IP地址192.168.2.100所使用的MAC地址会是谁的MAC,是路由器R1E1/0,还是路由器R2E1/0

既不会使用路由器R1E1/0MAC地址,也不会使用R2E1/0MAC地址,而是针对热容组的虚拟IP地址192.168.2.100生成一个虚拟的MAC地址,这个热容组虚拟的MAC地址由如9.119所示的3个部分组成。第一部分为厂商编码,思科通常是0000.0c;第二部分为HSRP众所周知的标记,通常是07.ac;第三部分为HSRP热容组编号(换十六进制)决定。比如路由器R1R2的热容组的编号为120,那么此时这个热容组所对应的MAC地址就是:0000.0c07.ac78;因为热容组的编号120换为十六进制表达就是78


121303343.png

取证思科HSRP的工作原理:

通过取证HSRP工作原理,来进一步理解HSRP协议端口号、理解HSRP的工作过程、理解备份路由器是如何知道主路由器发生故障、如何进行故障接管的如下9.120所示

121358408.png

第一步:理解HSRP协议端口号,思科热备路由器协议(Hot Standby Router Protocol)运行在传输层的UDP协议上,使用的端口编号为1985,如9.121所示。

121450376.png

第二步:理解HSRP的工作过程,就必须理解如下所述的5个状态。

Initial状态:HSRP启动时的状态。即HSRP还没有运行,一般是在改变配置或端口刚刚启动时进入该状态,如图9.122所示,指的是活动路由器未知,备份路由器也未知。

121606755.png

Listen状态:路由器已经得到了虚拟IP地址,但是它既不是活动路由器也不是备份路由器,它一直监听从活动路由器或者备份路由器发来的Hello报文,如图9.123所示。

121659927.png

Speak状态:在该状态下,路由器定期发送Hello报文,并且积极参加活动路由器或备份路由器的选举,如图9.124所示。

121800223.png

HSRP利用Hello数据报文完成活动路由器的选举,成功完成活动路由器与备份路由器的选举。Standby表示备份路由器,指示当活动路由器失效时此路由器准备接管通信流量传输,如图9.125所示;Active表示活动路由器执行通信流量的传输功能,如图9.126所示。

121848487.png

第三步:理解备份路由器是如何知道主路由器发生故障、如何进行故障接管的。主路由器与备份路由器之间维持着一个间隔的Hello报文,包含了HSRP的状态信息。Hello只在活动路由器和备份路由器之间发送,HSRP路由器默认为每3秒发送一个Hello消息。如果此维持会话中断,那么备份路由器将接管主路由器的功能,并将备份路由器自已设为Coup状态。

Coup(政变)状态:当一个备用路由器变为一个活动路由器时,备份路由器向该网络上的所有路由器发送一个Coup消息。组播地址224.0.0.2代表该网络上的所有路由器,如图9.127所示,路由器R2(192.168.1.2)设置为活动路由器。

121930935.png

注意:还有一个状态叫做Resign(辞职),该状态指示当活动路由器宕机或者当有优先级更高的路由器发送Hello消息时,活动路由器发送一个Resign消息。对于配置了HSRP协议的路由器都将处于以上5种状态其中之一。



演示:思科HSRP协议的配置


演示目标:在如图9.116所示的环境中,保证主机192.168.2.3/24和主机192.168.2.4/24能在R1与R2两台路由器出单点故障时,持续ping通主机192.168.5.2/24。要求:在R1和R2上启动HSRP协议,并且主机192.168.2.3/24及主机192.168.2.4/24的网关IP必须为HSRP协议热备份组给出的虚拟IP,HSRP协议热备份组给出的虚拟IP地址为192.168.2.100。

演示环境:图9.116所示。

122041118.png

演示步骤:


第一步R1R2上完成HSRP的配置,配置HSRP的虚拟IP192.168.2.100R1为主路由器,R2为备份路由器。


R1HSRP配置指令

R1(config)#inte1/0

R1(config-if)#ip add 192.168.2.1 255.255.255.0

R1(config-if)#standby 100 ip 192.168.2.100

R1(config-if)#standby 100 preempt

R1(config-if)#standby 100 track e1/1

R1(config-if)#standby 100 priority 120


R2HSRP配置指令

R2(config)#int e1/0

R2(config-if)#ip add 192.168.2.2 255.255.255.0

R2(config-if)#standby 100 ip 192.168.2.100

R2(config-if)#standby 100 preempt

R2(config-if)#standby 100 track e1/1

R2(config-if)#standby 100 priority 110


配置指令分析:

Standby 100 ip 192.168.2.100:Standby表示热备份组的编号,笔者自定义的编号为100,其取值范围为0~255;IP表示配置表示虚拟的IP地址;Standby 100 preempt:preempt表示设置路由器抢占功能,抢占功能主要描述:保证优先级高的路由器失效恢复后总能处于活动状态,也就是进行活动路由器的选举;Standby 100 track e1/1:Track设置HSRP的跟踪功能,Track跟踪功能主要描述:当活动路由器监控到某一链路出现了故障时,能快速地切换活动路由器;Standby 100 priority 120:Priority表示设置HSRP优先级。


第二步查看HSRP配置的结果,确定谁是主路由器,谁是备份路由器。可以在R1或者R2上利用指令Show StandbyEthernet 1/0查看HSRP的情况。在R1上查看如图9.128所示的结果,可明确看出192.168.2.1为热容组100的主路由器,备份路由器为192.168.2.2。


122119132.png

第三步在主机192.168.2.3上填写网关为192.168.2.100,然后执行到192.168.5.2的路由器跟踪,可得到如9.128所示的路径,以及通过主路由器转发的流量。如果要进一步证实HSRP的故障切换功能,可把R1E1/0或者E1/1接口shutdown然后再次ping 192.168.5.2,如果配置没有错误,可看见通信仍然能进行。

122205546.png

特别说明Track参数的作用与配置注意事项:

如下9.129所示,如果是路由器R1R2形成HSRP的热容组,R1为活动路由器、R2为备份路由器,当R1E1/0接口故障时,由于存在间隔性Hello报文的监控,所以故障很快会被发现,并且热容组的备份路由器R2会去接管故障路由器R1,但是如果故障出现在原活动路由器R1S2/0接口,比如R1T1链路接口上,那么会出现一个什么样的现象?HSRP组中的备份路由器R2能正常接管故障路由器吗?R1R2S2/0上不存在HSRP的间隔性Hello监控报文,答案是不能接管。那么内部网络中所有通过活动路由器转发的数据包将被丢弃,因为此时的活动路由器R1S2/0接口故障了,但是它的内部接口E1/0将正常的发送表示生命存活迹象的HSRPhello报文。那么备份路由器将永远无法成为故障接管路由器。

除非,在路由器R1R2上配置Standby 组号 track s2/0指令,对两台路由器的T1链路进行监控,此时,如果活动路由器R1S2/0接口故障了,即便E1/0接口正常,备份路由器也将进行故障接管,首先活动路由器R1会将自已的优先级调低,默认是以10为单位进行调整,比如:原来活动路由器R1的优先级是120,此时就会降级为110,然后会在R1E1/0接口上停止发送HSRPhello报文。此时备份路由器R2会成功接管故障。

122250789.png

注意:为了确保HSRP备用跟踪将优先级降低到足以让备用路由器在为接管故障的活动路由器,需要对所有HSRP路由器的优先级进行正确的规划。如下例举一个正确规划和一个错误规划的实例,以帮助大家理解!


正确HSRP优先级规划实例

R1(config-if)#standby 100 track S2/0    

R1(config-if)#standby 100 priority 120  

R2(config-if)#standby 100 track S2/0      

R2(config-if)#standby 100 priority 110  


错误HSRP优先级规划实例

R1(config-if)#standby 100 track S2/0    

R1(config-if)#standby 100 priority 254  

R2(config-if)#standby 100 track S2/0      

R2(config-if)#standby 100 priority 110  


对照分析:在正确HSRP优先级规划实例中,活动路由器和备用路由器的优先级只相差10,当路由器R1的S2/0接口故障,R1的HSRP的优先级正好下降10,从120转为110,那么此时路由器R2正好能接管路由器R1的故障。其实前面的演示:思科HSRP协议的配置就正好是这种情况,当路由器R1故障后,它的优先级下降10,正好和R2的优先级相同,由于优先级相同,且R2有更高的IP地址,所以它成功的接管故障。 而错误HSRP优先级规划实例中的配置则不能成功的接管故障,因为R1的优先级为254,即便默认下降10,它也是244,仍然比备用路由器R2更高,所以备用路由器R2将无法接管故障。这也是很多工程技术人员在实践环境中常出现的一个问题。


相关文章:

使用机智云APP控制战舰V3 (转)

源:使用机智云APP控制战舰V3 转载于:https://www.cnblogs.com/LittleTiger/p/10725586.html

从JoinBatchGroup 代码细节 来看Rocksdb的相比于leveldb的写入优势

文章目录1. Rocksdb写入模型2. LevelDB写入的优化点3. Rocksdb 的优化1. Busy Loop2. Short Wait -- SOMETIMES busy Loop3. Long-wait4. 测试验证4. 总结1. Rocksdb写入模型 本节讨论一下Rocksdb在写入链路上的一个优化点,这个优化细节可以说将Rocksdb这个存储引擎…

Java项目:嘟嘟网上商城系统(java+jdbc+jsp+mysql+ajax)

源码获取:博客首页 "资源" 里下载! 一、项目简述 功能: 商品的分类展示,用户的注册登录,购物车,订单结算, 购物车加减,后台商品管理,分类管理,订单…

SOAPUI请求及mockservice 使用

1、新建soap Project,输入wsdl的地址,运行request 2.邮件Project,建立mockservice,建立多个response,选在mock operation,选择response dispa…

空间直角坐标系与球面坐标互转

空间直角坐标系与球面坐标互转 1 using System;2 using System.Collections.Generic;3 using System.Linq;4 using System.Text;5 6 namespace AppSurveryTools.SphericalAndCartesian7 {8 class CartesianCoord9 { 10 public double x; 11 public dou…

Ajax 的优势和不足

Ajax 的优势 1. 不需要插件支持 Ajax 不需要任何浏览器插件,就可以被绝大多数主流浏览器所支持,用户只需要允许 JavaScript 在浏览器上执行即可。 2. 优秀的用户体验 这是 Ajax 技术的最大优点,能在不刷新整个页面的前提下更新数据&#xff0…

BitCask 持久化hash存储引擎 原理介绍

文章目录前言引擎背景引擎原理1. 磁盘数据结构2. 内存数据结构3. 读流程4. 数据合并总结前言 最近工作中部分项目中,对存储引擎的需求希望高性能的写、点查,并不需要Range。这里看到大家总会提到BitCask这个存储引擎方案,并不是很了解&#…

C# Socket系列三 socket通信的封包和拆包

通过系列二 我们已经实现了socket的简单通信 接下来我们测试一下,在时间应用的场景下,我们会快速且大量的传输数据的情况! 1 class Program2 {3 static void Main(string[] args)4 {5 TCPListener tcp n…

Java项目:CRM客户管理系统(java+SSM+jsp+mysql+maven)

源码获取:博客首页 "资源" 里下载! 一、项目简述 功能包括: 用户管理,系统管理,客户管理,客户服务,客户关怀, 销售机会,统计管理等等。 二、项目运行 环境配置&#x…

Android 获取标题栏的高度

2019独角兽企业重金招聘Python工程师标准>>> 通过获取内容区域的 rect 的 top 值就是状态栏和标题栏的高度,也就可以得到标题栏的高度了, [java] view plaincopy int contentTop getWindow().findViewById(Window.ID_ANDROID_CONTENT).getTo…

力扣—— 三维形体投影面积

在 N * N 的网格中,我们放置了一些与 x,y,z 三轴对齐的 1 * 1 * 1 立方体。 每个值 v grid[i][j] 表示 v 个正方体叠放在单元格 (i, j) 上。 现在,我们查看这些立方体在 xy、yz 和 zx 平面上的投影。 投影就像影子,将…

一图带你入门Linux 存储I/O栈

发现了一个内核大佬 的 Linux 存储I/O栈,很清晰!!! 原地址如下: http://ilinuxkernel.com/?p1559 【侵删】

Java项目:在线美食网站系统(java+SSM+jsp+mysql+maven)

源码获取:博客首页 "资源" 里下载! 一、项目简述 功能:用户的注册登录,美食浏览,美食文化,收藏百 科,趣味问答,食谱等等功能等等。 二、项目运行 环境配置:…

性能测试中传——lr理论基础(四)

转载于:https://blog.51cto.com/fuwenchao/1346435

滑动定位的三种方法,以及热启动(五)

from init_driver.Init_driver import init_driverdriver init_driver()# 坐标-->坐标,定位滑动 driver.swipe(309, 1353, 537, 511, duration3000)# 元素-->元素,定位滑动 start_ele driver.find_element_by_xpath("//*[contains(text, 通…

TitanDB GC详细实现原理 及其 引入的问题

文章目录1. 为什么要有GC2. GC的触发条件3. GC的核心逻辑1. blob file形态2. GC Prepare3. GC pick file4. GC run4. GC 引入的问题5. Titan的测试代码通过本篇,能够从TitanDB的源代码中看到 key/value 分离之后引入的一些复杂性,这个复杂性很难避免。 …

Java项目:医院住院管理系统(java+SSM+jsp+mysql+maven)

源码获取:博客首页 "资源" 里下载! 一、项目简述 功能包括: 住院病人管理,住院病房管理,医生管理,药品管理,仪 器管理等等。 二、项目运行 环境配置: Jdk1.8 Tomcat8.…

1m网速是什么意思,1m带宽是什么意思

1M网速下载速度应是多少?我怎么才50多KB?? 建议: 一般来说是90到100算正常。最高能达到120 带究竟该有多快 揭开ADSL真正速度之谜 常常使用ADSL的用户,你知道ADSL的真正速度吗?带着这个疑问我们将问题一步一步展开。…

泛型实体类List绑定到repeater

泛型实体类List<>绑定到repeater 后台代码&#xff1a; private void bindnewslist(){long num 100L;List<Model.news> news _news.GetList(out num);this.newslist.DataSource news;this.newslist.DataBind();} 说明&#xff1a;Model.news是实体类&#xff0c…

Qt4.8.5移植

这两天搞了Qt移植 因为不小心 耽误了挺多时间 但是也比较好的掌握了 现在记录一下 准备工具&#xff1a; tslib-1.16 qt-everywhere-opensource-src-4.8.5.tar 下载路径&#xff1a; tslib-1.16下载&#xff1a; https://github.com/kergoth/tslib/releases/download/1.16/t…

Rocksdb 通过ingestfile 来支持高效的离线数据导入

文章目录前言使用方式实现原理总结前言 很多时候&#xff0c;我们使用数据库时会有离线向数据库导入数据的需求。比如大量用户在本地的一些离线数据&#xff0c;想要将这一些数据导入到已有的数据库中&#xff1b;或者说NewSQL场景中部分机器离线&#xff0c;重新上线之后的数…

Java项目:企业人事管理系统(java+SSM+jsp+mysql+maven)

源码获取&#xff1a;博客首页 "资源" 里下载&#xff01; 一、项目简述 功能介绍&#xff1a;员工管理&#xff0c;用户管理&#xff0c;部门管理&#xff0c;文档管理, 职位管理等等。 二、项目运行 环境配置&#xff1a; Jdk1.8 Tomcat8.5 mysql Eclispe (I…

XCODE 6.1.1 配置GLFW

最近在学习opengl的相关知识。第一件事就是配环境(好烦躁)。了解了一下os x下的OpenGL开源库&#xff0c;主要有几个&#xff1a;GLUT&#xff0c;freeglut&#xff0c;GLFW等。关于其详细的介绍可以参考opengl网站(https://www.opengl.org/wiki/Related_toolkits_and_APIs)。由…

SpringCloud远程调用为啥要采用HTTP,而不是RPC?

通俗的说法就是:比如说现在有两台服务器A和B,一个应用部署在A服务器上,另一个应用部署在B服务器上,如果A应用想要调用B应用提供的方法,由于他们不在一台机器下,也就是说它们不在一个JVM内存空间中,是无法直接调用的,需要通过网络进行调用,那这个调用过程就叫做RPC。建立Socket连接至少需要一对套接字,其中一个运行于客户端,称为ClientSocket ,另一个运行于服务器端,称为ServerSocket ,套接字之间的连接过程分为三个步骤:服务器监听,客户端请求,连接确认。

vs快捷键及常用设置(vs2012版)

vs快捷键&#xff1a; 1、ctrlf F是Find的简写&#xff0c;意为查找。在vs工具中按此快捷键&#xff0c;可以查看相关的关键词。比如查找哪些页面引用了某个类等。再配合查找范围&#xff08;整个解决方案、当前项目、当前文档等&#xff09;&#xff0c;可以快速的找到问题所在…

python_day10

小甲鱼python学习笔记 爬虫之正则表达式 1.入门&#xff08;要import re&#xff09; 正则表达式中查找示例&#xff1a; >>> import re >>> re.search(rFishC,I love FishC.com) <re.Match object; span(7, 12), matchFishC> >>> #单纯的这种…

Graphics2D API:Canvas操作

在中已经介绍了Canvas基本的绘图方法,本篇介绍一些基本的画布操作.注意:1、画布操作针对的是画布,而不是画布上的图形2、画布变换、裁剪影响后续图形的绘制,对之前已经绘制过的内容没有影响。

关于Titandb Ratelimiter 失效问题的一个bugfix

本文简单讨论一下在TitanDB 中使用Ratelimiter的一个bug&#xff0c;也算是一个重要bug了&#xff0c;相关fix已经提了PR到tikv 社区了pull-210。 这个问题导致的现象是ratelimiter 在titandb Flush/GC 生成blobfiled的过程中无法生效&#xff0c;也就是无法限制titandb的主要…

Java项目:前台预定+后台管理酒店管理系统(java+SSM+jsp+mysql+maven)

源码获取&#xff1a;博客首页 "资源" 里下载&#xff01; 一、项目简述 功能介绍&#xff1a; 前台用户端&#xff1a;用户注册登录&#xff0c;房间展示&#xff0c;房间分类&#xff0c;房间 按价格区间查询&#xff0c;房间评论&#xff0c;房间预订等等 后台管…

Solr初始化源码分析-Solr初始化与启动

用solr做项目已经有一年有余&#xff0c;但都是使用层面&#xff0c;只是利用solr现有机制&#xff0c;修改参数&#xff0c;然后监控调优&#xff0c;从没有对solr进行源码级别的研究。但是&#xff0c;最近手头的一个项目&#xff0c;让我感觉必须把solrn内部原理和扩展机制弄…