vlan和vxlan

本文由软件开发专家赵洋洋撰写,介绍了VLAN和VXLAN的基础知识。VLAN是虚拟局域网,通过分割广播域提高网络设计自由度,但存在数量限制。VXLAN是VLAN的扩展,通过将L2帧封装到UDP中,解决VLAN的局限,支持大规模数据中心的租户隔离。VXLAN使用VTEP和VNI进行隧道建立和消息转发,解决了虚拟机迁移和租户隔离的问题。

作者介绍:赵洋洋,多年软件开发经验,目前主要研究分布式、分布式数据库领域。目前参与移动云,云专线产品的开发。

概要:vlan和vxlan技术概要介绍

vlan

什么是vlan

VLAN(Virtual LAN),翻译成中文是“虚拟局域网”。LAN可以是由少数几台家用计算机构成的网络,也可以是数以百计的计算机构成的企业网络。VLAN所指的LAN特指使用路由器分割的网络(也就是广播域)

广播域

本来,二层交换机只能构建单一的广播域,不过使用VLAN功能后,它能够将网络分割成多个广播域

未分割的广播域

image

假设这时,计算机A需要与计算机B通信。在基于以太网的通信中,必须在数据帧中指定目标MAC地址才能正常通信,因此计算机A必须先广播“ARP请求(ARP Request)信息”,来尝试获取计算机B的MAC地址。广播帧频繁出现,给网络造成巨大负担

一个广播域的ARP请求

image

广播帧隔离

分割广播域时,一般都必须使用到路由器。使用路由器后,可以以路由器上的网络接口(LAN Interface)为单位分割广播域。但是路由器的端口数量有限,使用路由器分割广播域的话,所能分割的个数完全取决于路由器的网络接口个数,使得用户无法自由地根据实际需要分割广播域。

vlan出现

与路由器相比,二层交换机一般带有多个网络接口。因此如果能使用它分割广播域,那么无疑运用上的灵活性会大大提高。用于在二层交换机上分割广播域的技术,就是VLAN。通过利用VLAN,我们可以自由设计广播域的构成,提高网络设计的自由度。

如果要更为直观地描述VLAN的话,我们可以把它理解为将一台交换机在逻辑上分割成了数台交换机。在一台交换机上生成红、蓝两个VLAN,也可以看作是将一台交换机换做一红一蓝两台虚拟的交换机。

一个交换机组成了红蓝vlan

image

但是,VLAN生成的逻辑上的交换机是互不相通的。因此,在交换机上设置VLAN后,如果未做其他处理,VLAN间是无法通信的。

vlan间的通信

vlan数据帧

image

同vlan通信举例

image

不同vlan通信举例

image

三层交换机以及二三层网络

简单的说带有第三层路由功能的交换机被称为“三层交换机”。

三层交换机模型

image

二三层网络

image

vlan的局限

VLAN作为传统的网络隔离技术,在标准定义中VLAN的数量只有4000个左右,无法满足大型数据中心的租户间隔离需求。另外,VLAN的二层范围一般较小且固定,无法支持虚拟机大范围的动态迁移

vxlan

什么是vxlan

VXLAN(Virtual eXtensible Local Area Network,虚拟扩展局域网),是由IETF定义的NVO3(Network Virtualization over Layer 3)标准技术之一,是对传统VLAN协议的一种扩展。VXLAN的特点是将L2的以太帧封装到UDP消息(即L2 over L4)中,并在L3网络中传输。是overlay网络的实现技术之一。

vxlan解决了什么关键问题

虚拟化服务器动态迁移

服务器从该二层交换机的一个端口迁移到另一个端口时,IP地址是可以保持不变的,VXLAN利用此设计理念,在数据中心IP网络基础上,构建一张全互联的二层隧道虚拟网络,保证任意两点之间都能通过VXLAN隧道来通信,并忽略底层网络的结构和细节,VXLAN为它们将整个数据中心基础网络虚拟成了一台巨大的“二层交换机(大二层)”,所有服务器都连接在这台虚拟二层交换机上。

大规模数据中心,海量租户隔离能力

在标准定义中VLAN的数量只有4000个左右,无法满足大型数据中心的租户间隔离需求。 VXLAN完美地弥补了VLAN的上述不足,一方面通过VXLAN中的24比特VNI字段。提供多达16M租户的标识能力

vxlan的消息格式

image

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网络模型图

image

从上图中可以发现,VXLAN在两台TOR交换机之间建立了一条隧道,将服务器发出的原始数据帧加以“包装”,好让原始消息可以在承载网络(比如IP网络)上传输。当到达目的服务器所连接的TOR交换机后,离开VXLAN隧道,并将原始数据帧恢复出来,继续转发给目的服务器。

什么是VXLAN VTEP

VTEP(VXLAN Tunnel Endpoints,VXLAN隧道端点)是VXLAN网络的边缘设备,是VXLAN隧道的起点和终点,VXLAN对用户原始数据帧的封装和解封装均在VTEP上进行

什么是VXLAN VNI

以太网数据帧中VLAN只占了12比特的空间,这使得VLAN的隔离能力在数据中心网络中力不从心。而VNI的出现,就是专门解决这个问题的。VNI(VXLAN Network Identifier,VXLAN 网络标识符),VNI是一种类似于VLAN ID的用户标识,一个VNI代表了一个租户,属于不同VNI的虚拟机之间不能直接进行二层通信VXLAN消息封装时,给VNI分配了24比特的长度空间,使其可以支持海量租户的隔离。

另外,在分布式网关部署场景下,VNI还可分为二层VNI和三层VNI,它们的作用不同:

  • 二层VNI是普通的VNI,以1:1方式映射到广播域BD,实现VXLAN消息同子网的转发
  • 三层VNI和VPN实例进行关联,用于VXLAN消息跨子网的转发

哪些VTEP之间需要建立VXLAN隧道

连接在不同VTEP上的VM之间如果有“大二层”互通的需求,这两个VTEP之间就需要建立VXLAN隧道。换言之,同一大二层域内的VTEP之间都需要建立VXLAN隧道。

建立VXLAN隧道示意图

image

什么是同一大二层

类似于传统网络中VLAN(虚拟局域网)的概念,只不过在VXLAN网络中,它有另外一个名字,叫做Bridge-Domain,简称BD。不同的BD通过VNI来区分BD与VNI是1:1的映射关系,这种映射关系是通过在VTEP设备上配置命令行建立起来的,配置样例如下:

bridge-domain 10   //表示创建一个“大二层广播域”BD,其编号为10
 vxlan vni 5000  //表示在BD 10下,指定与之关联的VNI为5000

VTEP设备会根据以上配置生成BD与VNI的映射关系表,该映射表可以通过命令行查看,如下所示:

display vxlan vni
Number of vxlan vni : 1 
VNI            BD-ID            State  
--------------------------------------- 
5000           10               up  

哪些消息需要进入vxlan隧道

并非所有进入到交换机的消息都会走VXLAN隧道(也可能消息就是走普通的二三层转发流程)。

在VXLAN网络中,VTEP上的的逻辑接口主要做两件事:一是根据配置来检查哪些消息需要进入VXLAN隧道;二是判断对检查通过的消息做怎样的处理。在接口上,可以根据需要定义不同的流封装类型(类似于传统网络中不同的接口类型)。目前支持的流封装类型有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处理,包括添加、替换或剥离。

将逻辑接口加入BD

image

在交换机的接入物理接口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隧道的源IP为本端VTEP的IP、目的IP为对端VTEP的IP,也就是人为地在本端VTEP和对端VTEP之间建立静态VXLAN隧道:
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 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         : -
  • 自动方式建立VXLAN隧道

自动方式下VXLAN隧道的建立需要借助于EVPN(Ethernet VPN)协议,有空再一起分享学习

如何确定消息要进哪条隧道?

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

基本的二三层转发中,二层转发依赖的是MAC表,如果没有对应的MAC条目,则主机发送ARP广播消息请求对端的MAC地址;三层转发依赖的是FIB表(可以理解为路由表)。在VXLAN中,其实也是同样的道理。

vxlan网关

VXLAN二层网关与三层网关

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

  • VXLAN二层网关:用于终端接入VXLAN网络,也可用于同一VXLAN网络的子网通信。
  • VXLAN三层网关:用于VXLAN网络中跨子网通信以及访问外部网络。

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

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

VXLAN集中式网关

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

image

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

  • 优点:对跨子网流量进行集中管理,网关的部署和管理比较简单。
  • 缺点:
  • 转发路径不是最优:同一二层网关下跨子网的数据中心三层流量都需要经过集中三层网关绕行转发(如图中蓝色虚线所示)。
  • ARP表项规格瓶颈:由于采用集中三层网关,通过三层网关转发的终端的ARP表项都需要在三层网关上生成,而三层网关上的ARP表项规格有限,这不利于数据中心网络的扩展。

VXLAN分布式网关

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

image

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

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

VXLAN网络中消息是如何转发的

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

同子网VM互通模型

image

如图: 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地址。

ARP请求

image

应答

image

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

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

image

如图所示,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和BDIF 20的IP地址。VTEP_3上存在到10.1.10.0/24网段和10.1.20.0/24网段的路由。此时,VM_A想与VM_B进行通信。

由于是首次进行通信,且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的。

不同子网VM互通消息转发流程

image

参考资料:

VXLAN vs VLAN - 知乎

什么是VXLAN - 华为

VLAN 基础知识 - 知乎

产品技术-MPLS L3VPN技术介绍-新华三集团-H3C

BGP MPLS L3VPN原理及实践-云社区-华为云

版权声明 (原创):本文内容由移动云用户自发贡献,版权归原作者所有,移动云开发者社区不拥有其著作权,亦不承担相应法律责任。如果您发现本社区有涉嫌抄袭的内容,可填写举报信息,一经查实,本社区将立刻删除涉嫌侵权内容。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值