VRRP协议详解

产生背景及应用环境

1.1为什么要用VRRP

VRRP(Virtual Router Redundancy Protocol)------虚拟路由器冗余协议,其最新技术标准是RFC3768。

为什么要用VRRP呢,主要是为了实现数据链路层互通设备的冗余备份功能,我们来看图一:

通过上图可以看到,常规的局域网一般都是多个终端接到交换机上,然后通过单独的出口路由器连接到Internet,这时候问题来了,如果这个出口路由器坏掉了,那么整个上行的流量就会全部断掉,这就是传说中的单点故障。

所以说我们要避免出现这种情况,本着冗余备份的思想,我们对上面的网络进行物理改造,如下图:

现在,这个网络一共有两个Internet出口,这样任何一个出口路由器出现故障都不会导致终端用户的上行流量断掉。

另外一个问题出现了,我们怎么让终端PC知道局域网中有两个出口路由器,并在其中一个出现故障后自动选择另外一个呢?可采用的方案包括让终端PC运行动态路由协议,比如RIP、OSPF,或者ICMP router Discovery client(DISC),或者指定一条静态缺省路由。

但是这三种实现方法都有其劣势及不可行之处,我们来具体分析一下。首先对于在每一个终端PC上运行动态路由协议来讲,几乎是不可能的,这其中牵涉到网管的技术能力和日常维护、安全性问题、以及某些终端平台不支持动态路由协议,比如我们常用的XP、Windows7都不支持,而windows Server系列OS支持。

假定我们在终端PC上部署了动态路由协议,那么每一个终端用户都会遇到下面这种情况:

10086:尊敬的用户您好,申报RIP故障请按1,申报OSPF故障请按2,申报ISIS故障请按3……….

用户:( ⊙ o ⊙ )啊!我家是OSPF,按2。

10086:您好,您申报的故障是OSPF,请进一步选择,OSPF邻居无法建立请按1,OSPF密钥不对请按2,链路状态数据库异常请按3,路由表错误请按4…………..

用户:( ⊙ o ⊙ )啊!……………然后吐血身亡………….

所以说,N多现实问题和困难导致在终端PC上部署动态路由协议具有不可行性。

那么对于在终端PC上部署DISC等邻居或路由器发现协议呢?也存在种种问题,例如在网络内存在大量主机,每一台都需要运行DISC,除了增加主机的处理负担外,也会导致协议收敛缓慢,从而不能及时发现不可用邻居路由器,产生路由黑洞,这是不可接受的。

现在只剩下在终端PC上配置静态缺省路由了(其具体表现形式一般是设置网关),这是几乎每一个IP平台都支持的配置功能,即使是一部IP电话机,根据这个思路,我们在终端上配置多个默认网关即可实现路由备份了,但是存在以下两个问题:

1.  对于下行设备是PC来讲,配置了多个默认网关之后,其中一个会作为活动默认网关,其它的作为备份默认网关,其按照下列过程执行流量转发和失效网关检测:

当TCP/IP在通过活动默认网关向某个目标IP地址进行TCP通信时,如果失败的尝试次数达到TcpMaxDataRetransmissions注册表值(默认为5)的一半(即3次)还没有收到响应,TCP/IP将到达该目标IP地址的通信改为使用列表中的下一默认网关,这一步是通过更改该远程IP地址的路由缓存项(Route Cache Entry,RCE)来实现的,从而使用列表中的下一个默认网关来作为下一跳地址。其中RCE是路由表中的一个条目,用于存储目的地的下一跳IP地址。当超过25%的TCP连接转向下一默认网关时,TCP/IP将活动默认网关修改为这些连接当前使用的默认网关。

如果此时原始默认网关从故障中回复,TCP/IP将继续使用当前的活动默认网关,而不会转移到原始默认网关,除非重启计算机。如果当前的活动默认网关也出现故障,那么TCP/IP就会继续尝试使用列表中的下一个默认网关,在尝试完整个列表后将返回到列表的开始,又从第一个默认网关开始进行尝试。

死网关检测仅监视TCP流量,如果其他类型的流量连接失败,不会切换默认网关。另外TCP是端到端的协议,因此即使当前默认网关完全正常,本地计算机的TCP通信失败也可能会导致切换默认网关。

当不同网络接口所连接的网络之间没有连接性时(如一个网络接口连接到Internet,而一个网络接口连接到内部网络),如果在多个网络接口上同时配置默认网关,在活动默认网关出现故障导致切换默认网关时,就可能会引起连接性故障。比如活动默认网关为Internet连接,当它出现问题时,此时默认网关切换为内部连接,此时,本地计算机将无法再访问位于Internet连接上的主机。对于这种情况,微软建议使用 route add 来添加对应目的网络的匹配路由,而不是设置多个默认网关,这其实就是最长匹配原则,精确路由优先于缺省路由。

2.对于下行设备是路由器的情况,其不会切换默认路由,只会按照配置好的缺省路由优先级进行流量转发,从而导致路由黑洞。

结合上面两个原因,在网络出口路由器的下行设备上配置缺省路由的方法也不可行。

综上所述,要想消除单点故障,又同时实现下行设备在故障发生时的流量无障碍转发,以上的三个方法均不可行,所以人们开发出了一种全新的协议:VRRP,这种协议无需下行设备与出口路由器进行交互性操作,却完全实现了网络出口的冗余备份,下一节,我们就来详细讨论下VRRP的基本原理及实现过程。

VRRP基本原理及实现过程

2.1基本概念

VRRP路由器

运行VRRP协议一个或多个实例的路由器。VRRP将局域网内的一组路由器划分在一起,形成一个VRRP备份组,它在功能上相当于一台虚拟路由器,使用虚拟路由器号进行标识

虚拟路由器

由一个Master路由器和多个Backup路由器组成。其中,无论Master路由器还是Backup路由器都是一台VRRP路由器,下行设备将虚拟路由器当做默认网关。

VRID

虚拟路由器标识,在同一个VRRP组内的路由器必须有相同的VRID,其实VRID就相当于一个公司的名称,每个员工介绍自己时都要包含公司名称,表明自己是公司的一员,同样的道理,VRID表明了这个路由器属于这个VRRP组。

Master路由器

虚拟路由器中承担流量转发任务的路由器

Backup路由器

当一个虚拟路由器中的Master路由器出现故障时,能够代替Master路由器工作的路由器

虚拟IP地址

虚拟路由器的IP地址,一个虚拟路由器可以拥有一个或多个虚拟IP地址。

IP地址拥有者

接口IP和虚拟路由器IP地址相同的路由器就叫做IP地址拥有者。

主IP地址

从物理接口设置的IP地址中选择,一个选择规则是总是选用第一个IP地址,VRRP通告报文总是用主IP地址作为该报文IP包头的源IP。

虚拟MAC地址

组成方式是00-00-5E-00-01-{VRID},前三个字节00-00-5E是IANA组织分配的,接下来的两个字节00-01是为VRRP协议指定的,最后的VRID是虚拟路由器标识,取值范围[1,255]

2.2报文组成

下面我们来看VRRP报文的具体组成:

具体字段含义:

Version:VRRP协议版本号,RFC3768定义了版本2.

Type:该字段指明了VRRP报文的类型,RFC3768只定义了一种VRRP报文,那就是VRRP通告报文,所以该字段总是置为1,若收到的VRRP通告报文拥有非1的类型值,那么会被丢弃。

Virtual Rtr ID:也就是我们上面介绍过的VRID,一个VRID唯一地标识了一个虚拟路由器,取值范围是[1,255],所以一台路由器的接口可以同时运行最多255个VRRP实例,此字段没有缺省值,必须人为设定。

Priority:优先级,在一个虚拟路由器中用来选取Master路由器和Backup路由器,值越大表明优先级越高,此字段共有8个bit,取值范围[1,254],若没有人为指定,缺省值是100。其中,VRRP协议会将IP地址拥有者路由器的该字段永远设置为255,若人为指定为其它值,也不会影响VRRP协议的默认行为,即IP地址拥有者路由器的该字段总是255。另外,此字段设置为0会出现在下面这种情形中,当Master路由器出现故障后,它会立刻发送一个Priority置0的VRRP通告报文,当Backup路由器收到此通告报文后,会等待Skew time时间,然后将自己切换为Master路由器,其中Skew time=(256-Backup路由器的优先级)/256,单位为秒,例如若Backup路由器的优先级为100,那么Skew time=156/256=0.609秒,对于主路由器来说,Skew time并没有实际意义,虽然cisco的路由器也会计算并显示出来。

Count IP Addrs:VRRP通告报文中包含的IP地址数量,这个字段其实就是为一个VRRP虚拟路由器所分配的IP地址的数量,我们来看一个cisco的实际例子:

配置如下:

interface Ethernet1/0

 ip address 192.168.10.102 255.255.255.0

 duplex half

 vrrp 1 ip 192.168.10.52

 vrrp 1 ip 192.168.10.51 secondary

 vrrp 1 ip 192.168.10.53 secondary

end

我们来看一下上面的配置在封装成VRRP通告报文的时候,是如何进行的,如下图:

大家可以看到,VRRP通告报文中的Count IP Addrs字段的值为3,这是因为我们配置了3个虚拟IP地址,另外,下面的IP Address字段也按照我们配置虚拟IP的顺序进行了封装。

Auth Type:认证类型字段,是一个8位的无符号整数,一个虚拟路由器只能使用一种认证类型,如果Backup路由器收到的通告报文中认证类型字段是未知的或和本地配置的不匹配,那么它将丢弃该数据包。

值得注意的是,在RFC2338中为VRRP定义了3种认证类型:无认证、明文认证、MD5认证,但是在后续的实践中发现,这些手段无法提供行之有效的安全性,并且还会导致多个Master路由器的问题,所以在最新的VRRP标准:RFC3768中已经去掉了所有的认证类型。

目前认证类型字段的定义如下:

0 – 无认证,此时下面的Authentication Data字段将会被置为全0,接收到的路由器也会忽略此字段。

1 – 保留,是为了向前一个版本的RFC2338提供兼容性

2 – 保留,是为了向前一个版本的RFC2338提供兼容性

Adver Int::此字段规定了Mater路由器向外发送VRRP通告报文的时间间隔,以秒为单位,取值范围是[1,255],若没有人工配置,缺省为1秒。

Checksum:整个VRRP报文的校验和,计算过程中,将Checksum字段置为0,计算完成后将结果填入此字段。若希望进一步了解Checksum的计算,可以查看RFC1071(CKSM)。

IP Address:此字段存放3个VRRP虚拟路由器的虚拟IP地址,配置了几个就封装几个,在上面的cisco实例中我们配置了三个,那么VRRP通告报文就会封装3个。

Authentication Data:RFC3768中规定,此字段只是为了向RFC2338兼容,在实际的封装时,全置为0.,接收方也会忽略此字段。

2.3协议状态机

 

2.4  VRRP工作过程

VRRP的工作过程为:

(1)        虚拟路由器中的路由器根据优先级选举出Master。Master路由器通过发送免费ARP报文,将自己的虚拟MAC地址通知给与它连接的设备或者主机,从而承担报文转发任务;

(2)        Master路由器周期性发送VRRP报文,以公布其配置信息(优先级等)和工作状况;

(3)        如果Master路由器出现故障,虚拟路由器中的Backup路由器将根据优先级重新选举新的Master;

(4)        虚拟路由器状态切换时,Master路由器由一台设备切换为另外一台设备,新的Master路由器只是简单地发送一个携带虚拟路由器的MAC地址和虚拟IP地址信息的免费ARP报文,这样就可以更新与它连接的主机或设备中的ARP相关信息。网络中的主机感知不到Master路由器已经切换为另外一台设备。

(5)        Backup路由器的优先级高于Master路由器时,由Backup路由器的工作方式(抢占方式和非抢占方式)决定是否重新选举Master。

由此可见,为了保证Master路由器和Backup路由器能够协调工作,VRRP需要实现以下功能:

l              Master路由器的选举;

l              Master路由器状态的通告;

l              同时,为了提高安全性,VRRP还提供了认证功能;

下面将从上述三个方面详细介绍VRRP的工作过程。

2.4.1  Master路由器的选举

VRRP根据优先级来确定虚拟路由器中每台路由器的角色(Master路由器或Backup路由器)。优先级越高,则越有可能成为Master路由器。

初始创建的路由器工作在Backup状态,通过VRRP报文的交互获知虚拟路由器中其他成员的优先级:

l              如果VRRP报文中Master路由器的优先级高于自己的优先级,则路由器保持在Backup状态;

l              如果VRRP报文中Master路由器的优先级低于自己的优先级,采用抢占工作方式的路由器将抢占成为Master状态,周期性地发送VRRP报文,采用非抢占工作方式的路由器仍保持Backup状态;

l              如果在一定时间内没有收到VRRP报文,则路由器切换为Master状态。

VRRP优先级的取值范围为0到255(数值越大表明优先级越高),可配置的范围是1到254,优先级0为系统保留给路由器放弃Master位置时候使用,255则是系统保留给IP地址拥有者使用。当路由器为IP地址拥有者时,其优先级始终为255。因此,当虚拟路由器内存在IP地址拥有者时,只要其工作正常,则为Master路由器。

2.4.2  Master路由器状态的通告

Master路由器周期性地发送VRRP报文,在虚拟路由器中公布其配置信息(优先级等)和工作状况。Backup路由器通过接收到VRRP报文的情况来判断Master路由器是否工作正常。

Master路由器主动放弃Master地位(如Master路由器退出虚拟路由器)时,会发送优先级为0的VRRP报文,致使Backup路由器快速切换变成Master路由器。这个切换的时间称为Skew time,计算方式为:(256-Backup路由器的优先级)/256,单位为秒。

当Master路由器发生网络故障而不能发送VRRP报文的时候,Backup路由器并不能立即知道其工作状况。Backup路由器等待一段时间之后,如果还没有接收到VRRP报文,那么会认为Master路由器无法正常工作,而把自己升级为Master路由器,周期性发送VRRP报文。如果此时多个Backup路由器竞争Master路由器的位置,将通过优先级来选举Master路由器。Backup路由器默认等待的时间称为Master_Down_Interval,取值为:(3×VRRP报文的发送时间间隔)+Skew time,单位为秒。

在性能不够稳定的网络中,Backup路由器可能因为网络堵塞而在Master_Down_Interval期间没有收到Master路由器的报文,而主动抢占为Master位置,如果此时原Master路由器的报文又到达了,就会出现虚拟路由器的成员频繁的进行Master抢占现象。为了缓解这种现象的发生,特制定了延迟等待定时器。它可以使得Backup路由器在等待了Master_Down_Interval后,再等待延迟等待时间。如在此期间仍然没有收到VRRP报文,则此Backup路由器才会切换为Master路由器,对外发送VRRP报文。

2.4.3  认证方式

VRRP提供了三种认证方式:

l              无认证:不进行任何VRRP报文的合法性认证,不提供安全性保障。

l              简单字符认证:在一个有可能受到安全威胁的网络中,可以将认证方式设置为简单字符认证。发送VRRP报文的路由器将认证字填入到VRRP报文中,而收到VRRP报文的路由器会将收到的VRRP报文中的认证字和本地配置的认证字进行比较。如果认证字相同,则认为接收到的报文是合法的VRRP报文;否则认为接收到的报文是一个非法报文。

l              MD5认证:在一个非常不安全的网络中,可以将认证方式设置为MD5认证。发送VRRP报文的路由器利用认证字和MD5算法对VRRP报文进行加密,加密后的报文保

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值