Overlay技术之VXLAN详解(二)

一、VXLAN的基础概念

图1 VXLAN转发模型
在这里插入图片描述
看图我们可以看到出现了几个传统网络中并没有的元素:
1、VTEP(VXLAN Tunnel Endpoints,VXLAN隧道端点)
VTEP是VXLAN隧道端点,封装在NVE中,用于VXLAN报文的封装和解封装。
VTEP是在Underlay网络创建的,是一个IP地址,一般是Loopback地址。
VXLAN报文中源IP地址为本节点的VTEP地址,VXLAN报文中目的IP地址为对端节点的VTEP地址,一对VTEP地址就对应着一个VXLAN隧道。

2、VNI(VXLAN Network Identifier,VXLAN 网络标识符)
VXLAN网络标识VNI类似VLAN ID,用于区分VXLAN段,不同VXLAN段的虚拟机不能直接二层相互通信。
一个VNI表示一个租户,即使多个终端用户属于同一个VNI,也表示一个租户。VNI由24比特组成,支持多达16M的租户。
在分布式网关部署场景下,VNI分为二层VNI和三层VNI:
二层VNI是普通的VNI,以1:1方式映射到广播域BD,实现VXLAN报文同子网的转发。
三层VNI和VPN实例进行关联,用于VXLAN报文跨子网的转发。

3、VXLAN隧道
“隧道”是一个逻辑上的概念,它并不新鲜,比如大家熟悉的GRE。说白了就是将原始报文“变身”下,加以“包装”,好让它可以在承载网络(比如IP网络)上传输。从主机的角度看,就好像原始报文的起点和终点之间,有一条直通的链路一样。而这个看起来直通的链路,就是“隧道”。顾名思义,“VXLAN隧道”便是用来传输经过VXLAN封装的报文的,它是建立在两个VTEP之间的一条虚拟通道。

二、 建立VXLAN隧道

1、 哪些VTEP间需要建立VXLAN隧道

图2-1 建立VXLAN隧道示意图

【华为悦读汇】技术发烧友:认识VXLAN-1347521-6

如图2-1所示,网络中存在多个VTEP,那么这其中哪些VTEP间需要建立VXLAN隧道呢?

如前所述,通过VXLAN隧道,“二层域”可以突破物理上的界限,实现大二层网络中VM之间的通信。所以,连接在不同VTEP上的VM之间如果有“大二层”互通的需求,这两个VTEP之间就需要建立VXLAN隧道。换言之,同一大二层域内的VTEP之间都需要建立VXLAN隧道。

例如,假设图3-1中VTEP_1连接的VM、VTEP_2连接的VM以及VTEP_3连接的VM之间需要“大二层”互通,那VTEP_1、VTEP_2和VTEP_3之间就需要两两建立VXLAN隧道,如图2-2所示。

图2-2 建立VXLAN隧道示意图

【华为悦读汇】技术发烧友:认识VXLAN-1347521-7

2、 什么是“同一大二层域”

前面提到的“同一大二层域”,就类似于传统网络中VLAN(虚拟局域网)的概念,只不过在VXLAN网络中,它有另外一个名字,叫做Bridge-Domain,简称BD。

我们知道,不同的VLAN是通过VLAN ID来进行区分的,那不同的BD是如何进行区分的呢?其实前面已经提到了,就是通过VNI来区分的。对于CE系列交换机而言,BD与VNI是1:1的映射关系,这种映射关系是通过在VTEP上配置命令行建立起来的。配置如下:

bridge-domain 10 //表示创建一个“大二层广播域”BD,其编号为10

vxlan vni 5000 //表示在BD 10下,指定与之关联的VNI为5000

VTEP会根据以上配置生成BD与VNI的映射关系表,该映射表可以通过命令行查看,如下所示:
在这里插入图片描述

有了映射表后,进入VTEP的报文就可以根据自己所属的BD来确定报文封装时该添加哪个VNI。那么,报文根据什么来确定自己属于哪个BD呢?

3、 如何确定报文属于哪个BD

这里要先澄清下,VTEP只是交换机承担的一个角色而已,只是交换机功能的一部分。也就是说,并非所有进入到交换机的报文都会走VXLAN隧道(也可能报文就是走普通的二三层转发流程)。所以,我们在回答“如何确定报文属于哪个BD”之前,必须先要回答“哪些报文要进入VXLAN隧道”。

3.1 哪些报文要进入VXLAN隧道
回答这个问题之前,不妨先让我们想下VLAN技术中,交换机对于接收和发送的报文是如何进行处理的。我们知道,报文要进入交换机进行下一步处理,首先得先过接口这一关,可以说接口掌控着对报文的“生杀大权”。传统网络中定义了三种不同类型的接口:Access、Trunk、Hybrid。这三种类型的接口虽然应用场景不同,但他们的最终目的是一样的:一是根据配置来检查哪些报文是允许通过的;二是判断对检查通过的报文进行怎样的处理。

其实在VXLAN网络中,VTEP上的接口也承担着类似的任务,只不过在CE系列交换机中,这里的接口不是物理接口,而是一个叫做“二层子接口”的逻辑接口。类似的,二层子接口主要做两件事:一是根据配置来检查哪些报文需要进入VXLAN隧道;二是判断对检查通过的报***怎样的处理。下面我们就来看下,二层子接口是如何完成这两件事的。

在二层子接口上,可以根据需要定义不同的流封装类型(类似于传统网络中不同的接口类型)。CE系列交换机目前支持三种不同的流封装类型,分别是dot1q、untag和default,它们各自对报文的处理方式如表3-1所示。有了这张表,你就能明白哪些报文要进VXLAN隧道了。

表3-1 不同流封装类型的接口对报文的处理方式

在这里插入图片描述
注: VXLAN隧道两端二层子接口的配置并不一定是完全对等的。正因为这样,才可能实现属于同一网段但是不同VLAN的两个VM通过VXLAN隧道进行通信。

3.2 二层子接口加入BD

看了上面的描述,再来回答“如何确定报文属于哪个BD”就非常简单了。其实,只要将二层子接口加入指定的BD,然后根据二层子接口上的配置,就可以确定报文属于哪个BD啦!

比如图3-1所示的组网,我们可以分别在VTEP的两个物理接口10GE 1/0/1和10GE 1/0/2上配置不同流封装类型的二层子接口并将其分别加入不同的BD。

图3-1 二层子接口加入BD

【华为悦读汇】技术发烧友:认识VXLAN-1347521-9

基于二层物理接口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

基于二层物理接口10GE 1/0/2,创建二层子接口10GE 1/0/2.1,且流封装类型为default。配置如下:

interface 10GE1/0/2.1 mode l2 //创建二层子接口10GE1/0/2.1

encapsulation default //允许所有报文进入VXLAN隧道

bridge-domain 30 //报文进入的是BD 30

此时你可能会有这样的疑问,为什么要在10GE 1/0/1上创建两个不同类型的子接口?是否还可以继续在10GE 1/0/1上创建一个default类型的二层子接口?换句话说,用户应该如何选择配置哪种类型的二层子接口?三种类型的二层子接口之间,是否存在配置约束关系?

3.3 各类型二层子接口的应用场景
我们先来解答下是否可以在10GE 1/0/1上再创建一个default类型的二层子接口。答案是不可以。其实根据表3-1的描述,这一点很容易理解。因为default类型的二层子接口允许所有报文进入VXLAN隧道,而dot1q和untag类型的二层子接口只允许某一类报文进入VXLAN隧道。这就决定了,default类型的二层子接口跟其他两种类型的二层子接口是不可以在同一物理接口上共存的。否则,报文到了接口之后如何判断要进入哪个二层子接口呢。所以,default类型的子接口,一般应用在经过此接口的报文均需要走同一条VXLAN隧道的场景,即下挂的VM全部属于同一BD。例如,图3-3中VM3和VM4均属于BD 30,则10GE 1/0/2上就可以创建default类型的二层子接口。

再来看下为什么可以在10GE 1/0/1上分别创建dot1q和untag类型的二层子接口。如图3-3所示,VM1和VM2分别属于VLAN 10和VLAN 20,且分别属于不同的大二层域BD 10和BD 20,显然他们发出的报文要进入不同的VXLAN隧道。如果VM1和VM2发出的报文在到达VTEP的10GE 1/0/1接口时,一个是携带VLAN 10的Tag的,一个是不携带VLAN Tag的(比如二层交换机上行连接VTEP的接口上配置的接口类型是Trunk,允许通过的VLAN为10和20,PVID为VLAN 20),则为了区分两种报文,就必须要在10GE 1/0/1上分别创建dot1q和untag类型的二层子接口。所以,当经过同一物理接口的报文既有带VLAN Tag的,又有不带VLAN Tag的,并且他们各自要进入不同的VXLAN隧道,则可以在该物理接口上同时创建dot1q和untag类型的二层子接口。

当然,现网中可能存在各种不同的组网,小编也不可能一一列举出来。所以在实际应用中,请务必根据组网需求,结合表3-1,合理规划二层子接口的流封装类型。

4、 VXLAN隧道怎么建

现在,我们可以来看下VXLAN隧道是怎么建立起来的了。

一般而言,隧道的建立不外乎手工方式和自动方式两种。

l 手工方式

这种方式需要用户手动指定VXLAN隧道的源和目的IP地址分别为本端和对端VTEP的IP地址,也就是人为的在本端VTEP和对端VTEP之间建立静态VXLAN隧道。

对于CE系列交换机,以上配置是在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上会生成如下所示的一张表:
display vxlan vni 5000 verbose

BD ID                  : 10

State                  : up

NVE                     : 288

Source                 : 1.1.1.1

UDP Port               : 4789

BUM Mode               : head-end

Group Address         : - 

Peer List              : 2.2.2.2 2.2.2.3 

根据上表中的Peer List,本端VTEP就可以知道属于同一BD(或同一VNI)的对端VTEP都有哪些,这也就决定了同一大二层广播域的范围。当VTEP收到BUM(Broadcast&Unknown-unicast&Multicast,广播&未知单播&组播)报文时,会将报文复制并发送给Peer List中所列的所有对端VTEP(这就好比广播报文在VLAN内广播)。因此,这张表也被称为“头端复制列表”。当VTEP收到已知单播报文时,会根据VTEP上的MAC表来确定报文要从哪条VXLAN隧道走。而此时Peer List中所列的对端,则充当了MAC表中“出接口”的角色。在后面的报文转发流程中,你将会看到头端复制列表是如何在VXLAN网络中指导报文进行转发的。

l 自动方式

自动方式下VXLAN隧道的建立需要借助于其他的协议,例如BGP。CE系列交换机中,自动方式建立VXLAN隧道主要应用在EVN(Ethernet Virtual Network)和VXLAN的分布式网关场景中。本文不对该方式进行详细讲述,具体实现可参考EVN的相关资料。

5 、如何确定报文要进哪条隧道

从前面的描述我们知道,属于同一BD的VXLAN隧道可能不止一条,比如前面的头端复制列表中,同一个源端VTEP(1.1.1.1)对应了两个对端VTEP(2.2.2.2和2.2.2.3)。那就带来了另一个问题,报文到底应该走哪一条隧道呢?

我们知道,基本的二三层转发中,二层转发依赖的是MAC表,如果没有对应的MAC表,则主机发送ARP广播报文请求对端的MAC地址;三层转发依赖的是FIB表。在VXLAN中,其实也是同样的道理。下面就让我们来看下,VXLAN网络中报文的转发流程。相信看完下面的内容,关于“如何确定报文要进哪条隧道”的疑惑也就迎刃而解了。

  • 6
    点赞
  • 34
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值