VXLAN技术白皮书
Copyright © 2023 新华三技术有限公司 版权所有,保留一切权利。
非经本公司书面许可,任何单位和个人不得擅自摘抄、复制本文档内容的部分或全部,并不得以任何形式传播。
除新华三技术有限公司的商标外,本手册中出现的其它公司的商标、产品标识及商品名称,由各自权利人拥有。
本文中的内容为通用性技术信息,某些信息可能不适用于您所购买的产品。
随着虚拟化技术的快速发展,数据中心的规模不断扩大,数据中心租户和虚拟机的数量呈爆发式增长,传统的二层网络面临着巨大的挑战:
· VLAN资源不足
传统的二层网络隔离技术VLAN,因其标识相互隔离的虚拟二层网络的Tag域只有12比特,仅能划分出4096个相互隔离的虚拟二层网络,远远无法满足大二层网络中隔离大量租户的需求。
· 虚拟机迁移
为了实现网络业务和资源的灵活调配,虚拟机跨设备甚至跨数据中心的迁移越来越频繁。为了保证虚拟机迁移过程中业务不中断,虚拟机迁移前后的IP地址和MAC地址需要保持不变,而传统网络技术无法实现虚拟机迁移前后的IP、MAC不变。
同时,随着数据中心多中心的部署,虚拟机的跨数据中心迁移、灾备,跨数据中心业务负载分担等需求,使得二层网络的扩展不仅是在数据中心的边界为止,还需要考虑跨越数据中心机房的区域,延伸到同城备份中心、远程灾备中心。一般情况下,多数据中心之间是通过路由连通的,天然是一个三层网络。而要实现通过三层网络连接的两个二层网络互通,就必须实现“L2 over L3”。
VXLAN(Virtual eXtensible LAN,可扩展虚拟局域网络)是基于IP网络、采用“MAC in UDP”封装形式的二层VPN技术。VXLAN可以基于已有的服务提供商或企业IP网络,为分散的物理站点提供二层互联,并能够为不同的租户提供业务隔离。VXLAN主要应用于数据中心网络和园区接入网络。
· 支持大量的租户:使用24位的标识符,最多可支持2的24次方(16777216)个VXLAN,支持的租户数目大规模增加,解决了传统二层网络VLAN资源不足的问题。
· 虚拟机迁移IP、MAC不变:采用了MAC in UDP的封装方式,实现原始二层报文在IP网络中的透明传输,保证虚拟机迁移前后的IP和MAC不变。
· 易于维护:基于IP网络组建大二层网络,使得网络部署和维护更加容易,并且可以充分地利用现有的IP网络技术,例如利用等价路由进行负载分担等;只有IP核心网络的边缘设备需要进行VXLAN处理,网络中间设备只需根据IP头转发报文,降低了网络部署的难度和费用。
图1 VXLAN网络模型示意图
如图1所示,VXLAN的典型网络模型中包括如下几部分:
· 用户终端(Terminal):用户终端设备可以是PC机、无线终端设备、服务器上创建的VM(Virtual Machine,虚拟机)等。不同的用户终端可以属于不同的VXLAN。属于相同VXLAN的用户终端处于同一个逻辑二层网络,彼此之间二层互通;属于不同VXLAN的用户终端之间二层隔离。
本文档中如无特殊说明,均以VM为例介绍VXLAN工作机制。采用其他类型用户终端时,VXLAN工作机制与VM相同,不再赘述。
· VTEP(VXLAN Tunnel End Point,VXLAN隧道端点):VXLAN的边缘设备。VXLAN的相关处理都在VTEP上进行,例如识别以太网数据帧所属的VXLAN、基于VXLAN对数据帧进行二层转发、封装和解封装报文等。VTEP可以是一台独立的物理设备,也可以是虚拟机所在的服务器。VTEP可以划分为VTEP和GW两种角色:
¡ VTEP:只支持VXLAN二层转发功能的设备,即只能在相同VXLAN内进行二层转发。
¡ GW:可以进行跨VXLAN或者访问外部IP网络等三层转发的设备。根据部署方式,GW可以分为集中式网关和分布式网关两种。
· VXLAN隧道:两个VTEP之间的点到点逻辑隧道。VTEP为数据帧封装VXLAN头、UDP头和IP头后,通过VXLAN隧道将封装后的报文转发给远端VTEP,远端VTEP对其进行解封装。
· 核心设备:IP核心网络中的设备(如图1中的P设备)。核心设备不参与EVPN处理,仅需要根据封装后报文的外层目的IP地址对报文进行三层转发。
· VXLAN网络:用户网络可能包括分布在不同地理位置的多个站点内的用户终端。在骨干网上可以利用VXLAN隧道将这些站点连接起来,为用户提供一个逻辑的二层VPN。这个二层VPN称为一个VXLAN网络。VXLAN网络通过VXLAN ID来标识,VXLAN ID又称VNI(VXLAN Network Identifier,VXLAN网络标识符),其长度为24比特。不同VXLAN网络中的用户终端不能二层互通。
· VSI(Virtual Switch Instance,虚拟交换实例):VTEP上为一个VXLAN提供二层交换服务的虚拟交换实例。VSI可以看作是VTEP上的一台基于VXLAN进行二层转发的虚拟交换机。它具有传统以太网交换机的所有功能,包括源MAC地址学习,MAC地址老化,泛洪等。VSI与VXLAN一一对应。
· VSI-Interface(VSI的虚拟三层接口):作为VXLAN内虚拟机的网关,用于处理跨VXLAN网络的报文转发。一个VXLAN网络对应一个VSI-Interface。
VXLAN支持用户网络和IP核心网络为IPv6网络。当用户网络或IP核心网络是IPv6网络时,可以通过部署VXLAN实现网络互通。
如图2所示,若核心网络已升级为IPv6网络,用户网络仍为IPv4网络,可以通过在VTEP之间建立IPv6 VXLAN隧道,实现IPv4用户网络跨IPv6网络的互通。
如图3所示,若用户网络已升级为IPv6网络,核心网络依然为IPv4网络,可以通过在VTEP之间建立IPv4 VXLAN隧道,实现IPv6用户网络跨IPv4网络的互通。
如图4所示,若用户网络、核心网络均已为IPv6网络,则可以通过在VTEP之间建立IPv6 VXLAN隧道,实现IPv6用户网络的互通。
图5 VXLAN报文封装示意图
如图5所示,VXLAN报文的封装格式为:在原始二层数据帧外添加VXLAN头、UDP头、IP头和外层以太头。
· 外层以太头:长度为14字节,若包含VLAN Tag则为18字节。其中,源MAC地址为源VM所属VTEP的MAC地址,目的MAC地址为到达目的VTEP的路径上下一跳设备的MAC地址。
· 外层IP头:既可以是IPv4报文头,也可以是IPv6报文头。IPv4报文头长度为20字节,IPv6报文头长度为40字节。其中,源IP地址为源VM所属VTEP的IP地址,目的IP地址为目的VM所属VTEP的IP地址。
· 外层UDP报文头:长度为8字节。其中,UDP目的端口号缺省为4789,表示内层封装报文为VXLAN报文。UDP源端口号(UDP Source Port)为本地随机选取的数值,可以用于VTEP之间多路径负载分担的计算。
· VXLAN头长度为8字节,主要包括以下部分:
¡ 标记位:“I”位为1时,表示VXLAN头中的VXLAN ID有效;为0,表示VXLAN ID无效。其他位保留未用,设置为0。
¡ VXLAN ID:用来标识一个VXLAN网络,长度为24比特。
¡ Reserved:当前协议保留位。
· 原始二层数据帧:虚拟机发送的原始以太网报文。
从报文的封装可以看出,VXLAN头和原始二层数据帧是作为UDP报文的载荷存在的。VTEP之间的网络设备只需要根据外层以太头和外层IP头进行转发、利用源UDP端口号进行负载分担。在这一过程中,VXLAN报文的处理与普通的IP报文完全相同。因此,除了VTEP设备,现网的大量设备无需更换或升级即可支持VXLAN网络。
VXLAN运行机制可以概括为:
(1) 发现远端VTEP,在VTEP之间建立VXLAN隧道,并将VXLAN隧道与VXLAN关联。
(2) 识别接收到的报文所属的VXLAN,以便将报文的源MAC地址学习到VXLAN对应的VSI,并在该VSI内转发该报文。
(3) 学习终端的MAC地址。
(4) 根据学习到的MAC地址表项转发报文。
为了将VXLAN报文传递到远端VTEP,需要创建VXLAN隧道,并将VXLAN隧道与VXLAN关联。
VXLAN隧道的建立方式有如下两种:
· 手工方式:手工配置Tunnel接口,并指定隧道的源和目的IP地址分别为本端VTEP和远端VTEP的IP地址。
· 自动方式:通过EVPN(Ethernet Virtual Private Network,以太网虚拟专用网络)发现远端VTEP后,自动在本端VTEP和远端VTEP之间建立VXLAN隧道。
VXLAN隧道与VXLAN关联的方式有如下两种:
· 手工方式:手工将VXLAN隧道与VXLAN关联。
· 自动方式:通过EVPN协议自动将VXLAN隧道与VXLAN关联。
VTEP采用如下几种方式在数据帧和VXLAN之间建立关联:
· 将三层接口与VSI关联:从该三层接口接收到的数据帧均属于指定的VSI。VSI内创建的VXLAN即为该数据帧所属的VXLAN。
· 将以太网服务实例与VSI关联:以太网服务实例定义了一系列匹配规则,如匹配指定VLAN的报文、匹配接口接收到的所有报文等。从二层以太网接口上接收到的、与规则匹配的数据帧均属于指定的VSI/VXLAN。
· 将VLAN与VXLAN关联:VTEP接收到的该VLAN的数据帧均属于指定的VXLAN。
VTEP从指定VLAN、三层接口或以太网服务实例接收到数据帧后,根据关联方式判断报文所属的VXLAN。
如图6所示,VM 1属于VLAN 2,在VTEP上配置以太网服务实例1匹配VLAN 2的报文,将以太网服务实例1与VSI A绑定,并在VSI A内创建VXLAN 10,则VTEP接收到VM 1发送的数据帧后,可以判定该数据帧属于VXLAN 10。
对于从VXLAN隧道上接收到的VXLAN报文,VTEP根据报文中携带的VXLAN ID判断该报文所属的VXLAN。
MAC地址学习分为本地MAC地址学习和远端MAC地址学习两部分。
本地MAC地址学习是指VTEP对本地站点内VM的MAC地址的学习。本地MAC地址的学习方式有如下几种:
· 静态配置:手工指定本地MAC地址所属的VSI(即VXLANI),及其对应的以太网服务实例(即AC)。
· 通过报文中的源MAC地址动态学习:VTEP接收到本地VM发送的数据帧后,判断该数据帧所属的VSI,并将数据帧中的源MAC地址(本地站点内VM的MAC地址)添加到该VSI的MAC地址表中,该MAC地址对应的接口为接收到数据帧的接口。
远端MAC地址学习是指VTEP对远端站点内VM的MAC地址的学习。远端MAC地址的学习方式有如下几种:
· 静态配置:手工指定远端MAC地址所属的VSI(即VXLAN),及其对应的VXLAN隧道接口。
· 通过报文中的源MAC地址动态学习:VTEP从VXLAN隧道上接收到远端VTEP发送的VXLAN报文后,根据VXLAN ID判断报文所属的VXLAN,对报文进行解封装,还原二层数据帧,并将数据帧中的源MAC地址(远端站点内VM的MAC地址)添加到所属VXLAN对应VSI的MAC地址表中,该MAC地址对应的接口为VXLAN隧道接口。
· 通过BGP EVPN学习:在VTEP上运行BGP EVPN,通过BGP EVPN将本地MAC地址及其所属的VXLAN信息通告给远端VTEP。远端VTEP接收到该信息后,在VXLAN对应VSI的MAC地址表中添加MAC地址表项,该MAC地址对应的接口为VXLAN隧道接口。
· 通过OpenFlow下发:OpenFlow控制器以流表的形式向VTEP设备下发远端MAC地址表项。
· 通过OVSDB下发:控制器通过OVSDB协议向VTEP设备下发远端MAC地址表项。
通过不同方式学习到的远端MAC地址优先级由高到低依次为:
(1) 静态配置、OpenFlow下发、OVSDB下发的MAC地址优先级相同,且优先级最高。
(2) 通过BGP EVPN学习的MAC地址优先级次之。
(3) 动态学习的MAC地址优先级最低。
完成本地和远端MAC地址学习后,VTEP在VXLAN内转发单播流量的过程如下所述。
对于站点内流量,VTEP判断出报文所属的VSI后,根据目的MAC地址查找该VSI的MAC地址表,从相应的本地接口转发给目的VM。
如图7所示,VM 1(MAC地址为MAC 1)发送以太网帧到VM 4(MAC地址为MAC 4)时,VTEP 1从接口Interface A收到该以太网帧后,判断该数据帧属于VSI A(VXLAN 10),查找VSI A的MAC地址表,得到MAC 4的出接口为Interface B,所在VLAN为VLAN 10,则将以太网帧从接口Interface B的VLAN 10内发送给VM 4。
如图8所示,以VM 1(MAC地址为MAC 1)发送以太网帧给VM 7(MAC地址为MAC 7)为例,站点间单播流量的转发过程为:
(1) VM 1发送以太网数据帧给VM 7,数据帧的源MAC地址为MAC 1,目的MAC为MAC 7,VLAN ID为2。
(2) VTEP 1从接口Interface A(所在VLAN为VLAN 2)收到该数据帧后,判断该数据帧属于VSI A(VXLAN 10),查找VSI A的MAC地址表,得到MAC 7的出端口为Tunnel1。
(3) VTEP 1为数据帧封装VXLAN头、UDP头和IP头后,将封装好的报文通过VXLAN隧道Tunnel1、经由P设备发送给VTEP 2。
(4) VTEP 2接收到报文后,根据报文中的VXLAN ID判断该报文属于VXLAN 10,并剥离VXLAN头、UDP头和IP头,还原出原始的数据帧。
(5) VTEP 2查找与VXLAN 10对应的VSI A的MAC地址表,得到MAC 7的出端口为Interface A(所在VLAN为VLAN 20)。
(6) VTEP 2从接口Interface A的VLAN 20内将数据帧发送给VM 7。
VTEP从本地站点接收到泛洪流量(组播、广播和未知单播流量)后,将其转发给除接收接口外的所有本地接口和VXLAN隧道。为了避免环路,VTEP从VXLAN隧道上接收到报文后,不会再将其泛洪到其他的VXLAN隧道,只会转发给所有本地接口。
根据复制方式的不同,流量泛洪方式分为单播路由方式(头端复制)、组播路由方式(核心复制)和泛洪代理方式(服务器复制)。
如图9所示,VTEP负责复制报文,采用单播方式将复制后的报文通过本地接口发送给本地站点,并通过VXLAN隧道发送给VXLAN内的所有远端VTEP。
IPv6网络作为核心网络时不支持组播路由方式转发泛洪流量。
数据中心网络中需要通过IP核心网络进行二层互联的站点较多时,采用组播路由方式可以节省泛洪流量对核心网络带宽资源的占用。
如图10所示,在组播路由方式下,同一个VXLAN内的所有VTEP都加入同一个组播组,利用组播路由协议(如PIM)在IP核心网上为该组播组建立组播转发表项。VTEP接收到泛洪流量后,不仅在本地站点内泛洪,还会为其封装组播目的IP地址,封装后的报文根据已建立的组播转发表项转发到远端VTEP。
数据中心网络中需要通过IP核心网络进行二层互联的站点较多时,采用泛洪代理方式可以在没有组播协议参与的情况下,节省泛洪流量对核心网络带宽资源的占用。
如图11所示,在泛洪代理方式下,同一个VXLAN内的所有VTEP都通过手工方式与代理服务器建立隧道。VTEP接收到泛洪流量后,不仅在本地站点内泛洪,还会将其发送到代理服务器,由代理服务器转发到其他远端VTEP。
目前泛洪代理方式主要用于SDN网络,使用虚拟服务器作为泛洪代理服务器。采用泛洪代理方式时,需要注意如下几点:
· 在VTEP上关闭远端MAC地址自动学习功能,采用SDN控制器下发的MAC地址表项进行流量转发。
· 在VTEP网络侧接口上需要关闭报文入接口与静态MAC地址表项匹配检查功能。当VTEP设备为IRF设备时,成员设备间互连的IRF端口上也需要关闭报文入接口与静态MAC地址表项匹配检查功能。
为了避免广播发送的ARP请求或组播发送的ND请求报文占用核心网络带宽,VTEP从本地站点或VXLAN隧道接收到ARP/ND请求和ARP/ND应答报文后,根据该报文在本地建立ARP/ND泛洪抑制表项。后续当VTEP收到本站点内虚拟机请求其它虚拟机MAC地址的ARP/ND请求时,优先根据ARP/ND泛洪抑制表项进行代答。如果没有对应的表项,则将ARP/ND请求泛洪到核心网。ARP/ND泛洪抑制功能可以大大减少ARP/ND泛洪的次数。
图12 ARP泛洪抑制示意图
如图12所示,以ARP为例,泛洪抑制的处理过程如下:
(1) 虚拟机VM 1发送ARP请求,获取VM 7的MAC地址。
(2) VTEP 1根据接收到的ARP请求,建立VM 1的ARP泛洪抑制表项,并在VXLAN内泛洪该ARP请求(图12以单播路由泛洪方式为例)。
(3) 远端VTEP(VTEP 2和VTEP 3)解封装VXLAN报文,获取原始的ARP请求报文后,建立VM 1的ARP泛洪抑制表项,并在本地站点的指定VXLAN内泛洪该ARP请求。
(4) VM 7接收到ARP请求后,回复ARP应答报文。
(5) VTEP 2接收到ARP应答后,建立VM 7的ARP泛洪抑制表项,并通过VXLAN隧道将ARP应答发送给VTEP 1。
(6) VTEP 1解封装VXLAN报文,获取原始的ARP应答,并根据该应答建立VM 7的ARP泛洪抑制表项,之后将ARP应答报文发送给VM 1。
(7) 在VTEP 1上建立ARP泛洪抑制表项后,虚拟机VM 4发送ARP请求,获取VM 1或VM 7的MAC地址。
(8) VTEP 1接收到ARP请求后,建立VM 4的ARP泛洪抑制表项,并查找本地ARP泛洪抑制表项,根据已有的表项回复ARP应答报文,不会对ARP请求进行泛洪。
(9) 在VTEP 3上建立ARP泛洪抑制表项后,虚拟机VM 10发送ARP请求,获取VM 1的MAC地址。
(10) VTEP 3接收到ARP请求后,建立VM 10的ARP泛洪抑制表项,并查找本地ARP泛洪抑制表项,根据已有的表项回复ARP应答报文,不会对ARP请求进行泛洪。
VXLAN可以为分散的物理站点提供二层互联。如果要为VXLAN站点内的虚拟机提供三层业务,则需要在网络中部署VXLAN IP网关,以便站点内的虚拟机通过VXLAN IP网关与外界网络或其他VXLAN网络内的虚拟机进行三层通信。VXLAN IP网关既可以部署在独立的物理设备上,也可以部署在VTEP设备上。VXLAN IP网关部署在VTEP设备上时,又分为集中式VXLAN IP网关和分布式VXLAN IP网关两种方式。
如图13所示,VXLAN IP网关部署在独立的物理设备上时,VXLAN IP网关作为物理站点接入VTEP,VXLAN业务对于网关设备透明。虚拟机通过VXLAN IP网关与三层网络中的节点通信时,虚拟机将三层报文封装成二层数据帧发送给VXLAN IP网关。VTEP对该数据帧进行VXLAN封装,并在IP核心网络上将其转发给远端VTEP(连接VXLAN IP网关的VTEP)。远端VTEP对VXLAN报文进行解封装,并将原始的二层数据帧转发给VXLAN IP网关。VXLAN IP网关去掉链路层封装后,对报文进行三层转发。
图13 独立的VXLAN IP网关示意图
如图14所示,集中式VXLAN IP网关进行二层VXLAN业务终结的同时,还对内层封装的IP报文进行三层转发处理。与独立的VXLAN IP网关相比,该方式除了能够节省设备资源外,VXLAN IP网关功能由VXLAN对应的三层虚接口(VSI虚接口)承担,三层业务的部署和控制也更加灵活和方便。
图14 集中式VXLAN IP网关示意图
如图15所示,以地址为10.1.1.11的虚拟机为例,虚拟机与外界网络进行三层通信的过程为:
(1) 虚拟机(10.1.1.11)跨网段进行三层通信时,先广播发送ARP请求消息,解析VXLAN IP网关(10.1.1.1)的MAC地址。
(2) VTEP 1收到ARP请求消息后,添加VXLAN封装并发送给所有的远端VTEP。
(3) VTEP 3解封装VXLAN报文后,发现ARP请求的目的IP为VXLAN对应的本地网关IP地址,即与VXLAN关联的VSI虚接口的IP地址,则学习10.1.1.11的ARP信息,并向虚拟机回应ARP应答消息。
(4) VTEP 1收到ARP应答消息后,将该消息转发给虚拟机。
(5) 虚拟机获取到网关的MAC地址后,为三层报文添加网关的MAC地址,通过VXLAN网络将二层数据帧发送给VTEP 3。
(6) VTEP 3解封装VXLAN报文,并去掉链路层头后,对内层封装的IP报文进行三层转发,将其发送给最终的目的节点。
(7) 目的节点回复的报文到达网关后,网关根据已经学习到的ARP表项,为报文封装链路层头,并通过VXLAN网络将其发送给虚拟机。
图15 集中式VXLAN IP网关的三层通信过程
属于不同VXLAN网络的虚拟机之间的通信过程与上述过程类似,不同之处在于一个VXLAN网络的集中式网关需要将报文转发给另一个VXLAN网络的集中式网关,再由该集中式网关将报文转发给本VXLAN内对应的虚拟机。
由单台设备承担站点内大量虚拟机的集中式VXLAN IP网关功能,对设备的处理资源占用较高,并且对于网关的单点故障没有保护措施。通过集中式VXLAN IP网关保护组,可以实现多台设备同时承担网关功能,在提供单点故障保护机制的同时,还可以实现上下行流量的负载分担。
图16 集中式VXLAN IP网关保护组示意图
如图16所示,两台集中式VXLAN IP网关形成保护组,两台设备上存在相同的VTEP IP,称为保护组的VTEP IP。接入层VTEP与保护组的VTEP IP建立VXLAN隧道,将虚拟机发送至其它网络的报文转发至保护组,保护组中的两台网关设备均可以接收并处理虚拟机发往其它网络的流量。
在接入层VTEP上,该VTEP会与保护组中每个成员VTEP的自身IP地址自动建立VXLAN隧道,泛洪流量(组播、广播和未知单播)通过该隧道转发给所有的成员VTEP,以确保成员VTEP上的表项信息一致。
采用集中式VXLAN IP网关方案时,不同VXLAN之间的流量以及VXLAN访问外界网络的流量全部由集中式VXLAN IP网关处理,网关压力较大,并加剧了网络带宽资源的消耗。如图17所示,在分布式VXLAN IP网关方案中,每台VTEP设备都可以作为VXLAN IP网关,对本地站点的流量进行三层转发,很好地缓解了网关的压力。
图17 分布式VXLAN IP网关示意图
如图18所示,在分布式VXLAN IP网关组网中,所有的分布式VXLAN IP网关(GW)上都需要创建VSI虚接口,并为不同GW上的相同VSI虚接口配置相同的IP地址,作为VXLAN内虚拟机的网关地址。边界网关(Border)上也需要创建VSI虚接口,并配置IP地址。在分布式VXLAN IP网关上还需要开启以下功能中的一种:
· ARP/ND泛洪抑制功能:开启本功能后,二层流量查找MAC地址表进行转发,三层流量查找ARP/ND表项进行转发。
· 本地代理ARP功能或本地ND代理功能:开启本功能后,所有流量都通过查找ARP表项或ND表项进行三层转发。下文均以此功能为例,介绍分布式VXLAN IP网关中的通信过程。
网关可以通过多种方式生成ARP表项和ND表项,下文以根据ARP协议和ND协议动态学习表项来介绍分布式VXLAN IP网关中的通信过程。
图18 分布式VXLAN IP网关部署示意图
如图18所示,以VM 1访问VM 4为例,相同VXLAN内不同站点的虚拟机的通信过程为:
(1) VM 1广播发送ARP请求消息,获取VM 4的MAC地址。
(2) GW 1收到ARP请求消息后,学习VM 1的ARP信息,并代理应答该ARP请求,即:向VM 1发送ARP应答消息,应答的MAC地址为VSI虚接口10的MAC地址。
(3) VM 1学习到VM 4的MAC地址为GW 1上VSI虚接口10的MAC地址。
(4) GW 1将接收到的ARP请求消息中的源MAC地址修改为VSI虚接口10的MAC地址,在VXLAN 10内向本地站点和远端站点广播发送该ARP请求。
(5) GW 2对VXLAN报文进行解封装后,学习VM 1的ARP信息(IP为10.1.1.11、MAC为GW 1上VSI虚接口10的MAC、出接口为接收该VXLAN报文的Tunnel接口),并将ARP请求消息中的源MAC修改为本地VSI虚接口10的MAC地址,在VXLAN 10的本地站点内进行广播。
(6) VM 4收到ARP请求后,学习VM 1的ARP信息(IP为10.1.1.11、MAC为GW 2上VSI虚接口10的MAC),并发送ARP应答消息给本地网关GW 2。
(7) GW 2从VM 4收到ARP应答消息后,学习VM 4的ARP信息,将ARP应答消息中的源MAC修改为本地VSI虚接口10的MAC地址,并根据已经学习到的ARP表项,为ARP应答消息添加VXLAN封装后发送给GW 1。
(8) GW 1对VXLAN报文进行解封装后,根据收到的ARP应答消息学习VM 4的ARP信息(IP为10.1.1.12、MAC为GW 2上VSI虚接口10的MAC、出接口为接收该VXLAN报文的Tunnel接口)。
(9) 通过上述步骤完成ARP信息的学习后,VM 1发送给VM 4的报文,根据已经学习到的ARP信息进行转发:首先发送给GW 1;GW 1对其进行VXLAN封装后,将其发送给GW 2;GW 2解封装后,将其发送给VM 4。
图19 不同VXLAN间不同站点的虚拟机通信过程示意图
如图19所示,以VM 1(VXLAN 10)访问VM 5(VXLAN 20)为例,不同VXLAN的虚拟机的通信过程为:
(1) VM 1广播发送ARP请求消息,获取网关10.1.1.1的MAC地址。
(2) GW 1收到ARP请求消息后,学习VM 1的ARP信息,并向VM 1发送ARP应答消息,应答的MAC地址为VSI虚接口10的MAC地址。这样,VM 1会将访问VM 5的报文发送给GW 1。
(3) GW 1在VXLAN 10内向本地站点和远端站点广播发送ARP请求。ARP请求消息中的源IP地址为10.1.1.11、源MAC地址为本地VSI虚接口10的MAC地址。
(4) GW 2从VXLAN隧道上接收到VXLAN报文,对其进行解封装后,学习VM 1的ARP信息(IP为10.1.1.11、MAC为GW 1上VSI虚接口10的MAC、出接口为接收该VXLAN报文的Tunnel接口),并将ARP请求消息中的源MAC修改为本地VSI虚接口10的MAC地址,在VXLAN 10的本地站点内广播该ARP请求消息。GW 2发送ARP应答消息(IP为10.1.1.1、MAC为GW 2上VSI虚接口10的MAC)给GW 1。
(5) GW 1在VXLAN 10内发送ARP请求的同时,也会在VXLAN 20内向本地站点和远端站点广播发送ARP请求,获取VM 5的MAC地址。ARP请求消息中的源IP地址为20.1.1.1、源MAC地址为本地VSI虚接口20的MAC地址。
(6) GW 2从VXLAN 20内收到ARP请求后,将ARP请求消息中的源MAC修改为本地VSI虚接口20的MAC地址,在VXLAN 20的本地站点内广播该ARP请求消息。
(7) VM 5收到ARP请求后,学习GW 2的ARP信息(IP为20.1.1.1、MAC为GW 2上VSI虚接口20的MAC),并发送ARP应答消息给本地网关GW 2。
(8) GW 2从VM 5收到ARP应答消息后,学习VM 5的ARP信息,并向本地站点和远端站点发送免费ARP。免费ARP消息中的源IP地址为20.1.1.12、源MAC地址为本地VSI虚接口20的MAC地址。GW 1从VXLAN隧道上接收到VXLAN报文,对其进行解封装后,根据收到的免费ARP消息学习VM 5的ARP信息(IP为20.1.1.12、MAC为GW 2上VSI虚接口20的MAC、出接口为接收该VXLAN报文的Tunnel接口)。
(9) 通过上述步骤完成ARP信息的学习后,VM 1发送给VM 5的报文,根据已经学习到的ARP信息进行转发:首先发送给GW 1;GW 1对其进行VXLAN封装后,将其发送给GW 2;GW 2解封装后,将其发送给VM 5。
虚拟机要想与外部网络进行三层通信,需要在接入虚拟机的本地分布式VXLAN IP网关上指定流量的下一跳为Border,可以通过如下方式来实现:
· 在本地分布式VXLAN IP网关上配置静态路由,指定路由下一跳为Border上同一个VXLAN对应VSI虚接口的IP地址。
· 在本地分布式VXLAN IP网关上配置策略路由,设置报文的下一跳为Border上同一个VXLAN对应VSI虚接口的IP地址。
如图18所示,以VM 1访问外部网络内的主机50.1.1.1为例,虚拟机访问外部网络的三层通信过程为:
(1) VM 1广播发送ARP请求消息,获取网关10.1.1.1的MAC地址。
(2) GW 1收到ARP请求消息后,学习VM 1的ARP信息,并向VM 1发送ARP应答消息,应答的MAC地址为VSI虚接口10的MAC地址。
(3) VM 1将访问外部网络的报文发送给GW 1。
(4) GW 1接收到报文后,根据策略路由判断报文的下一跳地址为10.1.1.2。GW 1在VXLAN 10内向本地站点和远端站点广播发送ARP请求消息,获取10.1.1.2对应的MAC地址。
(5) Border对VXLAN报文进行解封装,学习GW 1的ARP信息,并通过VXLAN隧道回复ARP应答消息。
(6) GW 1对VXLAN报文进行解封装,并获取到10.1.1.2的ARP信息。
(7) GW 1根据获取到的信息为VM 1发送的报文封装链路层地址(10.1.1.2对应的MAC地址),并通过VXLAN隧道将报文发送给Border。
(8) Border对接收到的报文进行解封装后,对报文进行三层转发。
目前,本功能仅支持IPv4站点网络和IPv4核心网络。
VXLAN利用M-LAG功能(Multichassis link aggregation,跨设备链路聚合)将两台物理设备连接起来虚拟成一台设备,使用该虚拟设备作为VTEP(既可以是仅用于二层转发的VTEP,也可以是VXLAN IP网关),可以避免VTEP单点故障对网络造成影响,从而提高VXLAN网络的可靠性。
图20 VXLAN支持M-LAG组网图
如图20所示,VXLAN支持M-LAG功能的工作机制包括:
· 同步MAC地址和ARP信息
作为M-LAG成员设备的两台VTEP通过peer-link接口连接,在peer-link链路上同步MAC地址和ARP信息,以确保两台VTEP上的MAC地址和ARP信息保持一致。peer-link链路既可以是以太网聚合链路,也可以是VXLAN隧道。采用以太网聚合链路作为peer-link链路称为直连模式peer-link链路,采用VXLAN隧道作为peer-link链路称为隧道模式peer-link链路。
作为peer-link链路的VXLAN隧道自动与设备上的所有VXLAN关联。
· 使用相同的隧道源IP地址
作为M-LAG设备的两台VTEP使用相同的隧道源IP地址,与其他VTEP设备建立VXLAN隧道。
· 备份双挂AC的用户侧链路
在用户侧,两台VTEP均通过以太网链路接入同一台虚拟机,跨设备在两条链路间建立二层聚合接口,将该聚合接口配置为AC(在聚合接口上创建以太网服务实例、配置报文匹配规则并关联以太网服务实例与VSI),则该AC称为双挂AC。VXLANM-LAG组网中采用双挂AC,来避免单条以太网链路故障导致虚拟机无法访问网络。
¡ 采用直连模式peer-link链路时,用户侧链路备份机制为:将二层聚合接口配置为AC后,VTEP会在peer-link链路上自动创建具有相同报文匹配规则、关联相同VSI的AC。当一台VTEP上的AC故障后,从VXLAN隧道上接收到的、发送给该AC的报文将通过peer-link链路转发到另一台VTEP,该VTEP根据peer-link链路上配置的AC判断报文所属VSI,并转发该报文,从而保证转发不中断。
¡ 采用隧道模式peer-link链路时,用户侧链路备份机制为:如果一台VTEP上的AC故障,则该VTEP从VXLAN隧道上接收到发送给故障AC的报文后,为报文添加VXLAN封装,封装的VXLAN ID为故障AC所属VSI对应的VXLAN ID,并通过作为peer-link链路的VXLAN隧道将其转发到另一台VTEP。该VTEP根据VXLAN ID判断报文所属的VSI,并转发该报文。
· 单挂AC互通
在VXLAN M-LAG组网中,组成M-LAG系统的两台VTEP上AC配置可能不一致,若某个AC仅连接到其中一台VTEP,则该AC称为单挂AC。组成M-LAG系统的两台VTEP下不同单挂AC的互通通过peer-link链路来实现。
¡ 采用直连模式peer-link链路时,单挂AC互通机制为:将接口配置为单挂AC后,VTEP会在peer-link链路上自动创建具有相同报文匹配规则、关联相同VSI的AC。当从单挂AC上收到报文后,将通过peer-link链路转发到另一台VTEP,该VTEP根据peer-link链路上配置的AC判断报文所属VSI,并转发该报文。
¡ 采用隧道模式peer-link链路时,单挂AC互通机制为:当从单挂AC上收到报文后,为报文添加VXLAN封装,封装的VXLAN ID为单挂AC所属VSI对应的VXLAN ID,并通过作为peer-link链路的VXLAN隧道将其转发到另一台VTEP。该VTEP根据VXLAN ID判断报文所属的VSI,并转发该报文。
在VXLAN二层互通组网中,属于相同VXLAN的虚拟机处于同一个逻辑二层网络,彼此之间二层互通;属于不同VXLAN的虚拟机之间二层隔离。接入VXLAN网络的租户可以规划自己的虚拟网络,不需要考虑物理网络IP地址和广播域的限制,降低了网络管理的难度。
VXLAN二层互通组网如图21所示。VTEP为VXLAN网络的边缘设备;VXLAN Tunnel为两个VTEP之间点到点的逻辑隧道,用于不同VTEP之间的流量转发。
图21 VXLAN二层互通组网示意图
集中式VXLAN IP网关组网中,网关部署在Spine设备。集中式网关的优点是流量均会经过Spine设备,容易实现流量控制、自动引流等功能。缺点是Spine设备处理所有三层流量,压力较大,不适于在大规模网络中部署。
集中式VXLAN IP网关的典型组网如图22所示。VTEP为VXLAN网络边缘设备,Spine为与广域网连接的边界网关设备,虚拟机通过VXLAN实现不同站点间的二层互联,并通过VXLAN IP网关实现与广域网的三层互联。
图22 集中式VXLAN IP网关组网示意图
分布式VXLAN IP网关组网中,每台VTEP设备都可以作为VXLAN IP网关,对本地站点的流量进行三层转发,很好地缓解了网关的压力。
分布式VXLAN IP网关的典型组网如图23所示。Leaf为分布式VXLAN IP网关设备,Border为与广域网连接的边界网关设备,虚拟机通过分布式VXLAN IP网关实现不同VXLAN网络的三层互联,并通过边界网关实现与广域网的三层互联。
图23 分布式VXLAN IP网关组网示意图
VXLAN数据中心互联技术通过在数据中心之间建立VXLAN-DCI(VXLAN Data Center Interconnect,VXLAN数据中心互联)隧道,实现不同数据中心之间虚拟机的互通。
如图24所示,数据中心的边缘设备为ED(Edge Device,边缘设备)。ED之间建立VXLAN-DCI隧道,该隧道采用VXLAN封装格式。ED与数据中心内部的VTEP建立VXLAN隧道。ED从VXLAN隧道或VXLAN-DCI隧道上接收到报文后,解除VXLAN封装,根据目的IP地址重新对报文进行VXLAN封装,并将其转发到VXLAN-DCI隧道或VXLAN隧道,从而实现跨数据中心之间的互通。
图24 VXLAN数据中心互联典型组网示意图
SDN(Software Defined Network,软件定义网络)是一种新型的网络架构,它将控制平面与转发平面分离,由SDN控制器集中控制和管理整个网络的设备。如图25所示,VXLAN可以与SDN控制器配合使用,VXLAN网络中的所有设备均由SDN控制器通过标准协议集中管理,减少了传统设备管理的复杂性。同时,当用户业务扩展时,通过集中管理,用户可以方便快速地部署网络设备,便于网络的扩展和管理。
图25 VXLAN与SDN控制器配合组网示意图
RFC 7348: Virtual eXtensible Local Area Network (VXLAN): A Framework for Overlaying Virtualized Layer 2 Networks over Layer 3 Networks