当前位置: 首页 > news >正文

VGMP(VRRP Group Management Protocol)VRRP组管理协议

在前面的章节中我们介绍了VRRP虚拟路由冗余协议,介绍了VRRP是如何解决单点故障相关问题的,但在一些场景中VRRP存在一些问题,此时需要我们的VGMP,VRRP组管理协议来帮助解决。

如果需要复习VRRP相关知识点可浏览以下链接

VRRP(Virtual Router Redundancy Protocol)虚拟路由冗余协议

一、VRRP中存在的问题

         在学习VGMP之前,我们得先知道为什么需要这个协议,如图1-1所示,两台设备的下行接口加入VRRP备份组1,上行接 口加入VRRP备份组2。正常情况下,R1的VRRP备份组1的状态为 Master,VRRP备份组2的状态为Master,所以R1是VRRP备份组1中的 Master路由器,也是VRRP备份组2的Master路由器。这样由我们上面讲 的VRRP原理可知,内外网之间的业务报文都会通过R1转发。

        当R1的GE1/0/1接口故障时,VRRP备份组1发生状态切换:R1的 VRRP备份组1状态切换成Initialize,R2的VRRP备份组1状态切换成 Master。这样R2成为VRRP备份组1中的Master路由器,并向LSW1发送 免费ARP报文,刷新LSW1中的MAC表项。这时PC1访问PC2的报文就通 过R2转发了。但是由于R1与LSW2之间的链路是正常的,所以VRRP备份组2的状态是不变的,R1仍然是VRRP备份组2中的Master路由器,而 R2仍是VRRP备份组2中的Backup路由器。因此PC2返回给PC1的回程报 文依然会转发给R1,而R1的下行接口GE1/0/1是故障的,所以R1只能 丢弃此回程报文,这就导致了业务流量的中断。

        看完这个过程后,读者们一定会发现VRRP问题的所在了:VRRP备 份组之间是相互独立的,当一台设备上出现多个VRRP备份组时,它们 之间的状态无法同步。

        在解决这个VRRP问题的方法上,华为防火墙与路由器、交换机等 普通网络设备走上了一条截然不同的道路。我们下面会重点介绍华为 防火墙是如何解决这个问题的。

        图1-1 多个VRRP共同运行

二、VGMP的产生解决了VRRP的问题

        为了解决多个 VRRP 备份组状态不一致的问题,华为防火墙引入 VGMP(VRRP Group Management Protocol,VRRP组管理协议)来实 现对VRRP备份组的统一管理,保证多个VRRP备份组状态的一致性。我 们将防火墙上的所有VRRP备份组都加入到一个VGMP组中,由VGMP组 来集中监控并管理所有的VRRP备份组状态。如果VGMP组检测到其中 一个VRRP备份组的状态变化,则VGMP组会控制组中的所有VRRP备份 组统一进行状态切换,保证各VRRP备份组状态的一致性。

        VGMP组有状态和优先级两个基本属性,并且有三条基本运行原则。

  • VGMP组的状态决定了组内VRRP备份组的状态,也决定了防火墙 的主备状态。
  • 两台防火墙的 VGMP 组状态是通过相互比较优先级来决定的。 优 先 级 高 的 VGMP 组 状 态 为 Active , 优 先 级 低 的 VGMP 组 状 态 为 Standby。
  • VGMP 组会根据组内 VRRP 备份组的状态变化来更新自己的优先 级。一个VRRP备份组的状态变成Initialize,VGMP组的优先级就会降低 2。

        了解并熟记了VGMP组运行的基本原则后,我们一起来看一下 VGMP协议如何解决VRRP备份组状态不一致的问题。

        如图1-2所示,我们在FW1上将VRRP备份组1和VRRP备份组2都加 入状态为Active的VGMP组,在FW2上将VRRP备份组1和VRRP备份组2 都加入状态为Standby的VGMP组。由于VGMP组的状态决定了组内 VRRP备份组的状态,所以FW1上VRRP备份组1和2的状态都为Active, FW2上VRRP备份组1和2的状态都为Standby。这样FW1就是VRRP备份 组1和VRRP备份组2中的Active路由器(也就是两台防火墙中的主用设备),而FW2就是它们的Standby路由器(也就是两台防火墙中的备用 设备),所以上下行的业务流量都会被引导到主用设备FW1转发。

图1-2 VGMP保证VRRP状态统一切换

说明

两台防火墙之间需要心跳线来交互VGMP协议的相关报文。

上面我们在讲解VRRP时提到的状态都是“Master”和 “Standby”,这里为什么都变成“Active”和“Standby”了呢?

答:防火墙在USG6000系列中统一将双机热备的状态(原为 “Master”和“Slave”)和VRRP的状态(原为“Master”和“Standby”)修改 为“Active”和“Standby”。所以当你在某些文档中看到多种不统一的状态 说法时请不要奇怪,按本文描述的“Active”和“Standby”理解即可。

如图1-2所示,当FW1的接口故障时,VGMP组控制VRRP备份组 状态统一切换的过程如下。

(1)当FW1的GE1/0/1接口故障时,FW1上的VRRP备份组1发生 状态切换(由Active切换成Initialize)。

(2)FW1的VGMP组感知到这一故障后,会降低自身的优先级, 然后与FW2的VGMP组比较优先级,重新协商主备状态。

(3)协商后,FW1的VGMP组状态由Active切换成Standby,FW2 的VGMP组状态由Standby切换成Active。

(4)同时,由于VGMP组的状态决定了组内VRRP备份组的状态, 所以FW1的VGMP组会强制组内的VRRP备份组2由Active切换成Standby 状态,FW2的VGMP组也会强制组内的VRRP备份组1和2由Standby切换 成Active状态。

这样FW2就成为了VRRP备份组1和VRRP备份组2中的Active路由 器,也就成了为两台防火墙中的主用设备;而FW1则成为了VRRP备份 组1和VRRP备份组2中的Standby路由器,也就成为了两台防火墙中的 备用设备。

(5)FW2会分别向LSW1和LSW2发送免费ARP,更新它们的MAC 转发表,使PC1访问PC2的上行报文和回程报文都转发到FW2。这样就 完成了VRRP备份组状态的统一切换,并且保证业务流量不会中断。

三、VGMP的报文结构

        看到以上内容大家应该明白了,VGMP不仅完成了VRRP备份组的 统一管理,还借势取代 VRRP 接管了对防火墙主备状态的管理权。那 么这时问题来了:两台防火墙的VGMP组之间是如何传递状态和优先级 信息的?

        在前面的VRRP 工作原理中讲到两台路由器的VRRP备份组 是通过VRRP报文来传递状态和优先级信息的。那么两台防火墙的VGMP组还是通过VRRP报文来传递状态和优先级信息的吗?这当然不 太可能,新的领导自然有新的方法。

        在双机热备中,两台防火墙的VGMP组是通过VGMP报文来传递状 态和优先级信息的。VGMP是华为的私有协议,它为了实现防火墙双机 热备功能对VRRP报文进行了扩展和修改,并衍生出多种使用VGMP报 文头封装的报文。理解VGMP报文和报文头是理解VGMP状态协商和切 换的基础,所以让我们先看一下VGMP报文的结构。

        如图1-3所示,从VGMP报文封装顺序中我们可以发现,VGMP报 文是根植于VRRP报文的,是由VRRP报文头封装的。但这个VRRP报文 头并不是标准的VRRP报文头,是经过华为扩展和修改的新VRRP报文 头,具体有以下几点变化。

        图1-3 VGMP报文结构

  • 标准VRRP 报文头的“Type”字段只有“1”一个取值,新VRRP报文 头中增加了“2”取值。也就是说如果Type=1,就是标准的VRRP报文 头;如果Type=2,就是我们修改后的新VRRP报文头。
  • 标准VRRP 报文头的“Virtual Rtr ID”字段代表VRRP备份组ID,而 修改后的新VRRP报文头“Virtual Rtr ID”取值固定为“0”。
  • 修改后的新VRRP报文头中去掉了标准VRRP报文的“IPAddress”字 段。
  • 标准VRRP 报文头中的“Priority”字段在新VRRP报文头中被修改成 “Type2”字段。

当Type2=1 时,报文封装成心跳链路探测报文。心跳链路探测 报文用于检测对端设备的心跳口能否正常接收本端设备的报文,以确 定是否有心跳口可以使用。

当Type2=5 时,报文封装成一致性检查报文。一致性检查报文 用于检测双机热备状态下的两台防火墙的双机热备和策略配置是否一 致。

当 Type2=2 时,VRRP 报文才会进一步封装 VGMP 报文头,并 根据 VGMP报文头中“vType”字段继续分成以下三种报文。

        VGMP报文(VGMP Hello 报文)。VGMP Hello报文用于两台防 火墙间的VGMP组协商主备状态。

        HRP 心跳报文(HRP Hello 报文)。HRP 心跳报文用于探测对 端的VGMP 组是否处于工作状态。状态为Active的VGMP组会每隔一段 时间(缺省为1s)向对端的VGMP组发送HRP心跳报文,用来通知本端 的VGMP组状态和优先级。如果状态为Standby的VGMP在三个周期内没 有收到对端发送的HRP心跳报文,则认为对端VGMP组故障,会将自身 状态切换成Active。

        HRP 数据报文。在VGMP 报文头后增加HRP 报文头,才能封装 成HRP 数据报文。HRP 数据报文用于主备设备之间的数据备份,包括 命令行配置的备份和各种状态信息的备份。

        看到这里大家是否会问,在防火墙双机热备中新 VRRP 报文头是 用来封装 VGMP报文的,那标准的VRRP报文还存在吗,它还有什么作 用?答案是标准VRRP报文仍旧存在,它还是用于 VRRP 备份组内部通 信。只是其中的优先级字段(Priority)已经为固定值,无法配置,所 以标准VRRP报文实际上已名存实亡。优先级字段失去作用导致标准 VRRP报文已经无法控制VRRP备份组的状态协商了,只能在主备防火墙 之间通告一下VRRP备份组的状态和虚拟IP地址了。这跟宪政体制下的 “皇帝”的作用相似,保留名号,但没有管理国家的权利。

        VGMP想要接管防火墙和VRRP备份组的状态管理,就意味着VGMP 报文中必须要包含VGMP组状态和优先级信息。我们再看一下VGMP报 文头的结构。

  • “Mode”字段表示是请求报文还是应答报文。
  • “vgmpID”字段表示VGMP 组是Active 组还是Standby组。
  • “vPriority”字段表示VGMP 组的优先级。

        另外,VGMP报文的“data”中包含VGMP组的状态信息。这两点就 表明VGMP协议具备了接替标准VRRP协议管理VRRP备份组和防火墙状 态的物质基础。

        综上所述,VGMP协议修改了标准的VRRP报文头并定义好了各种 使用VGMP报文头封装的报文,那么这些报文是通过什么渠道在两台防 火墙之间传递的呢?上面我们讲到两台防火墙通过备份通道(心跳 线)来传递备份数据,可见HRP数据报文是通过备份通道传输的。实际 上以上所讲的各种VGMP报文(除标准VRRP报文)都是通过备份通道 传输的。

        另外USG6000系列防火墙和USG2000/5000系列防火墙V300R001 版本还支持将以上所讲的各种VGMP和HRP报文(除标准VRRP报文)封 装成UDP报文,具体结构如图1-4所示。

图1-4 使用UDP封装的VGMP报文

        

        那么使用VRRP封装的VGMP报文和使用UDP封装的VGMP报文有什 么区别?前者是组播报文,不能跨越网段传输,不受安全策略控制; 后者是单播报文,只要路由可达就可以跨越网段传输,但是受安全策 略控制。具体来说就是如果是组播报文,那么两台防火墙的心跳口之 间就必须直连或通过二层交换机相连,但是不需要配置安全策略;如 果是单播报文,那么两台防火墙的心跳口之间可以通过路由器这种三 层设备相连,但是需要配置安全策略允许报文在 Local 区域与心跳口所 在安全区域间双向通过。另外使用业务接口做心跳口时也必须使用 UDP封装VGMP报文。

四、VGMP组的缺省状态

        在VGMP 的产生解决了 VRRP 的问题中我们已经简单介绍 了 VGMP 是如何保证VRRP备份组状态统一切换的,实际的切换过程和 报文交互要更复杂一些。在详细介绍VGMP组的状态形成和切换过程之 前,我们先介绍下防火墙VGMP组的缺省状态和优先级。

        如图1-5所示,每台防火墙提供两个VGMP组:Active组和Standby 组。缺省情况下,Active组的优先级为65001,状态为Active;Standby 组的优先级为65000,状态为Standby。主备备份情况下,主用设备启 用 Active 组,所有成员(例如 VRRP 备份组)加入Active组;备用设 备启用Standby组,所有成员加入Standby组。负载分担情况下,两台 设备都启用 Active 组和 Standby 组,每台设备上的所有成员分别加入Active 组和Standby组。FW1的Active组和FW2的Standby组形成一组 “主备”,FW2的Active组和FW1的Standby组形成一组“主备”,两台防火 墙互为“主备”,形成负载分担。

        图1-5 防火墙的VGMP组 9.2.7 主备备份双机热备状态形成过程

http://www.dtcms.com/a/315312.html

相关文章:

  • 知识蒸馏 - 基于KL散度的知识蒸馏 HelloWorld 示例 KL散度公式变化
  • Demo-LangGraph构建Agent
  • Assistant API——构建基于大语言模型的智能体应用
  • 通义万相国际版wan2.2开源第6天:主题运动
  • 二值图针对内部轮廓腐蚀膨胀
  • 李宏毅深度学习教程 第10-11章 自监督学习self-supervised learning+自编码器
  • FFmpeg02:常用命令实战
  • 【LeetCode 热题 100】215. 数组中的第K个最大元素——(解法一)快速选择
  • CentOS卸载、安装MySQL8(yum操作)
  • 肾上腺疾病AI诊疗一体化系统应用方向探析
  • 智能图书馆管理系统开发实战系列(七):CMake构建系统与持续集成
  • 【Node.js从 0 到 1:入门实战与项目驱动】1.2 Node.js 的核心优势(非阻塞 I/O、事件驱动、单线程模型)
  • 比起登天,孙宇晨更需要安稳着陆
  • 飞算 JavaAI:为软件安全上锁的智能守护者
  • Antlr学习笔记 02、使用antlr4实现简易版计算器
  • 【Z字形变换】
  • 离线Docker项目移植全攻略
  • 明远智睿T113-i核心板:工业设备制造领域成本控制的破局者
  • NX982NX984美光固态闪存NX992NY102
  • UVa1480/LA5034 Jewel
  • webm 读取解析
  • Linux 系统重置用户密码指南
  • go安装gin
  • JMeter 性能测试工具使用教程
  • 【网络运维】Linux:逻辑卷管理
  • Spring @Component注解全解析
  • 计算机网络:子网掩码在路由转发中的关键作用
  • css的选择器
  • 虚拟机中查看和修改文件权限
  • MoonBit Pearls Vol.04:用MoonBit 探索协同式编程