VXLAN
VXLAN(虚拟扩展局域网)基于IP网络,采用MAC in UDP封装方式,源端口随机,目标端口为4789(可修改),并且UDP头部的校验和必须为0,是NVO3(数据中心虚拟化技术框架)中的一种网络虚拟化技术
产生背景

- 虚拟机规模受网络规格限制
在传统二层网络环境下,数据报文是通过查询MAC地址表进行二层转发,而MAC地址表的容量限制了虚拟机的数量
VXLAN将虚拟机发出的数据包封装在UDP中,并使用物理网络的IP、MAC地址作为外层头进行封装,对网络只表现为封装后的参数,除VXLAN网络边缘设备,网络中的其他设备不需要识别虚拟机的MAC地址,极大降低了大二层网络对MAC地址规格的需求 - 网络隔离能力限制
当前主流的网络隔离技术是VLAN,但是VLAN最多只能划分4096个,无法满足标识大量租户的需求,并且无法满足网络动态调整的需求
VXLAN引入了类似VLAN ID的用户标识,称为VXLAN网络标识VNI,由24比特组成,支持多达16M的VXLAN段,从而满足了大量的用户标识 - 虚拟机迁移范围受网络架构限制
虚拟机启动后,可能由于服务器资源等问题(如CPU过高,内存不够等),需要将虚拟机迁移到新的服务器上,需要保证虚拟机的IP地址保持不变,这就要求业务网络是一个二层网络,且要求网络本身具备多路径的冗余备份和可靠性
VXLAN通过采用MAC in UDP封装来延伸二层网络,实现了物理网络和虚拟网络解耦,将以太报文封装在IP报文之上,通过路由在网络中传输,无需关注虚拟机的MAC地址,且路由网络无网络结构限制,具备大规模扩展能力、故障自愈能力、负载均衡能力,虚拟机迁移不受网络架构限制,租户也可以规划自己的虚拟网络,不需要考虑物理网络IP地址和广播域的限制 
缺点:
- BUM(广播、未知单播、组播)泛洪问题,如ARP泛洪学习MAC,开销大
 - 隧道建立,VTEP数量过多导致静态部署困难
 
基本概念

- Underlay网络和Overlay网络
- 将已有的物理网络作为Underlay网络,在其上构建出虚拟的二层或三层网络,即Overlay网络
 - Overlay网络通过封装技术、利用Underlay网络提供的三层转发路径,实现租户报文在不同站点间传递
 - 对于租户来说,Underlay网络是透明的,只能感知到Overlay网络
 
 - NVE(网络虚拟边缘节点)
- 实现网络虚拟化功能的网络实体,报文经过NVE封装转换后,NVE间就可基于三层基础网络建立二层虚拟化网络
 - 设备和服务器上的虚拟交换机vSwitch都可以作为NVE
 - 部署方式:
- 硬件模式:所有的NVE都部署在支持NVE的设备上
 - 软件模式:所有的NVE都部署在vSwitch上
 - 混合模式
 
 
 - VTEP(VXLAN隧道端点)
- 封装在NVE中,用于VXLAN报文的封装和解封装
 - VTEP与物理网络相连,分配有物理网络的IP地址,该地址与虚拟网络无关
 - VXLAN报文中源IP地址为本节点的VTEP地址,VXLAN报文中目的IP地址为对端节点的VTEP地址,一对VTEP地址就对应着一个VXLAN隧道
 
 - VNI(VXLAN网络标识)
- 用于区分VXLAN段,不同VXLAN段的虚拟机不能直接二层相互通信
 - 一个VNI表示一个租户,即使多个终端用户属于同一个VNI,也表示一个租户,由24比特组成,支持租户数量为16M
 - 在分布式网关部署场景下,VNI分为二层VNI和三层VNI
- 二层VNI是普通的VNI,以1:1方式映射到广播域BD,实现VXLAN报文同子网的转发
 - 三层VNI和VPN实例进行关联,用于VXLAN报文跨子网的转发
 
 
 - BD
- BD是VXLAN网络中转发数据报文的二层广播域
 - 在VXLAN网络中,将VNI以1:1方式映射到广播域BD,BD成为VXLAN网络转发数据报文的实体
 
 - VBDIF接口
- 基于BD创建的三层逻辑接口
 - 通过VBDIF接口配置IP地址可实现不同网段的VXLAN间,及VXLAN和非VXLAN的通信,也可实现二层网络接入三层网络
 
 - VAP虚拟接入点
- VXLAN业务接入点,可以是二层子接口或VLAN
- 二层子接口时,通过在二层子接口上配置流封装类型实现不同的接口接入不同的数据报文,将二层子接口关联广播域BD后,可实现数据报文通过BD转发
 - VLAN时,需要将VLAN绑定到广播域BD,也可以实现数据报文通过BD转发
 
 
 - VXLAN业务接入点,可以是二层子接口或VLAN
 - 网关
- 不同VNI之间的VXLAN,及VXLAN和非VXLAN之间不能直接相互通信,为了使VXLAN之间,以及VXLAN和非VXLAN之间能够进行通信,VXLAN引入了VXLAN网关
- 二层网关:用于解决租户接入VXLAN虚拟网络的问题,也可用于同一VXLAN虚拟网络的子网通信
 - 三层网关:用于VXLAN虚拟网络的跨子网通信以及外部网络的访问
 
 
 - 不同VNI之间的VXLAN,及VXLAN和非VXLAN之间不能直接相互通信,为了使VXLAN之间,以及VXLAN和非VXLAN之间能够进行通信,VXLAN引入了VXLAN网关
 
报文格式

因报文增加了50B【=2层14B+IP头20B+UDP头8B+VXLAN头8B】开销,容易造成分片问题,建议在L2GW修改MTU
- Outer Ethernet header
只跟VTEP- 目的MAC、源MAC:发送报文的虚拟机所属VTEP的MAC、接收报文的虚拟机所属的VTEP的MAC
 - 802.1Q Tag:
可选字段,该字段为报文中携带的VLAN Tag - Ethernet Type:以太报文类型
 
 - Outer IP header
只跟VTEP- 源目IP为VXLAN隧道本端、远端VTEP的IP地址
 
 - Outer UDP header
- 目的UDP端口号是4789,源端口号是内层报文通过哈希算法计算后的值
 - 校验和为0
 
 - VXLAN header
- VXLAN Flags:8比特,取值为0x08
 - VNI:VXLAN网络标识,24比特,用于区分VXLAN段
 - Reserved:0
 
 
VXLAN网关划分
- 二层网关
用于解决租户接入VXLAN虚拟网络的问题,也可用于同一VXLAN虚拟网络的子网通信。 - 三层网关
用于VXLAN虚拟网络的跨子网通信以及外部网络的访问- 集中式网关
将三层网关集中部署在一台设备上,所有跨子网的流量都经过三层网关进行转发。能够对跨子网流量的集中管理,但是存在次优路径和ARP表项数目限制的缺点

 - 分布式网关
在典型的“Spine-Leaf”组网结构下,将Leaf节点作为VXLAN隧道端点VTEP,每个Leaf节点都可作为VXLAN三层网关,Spine节点不感知VXLAN隧道,只作为VXLAN报文的转发节点
Leaf节点:
作为二层网关,与物理服务器或VM对接,用于解决终端租户接入VXLAN虚拟网络的问题
作为三层网关,进行VXLAN报文封装/解封装,实现跨子网的终端租户通信,以及外部网络的访问

 
 - 集中式网关
 
报文转发
1. BUM报文转发
根据对泛洪流量的复制方式不同可分为单播路由方式(头端复制)和组播路由方式(核心复制)两种
为了避免环路,远端VTEP从VXLAN隧道上接收到报文后,不会再将其泛洪到其他的VXLAN隧道
1. 单播路由方式泛洪(头端复制)

VTEP负责复制报文,采用单播方式将复制后的报文,通过本地接口发送给本地站点,通过VXLAN隧道发送给VXLAN内的所有远端VTEP
- 当VTEP 1上的VM 1发出BUM报文后,VTEP 1判断数据所属的VXLAN,通过该VXLAN内所有本地接口和VXLAN Tunnel转发报文
 - 通过VXLAN Tunnel转发报文时,封装VXLAN头、UDP头、IP头和二层头,将泛洪报文封装于单播报文中,发送到VXLAN内的所有远端VTEP
 - 远端VTEP收到VXLAN报文后,解封装报文,将原始数据在本地站点的VXLAN内泛洪
 
2. 组播路由方式泛洪(核心复制)

组播路由方式的组网中同一个VXLAN内的所有VTEP都加入同一个组播组,利用组播路由协议(如PIM)在IP网络上为该组播建立组播转发表项,VTEP上相应生成一个组播隧道
- 当VTEP 1上的VM 1发出BUM报文后,VTEP 1不仅在本地站点内泛洪,还会为其封装组播目的IP地址,封装后的报文根据已建立的组播转发表项转发到IP网络
 - 在组播报文到达IP网络中的中间设备时,该设备根据已建立的组播表项对报文进行复制并转发
 - 远端VTEP(VTEP 2和VTEP 3)接收到报文后,解封装报文,将原始的数据帧在本地站点的指定VXLAN泛洪
 
2. 单播报文转发
参考http://www.h3c.com/cn/d_201811/1131076_30005_0.htm
1. 同VNI单播报文转发
- ARP请求报文转发流程

 - ARP应答报文转发流程

 - 同VNI单播报文转发流程
- 在进行ARP报文的交互后,VM 1上已经存在VM 3的ARP表项,VM 3上也有VM 1的ARP表项。之后,VM 1和VM 3的通信就走单播报文转发流程了。
 - VM 1将发给VM 3的单播报文发送出去。Leaf A收到VM 1发来的报文,发现其目的MAC为MAC 3,在VXLAN 10中查找到MAC 3后,进行VXLAN封装后通过Tunnel 1发送出去。
 - Leaf B收到Leaf A发来的报文,解封装后在VXLAN 10中找到MAC 3表项,将其在对应的本地端口和VLAN中发出去。
 - VM 3收到报文后,往VM 1发送单播报文的流程相同
 
 
2. 跨VNI单播报文转发

跨VNI的流量需要经过VXLAN L3 Gateway来转发
- VM 1先将报文发送给网关。报文的源MAC是VM 1的MAC,目的MAC是网关VSI-Interface 10的MAC,源IP是VM 1的IP,目的IP是VM 4的IP。
 - Leaf A收到VM 1发来的报文,识别此报文属于VXLAN 10,查找目的MAC G10的表项,就报文进行VXLAN封装后从Tunnel 2发送出去。其中,VXLAN头中的VNI为10;外层源IP地址为Leaf A的IP,外层目的IP地址为Spine C的IP;外层源MAC地址为Leaf A的MAC,而外层目的MAC地址为去往目的IP的网络中下一跳设备的MAC地址。封装后的报文,根据外层MAC和IP信息,在IP网络中进行传输,直至到达对端VTEP。
 - Spine C收到Leaf A发来的报文,发现外层目的IP是自己,于是对报文进行解封装。
- 解完封装后,Spine C发现原始二层报文的目的MAC为本机VSI-interface 10的MAC,目的IP是IP4,于是根据路由表查找IP 4的下一跳。
 - 发现一下跳为Leaf B,出接口为VSI-Interface 20。
 - 再查询ARP表项,并将原始二层报文的源MAC修改为VSI-interface 20的MAC,将目的MAC修改为VM 4的MAC。
 - 报文到达VSI-interface 20接口时,识别到需要进入VXLAN 20隧道,所以根据MAC表对报文进行封装。这里封装的VXLAN头中的VNI为20,外层源IP地址为Spine C的IP地址,外层目的IP地址为Leaf B的IP地址;外层源MAC地址为Spine C的MAC地址,而外层目的MAC地址为去往目的IP的网络中下一跳设备的MAC地址。
 - 封装后的报文,根据外层MAC和IP信息,在IP网络中进行传输,直至到达对端VTEP。
 
 - Leaf B收到Spine C发来的报文后,解封装,得到原始二层报文。在VXLAN 20内找到目的MAC为MAC 4的表项,并将报文从对应的接口和VLAN中发送出去。最终VM 4收到了来自VM 1的报文。
 - VM 4发送给VM 1的过程与此类似