摘要:本文介绍了什么是 VXLAN,以及 VXLAN 的基本概念和工作原理,包含:为什么须要 VXLAN?VXLAN 与 VLAN 之间有啥不同?什么是 VTEP?什么是 VNI?VXLAN 报文是如何封装的?VXLAN 隧道是如何建设的?VXLAN 的具体配置命令请参见 CloudEngine 交换机的产品文档。
什么是 VXLAN
VXLAN(Virtual eXtensible Local Area Network,虚构扩大局域网),是由 IETF 定义的 NVO3(Network Virtualization over Layer 3)规范技术之一,是对传统 VLAN 协定的一种扩大。VXLAN 的特点是将 L2 的以太帧封装到 UDP 报文(即 L2 over L4)中,并在 L3 网络中传输。
如图 1 - 1 所示,VXLAN 实质上是一种隧道技术,在源网络设备与目标网络设备之间的 IP 网络上,建设一条逻辑隧道,将用户侧报文通过特定的封装后通过这条隧道转发。从用户的角度来看,接入网络的服务器就像是连贯到了一个虚构的二层交换机的不同端口上(可把蓝色虚框示意的数据中心 VXLAN 网络看成一个二层虚构交换机),能够不便地通信。
图 1 -1 VXLAN 是一种隧道技术
VXLAN 曾经成为以后构建数据中心的支流技术,是因为它能很好地满足数据中心里虚拟机动静迁徙和多租户等需要。
为什么须要 VXLAN
为什么须要 VXLAN 呢?这和数据中心服务器侧的虚拟化趋势严密相干,一方面服务器虚拟化后呈现了虚拟机动静迁徙,要求提供一个无障碍接入的网络;另一方面,数据中心规模越发宏大,租户数量激增,须要网络提供隔离海量租户的能力。采纳 VXLAN 能够满足上述两个要害需要。
虚拟机动静迁徙,要求提供一个无障碍接入的网络
什么是服务器虚拟化技术?
传统的数据中心物理服务器利用率太低,均匀只有 10%~15%,节约了大量的电力能源和机房资源,所以呈现了服务器虚拟化技术。如图 1 - 2 所示,服务器虚拟化技术是把一台物理服务器虚拟化成多台逻辑服务器,这种逻辑服务器被称为虚拟机(VM)。每个 VM 都能够独立运行,有本人的操作系统、APP,当然也有本人独立的 MAC 地址和 IP 地址,它们通过服务器外部的虚构交换机(vSwitch)与内部实体网络连接。
图 1 -2 服务器虚拟化示意
通过服务器虚拟化,能够无效地进步服务器的利用率,升高能源消耗,升高数据中心的经营老本,所以虚拟化技术目前失去了宽泛的利用。
什么是虚拟机动静迁徙?
所谓虚拟机动静迁徙,就是在保障虚拟机上服务失常运行的同时,将一个虚拟机零碎从一个物理服务器挪动到另一个物理服务器的过程。该过程对于最终用户来说是无感知的,从而使得管理员可能在不影响用户失常应用的状况下,灵便调配服务器资源,或者对物理服务器进行培修和降级。
在服务器虚拟化后,虚拟机动静迁徙变得常态化,为了保障迁徙时业务不中断,就要求在虚拟机迁徙时,不仅虚拟机的 IP 地址不变,而且虚拟机的运行状态也必须保持原状(例如 TCP 会话状态),所以虚拟机的动静迁徙只能在同一个二层域中进行,而不能跨二层域迁徙。
如图 1 - 3 所示,传统的二三层网络架构限度了虚拟机的动静迁徙范畴,迁徙只能在一个较小的部分范畴内进行,利用受到了极大的限度。
图 1 -3 传统的二三层网络架构限度了虚拟机的动静迁徙范畴
为了突破这种限度,实现虚拟机的大范畴甚至跨地区的动静迁徙,就要求把 VM 迁徙可能波及的所有服务器都纳入同一个二层网络域,这样能力实现 VM 的大范畴无障碍迁徙。
VXLAN 如何满足虚拟机动静迁徙时对网络的要求?
家喻户晓,同一台二层交换机能够实现下挂服务器之间的二层通信,而且服务器从该二层交换机的一个端口迁徙到另一个端口时,IP 地址是能够放弃不变的。这样就能够满足虚拟机动静迁徙的需要了。VXLAN 的设计理念和指标正是由此而来的。
从上一个大节咱们能够晓得,VXLAN 实质上是一种隧道技术,当源和目标之间有通信需要时,便在数据中心 IP 网络之上创立一条虚构的隧道,通明转发用户数据。而数据中心内互相通信的需要泛滥,这种隧道的建设形式简直是全互联状态能力满足通信需要。
VXLAN 能够提供一套方法论,在数据中心 IP 网络根底上,构建一张全互联的二层隧道虚构网络,保障任意两点之间都能通过 VXLAN 隧道来通信,并疏忽底层网络的构造和细节。从服务器的角度看,VXLAN 为它们将整个数据中心根底网络虚构成了一台微小的“二层交换机”,所有服务器都连贯在这台虚构二层交换机上。而根底网络之内如何转发都是这台“微小交换机”外部的事件,服务器齐全无需关怀。
图 1 -4 VXLAN 将整个数据中心根底网络虚构成了一台微小的“二层交换机”
数据中心租户数量激增,要求提供一个可隔离海量租户的网络
家喻户晓,在传统的 VLAN 网络中,规范定义所反对的可用 VLAN 数量只有 4000 个左右。服务器虚拟化后,一台物理服务器中承载了多台虚拟机,每个虚拟机都有独立的 IP 地址和 MAC 地址,相当于接入数据中心的服务器成倍扩充了。另外,私有云或其它大型虚拟化云数据中心动辄需包容上万甚至更多租户,VLAN 的能力显然曾经力不从心。
VXLAN 如何来解决上述问题呢?VXLAN 在 VXLAN 帧头中引入了相似 VLAN ID 的网络标识,称为 VXLAN 网络标识 VNI(VXLAN Network ID),由 24 比特组成,实践上可反对多达 16M 的 VXLAN 段,从而满足了大规模不同网络之间的标识、隔离需要。下文咱们会介绍 VNI 的具体作用。
VXLAN 与 VLAN 之间有何不同
VLAN 作为传统的网络隔离技术,在规范定义中 VLAN 的数量只有 4000 个左右,无奈满足大型数据中心的租户间隔离需要。另外,VLAN 的二层范畴个别较小且固定,无奈反对虚拟机大范畴的动静迁徙。
VXLAN 完满地补救了 VLAN 的上述有余,一方面通过 VXLAN 中的 24 比特 VNI 字段(如图 1 - 5 所示),提供多达 16M 租户的标识能力,远大于 VLAN 的 4000;另一方面,VXLAN 实质上在两台交换机之间构建了一条穿梭数据中心根底 IP 网络的虚构隧道,将数据中心网络虚构成一个巨型“二层交换机”,满足虚拟机大范畴动静迁徙的需要。
尽管从名字上看,VXLAN 是 VLAN 的一种扩大协定,但 VXLAN 构建虚构隧道的本事曾经与 VLAN 大同小异了。
上面就让咱们来看下,VXLAN 报文到底长啥样。
图 1 -5 VXLAN 报文格式(以外层 IP 头为 IPv4 格局为例)
如上图所示,VTEP 对 VM 发送的原始以太帧(Original L2 Frame)进行了以下“包装”:
- VXLAN Header
减少 VXLAN 头(8 字节),其中蕴含 24 比特的 VNI 字段,用来定义 VXLAN 网络中不同的租户。此外,还蕴含VXLAN Flags(8 比特,取值为 00001000)和两个保留字段(别离为 24 比特和 8 比特)。
- UDP Header
VXLAN 头和原始以太帧一起作为 UDP 的数据。UDP 头中,目标端口号(VXLAN Port)固定为 4789,源端口号(UDP Src. Port)是原始以太帧通过哈希算法计算后的值。
- Outer IP Header
封装外层 IP 头。其中,源 IP 地址(Outer Src. IP)为源 VM 所属 VTEP 的 IP 地址,目标 IP 地址(Outer Dst. IP)为目标 VM 所属 VTEP 的 IP 地址。
- Outer MAC Header
封装外层以太头。其中,源 MAC 地址(Src. MAC Addr.)为源 VM 所属 VTEP 的 MAC 地址,目标 MAC 地址(Dst. MAC Addr.)为达到目标 VTEP 的门路中下一跳设施的 MAC 地址。
VXLAN 隧道是如何建设的
本节将为您介绍 VXLAN 隧道的建设过程,并在这个过程中更好地了解 VXLAN 的工作原理。
什么是 VXLAN 中的 VTEP 和 VNI
上面让咱们来进一步理解 VXLAN 的网络模型以及一些常见的概念。如图 1 - 6 所示,两台服务器之间通过 VXLAN 网络进行通信。
图 1 -6 VXLAN 网络模型示意
从上图中能够发现,VXLAN 在两台 TOR 交换机之间建设了一条隧道,将服务器收回的原始数据帧加以“包装”,好让原始报文能够在承载网络(比方 IP 网络)上传输。当达到目标服务器所连贯的 TOR 交换机后,来到 VXLAN 隧道,并将原始数据帧复原进去,持续转发给目标服务器。
另外,VXLAN 网络中呈现了一些传统数据中心网络中没有的新元素,如 VTEP、VNI 等,它们的作用是什么呢?上面将向您介绍这几个新元素。
什么是 VXLAN VTEP
如图 1 - 6 所示,VTEP(VXLAN Tunnel Endpoints,VXLAN 隧道端点)是 VXLAN 网络的边缘设施,是 VXLAN 隧道的终点和起点,VXLAN 对用户原始数据帧的封装和解封装均在 VTEP 上进行。
VTEP 是 VXLAN 网络中相对的配角,VTEP 既能够是一 ** 立的网络设备(比方华为的 CloudEngine 系列交换机),也能够是在服务器中的虚构交换机。源服务器收回的原始数据帧,在 VTEP 上被封装成 VXLAN 格局的报文,并在 IP 网络中传递到另外一个 VTEP 上,并通过解封转还原出原始的数据帧,最初转发给目标服务器。
VTEP 在 VXLAN 隧道的建设和转发过程中的具体工作,能够参见下文的 VXLAN 隧道是如何建设的
什么是 VXLAN VNI
前文提到,以太网数据帧中 VLAN 只占了 12 比特的空间,这使得 VLAN 的隔离能力在数据中心网络中力不从心。而 VNI 的呈现,就是专门解决这个问题的。
如[图 1 - 6 所示,VNI(VXLAN Network Identifier,VXLAN 网络标识符),VNI 是一种相似于 VLAN ID 的用户标识,一个 VNI 代表了一个租户,属于不同 VNI 的虚拟机之间不能间接进行二层通信。如图 1 - 5 所示,VXLAN 报文封装时,给 VNI 调配了 24 比特的长度空间,使其能够反对海量租户的隔离。
VNI 在 VXLAN 隧道的建设和转发过程中的具体工作,能够参见下文的 VXLAN 隧道是如何建设的
另外,在分布式网关部署场景下,VNI 还可分为二层 VNI 和三层 VNI,它们的作用不同:
- 二层 VNI 是一般的 VNI,以 1:1 形式映射到播送域 BD,实现 VXLAN 报文同子网的转发(详情可参见下文的什么是“同一大二层域”)。
- 三层 VNI 和 VPN 实例进行关联,用于 VXLAN 报文跨子网的转发(三层 VNI 的工作详情将在另外一篇 EVPN 相干的文档中开展形容)。
哪些 VTEP 之间须要建设 VXLAN 隧道
一条 VXLAN 隧道是由两个 VTEP 来确定建设的。数据中心网络中存在很多个 VTEP,如图 1 - 7 所示,那么哪些 VTEP 间须要建设 VXLAN 隧道呢?
图 1 -7 建设 VXLAN 隧道示意图(1)
如前所述,通过 VXLAN 隧道,“二层域”能够冲破物理上的界线,实现大二层网络中 VM 之间的通信。所以,连贯在不同 VTEP 上的 VM 之间如果有“大二层”互通的需要,这两个 VTEP 之间就须要建设 VXLAN 隧道。换言之,同一大二层域内的 VTEP 之间都须要建设 VXLAN 隧道。
例如,假如图 1 - 7 中 VTEP_1 连贯的 VM、VTEP_2 连贯的 VM 以及 VTEP_3 连贯的 VM 之间须要“大二层”互通,那 VTEP_1、VTEP_2 和 VTEP_3 之间就须要两两建设 VXLAN 隧道,如图 1 - 8 所示。
图 1 -8 建设 VXLAN 隧道示意图(2)
什么是“同一大二层域”
上文提到的“同一大二层域”,就相似于传统网络中 VLAN(虚构局域网)的概念,只不过在 VXLAN 网络中,它有另外一个名字,叫做 Bridge-Domain,简称 BD。
咱们晓得,不同的 VLAN 是通过 VLAN ID 来进行辨别的,那不同的 BD 是如何进行辨别的呢?其实后面曾经提到了,就是通过 VNI 来辨别的。对于 CloudEngine 系列交换机而言,BD 与 VNI 是 1:1 的映射关系,这种映射关系是通过在 VTEP 设施上配置命令行建设起来的,配置样例如下:
bridge-domain 10 // 示意创立一个“大二层播送域”BD,其编号为 10
vxlan vni 5000 // 示意在 BD 10 下,指定与之关联的 VNI 为 5000
#
VTEP 设施会依据以上配置生成 BD 与 VNI 的映射关系表,该映射表能够通过命令行查看,如下所示:
<HUAWEI> display vxlan vniNumber of vxlan vni : 1
VNI BD-ID State
---------------------------------------
5000 10 up
有了映射表后,进入 VTEP 的报文就能够依据本人所属的 BD 来确定报文在进行 VXLAN 封装时,该增加哪个 VNI 标识。那么,报文依据什么来确定本人属于哪个 BD 呢?
如何确定报文属于哪个 BD
这里要先廓清下,VTEP 只是交换机承当的一个角色而已,只是交换机性能的一部分。也就是说,并非所有进入到交换机的报文都会走 VXLAN 隧道(也可能报文就是走一般的二三层转发流程)。所以,咱们在答复“如何确定报文属于哪个 BD”之前,必须先要答复“哪些报文要进入 VXLAN 隧道”。
哪些报文要进入 VXLAN 隧道?
答复这个问题之前,无妨先让咱们回忆一下 VLAN 技术中,交换机对于接管和发送的报文是如何进行解决的。报文要进入交换机进行下一步解决,首先得先过接口这一关,能够说接口掌控着对报文的“生杀大权”。传统网络中定义了三种不同类型的接口:Access、Trunk、Hybrid。这三种类型的接口尽管利用场景不同,但它们的最终目标是一样的:一是依据配置来查看哪些报文是容许通过的;二是判断对查看通过的报文做怎么的解决。
其实在 VXLAN 网络中,VTEP 上的接口也承当着相似的工作,只不过在 CloudEngine 系列交换机中,这里的接口不是物理接口,而是一个叫做“二层子接口”的逻辑接口。相似的,二层子接口次要做两件事:一是依据配置来查看哪些报文须要进入 VXLAN 隧道;二是判断对查看通过的报文做怎么的解决。在二层子接口上,能够依据须要定义不同的流封装类型(相似于传统网络中不同的接口类型)。CloudEngine 系列交换机目前反对的流封装类型有 dot1q、untag、qinq 和 default 四种类型:
- dot1q:对于带有一层 VLAN Tag 的报文,该类型接口只接管与指定 VLAN Tag 匹配的报文;对于带有两层 VLAN Tag 的报文,该类型接口只接管外层 VLAN Tag 与指定 VLAN Tag 匹配的报文。
- untag:该类型接口只接管不带 VLAN Tag 的报文。
- qinq:该类型接口只接管带有指定两层 VLAN Tag 的报文。
- default:容许接口接管所有报文,不辨别报文中是否带 VLAN Tag。不论是对原始报文进行 VXLAN 封装,还是解封装 VXLAN 报文,该类型接口都不会对原始报文进行任何 VLAN Tag 解决,包含增加、替换或剥离。
除二层子接口外,还能够将 VLAN 作为业务接入点。将 VLAN 绑定到播送域 BD 后,退出该 VLAN 的接口即为 VXLAN 业务接入点,进入接口的报文由 VXLAN 隧道解决。
将二层子接口退出 BD
当初咱们再来答复“如何确定报文属于哪个 BD”就非常简单了。其实,只有将二层子接口退出指定的 BD,而后依据二层子接口上的配置,设施就能够确定报文属于哪个 BD 啦!
比方图 1 - 9 所示的组网,一台虚拟化服务器中有两个不同 VLAN 的虚拟机 VM1(VLAN 10)和 VM2(VLAN 20),它们与其余虚拟机通信时须要接入 VXLAN 网络。此时咱们能够别离在 VTEP 的物理接口 10GE 1/0/ 1 上,别离针对 VM1 和 VM2 封装不同的二层子接口,并将其别离退出不同的 BD。这样后续 VM1 和 VM2 的流量将会进入不同的 VXLAN 隧道持续转发。
在这个举例中,vSwitch 的上行口配置成 Trunk 模式,且 PVID 为 20。这样 vSwitch 发给 VTEP 的报文中,既有带 tag 的 VM1 流量,又有 untag 的 VM2 流量,此时在 VTEP 的接入口上创立两个二层子接口,别离配置为 dot1q 和 untag 的封装类型。
图 1 -9 将二层子接口退出 BD
上面就基于上图,联合 CloudEngine 交换机上的配置举例进行阐明。
在 CloudEngine 交换机的接入物理接口 10GE 1/0/ 1 上,别离创立二层子接口 10GE 1/0/1.1 和 10GE 1/0/1.2,并别离配置其流封装类型为 dot1q 和 untag。
interface 10GE1/0/1.1 mode l2 // 创立二层子接口 10GE1/0/1.1
encapsulation dot1q vid 10 // 只容许携带 VLAN Tag 10 的报文进入 VXLAN 隧道
bridge-domain 10 // 指定报文进入的是 BD 10
#
interface 10GE1/0/1.2 mode l2 // 创立二层子接口 10GE1/0/1.2
encapsulation untag // 只容许不携带 VLAN Tag 的报文进入 VXLAN 隧道
bridge-domain 20 // 指定报文进入的是 BD 20
#
VXLAN 隧道是怎么建设的
当初,咱们能够来看下 VXLAN 隧道是怎么建设起来的。一般而言,隧道的建设不外乎手工形式和主动形式两种。
手工形式建设 VXLAN 隧道
这种形式须要用户手动指定 VXLAN 隧道的源 IP 为本端 VTEP 的 IP、目标 IP 为对端 VTEP 的 IP,也就是人为地在本端 VTEP 和对端 VTEP 之间建设动态 VXLAN 隧道。
对于 CloudEngine 系列交换机,以上配置是在 NVE(Network Virtualization Edge)接口下实现的,配置举例如下:
interface Nve1 // 创立逻辑接口 NVE 1
source 1.1.1.1 // 配置源 VTEP 的 IP 地址(举荐应用 Loopback 接口的 IP 地址)vni 5000 head-end peer-list 2.2.2.2
vni 5000 head-end peer-list 2.2.2.3
#
其中,vni 5000 head-end peer-list 2.2.2.2和 vni 5000 head-end peer-list 2.2.2.3 的配置,示意属于 VNI 5000 的对端 VTEP 有两个,IP 地址别离为 2.2.2.2 和 2.2.2.3。依据这两条配置,VTEP 上会生成如下所示的一张表:
<HUAWEI> display vxlan vni 5000 verbose
BD ID : 10
State : up
NVE : 288
Source Address : 1.1.1.1
Source IPv6 Address : -
UDP Port : 4789
BUM Mode : head-end
Group Address : -
Peer List : 2.2.2.2 2.2.2.3
IPv6 Peer List : -
依据上表中的Peer List,本端 VTEP 就能够晓得属于同一 BD(或同一 VNI)的对端 VTEP 都有哪些,这也就决定了同一大二层播送域的范畴。当 VTEP 收到 BUM(Broadcast&Unknown-unicast&Multicast,播送 & 未知单播 & 组播)报文时,会将报文复制并发送给 Peer List 中所列的所有对端 VTEP(这就好比播送报文在 VLAN 内播送)。因而,这张表也被称为“头端复制列表”。当 VTEP 收到已知单播报文时,会依据 VTEP 上的 MAC 表来确定报文要从哪条 VXLAN 隧道走。而此时 Peer List 中所列的对端,则充当了 MAC 表中“出接口”的角色。
在前面的报文转发流程中,你将会看到头端复制列表是如何在 VXLAN 网络中领导报文进行转发的。
主动形式建设 VXLAN 隧道
主动形式下 VXLAN 隧道的建设须要借助于 EVPN(Ethernet VPN)协定,这部分内容请参见《什么是 EVPN》。
如何确定报文要进哪条隧道?
属于同一 BD 的 VXLAN 隧道可能不止一条,比方上文的头端复制列表中,同一个源端 VTEP(1.1.1.1)对应了两个对端 VTEP(2.2.2.2 和 2.2.2.3)。那就带来了另一个问题,报文到底应该走哪一条隧道呢?
咱们晓得,根本的二三层转发中,二层转发依赖的是 MAC 表,如果没有对应的 MAC 条目,则主机发送 ARP 播送报文申请对端的 MAC 地址;三层转发依赖的是 FIB 表。在 VXLAN 中,其实也是同样的情理。在下一大节中,将介绍 VXLAN 网络中报文的转发流程,置信看完上面的内容,对于“如何确定报文要进哪条隧道”的纳闷也就迎刃而解了。
本文分享自华为云社区《华为 VXLAN 技术介绍:什么是 VXLAN-001》,原文作者:The one
点击关注,第一工夫理解华为云陈腐技术~