一、VXLAN基础

——————————————————————————————————————————————————

1、VXLAN

随着网络技术的发展,云计算凭借其在系统利用率高、人力/管理成本低、灵活性/可扩展性强等方面表现出的优势,已经成为目前企业IT建设的新趋势。而服务器虚拟化作为云计算的核心技术之一,得到了越来越多的应用。

RFC定义了VLAN扩展方案VXLAN(Virtual eXtensible Local Area Network,虚拟扩展局域网)。VXLAN采用MAC in UDP(User Datagram Protocol)封装方式,是NVO3(Network Virtualization over Layer 3)中的一种网络虚拟化技术。

——————————————————————————————————————————————————

2、VXLAN解决的问题

服务器虚拟化技术的广泛部署,极大地增加了数据中心的计算密度;同时,为了实现业务的灵活变更,虚拟机VM(Virtual Machine)需要能够在网络中不受限迁移,这给传统的“二层+三层”数据中心网络带来了新的挑战。为了应对传统数据中心网络对服务器虚拟化技术的限制,VXLAN技术应运而生,其能够很好地解决如下问题:

一、针对虚拟机规模受设备表项规格限制

服务器虚拟化后,VM发生了数量级的增长,而接入侧二层设备的MAC地址表规格较小,无法满足快速增长的VM数量。

VXLAN将同一区域内的VM发出的原始报文封装成新的UDP报文,并使用物理网络的IP和MAC地址作为外层头,这样报文对网络中的其他设备只表现为封装后的参数。因此,极大降低了大二层网络对MAC地址规格的需求。

二、针对网络隔离能力限制

VLAN可用的数量仅4096个。对于虚拟化云计算服务这种多租户的场景,VLAN的隔离能力无法满足。

VXLAN引入了类似VLAN ID的用户标识,称为VXLAN网络标识VNI,支持多达16M的VXLAN段,有效地解决了云计算中海量租户隔离的问题。

三、虚拟机迁移范围受限

为了保证虚拟机迁移过程中业务不中断,则需要保证虚拟机的IP地址保持不变,这就要求虚拟机迁移必须发生在一个二层网络中。而传统的二层网络,将虚拟机迁移限制在了一个较小的局部范围内。

VXLAN将VM发出的原始报文进行封装后通过VXLAN隧道进行传输,隧道两端的VM不需感知传输网络的物理架构。即VXLAN技术在三层网络之上,构建出了一个虚拟的大二层网络,只要虚拟机路由可达,就可以将其规划到同一个大二层网络中。这就解决了虚拟机迁移范围受限问题。

——————————————————————————————————————————————————

总结

VXLAN特性在本质上属于一种VPN技术,能够在任意路由可达的网络上叠加二层虚拟网络,通过VXLAN网关实现VXLAN网络内部的互通,同时,也可以实现与传统的非VXLAN网络的互通。

VXLAN通过采用MAC in UDP封装来延伸二层网络,将以太报文封装在IP报文之上,通过路由在网络中传输,无需关注虚拟机的MAC地址。且路由网络无网络结构限制,具备大规模扩展能力。通过路由网络,虚拟机迁移不受网络架构限制。

——————————————————————————————————————————————————

3、VXLAN网络架构

VXLAN通过将原主机发出的数据包封装在UDP中,并使用物理网络的IP、MAC作为外层头进行封装,然后在IP网络上传输,到达目的地后由隧道终结点解封装并将数据发送给目标主机。

通过VXLAN,虚拟网络可接入大量租户,且租户可以规划自己的虚拟网络,不需要考虑物理网络IP地址和广播域的限制,降低了网络管理的难度,同时满足虚拟机迁移和多租户的需求。

类似于传统的VLAN网络,VXLAN网络也有VXLAN网络内互访和VXLAN网络间互访。

——————————————————————————————————————————————————

3.1、VXLAN网络内互访

通过VXLAN技术可以实现在已有三层网络上构建虚拟二层网络,实现主机之间的二层互通。

在这里插入图片描述

涉及的概念如下:

网络标识VNI

类似于传统网络中的VLAN ID,用于区分VXLAN段,不同VXLAN段的租户不能直接进行二层通信。一个租户可以有一个或多个VNI。

广播域BD

类似传统网络中采用VLAN划分广播域方法,在VXLAN网络中通过BD划分广播域。在VXLAN网络中,将VNI以1:1方式映射到广播域BD,一个BD就表示着一个广播域,同一个BD内的主机就可以进行二层互通。

VXLAN隧道端点VTEP

VTEP可以对VXLAN报文进行封装和解封装。一对VTEP地址就对应着一条VXLAN隧道。在源端封装报文后通过隧道向目的端VTEP发送封装报文,目的端VTEP对接收到的封装报文进行解封装。

虚拟接入点VAP

VXLAN业务接入点,可以基于VLAN或报文流封装类型。

◾基于VLAN接入业务:在VTEP上建立VLAN与BD的一对一或多对一的映射。这样,当VTEP收到业务侧报文后,根据VLAN与BD的映射关系,实现报文在BD内进行转发。

◾基于报文流封装类型接入业务:在VTEP连接下行业务的物理接口上创建二层子接口,并配置不同的流封装类型,使得不同的接口接入不同的数据报文。同时,将二层子接口与BD进行一一映射。这样业务侧报文到达VTEP后,即会进入指定的二层子接口。即根据二层子接口与BD的映射关系,实现报文在BD内进行转发。

网络虚拟边缘NVE

NVE是实现网络虚拟化功能的网络实体。报文经过NVE封装转换后,NVE间就可基于三层基础网络建立二层虚拟化网络。

二层网关

类似传统网络的二层接入设备,在VXLAN网络中通过二层网关解决租户接入VXLAN虚拟网络,也可用于同一VXLAN虚拟网络的子网通信。

——————————————————————————————————————————————————

3.2、VXLAN网络内互访(集中式网关)

不同BD之间的主机不能直接进行二层通信,需要通过VXLAN三层网关实现主机间的三层通信。

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

在这里插入图片描述

涉及概念如下:

三层网关

不同VNI之间的VXLAN及VXLAN和非VXLAN之间也不能直接相互通信。为了使VXLAN之间,以及VXLAN和非VXLAN之间能够进行通信,引入了VXLAN三层网关的概念。

三层网关用于VXLAN虚拟网络的跨子网通信以及外部网络的访问。

VBDIF接口

类似于传统网络中采用VLANIF解决不同广播域互通的方法,在VXLAN中引入了VBDIF的概念。

VBDIF接口在VXLAN三层网关上配置,是基于BD创建的三层逻辑接口。通过VBDIF接口配置IP地址可实现不同网段的VXLAN间,及VXLAN和非VXLAN的通信,也可实现二层网络接入三层网络。

——————————————————————————————————————————————————

3.3、VXLAN网络内互访(分布式网关)

分布式网关是指将VXLAN二层网关和三层网关部署在同一台设备上。

VTEP设备既作为VXLAN网络中的二层网关设备,与主机对接,用于解决终端租户接入VXLAN虚拟网络的问题。同时也作为VXLAN网络中的三层网关设备,实现跨子网的终端租户通信,以及外部网络的访问。

仅BGP EVPN方式部署VXLAN网络时支持分布式网关。

在这里插入图片描述

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

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

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

——————————————————————————————————————————————————

4、与VLAN对比

上面介绍VXLAN相关概念时与传统网络中的VLAN进行了对比,下面总结VXLAN与VLAN的差别。

VLAN&&VXLAN

网络形式

VLAN:将一个物理的LAN在逻辑上划分成多个广播域,并且将网络范围限制在一个较小的地域范围内。

VXLAN:在已有的任意路由可达的网络上叠加的二层虚拟网络,不受地域范围限制,具备大规模扩展能力。

可支持虚拟局域网范围

VLAN:数量仅4096个,对于公有云大型虚拟化云计算服务这种多租户的场景而言,VLAN的隔离能力无法满足。

VXLAN:支持多达16M(约1600万)租户隔离,有效地解决了云计算中海量租户隔离的问题。

网络划分方式

VLAN:通过VLAN ID划分广播域,同一个广播域之间的主机能进行二层互通。

VXLAN:通过BD划分广播域,同一个BD内的主机可以进行二层互通。

封装方式

VLAN:在报文中添加VLAN Tag。

VXLAN:原始报文在封装过程中先被添加一个VXLAN帧头,再被封装在UDP报头中,最后使用承载网络的IP、MAC地址作为外层头进行封装。

网络间互通方式

VLAN:互访通过VLANIF接口实现。

VXLAN:VXLAN间互访以及VXLAN和非VXLAN之间的通信通过VBDIF接口实现,基于BD创建的三层逻辑接口。

受益

VLAN:限制广播域:广播域被限制在一个VLAN内,节省了带宽,提高了网络处理能力。增强局域网的安全性:不同VLAN内的报文在传输时是相互隔离的。

VXLAN:位置无关性:业务可在任意位置灵活部署,缓解了服务器虚拟化后相关的网络扩展问题。

VXLAN:网络部署灵活性:在传统网络架构上叠加新的网络,部署方便,同时避免了大二层的广播风暴,可扩展性极强。

VXLAN:适合云业务:支持千万级别租户隔离,支持云业务的大规模部署。

VXLAN:技术优势:采用MAC in UDP封装方式,无需关注主机的MAC地址,降低了大二层网络对MAC地址规格的需求。

——————————————————————————————————————————————————

5、Underlay网络和Overlay网络的组合

建立VXLAN隧道的基础网络称为Underlay网络,VXLAN隧道所承载的业务网络称为Overlay网络。

在S交换机使用VXLAN特性时存在以下Underlay网络和Overlay网络的组合:

在这里插入图片描述

在这里插入图片描述

——————————————————————————————————————————————————

6、VXLAN报文封装格式

原始报文在封装过程中先被添加一个VXLAN帧头,再被封装在UDP报头中,并使用承载网络的IP、MAC地址作为外层头进行封装。

报文封装格式如图所示。

在这里插入图片描述

——————————————————————————————————————————————————

6.1、VXLAN报文格式说明

在这里插入图片描述

VXLAN header(VXLAN头封装)

VXLAN Flags:标记位,8比特,取值为00001000。
Group ID:用户组ID,16比特。当VXLAN Flags字段第一位取1时,该字段的值为Group ID。取0时,该字段的值为全0。
VNI:VXLAN网络标识,用于区分VXLAN段,由24比特组成,支持多达16M的租户。一个租户可以有一个或多个VNI,不同VNI的租户之间不能直接进行二层相互通信。
Reserved:保留未用,分别由8比特和8比特组成,设置为0。

Outer UDP header(外层UDP头封装)

DestPort:目的UDP端口号,设置为4789。
Source Port:源UDP端口号。对于含有IP头的以太报文,源UDP端口号根据ecmp load-balance配置的因子进行HASH计算。对于不含IP头的以太报文,源UDP端口号根据报文的源MAC和目的MAC进行HASH计算得出。

Outer IP header(外层IP头封装)

IP SA:源IP地址,VXLAN隧道源端VTEP的IP地址。
IP DA:目的IP地址,VXLAN隧道目的端VTEP的IP地址。

Outer Ethernet header(外层Ethernet头封装)

MAC DA:目的MAC地址,为到达目的VTEP的路径上,下一跳设备的MAC地址。
MAC SA:源MAC地址,发送报文的源端VTEP的MAC地址。
802.1Q Tag:可选字段,该字段为报文中携带的VLAN Tag。
Ethernet Type:以太报文类型,IP协议报文中该字段取值为0x0800。

——————————————————————————————————————————————————

7、VXLAN接入方式

在VXLAN网络中,将VNI以1:1方式映射到广播域BD。当报文到达VTEP后,VTEP只要能够识别出报文所属的BD,就能够选择正确的VXLAN隧道进行转发。VTEP有两种方式识别报文所属的VXLAN。

——————————————————————————————————————————————————

7.1、基于VLAN识别报文所属的VXLAN

基于网络规划,在VTEP上建立VLAN与BD的一对一或多对一的映射。这样,当VTEP收到业务侧报文后,根据VLAN与BD以及BD与VNI的对应关系即能够选择相应的VXLAN隧道进行转发。

如图:

VLAN 10与VLAN 20同属于BD 10,VTEP上存在BD 10与VLAN 10和VLAN 20的对应关系,同时BD 10对应的VXLAN的VNI为1000。这样当VTEP接收到PC_1或PC_2的报文时,就能够选择正确的VXLAN隧道进行转发。

在这里插入图片描述

配置VXLAN网络采用VLAN方式接入时,若绑定BD域的VLAN对应接口的PVID时,不支持携带多层VLAN Tag且外层VLAN为PVID的报文接入VXLAN网络。

配置VXLAN网络采用VLAN方式接入时,不支持报文通过接口类型为dot1q-tunnel的接口接入VXLAN网络。

——————————————————————————————————————————————————

7.2、基于报文流封装类型识别报文所属VXLAN

报文的流封装类型可概括分为携带指定VLAN Tag与不携带VLAN Tag两种。基于此,在VTEP连接下行业务的物理接口上创建二层子接口,并配置二层子接口对报文的不同处理方式,同时将二层子接口与BD进行一一映射。这样业务侧报文到达VTEP后,即会进入指定的二层子接口。VTEP即能够根据二层子接口与BD的映射关系,以及BD与VNI的映射关系,选择正确的VXLAN隧道进行报文转发。

不同流封装类型的二层子接口对报文的缺省处理方式分为四种。

流封装类型dot1q

只允许携带指定的一层VLAN Tag的报文进入VXLAN隧道。进行VXLAN封装时,会剥离原始报文的VLAN Tag。进行VXLAN解封装后,会根据子接口上dot1q终结配置的vid为报文添加VLAN Tag,再转发。

流封装类型untag

只允许不携带VLAN Tag的报文进入VXLAN隧道。进行VXLAN封装时,不对原始报文做处理,即不添加任何VLAN Tag。进行VXLAN解封装后,不对报文做处理,包括VLAN Tag的添加、替换或剥离。

流封装类型default

允许所有报文进入VXLAN隧道,不论报文是否携带VLAN Tag。进行VXLAN封装时,不对原始报文做处理,包括添加、替换或剥离。进行VXLAN解封装后,不对报文做处理,包括VLAN Tag的添加、替换或剥离。

流封装类型QinQ

只允许带有指定的两层VLAN Tag的报文进入VXLAN隧道。进行VXLAN封装时,会剥离原始报文的所有VLAN Tag。进行VXLAN解封装后:X系列单板:根据子接口上QinQ终结配置的ce-vid和pe-vid为报文添加两层VLAN Tag,再转发。

如图:

在这里插入图片描述

VTEP基于物理接口GE1/0/1有两个子接口,不同的流封装类型与不同的BD进行绑定。

PC_1与PC_2分别属于VLAN 10和VLAN 30,二层交换机上行连接VTEP的接口上配置的接口类型是Trunk,允许通过的VLAN为10和30,PVID为VLAN 30。

当PC_1发出的报文经过该接口时,由于接口的缺省VID与报文的VID不同,直接透传该报文到VTEP。

当PC_2发出的报文经过该接口时,由于报文的VID与接口的缺省VID相同,剥离VID=30的Tag。

因此,PC_1与PC_2发出的报文到达VTEP的GE1/0/1接口时,一个是携带VLAN 10的,一个是不携带VLAN Tag的。为了区分两种报文,就必须要在GE1/0/1上分别创建dot1q和untag类型的二层子接口:

创建二层子接口GE1/0/1.1流封装类型为dot1q,允许携带指定VLAN Tag为10的报文进入VXLAN隧道。
创建二层子接口GE1/0/1.2流封装类型为untag,允许不携带VLAN Tag的报文进入VXLAN隧道。

当PC_1或PC_2的报文到达VTEP时,根据报文的Tag情况选择进入不同的二层子接口,之后,VTEP根据子接口与BD,以及BD与VNI的映射关系,即能够选择正确的VXLAN隧道进行报文转发。

——————————————————————————————————————————————————

8、VXLAN隧道建立方式

VXLAN隧道由一对VTEP IP地址确定,报文在VTEP设备进行封装之后在VXLAN隧道中依靠路由进行传输。在进行VXLAN隧道的配置之后,只要VXLAN隧道的两端VTEP IP是三层路由可达的,VXLAN隧道就可以建立成功。

在这里插入图片描述

VXLAN隧道分为以下两种:

静态隧道:通过用户手工配置本端和远端的VNI、VTEP IP地址和头端复制列表来完成。静态配置隧道的方式仅支持VXLAN集中式网关场景。

动态隧道:通过BGP EVPN方式动态建立VXLAN隧道。在两端VTEP之间建立BGP EVPN对等体,然后对等体之间利用BGP EVPN路由来互相传递VNI和VTEP IP地址信息,从而实现动态建立的VXLAN隧道。通过BGP EVPN动态建立隧道的方式既支持VXLAN集中式网关场景,同时也支持VXLAN分布式网关场景。

——————————————————————————————————————————————————

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
后台采用apache服务器下的cgi处理c语言做微信小程序后台逻辑的脚本映射。PC端的服务器和客户端都是基于c语言写的。采用mysql数据库进行用户数据和聊天记录的存储。.zip C语言是一种广泛使用的编程语言,它具有高效、灵活、可移植性强等特点,被广泛应用于操作系统、嵌入式系统、数据库、编译器等领域的开发。C语言的基本语法包括变量、数据类型、运算符、控制结构(如if语句、循环语句等)、函数、指针等。下面详细介绍C语言的基本概念和语法。 1. 变量和数据类型 在C语言中,变量用于存储数据,数据类型用于定义变量的类型和范围。C语言支持多种数据类型,包括基本数据类型(如int、float、char等)和复合数据类型(如结构体、联合等)。 2. 运算符 C语言中常用的运算符包括算术运算符(如+、、、/等)、关系运算符(如==、!=、、=、<、<=等)、逻辑运算符(如&&、||、!等)。此外,还有位运算符(如&、|、^等)和指针运算符(如、等)。 3. 控制结构 C语言中常用的控制结构包括if语句、循环语句(如for、while等)和switch语句。通过这些控制结构,可以实现程序的分支、循环和多路选择等功能。 4. 函数 函数是C语言中用于封装代码的单元,可以实现代码的复用和模块化。C语言中定义函数使用关键字“void”或返回值类型(如int、float等),并通过“{”和“}”括起来的代码块来实现函数的功能。 5. 指针 指针是C语言中用于存储变量地址的变量。通过指针,可以实现对内存的间接访问和修改。C语言中定义指针使用星号()符号,指向数组、字符串和结构体等数据结构时,还需要注意数组名和字符串常量的特殊性质。 6. 数组和字符串 数组是C语言中用于存储同类型数据的结构,可以通过索引访问和修改数组中的元素。字符串是C语言中用于存储文本数据的特殊类型,通常以字符串常量的形式出现,用双引号("...")括起来,末尾自动添加'\0'字符。 7. 结构体和联合 结构体和联合是C语言中用于存储不同类型数据的复合数据类型。结构体由多个成员组成,每个成员可以是不同的数据类型;联合由多个变量组成,它们共用同一块内存空间。通过结构体和联合,可以实现数据的封装和抽象。 8. 文件操作 C语言中通过文件操作函数(如fopen、fclose、fread、fwrite等)实现对文件的读写操作。文件操作函数通常返回文件指针,用于表示打开的文件。通过文件指针,可以进行文件的定位、读写等操作。 总之,C语言是一种功能强大、灵活高效的编程语言,广泛应用于各种领域。掌握C语言的基本语法和数据结构,可以为编程学习和实践打下坚实的基础

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值