热备份路由协议原理
    建设企业网络的主要目的是,让最终用户可以访问其数据与服务。最终用户往往把企业网络作为一个整体系统来看待,并不关心到底是哪台具体的路由器或者交换机 在工作。网络工程师设计方案时,必须使网络作为一个整体系统来提供服务,即使出现故障,也能维持正常的网络连接.HSRP为这种情况提供了一个较好的解决 方案.
   
    1.HSRP(Hot Standby Router Protocol,热备份路由协议)是Cisco私有的一种技术,它确保了网络边缘设备或者是接入链路出现故障时,用户通信能迅速透明的恢复.通过应用 HSRP,可使网络的正常运行时间接近100%,从而满足用户对于网络可靠性的要求.
  
     热备份路由协议为IP网络提供了容错和增强的路由选择功能.通过使用同一个虚拟IP地址和MAC地址,LAN网段上的两台或者多台路由器可以作为一台虚拟路由器对外提供服务.HSRP使组内的Cisco路由器能互相监视对方的运行状态.
    >.虚拟路由器组的成员通过HSRP消息不断的交换状态信息.
    >.如果其中的一台出现故障,另外一台就能接替它,继续完成路由工作.
   
    LAN网段的主机都使用同一个虚拟的IP地址作为默认网关,并不断的将IP包发给一个IP地址.因此,路由设备的切换对于主机就是透明的.HSRP向主机提供了默认网关的冗余性.
 
    2.HSRP组成员
    HSRP备份组由一台活跃路由器、一台备份路由器、一台虚拟路由器和其他路由器组成.

    各种路由器的作用如下:
    >.活跃路由器的功能是转发发送到虚拟路由器的数据包.组中的另外的一台路由器被选为备份路由器.活跃路由器通过发送Hello消息来承担和保持它的活跃角色.
   
    >.备份路由器的功能是监视HSRP组的运行状态,并且当活跃路由器不能运行时,迅速承担起转发数据包的责任.备份路由器也传输Hello消息,告知组中所有备份路由器的角色和状态变化.
  
    >.虚拟路由器(LAN上的网关)的功能是向最终用户提供一台可以连续工作的路由器.虚拟路由器配有它自己的IP地址和MAC地址,单实际上它并不转发数据.

    >.HSRP备份组可以包含其他路由器.这些路由器监视Hello消息,但不做应答.这些路由器转发任何经过它们的数据包,单并不转发经由虚拟路由器的数据包.
   
    当活跃路由器失效时,其他HSRP路由器将不能接收到Hello消息,在保持时间超时后,备份路由器成为活跃路由器.负责转发发送到虚拟地址的数据包.
    因为新的活跃路由器同时承担了虚拟路由器的IP地址和MAC地址,所以,末端主机几乎看不到什么服务中断.这些主机将继续向虚拟路由器MAC地址发送数据包,并且活跃路由器负责将数据包传输到目的地.

    随着备份路由器成为活跃路由器,备份路由器的位子空缺,组中的其他路由器将竞争备份路由器的角色.默认情况下(优先级相同),IP地址最大的的路由器将成 为新的备份路由器.尽管一个HSRP组中有多台路由器,但是只有活跃路由器才负责转发发送到虚拟路由器的数据包.


    3.HSRP的原理
    HSRP组内的每一个路由器都有指定的优先级(Priority),用于衡量路由器在活跃路由器选择中的优先程度,如下图所示


    默认优先级是100.优先级是可以配置的,可以选为0-255内的任何值.组内有最高优先级的路由器将成为活跃路由器.
    活跃路由器替虚拟路由器对数据流进行响应.如果末端主机发送了一个数据包到虚拟路由器的MAC地址,那么活跃路由器将接受并处理这个数据包.如果末端主机对虚拟路由器的IP地址发送ARP请求,那么,活跃路由器将使用虚拟路由器的MAC地址进行应答.
    在上图中,路由器A的优先级为200.路由器B为150,路由器A成为活跃路由器,转发所有到达自动生成HSRP虚拟MAC地址的数据帧.
   
    选择活跃路由器和备份路由器时,如果优先级相同,IP地址大的路由器成为活跃路由器.
   
    如果在HSRP组内,还有其他的路由器,其他路由器只监听活跃路由器和备份路由器的状态,以实现更强的故障容错能力.
   
    运行HSRP的设备发送 和接收基于UDP的组播Hello包,以检测路由器故障,并确定活跃和备份路由器.一个组内的HSRP路由器会从活跃路由器那里学到Hello间隔、保持 时间和虚拟IP地址.如果活跃路由器出现故障,备份路由器会在保持时间超时后成为活跃路由器.

    在HSRP的实现过程中,使用虚拟地址是实现功能的关键.下面详细说下虚拟MAC地址

    4.虚拟的MAC地址
    地址解析协议ARP在IP地址和MAC地址之间建立了一种关联.每台交换机都维护着一个地址解析表.当交换机试图联系某个设备时,会先查看本机保存的MAC地址表.虚拟路由器的IP地址和MAC地址,都维持在HSRP组内每台三层交换机的MAC地址表中.

     如图:使用show ip arp 命令显示三层交换机上的arp缓存
    

     上图作为HSRP组47成员中的一台三层交换机的ARP缓存内容,其中可以看到虚拟路由器所用的MAC地址.
     虚拟路由器所用的MAC地址由3部分组成
   
  
     >厂商编码,厂商编码是MAC地址的前三个字节,上图中的厂商编码为0000.0c说明这是一台cisco设备
     >HSRP编码(HSRP众所周知的虚拟MAC地址),该MAC地址的后两个字节说明,本MAC地址用于一台HSRP虚拟路由器,HSRP编码总是 07.ac
     >组号(HSRP组号),MAC地址的最后一个字节是组的标识号,组47就被转换为16进制的2f,并构成MAC地址的最后一个字节.
  
     5.HSRP消息
     HSRP中的所有路由器都发送或者接受HSRP消息.这些消息用来决定路由器在HSRP组中的角色.HSRP封装在UDP数据包的数据部分,使用UDP的1985端口.
     HSRP消息使用的目的地址是全路由器多点广播地址224.0.0.2,TTL值是1.
    
     HSRP的6种状态,分别是:
     >初始状态
     >学习状态
     >监听状态
     >发言状态
     >备份状态
     >活跃状态
     并不是所有的HSRP路由器都经历这些状态,例如,不是备份路由器或者活跃路由器的路由器,就不会又备份状态和活跃状态.

     1).初始状态
     所有的路由器都从初始状态开始,这是一种起始状态,同时表明HSRP还没有运行.配置发生变化或者端口第一次启用时,就进入该状态.
     2).学习状态
     路由器等待来自活跃路由器的消息.这时候,路由器还没有看到来自活跃路由器的hello消息,也没有学习到虚拟路由器的IP地址.
 
     3).监听状态
     路由器知道了虚拟路由器的IP地址,但它既不是活跃路由器也不是备份路由器,这时,路由器监听来自活跃路由器的备份路由器的Hello消息.除活跃活跃路由器和备份路由器之外的路由器都保持监听状态.
    
     4).发言状态
     路由器发送周期性的Hello消息,并参与活跃或备份路由器的竞选.路由器在获得虚拟路由器的IP地址之前,不能进入发言状态.

     5).备份状态
     路由器是成为下一个活跃路由器的候选设备,并且它也发送周期性的Hello消息.在一个组中只有一台备份路由器.

     6).活跃状态
     在活跃状态,路由器负责转发发送到虚拟MAC地址的数据包.活跃路由器周期性的发送Hello消息,在一个组中必须有一个活跃路由器.

     HSRP计时器
     HSRP使用二个计时器:Hello间隔和保持时间.任何状态的HSRP路由器都会在Hello计时器超时后生成Hello包.默认的Hello间隔时间是3秒,默认的保持时间是10秒.通常,保持时间大于或等于三倍的Hello间隔时间.

     HSRP和VRRP
     HSRP是cisco的私有协议,VRRP(Virtual Router Redundancy Protocol)是IETF制定的一种虚拟路由冗余协议.目前,包括Cisco在内的主流厂商都已经支持VRRP.
    
     6.HSRP的配置
     1).配置成为HSRP的成员
     例如将VLAN2接口配置成为HSRP成员,HSRP组号为10,配置如下:
     Switch(config)#int vlan 2
     Switch(config-if)#ip add 192.168.1.1 255.255.255.0
     Switch(config-if)#no shutdown
     Switch(config-if)#standby 10 ip 192.168.1.254
     如果要将一个接口从组中移除,只需要在前面加no
     Switch(config-if)#no standby 10 ip 192.168.1.254
     如果不指定虚拟路由器的IP,三层交换机会根据Hello消息学习到虚拟路由器的IP地址

     2).配置HSRP的优先级
     用户可以指定端口在组内的优先级,这样,当活跃路由器出现故障时,优先级高的将成为活跃路由器.
     Switch(config-if)#standby group-number priority priority-value
     group-number为组号,priority-value为优先级,范围是0-255,默认是100.

     3).配置HSRP的占先权
     当活跃路由器出现故障时,备份路由器将承担起活跃路由器的角色.即使优先级更高的路由器恢复故障后,新的活跃路由器仍然转发数据.要想原来优先级高的活跃路由器从优先级低的活跃路由器那里取得转发权,可以使用如下命令:
     Switch(config-if)#standby group-number preempt
     除了上面的情况,还有一些情况需要配置占先权
    
     >配置HSRP时,先配置优先级比较低的路由器A,当配置完成后它会确认组内其他路由器的状态和优先级,但是此时A是组内唯一的路由器,路由器A认 为自己的优先级最高,而成为活跃路由器.再配置优先级比较高的路由器B,如果没有配置占先权则B不会成为活跃路由器,保持standby的状态.
   
     >当网络中的HSRP组工作正常,路由器A的优先级为200,路由器B优先级100,A成为活跃路由器,在路由器A上配置端口跟踪,当跟踪的端口出现故障,优先级减150,降低为50,如果B没有配置占先权,则B不会成为活跃路由器.

     4).配置Hello消息的计时器
     默认计时器在很多网络中都工作的很好,一般情况下不需要修改,然而,如Hello包需要经过有时会阻塞的网络,可以修改这些值,命令如下:
     Switch(config-if)#standby group-number times hellotime holdtime
     hellotime间隔时间默认为3秒,设置范围是1-255,保持时间最少是Hello时间的三倍,默认的保持时间是10秒.
     例如:
     Switch(config-if)#standby 10 times 2 8

     5).配置HSRP端口跟踪
     某些情况下,通往外部的端口状态直接影响着哪台路由器需要变为活跃路由器.
    
     如上图所示:
     当路由器A连接外网的链路出现故障时,尽管对外部的端口不可用,但是路由器仍然从其他端口发送Hello消息,指明A还是活跃的,因此发往外部的数据包就不可能被转发到外部网络.
    
     配置端口跟踪的目的是让被跟踪的端口变的不可用时,降低优先级,让活跃路由器的优先级低于其他路由器,从而让备份路由器成为活跃路由器.
    
     HSRP跟踪功能减少了主端口不可用时路由器的优先级,但其仍有保持活跃路由器的可能性,通用的原则是,在HSRP端口上同时设定占先权功能(高低优先级都配置),以提供最佳的故障切换效果.

     配置端口跟踪的命令:
     Switch(config-if)#standby group-number track interface-type mod/num interface-priority
     group-number:采用跟踪功能的端口的组号
     interface-type:跟踪端口的类型
     mod/num:跟踪端口的端口号
     interface-priority:当端口失效时,路由器优先级降低的数值;当端口变为可用时,路由器的优先级将加上该值,默认为10.
    
     6).检查HSRP的状态
     show standby [ interface-type mod/num ] [ group-number ] brief
    

     7.HSRP的应用案例
     在使用HSRP协议的网络中,可以通过将不同VLAN的活跃路由器指定到不同的三层交换机,实现网络流量的负载均衡.在配置HSRP实现负载均衡时,需要 考虑每个生成树实例所阻塞的端口,所以在使用HSRP的网络中实现流量负载均衡时,需要通过配置HSRP以及生成树来实现负载均衡.
    
     网络规划如下:
     >SW1上VLAN2的IP地址为192.168.2.1/24,VLAN3的IP地址为192.168.3.1/24
     >SW2上VLAN2的IP地址为192.168.2.2/24,VLAN3的IP地址为192.168.3.2/24
     >PC1的IP地址为192.168.2.10/24,网关192.168.2.254/24,PC3的IP地址为192.168.3.10/24,网关192.168.3.254/24
     >SW1和R1的互联地址为192.168.0.0/30,SW2和R1的互联地址为192.168.1.0/30
     >路由器使用loopback 192.168.100.1/24模拟外网地址
     >交换机之间的链路均为Trunk链路,并使用静态地址实现全网互通.

     具体配置如下:
     R1上:

       
     SW1:

      

      在SW1上创建VLAN

     

     
     SW2:
     

   
     配置STP实现VLAN的负载均衡
     SW1:

     
     SW2:
    
  

     end