VXLAN基本原理

本文将从以下3个方面介绍VXLAN:

  • 背景。介绍VXLAN产生的背景,解决的问题;
  • VXLAN原理和实现。介绍VXLAN的原理和三种实现方式;

1 背景

随着服务器虚拟化技术在数据中心中的广泛应用,数据中心主机数量大规模增长,给虚拟网络带来了以下挑战:

  • 虚拟机规模受网络规模限制:在传统二层网络环境下,数据报文是根据MAC地址表进行二层转发,MAC地址表容量限制了虚拟机数量
  • 网络隔离能力限制:传统的8021.Q只能支持4096个VLAN,无法满足大量租户的需求;
  • 二层STP使得资源利用率不足,无法实现ECMP,且收敛时间长,维护困难;
  • 虚拟机迁移范围受网络架构限制:服务器虚拟化后,虚拟机迁移成为常见的需求,为保证迁移过程中业务不中断,需要IP,MAC地址等参数保持不变,且要求网络本身具备多路径的冗余备份和可靠性;

VXLAN的出现很好解决了这些问题:

  • VXLAN将虚拟机发出的数据包封装在UDP中,降低大二层网络对MAC地址容量需求;
  • VXLAN使用VXLAN网络标识VNI(VXLAN Network Identifier),由24比特组成,支持多达16M的VXLAN段,从而满足了大量的用户标识;
  • VXLAN使用3层IP网络建立二层通道,无需运行STP,基于IP实现ECMP;
  • VXLAN采用MAC in UDP封装来延伸二层网络,将以太报文封装在IP报文之上,通过路由在网络中传输,无需关注虚拟机的MAC地址。且路由网络无网络结构限制,具备大规模扩展能力、故障自愈能力、负载均衡能力。通过路由网络,虚拟机迁移不受网络架构限制。

2 VXLAN原理和实现

2.1 VXLAN基本概念

VXLAN是NVO3(Network Virtualization over Layer 3)中的一种网络虚拟化技术,通过将主机发出的数据包封装在UDP中,并使用物理网络的IP、MAC作为outer-header进行封装,然后在IP网络上传输,到达目的地后由隧道终结点解封装并将数据发送给目标虚拟机,实现服务器间端到端的大二层。
VXLAN组件包括:
VXLAN基本原理_第1张图片

  • NVE(Network Virtualization Edge):网络虚拟边缘节点,实现网络虚拟化功能的网络实体;
  • VTEP( VXLAN Tunnel Endpoints VXLAN):VXLAN 隧道端点;
  • VNI(VXLAN Network Identifier):类似于VLAN, 包括二层VNI和三层VNI,二层VNI和VLAN 对应,二层VNI一个网络域内唯一,支持16M VNI;三层VNI类似于SVI。

VXLAN报文格式VXLAN基本原理_第2张图片

  • VXLAN Flag 8比特,00001000,保留位有两段,分别是24 bit和8 bit,VNI 24 bit
  • 外部UDP 目的端口4789,源端口是内层以太网报文通过哈希算法后得出;
  • 外部IP包头源目的IP分别是本端VXLAN和对端VXLAN 的IP地址;
  • VXLAN封装额外增加了50 byte 的报文长度。所以在使用过程中需要注意设备上的MTU设置。一般情况下,在数据中心网络设备上,都需要开启巨型帧。

2.2 VXLAN的实现

VXLAN三种实现方式包括:

  • 组播实现:标准场景下的VXLAN使用组播实现VTEP的发现和MAC,ARP表项的建立。这种方式没有专门的协议用于控制面的构建,转发表项基于数据层面的数据包转发来建立;
  • ethernet virtual private network实现,当前最常用的是BGP ethernet virtual private network传递 arp信息,实现控制层面表项建立;对于BUM或广播报文,可以通过包头复制,或组播是实现。
  • 扩展实现:各厂商通过对VXLAN保留字段对VXLAN进行扩展,配合SDN控制器,实现厂商的VXLAN商业化产品,例如CISCO ACI。有关CISCO ACI实现将会进一步研究。

2.2.1组播实现

组播实现中,所有VTEP都需要配置同一个组播地址,且支持ASM。
VXLAN基本原理_第3张图片
host A需要和host B通信, ARP请求过程如下:

  1. A 发送 ARP请求,请求 B 的 MAC地址;
  2. VTEP-1收到host设备 A发送的 ARP请求 ,ARP请求进行 VXLAN封装, VNI 设置为10,outer-src-ip 是 VTEP-1的 IP ,outer-dst-ip 是加入的组播组地址,封装完成后转发至 VXLAN组播组;
  3. VTEP-2、VTEP3加入相同的组播组,收到 VTEP-1发送 的组播报文,解封装后检查 VNI 与本地 VNI 是否匹配,如匹配将 ARP请求发送至本地网络。同时记录 VNI、inner src MAC、outer src IP 的对应关系。
  4. B 收到 ARP请求后以单播方式发送 ARP响应;VTEP-2收到 B 的 ARP响应后进行 VXLAN封装,以单播方式发送。
  5. VTEP-1收到封装后的 ARP响应后,解封装比对 VNI,如匹配将 ARP响应发送至host设备 A,同时记录 VNI、inner src MAC, outer src IP 的对应关系,构建控制平面表项;此时 VTEP-1、VTEP-2均已成功构建控制平面地址映射信息,
    后续 VXLAN数据使用单播在 VTEP-1和 VTEP-2之间传输。

ARP请求完成后,数据转发过程如下:

  1. ARP请求完成后,主机 A 向主机 B 发送数据, VTEP-1收到数据中查找地址映射表项,将原始数据进行 VXLAN封装后转发至 VTEP-2。外层目的IP为VTEP2地址,外层源IP为VTEP1地址,内层数据帧为A发出的原始二层帧
  2. VTEP-2收到 VXLAN数据包后检查 VNI 是否与本地 VNI 匹配, 如匹配则解封装后将原始以太网帧转发至主机B。
  3. B收到后,对数据包进行回应,过程和A发送数据包过程类似,在此不再赘述;

2.2.2 VXLAN的ethernet virtual private network实现

  • VXLAN组播实现中,转发的控制通过MAC自学习,需要泛洪时需使用组播进行模拟,非常依赖底层的IP网络组播,对设备和运维要求较高。
  • 为了解决这个问题, RFCRFC7432 在 BGP协议基础上定义了ethernet virtual private network NLRI(AFI = 25,SAFI = 70),ethernet virtual private network NLRI中定义了几种BGP ethernet virtual private network路由类型,用于二层网络中不同站点的MAC地址学习和发布。
  • 通过在VTEP之间交换BGP ethernet virtual private network路由实现VTEP的自动发现、主机信息相互通告等特性,避免了不必要的数据流量泛洪,同时也将VTEP发现和主机信息学习从数据平面转移到控制平面。

2.2.2.1 ethernet virtual private network路由类型

和VXLAN相关的ethernet virtual private network路由类型包括:

  • type 2 :MAC/IP通告路由.MAC/IP地址通告路由可以携带本端PE上ethernet virtual private network实例的RD值、ESI值以及ethernet virtual private network实例对应的私网标签,用于从本端PE向其它PE发布单播MAC,IP地址的可达信息;
    type 2 报文如下:
    VXLAN基本原理_第4张图片
  • type 3 :集成多播路由。该类型路由在VXLAN控制平面中主要用于VTEP的自动发现,VXLAN隧道的动态建立,和传递二层VNI和VTEP IP地址信息(用于建立头部复制转发列表)
    type 3报文格式如下:VXLAN基本原理_第5张图片
  • type 4:以太网网段路由。用于CE双宿的场景下进行DF(design forward)选举;
  • type 5:IP前缀路由路由,在单纯ethernet virtual private network环境中,用于携带IPv4和IPv6的前缀信息。在VXLAN场景中,如果type 5路由携带主机IP地址,主要用于分布式网关场景中的主机IP路由通告;如果type 5路由网段地址,通过传递该类型路由,可以实现VXLAN网络中的主机访问外部网络。

2.2.2.2 隧道建立

VXLAN基本原理_第6张图片
VXLAN隧道建立过程:

  1. Leaf1和Leaf2之间建立BGP ethernet virtual private network对等体,Leaf1和Leaf2生成BGP ethernet virtual private network路由并发送给对端,该路由携带本端ethernet virtual private network实例的出方向RT和BGP ethernet virtual private network type 3路由。
  2. Leaf1和Leaf2在收到对端发来的BGP ethernet virtual private network路由后,首先检查该路由携带的ethernet virtual private network实例RT,如果与本端ethernet virtual private network实例的入方向RT相等,则接收该路由,否则丢弃该路由。
  3. 在接收该路由后,Leaf1和Leaf2将获取其中携带的对端VTEP IP地址和VNI,如果对端VTEP IP地址是三层路由可达的,则建立一条到对端的VXLAN隧道;如果对端VNI与本端相同,则创建一个头端复制表,用于后续BUM报文转发。

2.2.2.3 MAC地址学习

VXLAN基本原理_第7张图片

  1. Host3首次与Leaf1通信时,通过动态ARP报文,Leaf1学习到Host3的MAC地址、BDID(二层广播域标识)和物理口Port1的对应关系;
  2. Leaf1根据Host3的ARP表项生成BGP ethernet virtual private network路由并发送给对等体Leaf2,该路由携带本端ethernet virtual private network实例的出方向RT、路由下一跳属性以及BGP ethernet virtual private network MAC/IP路由。路由下一跳属性携带的是本端VTEP IP地址;
  3. Leaf2收到Leaf1发来的BGP ethernet virtual private network路由后,首先检查该路由携带的ethernet virtual private network实例的出方向virtual private network-Target,如果与本端ethernet virtual private network实例的入方向virtual private network-Target相等,则接收该路由,否则丢弃该路由。
  4. 在接收该路由后,Leaf2获得Host3的MAC地址、BDID和Leaf1上VTEP IP地址的对应关系,并在本地的MAC表中生成Host3的MAC表项,其出接口需根
    据下一跳进行迭代,最终迭代结果是指向Leaf1的VXLAN隧道

2.2.2.4 同网段已知单播报文转发

VXLAN基本原理_第8张图片

  1. Leaf1收到来自Host3的报文,根据报文中接入的端口和VLAN信息获取对应
    的二层广播域,并在该二层广播域内查找出接口和封装信息。
  2. Leaf1上VTEP根据查找到的封装信息对数据报文进行VXLAN封装,然后根
    据查找到的出接口进行报文转发。
  3. Leaf2上VTEP收到VXLAN报文后,根据UDP目的端口号、源/目的IP地址、
    VNI判断VXLAN报文的合法有效性。然后依据VNI获取对应的二层广播域,
    进行VXLAN解封装,获取内层的二层报文。
  4. Leaf2根据内层二层报文的目的MAC,从本地MAC表找到对应的出接口和
    封装信息,为报文添加VLAN Tag,转发给对应的主机Host2。

2.2.2.5 同网段已知单播报文转发

VXLAN基本原理_第9张图片
转发过程:

  1. Leaf1收到来自终端A的报文,根据报文中接入的端口和VLAN信息获取对应
    的二层广播域。
  2. Leaf1上VTEP根据对应的二层广播域获取对应VNI的头端复制隧道列表,依据获取的隧道列表进行报文复制,并进行VXLAN封装。然后将封装后的报文从出接口转发出去。
  3. Leaf2/Leaf3上VTEP收到VXLAN报文后,根据UDP目的端口号、源/目的IP地址、VNI判断VXLAN报文的合法有效性。然后依据VNI获取对应的二层广播域,进行VXLAN解封装,获取内层二层报文。
  4. Leaf2/Leaf3检查内层二层报文的目的MAC,发现是BUM MAC,在对应的二层广播域内的非VXLAN隧道侧进行广播处理,即:Leaf2/Leaf3分别从本地MAC表中找到非VXLAN隧道侧的所有出接口和封装信息,为报文添加VLAN Tag,转发给对应的终端B/C。

你可能感兴趣的:(VXLAN)