写点什么

带你了解 VXLAN 网络中报文的转发机制

发布于: 2021 年 03 月 12 日

​​​​​​摘要:本节以集中式 VXLAN 网络(手工方式建立 VXLAN 隧道)为例,分别介绍相同子网内、不同子网间是如何进行通信的。


本节以集中式 VXLAN 网络(手工方式建立 VXLAN 隧道)为例,分别介绍相同子网内、不同子网间是如何进行通信的。在了解转发机制的前提下,我们先来看下 VXLAN 网关有哪些种类。

VXLAN 二层网关与三层网关


和 VLAN 类似,不同 VNI 之间的主机,以及 VXLAN 网络和非 VXLAN 网络中的主机不能直接相互通信。为了满足这些通信需求,VXLAN 引入了 VXLAN 网关的概念。VXLAN 网关分为二层网关和三层网关:


  • VXLAN 二层网关:用于终端接入 VXLAN 网络,也可用于同一 VXLAN 网络的子网通信。

  • VXLAN 三层网关:用于 VXLAN 网络中跨子网通信以及访问外部网络。


VXLAN 集中式网关与分布式网关


根据三层网关部署方式的不同,VXLAN 三层网关又可以分为集中式网关和分布式网关。


VXLAN 集中式网关


集中式网关是指将三层网关集中部署在一台设备上,如下图所示,所有跨子网的流量都经过这个三层网关转发,实现流量的集中管理。


图 1-10 VXLAN 集中式网关组网图



部署集中式网关的优点和缺点如下:


  • 优点:对跨子网流量进行集中管理,网关的部署和管理比较简单。

  • 缺点:

转发路径不是最优:同一二层网关下跨子网的数据中心三层流量都需要经过集中三层网关绕行转发(如图中蓝色虚线所示)。

ARP 表项规格瓶颈:由于采用集中三层网关,通过三层网关转发的终端的 ARP 表项都需要在三层网关上生成,而三层网关上的 ARP 表项规格有限,这不利于数据中心网络的扩展。


VXLAN 分布式网关


通过部署分布式网关可以解决集中式网关部署的缺点。VXLAN 分布式网关是指在典型的“Spine-Leaf”组网结构下,将 Leaf 节点作为 VXLAN 隧道端点 VTEP,每个 Leaf 节点都可作为 VXLAN 三层网关(同时也是 VXLAN 二层网关),Spine 节点不感知 VXLAN 隧道,只作为 VXLAN 报文的转发节点。如下图所示,Server1 和 Server2 不在同一个网段,但是都连接到同一个 Leaf 节点。Server1 和 Server2 通信时,流量只需要在该 Leaf 节点上转发,不再需要经过 Spine 节点。


部署分布式网关时:


  • Spine 节点:关注于高速 IP 转发,强调的是设备的高速转发能力。

  • Leaf 节点:

作为 VXLAN 网络中的二层网关设备,与物理服务器或 VM 对接,用于解决终端租户接入 VXLAN 虚拟网络的问题。

作为 VXLAN 网络中的三层网关设备,进行 VXLAN 报文封装/解封装,实现跨子网的终端租户通信,以及外部网络的访问。


图 1-11 VXLAN 分布式网关示意图



VXLAN 分布式网关具有如下特点:


  • 同一个 Leaf 节点既可以做 VXLAN 二层网关,也可以做 VXLAN 三层网关,部署灵活。

  • Leaf 节点只需要学习自身连接服务器的 ARP 表项,而不必像集中三层网关一样,需要学习所有服务器的 ARP 表项,解决了集中式三层网关带来的 ARP 表项瓶颈问题,网络规模扩展能力强。

VXLAN 网络中报文转发机制

集中式 VXLAN 中同子网互通流程


如图 1-12 所示,VM_A、VM_B 和 VM_C 同属于 10.1.1.0/24 网段,且同属于 VNI 5000。此时,VM_A 想与 VM_C 进行通信。


由于是首次进行通信,VM_A 上没有 VM_C 的 MAC 地址,所以会发送 ARP 广播报文请求 VM_C 的 MAC 地址。


图 1-12 同子网 VM 互通组网图



下面就让我们根据 ARP 请求报文及 ARP 应答报文的转发流程,来看下 MAC 地址是如何进行学习的。

ARP 请求报文转发流程


结合图 1-13,我们来一起了解一下 ARP 请求报文的转发流程。


图 1-13 ARP 请求报文转发流程示意



1、VM_A 发送源 MAC 为 MAC_A、目的 MAC 为全 F、源 IP 为 IP_A、目的 IP 为 IP_C 的 ARP 广播报文,请求 VM_C 的 MAC 地址。


2、VTEP_1 收到 ARP 请求后,根据二层子接口上的配置判断报文需要进入 VXLAN 隧道。确定了报文所属 BD 后,也就确定了报文所属的 VNI。同时,VTEP_1 学习 MAC_A、VNI 和报文入接口(Port_1,即二层子接口对应的物理接口)的对应关系,并记录在本地 MAC 表中。之后,VTEP_1 会根据头端复制列表对报文进行复制,并分别进行封装。


可以看到,这里封装的外层源 IP 地址为本地 VTEP(VTEP_1)的 IP 地址,外层目的 IP 地址为对端 VTEP(VTEP_2 和 VTEP_3)的 IP 地址;外层源 MAC 地址为本地 VTEP 的 MAC 地址,而外层目的 MAC 地址为去往目的 IP 的网络中下一跳设备的 MAC 地址。封装后的报文,根据外层 MAC 和 IP 信息,在 IP 网络中进行传输,直至到达对端 VTEP。


3、报文到达 VTEP_2 和 VTEP_3 后,VTEP 对报文进行解封装,得到 VM_A 发送的原始报文。同时,VTEP_2 和 VTEP_3 学习 VM_A 的 MAC 地址、VNI 和远端 VTEP 的 IP 地址(IP_1)的对应关系,并记录在本地 MAC 表中。之后,VTEP_2 和 VTEP_3 根据二层子接口上的配置对报文进行相应的处理并在对应的二层域内广播。


VM_B 和 VM_C 接收到 ARP 请求后,比较报文中的目的 IP 地址是否为本机的 IP 地址。VM_B 发现目的 IP 不是本机 IP,故将报文丢弃;VM_C 发现目的 IP 是本机 IP,则对 ARP 请求做出应答。下面,让我们看下 ARP 应答报文是如何进行转发的。

ARP 应答报文转发流程


结合图 1-14,我们来一起了解一下 ARP 应答报文的转发流程。


图 1-14 ARP 应答报文转发流程示意



1、由于此时 VM_C 上已经学习到了 VM_A 的 MAC 地址,所以 ARP 应答报文为单播报文。报文源 MAC 为 MAC_C,目的 MAC 为 MAC_A,源 IP 为 IP_C、目的 IP 为 IP_A。


2、VTEP_3 接收到 VM_C 发送的 ARP 应答报文后,识别报文所属的 VNI(识别过程与步骤②类似)。同时,VTEP_3 学习 MAC_C、VNI 和报文入接口(Port_3)的对应关系,并记录在本地 MAC 表中。之后,VTEP_3 对报文进行封装。


可以看到,这里封装的外层源 IP 地址为本地 VTEP(VTEP_3)的 IP 地址,外层目的 IP 地址为对端 VTEP(VTEP_1)的 IP 地址;外层源 MAC 地址为本地 VTEP 的 MAC 地址,而外层目的 MAC 地址为去往目的 IP 的网络中下一跳设备的 MAC 地址。


封装后的报文,根据外层 MAC 和 IP 信息,在 IP 网络中进行传输,直至到达对端 VTEP。


3、报文到达 VTEP_1 后,VTEP_1 对报文进行解封装,得到 VM_C 发送的原始报文。同时,VTEP_1 学习 VM_C 的 MAC 地址、VNI 和远端 VTEP 的 IP 地址(IP_3)的对应关系,并记录在本地 MAC 表中。之后,VTEP_1 将解封装后的报文发送给 VM_A。


至此,VM_A 和 VM_C 均已学习到了对方的 MAC 地址。之后,VM_A 和 VM_C 将采用单播方式进行通信。单播报文的封装与解封装过程,与图 1-14 中所展示的类似,本文就不再赘述啦!

集中式 VXLAN 中不同子网互通流程


如图 1-16 所示,VM_A 和 VM_B 分别属于 10.1.10.0/24 网段和 10.1.20.0/24 网段,且分别属于 VNI 5000 和 VNI 6000。VM_A 和 VM_B 对应的三层网关分别是 VTEP_3 上 BDIF 10 和 BDIF20 的 IP 地址。VTEP_3 上存在到 10.1.10.0/24 网段和 10.1.20.0/24 网段的路由。此时,VM_A 想与 VM_B 进行通信。


图 1-15 不同子网 VM 互通流程示意



由于是首次进行通信,且 VM_A 和 VM_B 处于不同网段,VM_A 需要先发送 ARP 广播报文请求网关(BDIF 10)的 MAC。获得网关的 MAC 后,VM_A 先将数据报文发送给网关;之后网关也将发送 ARP 广播报文请求 VM_B 的 MAC,获得 VM_B 的 MAC 后,网关再将数据报文发送给 VM_B。以上 MAC 地址学习的过程与集中式VXLAN中同子网互通流程中 MAC 地址学习的流程一致,不再赘述。现在假设 VM_A 和 VM_B 均已学到网关的 MAC、网关也已经学到 VM_A 和 VM_B 的 MAC,下面就让我们看下数据报文是如何从 VM_A 发送到 VM_B 的。


图 1-16 不同子网 VM 互通报文转发流程



如上图所示,数据报文从 VM_A 发送到 VM_B 的流程如下:


1、VM_A 先将数据报文发送给网关。报文的源 MAC 为 MAC_A,目的 MAC 为网关 BDIF 10 的 MAC_10,源 IP 地址为 IP_A,目的 IP 为 IP_B。


2、VTEP_1 收到数据报文后,识别此报文所属的 VNI(VNI 5000),并根据 MAC 表项对报文进行封装。可以看到,这里封装的外层源 IP 地址为本地 VTEP 的 IP 地址(IP_1),外层目的 IP 地址为对端 VTEP 的 IP 地址(IP_3);外层源 MAC 地址为本地 VTEP 的 MAC 地址(MAC_1),而外层目的 MAC 地址为去往目的 IP 的网络中下一跳设备的 MAC 地址。

封装后的报文,根据外层 MAC 和 IP 信息,在 IP 网络中进行传输,直至到达对端 VTEP。


3、报文进入 VTEP_3,VTEP_3 对报文进行解封装,得到 VM_A 发送的原始报文。然后,VTEP_3 会对报文做如下处理:


封装后的报文,根据外层 MAC 和 IP 信息,在 IP 网络中进行传输,直至到达对端 VTEP。


  • VTEP_3 发现该报文的目的 MAC 为本机 BDIF 10 接口的 MAC,而目的 IP 地址为 IP_B(10.1.20.1),所以会根据路由表查找到 IP_B 的下一跳。

  • 发现下一跳为 10.1.20.10,出接口为 BDIF20。此时 VTEP_3 查询 ARP 表项,并将原始报文的源 MAC 修改为 BDIF 20 接口的 MAC(MAC_20),将目的 MAC 修改为 VM_B 的 MAC(MAC_B)。

  • 报文到 BDIF 20 接口时,识别到需要进入 VXLAN 隧道(VNI 6000),所以根据 MAC 表对报文进行封装。这里封装的外层源 IP 地址为本地 VTEP 的 IP 地址(IP_3),外层目的 IP 地址为对端 VTEP 的 IP 地址(IP_2);外层源 MAC 地址为本地 VTEP 的 MAC 地址(MAC_3),而外层目的 MAC 地址为去往目的 IP 的网络中下一跳设备的 MAC 地址。

  • 报文到达 VTEP_2 后,VTEP_2 对报文进行解封装,得到内层的数据报文,并将其发送给 VM_B。

VM_B 回应 VM_A 的流程与上述过程类似,本文就不再赘述啦!

 

本文分享自华为云社区《为 VXLAN 技术介绍:什么是 VXLAN-002》,原文作者:The one。


点击关注,第一时间了解华为云新鲜技术~


发布于: 2021 年 03 月 12 日阅读数: 11
用户头像

提供全面深入的云计算技术干货 2020.07.14 加入

华为云开发者社区,提供全面深入的云计算前景分析、丰富的技术干货、程序样例,分享华为云前沿资讯动态,方便开发者快速成长与发展,欢迎提问、互动,多方位了解云计算! 传送门:https://bbs.huaweicloud.com/

评论

发布
暂无评论
带你了解VXLAN网络中报文的转发机制