参考文章https://blog.csdn.net/u013920085/article/details/21184143
VRRP(Virtual Router Redundancy Protocol)即和可靠,它是一种容错协议,它保证当用户设备的下一跳路由器失效时,可以及时的由另一台路由器来替代,从而保持通讯的连续和可靠。跟TCP的协议号为6,UDP的协议号为17,ICMP的协议号为1一样,VRRP协议一样需要协议号,为112。
VRRP通过交互报文的方法将多台路由器模拟成一台虚拟路由器(该虚拟路由器可以有多个虚拟IP地址),网络上的主机与虚拟路由器进行通讯。一旦VRRP组中的某台物理路由器失效,其它路由器自动接替工作。
1、VRRP相关概念
(1) VRRP路由器
运行VRRP协议的路由器
(2) VRRP组(VRID)
由多个VRRP路由器组成,属于同一VRRP组的VRRP路由器相互交换信息
(3) 虚拟路由器
对于每一个VRRP组,抽象出来的一个逻辑路由器,该路由器充当网络用户的网关(下一跳)
(4) 虚拟IP地址、MAC地址
用于标识虚拟的路由器,该地址实际上就是用户的默认网关
(5) Master、Backup路由器
Master路由器就是在VRRP组实际转发数据包的路由器,Backup路由器就是在VRRP组中处于监听状态的路由器。一旦Master路由器出现故障,Backup路由器就开始接替工作
2、VRRP的3种状态
(1) 初始化状态
路由器刚刚启动时进入此状态,通过VRRP报文交换数据后进入其它状态
(2) 活动状态(Master)
VRRP组中的路由器通过VRRP报文交换后确定的当前转发数据包的一种状态
(3) 备份状态(Backup)
VRRP组中的路由器通过VRRP报文交换后确定处于监听的一种状态
3、VRRP报文
VRRP报文是一种多播报文,由Master路由器发出来通告它的存在,使用VRRP报文可以检测虚拟路由器的各种参数,用于主路由器的选择。VRRP报文是封装在IP报文中,通过组播的方式传送。也就是说VRRP协议跟ICMP协议一样,工作在第三层(路由层),它是不具有端口的说法的。
(1) Version:VRRP协议版本号
(2) Type:指明VRRP报文类型,RFC3768只定义了一种VRRP报文,即VRRP通告报文,所以该字段总为1(若收到的VPPR通告报文的该字段的类型为非1则会被丢弃)
(3) Virtual Rtr ID:即上面讲的大VRID。一个VRID唯一标识了一个虚拟路由器,取值范围为[1,255]。(所以一台路由器的接口最多可以运行255个VRRP组)
(4) Priority:优先级。虚拟路由器中用该字段来决定Master路由器和Backup路由器,值越大表明优先级越高,取值为[1,255],缺省值为100。假设虚拟路由器的IP地址跟VRRP组中某台路由器IP地址相同,那么该路由器的发出的VRRP报文的该字段总为255,即使人为指定为其他值也不受影响。若此字段为0表示这是Master路由器出现故障发送的VRRP通告报文,当Backup路由器收到此通告报文后,会等待Skew time时间,然后将自己切换为Master路由器。
(5) Count IP Addrs:VRRP通告报文中包含的IP数目,即被一个VRRP虚拟路由器所分配的IP地址的数量。
(6) Auth Type:认证类型字段,一个虚拟路由器只能使用一种认证类型,若Backup路由器收到的通告报文段中认证类型字段是未知或者和本地配置不匹配,则将该数据包丢弃。
认证类型字段的定义:
0表示无认证
1表示保留,向前一个版本的RFC2338提供兼容性
2表示保留,向前一个版本的RFC2338提供兼容性
(7) Adver Int:Mater路由器向外发送VRRP通告报文的时间间隔,以秒为单位,取值范围是[1,255],缺省为1
(8)Checksum:整个VRRP报文的校验和
(9) IP Address:VRRP虚拟路由器的虚拟IP地址(可配置多个)
(10) Authentication Data:为了向RFC2338兼容,在实际的封装时,全置为0.,接收方会忽略此字段
4、工作原理
如图,三台物理路由设备使用VRRP通告报文发现对方,并生成虚拟路由器6.6.6.6,比较各自的优先级和IP地址,它们只有一台成为主机路由,另外两台为备用路由器。用户的网关为虚拟出来的路由器,在VRRP组中主机路由器出现故障后,根据优先级,主机路由由到另外两台物理路由设备之一。
下面结合VRRP路由器的三种状态机分析VRRP组的工作流程:
(1) 初始状态(Initialize)
配置好VRRP后,VRRP等待一个开始事件,即为初始状态。初始状态会依次执行:
a. 若本地优先级为255,即自身是IP拥有者路由器,它为主路由器,那么:
- 发送VRRP通告报文
- 广播免费ARP请求报文,内部封装的请求IP地址是虚拟IP地址(可以多个,对应发多个免费ARP请求报文),普通ARP请求报文的MAC地址用于存放目标机器返回的MAC地址,因为是免费ARP报文,所以该字段是本地的MAC地址。(免费ARP请求的目的是:①广播,告诉整个广播域,目前这个IP对应的MAC地址是什么;②查看广播域内有没有别的主机使用自己的IP,如果有,则提示IP冲突)
3)启动Advertisement定时器,产生Advertisement_Interval时间间隔,本路由器按照该参数定义的时间间隔来发送VRRP通告报文,默认为1S。
4)本地VRRP进程将自身切换为Master路由器。
b. 若本地优先级不是255,那么: - 启动Master Down定时器产生Master_Down_Timer时间间隔(计时器超时Backup路由器会宣布主路由器宕机)
2)本地VRRP进程将自己切换为Backup路由器
(2) 备份路由器状态(Backup)
备份路由器是为了监控Master路由器的状态:
1)不响应对虚拟IP地址的ARP免费请求报文、丢弃帧头目的MAC地址是虚拟Mac地址的帧、丢弃IP头中目的IP地址是虚拟IP地址的包
2)在Master_Down_Timer时间间隔内若接收到Master路由器发出的VRRP通告报文:
① 该VRRP通告报文的priority字段为0时证明主路由器出现故障,那么本Backup路由器将Master_Down_Timer置为Skew_Time,Skew_Time后将自己置为Master操作;
② 该VRRP通告报文不为0且大于或等于本地优先级,那么本地重置Master_Down_Timer
③ 该VRRP通告报文不为0且小于本地优先级,若开启抢占模式,那么该Backup路由器等待指定的抢占延迟时间后将自己切换为Master路由器,执行Master路由器的所有动作;若没有开启抢占模式,本地路由器保持Backup状态。
若超时没有接收Master路由器发出的VRRP通告报文证明主机路由宕机,那么需要将本地切换为Master路由器等操作。
3)VRRP进程收到了一个shutdown事件,取消Adver_Timer计时器,切换为初始状态
(3) 主路由器状态状态(Master)
当路由器处于Master状态时,进行:
- 响应对虚拟IP地址的ARP请求
- 转发目的MAC地址是虚拟MAC地址的数据帧
- 拒绝目的IP地址是虚拟IP地址的数据包,若Master路由器是虚拟IP地址拥有者则除外
- 若Adver_Timer计时器超时或收到了一个VRRP报文且其优先级为0,发送一个VRRP通告报文和重置Adver_Timer计时器
- 开启抢占模式后,如果收到了一个VRRP报文且其优先级高于本地优先级,或者收到的VRRP报文优先级等于本地优先级但是主IP地址高于本地的主IP地址,取消Adver_Timer计时器和 设置Master_Down_Timer计时器为Master_Down_Interval,切换为Backup状态
- VRRP进程收到了一个shutdown事件,取消Adver_Timer计时器,发送一个优先级字段置零的VRRP通告报文,切换为初始状态