基本概念
| 名称 | 备注 |
|---|---|
| VRRP路由器 | 配置了VRRP接口的路由器,需要协同的接口必须属于同一个广播域 |
| VRRP组及VRID | 使用VRID进行标识,属于同一个VRRP组的路由器之间交互VRRP协议报文并产生一台虚拟路由器。一个VRRP组中只能出现一台master路由器 |
| 虚拟路由器、虚拟IP地址、虚拟MAC地址 | 虚拟IP地址由管理员在配置VRRP时指定,一台虚拟路由器可以有一个或多个IP地址。而虚拟MAC地址的格式是“0000-5e99-01xx”,其中xx为VRID,例如当VRID为1时,则虚拟MAC地址为“0000-5e00-0101”。一个VRRP组只会产生一台虚拟路由器。实际上虚拟路由器接收及转发数据包的路由器是master路由器 |
| master路由器、backup路由器 | master路由器在一个VRRP组中承担报文转发任务。每一个VRRP组中,只有master路由器才会响应针对虚拟IP地址的ARP Request。master路由器会以一定的时间间隔周期性地发送VRRP报文,以便通知同一个VRRP组中的backup路由器关于自己的存活情况。优先级(Priority)越大则路由器越有可能成为master路由器,如果优先级相同,则接口IP地址越大的路由器越优先 |
| 抢占模式(Preempt Mode) | 如果backup路由器激活了抢占功能,那么当它发现master路由器的优先级比自己更低时,它将立即切换至master状态,如果backup路由器没有激活抢占功能,那么即使它发现master路由器的优先级比自己更低,也只能保持backup状态,直到master路由器失效,默认激活 |
报文格式
VRRP只定义一种报文格式,通告(Advertisement)报文,它被封装在IP报文中,IP头部的协议号字段值为112,报文的目的IP地址是组播224.0.0.18
| 字段 | 描述 |
|---|---|
| 版本(Version) | 对于VRRPv2来说,值为2 |
| 类型(Type) | VRRP只定义了通告报文,值为1 |
| 虚拟路由器ID(VRID) | 虚拟路由器的标识符,取值范围是1-255,属于同一个VRRP组的路由器需使用相同的VRID |
| 优先级(Priority) | 取值范围0-255,该值越大,则VRRP优先级越高,路由器也就越有可能成为master。缺省为100 |
| IP地址个数(Count IP Address) | VRRP组中虚拟IP地址的个数。这个字段的值指示了该报文后续的“IP地址”字段个数 |
| 认证类型(Authentication Type) | VRRP报文的认证类型。当该字段为0时,表示无认证;当该字段为1时,表示明文认证;当该字段为2时,表示MD5认证; |
| 通告间隙(Advertisement Interval) | VRRP报文的发送时间间隔(单位为秒),缺省时,间隔为1s |
| 校验和(Checksum) | 校验和 |
| IP地址(IP Address) | VRRP虚拟IP地址 |
| 认证数据(Authentication Data) | VRRP认证数据,当VRRP明文认证或MD5认证被激活时,该字段则填充相应的数据 |
状态
| 状态 | 描述 |
|---|---|
| Initialize(初始状态) | 在接口配置VRRP后,如果该接口是Down(例如接口被关闭或者没有连接任何线缆),那么该接口的VRRP状态将会停滞在Initialize。当接口UP之后,如果其VRRP优先级为255(这种情况发生在该接口的实际IP地址是VRRP虚拟IP地址的情况),那么接口的VRRP状态将由Initialize切换到master;而如果接口的VRRP优先级不为255,则进入backup状态 |
| Backup(备份状态) | 不会参与数据转发工作,但会监控当前master路由器的状态。对关于VRRP虚拟IP地址的ARP请求不予回应;丢弃目的MAC地址为VRRP虚拟MAC地址的数据帧;不接收目的IP地址为VRRP虚拟IP地址的数据包;实时侦听master路由器发送的VRRP报文; |
| Master(主状态) | 承担数据转发任务。当收到关于虚拟IP地址的ARP请求时,以虚拟MAC地址进行回应;转发目的MAC地址为虚拟MAC地址的报文;周期性发送VRRP报文,时间间隔缺省为1s; |
Backup(备份状态)收到一个VRRP报文时候:
- 若该VRRP报文的优先级为0(这可能意味着当前master路由器希望主动放弃master状态),则将Master_Down_Timer设置为Skew_Time
- 若该VRRP报文的优先级不为0,则当抢占模式未激活时,或者当VRRP报文中的优先级大于或等于本接口的优先级时,将Master_Adver_Interval设置为VRRP报文中的Advertisement Interval,并重置Master_Down_Timer,将Master_Down_Timer的时间设置为Master_Down_Interval
- 若该VRRP报文的优先级不为0,则当抢占模式激活并且VRRP报文中的优先级小于本接口优先级时,忽略该VRRP报文并且立即切换到master状态
Master(主状态)收到一个VRRP报文时候:
- 若该VRRP报文的优先级为0,则继续发送自己的报文
- 若该VRRP报文的优先级不为0,并且比本接口的VRRP优先级值更大,或者VRRP优先级相等但是VRRP报文的源IP地址比本接口IP地址更大,则将接口的状态切换到backup
- 若该VRRP报文的优先级不为0,并且比本接口的VRRP优先级值更小,则忽略该VRRP报文
| 名称 | 描述 |
|---|---|
| Master_Adver_Interval | master路由器所发送的VRRP报文中,Advertisement Interval字段所填充的值,缺省时该值为1s。该时间间隔即master路由器周期性发送VRRP报文的间隔 |
| Master_Down_Timer | backup路由器将持续接收来自当前master路由器的VRRP报文,每当报文到达时,backup路由器上的Master_Down_Timer会被重置。如果一定时间内没有收到来自master路由器的VRRP报文并导致Master_Down_Timer超时,那么backup路由器将认为master路由器已经失效;当Master_Down_Timer超时,将接口的状态切换到master、开始从接口发送自己的VRRP报文、从接口发送一个免费ARP Request(Gratuitous ARP Request)广播帧,该ARP Request携带了VRRP虚拟IP地址及虚拟MAC地址的绑定信息,用于刷新该接口所直连的广播域内的设备的ARP表和MAC地址表 |
| Master_Down_Interval | 一定时间没有收到来自master路由器的VRRP报文后,backup路由器可以认为当前master路由器已经失效。Master_Down_Interval=(3*Master_Adver_Interval)+Skew_Time |
| Skew_Time | 一个偏移时间,Skew_Time=((256-VRRP优先级)*Master_Adver_Interva)/256 |
master路由器的选举
在一个VRRP组中,正常情况下只能存在一台master路由器。VRRP根据优先级和IP地址来决定哪台路由器充当master。优先级的范围是0-255,优先级越大路由器越有可能成为master,其中0和255是两个特殊的优先级,不能被直接配置。当路由器的接口IP地址与VRRP虚拟IP相同时,它的优先级将自动变成最大值255,此时该路由器称为IP地址拥有者(IP Address Owner)。0是出现在master路由器主动放弃master角色时,例如当接口的VRRP配置被手工删除时,该master路由器会立即发送一个优先级为0的VRRP报文,用来通知网络中的backup路由器。
当一个激活了VRRP的接口UP之后,如果接口的VRRP优先级为255,那么其VRRP状态将直接从Initialize切换到master,而如果接口的状态优先级不为255,则首先切换到backup状态,然后再视竞争结果决定是否能够切换到master状态。
如果在同一个广播域内的同一个VRRP组内出现两台master路由器,那么它们将比较自己与对方的优先级,如果优先级相等,则比较接口IP地址,更大的胜出。
处于master状态的路由器会周期性发送VRRP报文,并在报文中描述自己的优先级、IP地址等信息。同一个广播域中、同一个VRRP组的backup路由器会侦听这些报文。如果此时网络中新出现一台backup路由器(其优先级高于当前master路由器),激活了抢占功能,那么它会忽略收到的VRRP报文,并且切换到master状态,同时发送自己的VRRP报文并在报文中描述其优先级等信息,而此前的master路由器在收到了该VRRP报文后,则切换到backup报文。
工作过程
- 假设AR1率先启动,AR1的G0/0/0口的VRRP首先进入Initialize状态,当接口UP后,其VRRP状态将从Initialize切换到Backup,并且在Master_Down_Timer超时后切换到master状态,AR1将成为master路由器。随后它会立即发送一个免费的ARP报文,PC1在收到这个ARP报文后,就绑定192.168.1.254和虚拟MAC地址的对应关系,交换机也会将虚拟MAC地址与G0/0/1口绑定MAC表项。此后AR1每1s周期性发送VRRP报文。
- AR2开始工作后,AR2的G0/0/0口将从Initialize状态切换到Backup状态,并且收到AR1发来的VRRP报文,从这些报文中得知自己的优先级小于AR1的优先级,因此它还是保持Backup状态
- 假设后面有外部网络,现在PC1要发送数据给外部网络,由于目的IP地址不在本地网段中,因此它将数据包发往自己的默认网关,也就是192.168.1.254,查询ARP表后,封装数据帧发出,到交换机后,交换机查询MAC表项然后从MAC地址对应的接口发出给AR1,最后AR1数据转发到外部网络。
- 当AR1与交换机之间的链路故障时,AR2无法收到AR1发送的VRRP报文,等待Master_Down_Timer超时后,AR2将VRRP状态切换到Master,然后立即发送一个免费的ARP报文,如此一来,交换机的MAC表项被刷新,虚拟MAC地址被关联到G0/0/2口上,PC1发往目的MAC地址的数据帧被引导至AR2。
- 接下来让一个AR1与交换机之间的链路从故障中恢复,AR1的G0/0/0口的VRRP状态将从Initialize切换到Backup,同时它将收到AR2发送的VRRP报文,发现自己的优先级比AR2的优先级大,此时如果AR1激活了抢占功能(缺省激活,抢占的延迟时间为0s,也就是立即执行抢占),那么它将忽略AR2所发送的VRRP报文,并且将VRRP状态切换到master,同时从G0/0/0口发出一个免费的ARP报文。如果AR1没有激活抢占功能,那么它将保持Backup状态
- AR2收到AR1发送的VRRP报文后,发现自己的优先级比对方更低,因此将Master状态切换到Backup状态
//创建一个VRID为1的VRRP组,虚拟IP为192.168.1.254
vrrp vrid 1 virtual-ip 192.168.1.254
//设置VRID为1的VRRP优先级120,缺省100
vrrp vrid 1 priority 120
//抢占的延时时间设置为60s
vrrp vrid 1 preempt-mode timer delay 60
//监视G0/0/1口,如果该接口状态变为Down(无论是协议状态还是物理状态)
//那么VRRP优先级将被立即减去30
vrrp vrid 1 track interface G0/0/1 reduced 30
VRRP+MSTP典型组网方案
//LSW1的配置
#
vlan batch 10 20
#
stp region-configuration
region-name hcnp
instance 10 vlan 10
instance 20 vlan 20
active region-configuration
#
interface Ethernet0/0/1
port link-type access
port default vlan 10
#
interface Ethernet0/0/2
port link-type access
port default vlan 20
#
interface GigabitEthernet0/0/1
port link-type trunk
port trunk allow-pass vlan 10 20
#
interface GigabitEthernet0/0/2
port link-type trunk
port trunk allow-pass vlan 10 20
#
//LSW2的配置
vlan batch 10 20
#
stp instance 10 root primary
stp instance 20 root secondary
#
stp region-configuration
region-name hcnp
instance 10 vlan 10
instance 20 vlan 20
active region-configuration
#
interface Vlanif10
ip address 192.168.10.253 255.255.255.0
vrrp vrid 10 virtual-ip 192.168.10.254
vrrp vrid 10 priority 120
#
interface Vlanif20
ip address 192.168.20.253 255.255.255.0
vrrp vrid 20 virtual-ip 192.168.20.254
#
interface Eth-Trunk0
port link-type trunk
port trunk allow-pass vlan 10 20
#
interface GigabitEthernet0/0/1
eth-trunk 0
#
interface GigabitEthernet0/0/2
eth-trunk 0
#
interface GigabitEthernet0/0/3
port link-type trunk
port trunk allow-pass vlan 10 20
#
//LSW3的配置
#
vlan batch 10 20
#
stp instance 10 root secondary
stp instance 20 root primary
#
stp region-configuration
region-name hcnp
instance 10 vlan 10
instance 20 vlan 20
active region-configuration
#
interface Vlanif10
ip address 192.168.10.252 255.255.255.0
vrrp vrid 10 virtual-ip 192.168.10.254
#
interface Vlanif20
ip address 192.168.20.252 255.255.255.0
vrrp vrid 20 virtual-ip 192.168.20.254
vrrp vrid 20 priority 120
#
interface Eth-Trunk0
port link-type trunk
port trunk allow-pass vlan 10 20
#
interface GigabitEthernet0/0/1
eth-trunk 0
#
interface GigabitEthernet0/0/2
eth-trunk 0
#
interface GigabitEthernet0/0/3
port link-type trunk
port trunk allow-pass vlan 10 20
#