背景介绍
如下图所示的网络中,PC1、PC2、PC3连接接入层的交换机SW1,SW1通过单链路连接路由器R1(假设R1还连接着外网,这里没标出来)。这些PC的IP网段都相同,而且网关都是R1的GE0/0/0接口的IP地址192.168.1.253。这个网络存在的一个问题是该网络不够健壮,可靠性比较差:当R1与SW1之间的链路故障时,PC就不能与R1就不能连通了,导致PC与外部网络的通信业断开了,从而影响到业务。
可以在网络中增加一台路由器,作为冗余的网关。如下图所示。PC的默认网关还是R1的GE0/0/0的接口IP 192.168.1.253。当R1故障或者R1与SW1的链路故障,导致PC无法访问外网时,就手动将各个PC的网关改成R2的GE0/0/0的IP地址192.168.1.252。但是很显然,这种需要人手工配置网关的方法是低效的,当PC很多的时候,工作量也变得非常大。有没有一种方法,能够自动感知到当R1发生故障(或者R1与SW1之间的链路故障)时,自动将默认网关切换到R2的GE0/0/0接口呢?如果有这种技术,那就不用手工在PC上再次配置网关了。
VRRP(Virtual Router Redundancy Protocol,虚拟路由冗余协议)就是一个解决此问题的一个方案。VRRP能够使得多台同属于一个广播域的网络设备能够协调工作,实现设备冗余,提高网络的可靠性。具体做法是:将同属于一个广播域的R1的GE0/0/0接口和GE0/0/0接口使能VRRP,当VRRP开始工作后,能够虚拟出一台虚拟路由器(如图中的192.168.1.254,该IP地址是可配的),PC将这个IP地址设置为自己的网关,因此,当PC向外部发送数据时,就会向这个虚拟路由器发送。但是,需要注意的是,这个虚拟路由器是虚拟的,是“并不存在的”,而是通过一定的规则,让R1或者R2来兼职这份工作,假如通过这个规则,R1的GE0/0/0口获得了这份兼职工作,那发给虚拟路由器的数据其实就是R1在处理。而R2因为没有获得这份兼职,R2的GE0/0/0口就会一直监督着R1的GE0/0/0口,只要它发现R1的这个口有问题了,它就会乘虚而入,将虚拟路由器的兼职工作抢过来,但是这个过程PC是毫无感知的,它认为这个工作一直是虚拟路由器在做。
VRRP概述
VRRP通常部署在局域网中的出口网关设备上,通过将具有相同出口的路由设备纳入同一个备份组并通告为一台虚拟路由器作为默认网关,实现对局域网内网关设备的备份。只要将用户的默认网关地址设置为虚拟路由器地址,当单点网关设备故障造成网络中断时,VRRP协议能自动将数据转发切换至备份路由器进行,便可实现在不改变网络内主机默认网关前提下网络通信的快速恢复。
VRRP目前有两个版本VRRPv2和VRRPv3,其中VRRPv2仅适用于IPv4网络,VRRPv3适用于IPv4和IPv6两种网络,本文讲的是VRRPv2。
相关的参考标准有:
标准 | 描述 |
---|---|
RFC 2338 | Virtual Router Redundancy Protocol |
RFC 2787 | Definition of Managed Objects for the Virtual Router Redundancy Protocol |
RFC 3768 | Virtual Router Redundancy Protocol(version number Two 2004) |
RFC 5798 | Virtual Router Redundancy Protocol Version 3 for IPv4 and IPv6 |
VRRP相关术语
- VRRP路由器:运行VRRP的路由器。实际上,VRRP是基于接口来工作的。一台VRRP路由器(的接口)可以同时参与到多个VRRP组中,在不同的组中,一台VRRP路由器可以充当不同的角色。
- VRRP组及VRID:一个VRRP组(VRRP Group)由多台协同工作的路由器(的接口)组成,使用相同的VRID(Virtual Router Identifier,虚拟路由器标识符)进行标识。属于同一个VRRP组的路由器之间交互VRRP协议报文并产生一台虚拟路由器。一个VRRP组只能出现一台Master路由器。
- 虚拟路由器(Virtual Router):对于每一个VRRP组,抽象出来的一个逻辑路由器,该路由器充当网络用户的网关,该路由器并非真实存在,事实上对于用户而言,只需知道虚拟路由器的IP,至于具体的虚拟路由器的角色由谁来承担、数据转发任务由谁来承担、Master挂掉之后谁来接替,这是VRRP的工作。
- 虚拟IP地址、虚拟MAC地址
- 虚拟IP地址用于标识虚拟路由器,该地址实际上就是用户的网关地址,由用户配置。
- 与虚拟IP地址对应的MAC也是虚拟的,该MAC地址由固定位加上VRID构成(虚拟MAC地址的格式是"0000-5e00-01xx",其中xx为VRID)。
- Master、Backup路由器
- Master路由器:就是在VRRP组实际转发数据包的路由器,在每一个VRRP组中,仅有Master响应对虚拟IP地址的ARP请求。Master路由器同时以一定的时间间隔发送VRRP消息,以便通知Backup路由器自己的存活。
- Backup路由器:就是在VRRP组中处于监听状态的路由器,一旦Master路由器出现故障,Backup路由器就开始接替工作。
- 选举依据:先比较接口优先级(数值越大,优先级越高,范围是0~255),如果优先级相等则比较接口IP地址(IP地址越大越优先)
- 抢占模式(Preempt Mode):如果Backup路由器激活了抢占模式,那么当它发现Master路由器的优先级比自己更低时,它将立即切换至Master状态,成为新的Master路由器,而如果Backup路由器没有激活抢占功能,即使它发现Master路由器的优先级比自己低,也只能依然保持Backup状态,直到Master路由器失效。当前默认一般是抢占模式。
VRRP报文格式
VRRP只定义了一种报文格式,即通告(Advertisement)报文,它被封装在IP报文中,IP头部的协议号字段值为112(十进制),报文的目的IP地址是组播地址224.0.0.18。
VRRPv2的报文格式如下:
字段解释:
- 版本(Version):对于VRRPv2来说,该字段值恒为2。
- 类型(Type):VRRP只定义了通告报文这一种报文类型,该字段值恒为1。带有未知类型的报文必须被丢弃。
- 虚拟路由器ID(VRID):虚拟路由器的标识符,取值范围是1~255。
- 优先级(Prioriy):取值范围是0~255,该值越大,则VRRP的优先级越高,路由器就越可能成为Master。如果VRRP路由器是虚拟路由器地址的IP地址所有者,那么其 优先级必须为255。起备用作用的VRRP路由器的优先级必须 在1–254之间。缺省的VRRP路由器优先级为100。 优先级值0 用于指示当前虚拟路由器的主路由器停止参与 VRRP组。主要用于触发备用路由器快速地迁移到主路由器, 而不用等待当前主路由器超时。
- IP地址个数(Count IP Address):VRRP组中虚拟IP地址的个数。这个字段的值指示了该报文后续的”IP地址“字段的个数。
- 认证类型(Authentication Type):VRRP报文认证的类型。如果报文携带未知的认证类型或者该认证类型和本地 配置的认证方法不匹配,那么该报文必须被丢弃。
- 目前定义的认证方法有:
- 0 - No Authentication 不认证 该认证类型表明VRRP协议报文的交换不需要认证。在发送VRRP协议报文时,Authentication Data 字段将被置为 0;而在接收协议报文时,Authentication Data 字段被 忽略。
- 1 - Reserved 保留
- 2 - Reserved 保留
- 目前定义的认证方法有:
- 通告间隔(Advertisement Interval):VRRP报文的发送时间间隔(单位为秒),缺省情况下,VRRP的报文发送时间间隔为1s。
- 校验和(Checksum):校验和。用于检测VRRP消息的数据是否出错。 校验和是从version字段开始的整个VRRP消息的1的16位补码 和。(RFC1071 描述了校验和的计算细节)。
- IP地址(IP Address):VRRP虚拟IP地址。
- 认证数据(Authentication Data):认证字符串仅仅用于对RFC2338的向后兼容。在发送VRRP报文时该字段应该被置为0,而在接收VRRP报文时该字段应该被忽略。
VRRP的状态机
VRRP协议一共有三种状态:Initilize、Master、Backup。初始状态都是Initialize,通过比较优先级产生Master和Backup,在规定时间内,Backup若没有收到Master发来的心跳报文,将切换为Master。
VRRP的选举过程
VRRP的工作过程
1、VRRP组中的路由器选举出Master。选举完成后,Master设备会立即发送一个免费ARP报文,将虚拟MAC地址和虚拟IP地址通知给与它连接的设备或者主机,从而承担报文转发的任务。
2、Master设备周期性向备份组内所有Backup设备发送VRRP通告报文。(也就是心跳报文,通知所有备设备,本Master还活着,你们不要抢我的王位。。。)
3、如果Master设备出现故障,VRRP备份组中的Backup设备重新选举新的Master。
4、VRRP组状态切换时,Master设备由一台设备切换为另一台设备,新的Master设备会立即发送携带虚拟路由器的虚拟MAC地址和虚拟IP地址信息的免费ARP报文,刷新与它连接的主机或设备中的MAC表项(从与之相连的交换机的角度来看,原来对应的虚拟MAC地址与虚拟IP地址是从与旧Master相连的接口学习到的,而现在是与新的Master相连的接口学习到的,因此需要刷新MAC表项),从而把用户流量引到新的Master设备上来,整个过程对用户完全透明。
5、原Master设备故障恢复时,若该设备接口的IP地址与虚拟IP地址相同,则其优先级为255,将直接切换至Master状态。若该设备优先级小于255,将首先切换至Backup状态,且其优先级恢复为故障前配置的优先级。
6、Backup设备的优先级高于Master设备时,由Backup设备的工作方式(抢占方式和非抢占方式)决定是否重新选举Master。
VRRP与其他协议/功能的联动
VRRP与接口状态联动监视上行接口
VRRP备份组只能感知其所在接口状态的变化,当VRRP设备上行接口或直连链路发生故障时,VRRP无法感知,此时会引起业务流量中断。通过部署VRRP与接口状态联动监视上行接口可以有效地解决上述问题,当Master设备的上行接口或直连链路发生故障时,通过调整自身优先级,触发主备切换,确保流量正常转发。
VRRP可以通过Increased和Reduced方式来监视接口状态:
- 如果VRRP设备上配置以Increased方式监视一个接口,当被监视的接口状态变成Down后,该VRRP设备的优先级增加指定值。
- 如果VRRP设备上配置以Reduced方式监视一个接口,当被监视的接口状态变为Down后,该VRRP设备的优先级降低指定值。
如下图所示,SwitchA和SwitchB之间配置VRRP备份组,其中SwitchA为Master设备,SwitchB为Backup设备,SwitchA和SwitchB皆工作在抢占方式下。在SwitchA上配置以Reduced方式监视上行接口Interface1,当Interface1故障时,SwitchA降低自身优先级,通过报文协商,SwitchB抢占成为Master,确保用户流量正常转发。
VRRP与路由状态联动
如下图所示,VRRP可以与上行路由的状态绑定在一起,当上行路由出现异常时,Master设备可以降低一定的优先级,当优先级低于Backup设备的优先级时,Backup设备就会切换为Master设备,从而防止因为上行路由的异常导致业务受损。
注意:请注意本小节与上面小节(“VRRP与接口状态联动监视上行接口”)之间的区别:上面一小节是说明VRRP设备上的上行接口故障后采取的措施,而本节关注的点是不是本设备的上行接口,而是本设备的上行设备发生故障后采取的措施。
与BFD功能联动
VRRP备份组通过收发VRRP协议报文进行主备状态的协商,以实现设备的冗余备份功能。当VRRP备份组之间的链路出现故障时,Backup设备需要等待Master_Down_Interval后才能感知故障并切换为Master设备,切换时间通常在3秒以上。在等待切换期间内,业务流量仍会发往Master设备,此时会造成数据丢失。通过部署VRRP与BFD联动功能,可以有效解决上述问题。通过在Master设备和Backup设备之间建立BFD会话并与VRRP备份组进行绑定,快速检测VRRP备份组之间的连通状态,并在出现故障时及时通知VRRP备份组进行主备切换,实现了毫秒级的切换速度,减少了流量丢失。
参考文献:
1、《HCNP路由交换学习指南》
2、[配置VRRP与Link/Peer BFD联动实现快速切换 - CloudEngine 8800, 7800, 6800, 5800 V200R005C10 配置指南-可靠性 - 华为 (huawei.com)](