名词解释
VRRP Virtual Router Redundancy Protocol ,虚拟路由器冗余协议
VRRP Router VRRP路由器,支持VRRP协议的路由器
Virtual Router 虚拟路由器。在共享的LAN上通过VRRP协议呈现给LAN中的host为一个默认路由器的对象。由多个物理VRRP路由器组成,其中一个VRRP路由器 为Master,负责向host 提供 默认路由器的功能,其他的VRRP路由器为backup路由器,当Master出现故障时,变为Master。一台虚拟路由器有一 个或多个虚拟IP地址
IP Address Owner IP地址拥有着。连接在LAN上的接口的物理IP地址与虚拟路由器的虚拟IP地址相同的VRRP路由器
Primary IP Address 主IP地址,从VRRP路由器的物理接口(real interface)众多的ip地址中选出的一个ip地址。当该VRRP路由器作为Master时,会发送VRRP协议报 文,即ADVERTISEMENT报文,该报文的源ip地址即为主IP地址。
Virtual Router Master Master路由器。host会把报文发送给Master路由器。Master路由器会处理ARP request报文,转发发送给虚拟ip地址的报文
Virtual Router Backup Backup路由器。目前处于备份状态,当Master不工作时,可能承担Master的责任
虚拟路由器的虚拟IPvX(X=4 or 6)地址往往是某一台VRRP路由器物理接口的ip地址,这台路由器就是IP地址拥有者,或者说是我们要保护的对象,如果IP地址拥有者能正常提供服务,那么IP地址拥有者就总是Master。当Master不能正常提供服务时,其中的某台Backup路由器变为Master,提供报文转发和ARP请求应答等服务。但host并不感知到IP地址拥有者已经停止提供服务,在host角度来看,他们仍然是同IP地址拥有者进行通信。Backup变为Master是通过在VRRP路由器之间运行VRRP协议实现的。主IP地址是Master的物理接口的一个IP地址,如果当前Master是IP地址拥有者,主IP地址就是虚拟IPvX地址中的一个。如果当前Master不是IP地址拥有者,那么主IP地址并不是虚拟IP地址。
VRRP定义了一个选举协议(election protocol),它动态的在连接到同一个LAN上的多台VRRP路由器中选举一台路由器提供虚拟路由器的功能,当Master失效时,自动将Master的功能移交给backup路由器。
一个虚拟路由器由一个VRID(virtual router identifier)唯一标识,同一个虚拟路由器的所有VRRP路由器都有一个VRID和虚拟ipvX地址的映射,一个虚拟路由器可以有一个或多个虚拟IPvX地址,虚拟IPv4地址对应的MAC地址为00-00-5E-00-01-VRID,虚拟IPv6地址对应的MAC地址为00-00-5E-00-02-VRID。虚拟路由器是基于LAN的,一个物理路由器连接到不同的LAN中,可以是不同的虚拟路由器。一个物理路由器也可以加入到多个虚拟路由器中(即使是同一个LAN),不同的VRID可以有相同的ipvX地址映射。
为什么要有VRRP
end-host跟外部网络通信时,需要知道第一跳路由器,同时希望第一跳路由器有备份保护功能,当第一跳路由器出现故障时,能自动启用备份路由器,在短时间内能恢复通信,不至于长时间中断通信。所以end-host连接的LAN上往往同时连接了多台路由器。采用ipv4协议的 end-host可以通过多种方式获知第一跳的路由器:1)运行动态路由协议,如RIP,OSPFv2;2)运行ICMP路由器发现协议的客户端;3)静态配置默认路由
有很多因素会导致在end-host上运行动态路由协议不可行,如运行动态路由协议需要过多的管理任务(进行复杂的配置)、过长的处理时间、安全问题,还有有些平台(操作系统)不支持动态路由协议。
运行邻居或路由器发现协议需要网络上所有的end-host实时参与,需要很长的时间运行协议,尤其是当LAN中的end-host很多的情况下。当一台路由器停止服务时,这将导致过长的时间发现新的路由器,造成不可接受的长时间的黑洞(black hole)周期。
配置默认路由是最常见的方式,ipv4实际实现时往往采用这种方式,默认路由可以通过DHCP配置,但是由于没有冗余备份,不能支持路由器的动态备份
ipv6有一个ND协议通过周期性的组播router advertisement发现邻居路由器,也可以通过“邻居不可达检测”机制发现dead host或者路由器,但是38s的典型时间对某些传输层时间太长了,如果减少发现的时间(如5s)则由于增加的负荷对网络来说会过大
Ipv4 vrrp的好处是主机无需配置路由协议和路由器发现协议就可以实现路由器的冗余备份,ipv6 vrrp的好处是可以比ND协议机制更快的切换到backup router上
1)最小化“黑洞”周期的时间
2)最小化协议报文的负载和处理协议的复杂性
3)支持多种组播LAN技术
4)允许多个虚拟路由器进行负载分担
5)在一个LAN上支持多个IPvX子网
典型应用场景
1)两台路由器虚拟成一台路由器,一台路由器为主,另一台备份保护主路由器。LAN中所有host的默认路由均配置为主路由器
+-----------+ +-----------+
| Rtr1 | | Rtr2 |
|(MR VRID=1)| |(BR VRID=1)|
| | | |
VRID=1 +-----------+ +-----------+
IPvX A--------->* *<---------IPvX B
| |
| |
----------------+------------+-----+----------+----------+----------+--
^ ^ ^ ^
| | | |
default rtr IPvX addrs-------> (IPvX A) (IPvX A) (IPvX A) (IPvX A)
| | | |
IPvX H1->* IpvX H2->* IPvX H3->* IpvX H4->*
+--+--+ +--+--+ +--+--+ +--+--+
| H1 | | H2 | | H3 | | H4 |
+-----+ +-----+ +--+--+ +--+--+
Legend:
---+---+---+-- = Ethernet, Token Ring, or FDDI
H = Host computer
MR = Master Router
BR = Backup Router
* = IPvX Address; X is 4 everywhere in IPv4 case
X is 6 everywhere in IPv6 case
(IPvX) = default router for hosts
2)两台路由器虚拟成两台路由器,两台路由器相互备份保护对方。LAN中的主机的默认路由部分配置为Rtr1,部分配置为Rtr2。正常时,两台路由器同时工作,进行负载分担,一台路由器失效时,流量都转移到另一台路由器上
+-----------+ +-----------+
| Rtr1 | | Rtr2 |
|(MR VRID=1)| |(BR VRID=1)|
|(BR VRID=2)| |(MR VRID=2)|
VRID=1 +-----------+ +-----------+ VRID=2
IPvX A -------->* *<---------- IPvX B
| |
| |
----------------+------------+-----+----------+----------+----------+--
^ ^ ^ ^
| | | |
default rtr IPvX addrs -----> (IPvX A) (IPvX A) (IPvX B) (IPvX B)
| | | |
IPvX H1->* IpvX H2->* IPvX H3->* IpvX H4->*
+--+--+ +--+--+ +--+--+ +--+--+
| H1 | | H2 | | H3 | | H4 |
+-----+ +-----+ +--+--+ +--+--+
Legend:
---+---+---+-- = Ethernet, Token Ring, or FDDI
H = Host computer
MR = Master Router
BR = Backup Router
* = IPvX Address; X is 4 everywhere in IPv4 case
X is 6 everywhere in IPv6 case
(IPvX) = default router for hosts
协议报文
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| IPv4 Fields or IPv6 Fields |
... ...
| |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|Version| Type | Virtual Rtr ID| Priority |Count IPvX Addr|
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|(rsvd) | Max Adver Int | Checksum |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| |
+ +
| IPvX Address(es) |
+ +
+ +
+ +
+ +
| |
+ +
| |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
DMAC:01-00-5E-00-00-12
SMAC:00-00-5E-00-01-VRID(ipv4)/00-00-5E-00-02-VRID(ipv6)
ipv4:
DIP:固定为224.0.0.18,路由器禁止转发这个报文
SIP:发送接口(real interface)的主IPv4地址
TTL:固定为255
protocol:(十进制)112
ipv6:
DIP:固定为FF02:0:0:0:0:0:0:12,路由器禁止转发这个报文
SIP:发送接口(real interface)的主IPv6地址
HL:固定为255
protocol:(十进制)112
VRRP
version:3
type:1=ADVERTISEMENT,目前只定义一种VRRP协议报文
Virtual Rtr ID (VRID):虚拟路由器标识
Priority:路由器VRRP优先级。有效值1~255。IP地址拥有者的priority必须为255,backup为1~254,默认为100。priority=0不分配,用于当前Master主动通告其他backup,告知当前Master已经失效了
Count IPvX Addr:虚拟ip地址个数
Rsvd:保留
Maximum Advertisement Interval (Max Adver Int):Advertisement 协议报文的发送间隔,单位为分秒(centisecond),默认值为100(1秒)
Checksum:校验和
IPvX Address(es):虚拟路由器的虚拟ipvX地址
VRRP协议状态机
相关参数:
Advertisement_Interval:Advertisement协议报文的发送间隔。每一台vrrp路由器都会配置一个
Master_Adver_Interval:Advertisement协议报文中携带的Master的Advertisement协议报文的发送间隔。backup根据这个值判断Master是否失效
Skew_Time:偏移时间。Skew_Time=(((256 - priority) * Master_Adver_Interval) / 256)。可见优先级越高,Skew_time值越小
Master_Down_Interval:backup判断Master失效的时间。(3 * Master_Adver_Interval) + Skew_time(不同优先级的vrrp路由器的Master_Down_Interval不一样,这样高优先级的Master_Down_Interval值较小,这样高优先级的backup路由器先为主,发送advertisement协议报文,其他的backup就不会变为主了)
Preempt_Mode:抢占模式。默认为抢占模式。抢占模式时,高优先级的backup路由器接收到advertisement报文,发现发送advertise报文的vrrp路由器的优先级比自己的低,则让自己为Master,发送advertisement报文。ip地址拥有者总是支持抢占模式
Accept_mode:接收模式。当前master不是ip地址拥有者,接收到目的地址为虚拟路由器ip地址报文时,是否处理。默认不是Accept_mode。
Master_Down_Timer:backup维护的一个定时器,用于判断Master是否失效
Adver_Timer:Master维护的一个定时器,用于触发发送advertisement报文
状态机:
+---------------+
+--------->| |<-------------+
| | Initialize | |
| +------ | |----------+ |
| | +---------------+ | |
| | | |
| V V |
+---------------+ +---------------+
| |---------------------->| |
| Master | | Backup |
| |<-------------------| |
+---------------+ +---------------+
1)Initialize
接收到Startup事件,进入Initialize ,处于Initialize 时的处理:
如果路由器优先级为255,则
1)发送advertisement报文
2)如果被保护的虚拟ipvx地址是ipv4地址,则发送免费ARP请求报文;如果是ipv6地址,则发送ND Neighbor Advertisement报文
3)设置Adver_Timer值为Advertisement_Interval
4)状态变为Master
如果路由器的优先级不是255,则
1)Set Master_Adver_Interval to Advertisement_Interval
2) Set the Master_Down_Timer to Master_Down_Interval
3)状态变为Backup
2)backup
1)(ipv4)禁止响应虚拟ipv4地址的ARP请求;(ipv6)禁止响应ND Neighbor Solicitation messages,禁止发送ND Router Advertisement message
2)必须丢弃dmac为虚拟mac地址的报文
3)禁止接收dip为虚拟ipvX地址的报文
4)接收到shutdown消息,则取消Master_Down_Timer,进入Initialize
5)如果Master_Down_Timer 超时,
1)发送advertisement报文
2)如果被保护的虚拟ipvx地址是ipv4地址,则发送免费ARP请求报文;如果是ipv6地址,则发送ND Neighbor Advertisement报文
3)设置Adver_Timer值为Advertisement_Interval
4)状态变为Master
6)接收到advertisement报文
1)如果报文的priority=0,则
Set the Master_Down_Timer to Skew_Time
2)如果Preemtp_mode为false,或则报文的优先级大于或等于自己的优先级
Set Master_Adver_Interval to Adver Interval contained in the ADVERTISEMENT
Recompute the Master_Down_Interval
Reset the Master_Down_Timer to Master_Down_Interval
3)如果Preemtp_mode为true,且报文的优先级小于自己的优先级
丢弃advertisement报文
3)Master
1)(ipv4)必须响应虚拟ipv4地址的ARP请求;(ipv6)必须响应ND Neighbor Solicitation messages,必须发送ND Router Advertisement message
2)必须转发dmac为虚拟mac地址的报文
3)必须接收dip为虚拟ipvX地址的报文,如果是ip地址拥有者或Accept_mode为真,否则丢弃报文
4)接收到shutdown消息,则取消Master_Down_Timer,发送priority=0的advertise报文,进入Initialize状态
5)如果Adver_Timer 超时,则发送ADVERTISEMENT,并Reset the Adver_Timer to Advertisement_Interval
6)接收到ADVERTISEMENT, 则
如果报文的priority=0,则发送ADVERTISEMENT,并Reset the Adver_Timer to Advertisement_Interval
如果报文的priority大于本地的priority,或者报文的priority等于本地的priority,且主ipvx地址大于本地的主ipvx地址,则
1)Cancel Adver_Timer
2)Set Master_Adver_Interval to Adver Interval contained in the ADVERTISEMENT
3)Recompute the Skew_Time
4) Recompute the Master_Down_Interval
5)Set Master_Down_Timer to Master_Down_Interval
6)Transition to the {Backup} state
其他,则丢弃ADVERTISEMENT