VXLAN运行机制

VXLAN运行机制
在设备上部署VXLAN网络时,需要分别对下行接入业务选择部署以及上行VXLAN隧道建立部署,两者部署完成后,报文就能在VXLAN网络中进行转发。因此,VXLAN运行机制可以概括为:报文识别、隧道建立以及报文转发。
    报文识别
    隧道建立
    VXLAN报文转发

报文识别
在VXLAN网络中,将VNI以1:1方式映射到广播域BD。当报文到达VTEP后,VTEP只要能够识别出报文所属的BD,就能够选择正确的VXLAN隧道进行转发。VTEP有两种方式识别报文所属的VXLAN。
基于VLAN识别报文所属的VXLAN
基于网络规划,在VTEP上建立VLAN与BD的一对一或多对一的映射。这样,当VTEP收到业务侧报文后,根据VLAN与BD以及BD与VNI的对应关系即能够选择相应的VXLAN隧道进行转发。
如图1所示,VLAN 10与VLAN 20同属于BD 10,VTEP上存在BD 10与VLAN 10和VLAN 20的对应关系,同时BD 10对应的VXLAN的VNI为1000。这样当VTEP接收到PC_1或PC_2的报文时,就能够选择正确的VXLAN隧道进行转发。
图1 基于VLAN识别报文所属的VXLAN

VXLAN运行机制(图1)

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

流封装类型

允许进入VXLAN隧道的报文类型

对VXLAN报文进行封装处理

对VXLAN报文进行解封装处理

dot1q

只允许携带指定的一层VLAN Tag的报文进入VXLAN隧道。

进行VXLAN封装时,会剥离原始报文的VLAN Tag。

进行VXLAN解封装时:
  • 若内层报文带有VLAN Tag,则先将所有VLAN Tag全部剥离,添加指定的VLAN Tag,再转发。
  • 若内层报文不带VLAN Tag,则先添加指定的VLAN Tag,再转发。

untag

只允许不携带VLAN Tag的报文进入VXLAN隧道。

进行VXLAN封装时,不对原始报文做处理,即不添加任何VLAN Tag。

进行VXLAN解封装时:
  • 若内层报文带有VLAN Tag,则将外层VLAN Tag剥离,再转发。
  • 若内层报文不带VLAN Tag,则直接转发。

default

允许所有报文进入VXLAN隧道,不论报文是否携带VLAN Tag。

进行VXLAN封装时,不对原始报文做处理,包括添加、替换或剥离。

进行VXLAN解封装时,不对原始报文做处理,包括添加、替换或剥离。

qinq

只允许带有指定的两层VLAN Tag的报文进入VXLAN隧道。

进行VXLAN封装时,会剥离原始报文的所有VLAN Tag。

进行VXLAN解封装时:
  • 若内层报文带有VLAN Tag,则先将所有VLAN Tag全部剥离,添加指定的两层VLAN Tag,再转发。
  • 若内层报文不带VLAN Tag,则先添加指定的两层VLAN Tag,再转发。

如图2所示,VTEP基于物理接口Eth2/0/0有两个子接口,不同的流封装类型与不同的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的Eth2/0/0接口时,一个是携带VLAN 10的,一个是不携带VLAN Tag的。为了区分两种报文,就必须要在Eth2/0/0上分别创建dot1q和untag类型的二层子接口:
    创建二层子接口Eth2/0/0.1流封装类型为dot1q,允许携带指定VLAN Tag为10的报文进入VXLAN隧道。
    创建二层子接口Eth2/0/0.2流封装类型为untag,允许不携带VLAN Tag的报文进入VXLAN隧道。
当PC_1或PC_2的报文到达VTEP时,根据报文的Tag情况选择进入不同的二层子接口,之后,VTEP根据子接口与BD,以及BD与VNI的映射关系,即能够选择正确的VXLAN隧道进行报文转发。
图2 基于报文流封装类型识别报文所属的VXLAN
VXLAN运行机制(图2)

隧道建立
VXLAN隧道由一对VTEP IP地址确定,创建VXLAN隧道实际上是两端VTEP获取对端VTEP IP地址的过程,只要对端VTEP IP地址是三层路由可达的,VXLAN隧道就可以建立成功。
    静态VXLAN隧道的创建需要通过手工配置源端和目的端的VNI与VTEP的IP地址,手工配置工作量大,灵活性较差,不适合大规模的组网场景。
    通过BGP EVPN方式动态建立VXLAN隧道,就是在两端VTEP之间建立BGP EVPN对等体,然后对等体之间利用BGP EVPN路由来互相传递VNI和VTEP IP地址信息,从而实现动态建立VXLAN隧道。该方式通过部署EVPN协议实现VTEP自动发现和VXLAN隧道的动态创建,灵活性高,适合大规模的VXLAN组网场景。
如图1所示,Router1、Router2、Router3、Router4分别为企业的出口网关。为了实现租户分支之间以及租户分支与租户总部进行通信,需要建立VXLAN隧道。
VXLAN隧道建立情况分以下两种:
由于租户分支1与租户分支2位于同一子网,且两者属于同一VNI,属于同一VNI的租户处于同一个逻辑二层网络,彼此之间可以直接通过VXLAN隧道实现二层互联。为了实现租户分支1与租户分支2进行通信,需要在Router1和Router2上手动配置VNI和VTEP IP地址,只要Router1和Router2上存在到对端VTEP IP地址的三层路由,就可以建立到对端的VXLAN隧道。
由于租户分支2与租户总部属于不同子网,且两者属于不同VNI,属于不同VNI的租户之间不能直接进行VXLAN二层互联,需要经过VXLAN网关。为了实现租户分支2与租户总部进行通信,需要分别在Router2和Router3以及Router4和Router3之间静态配置VNI和VTEP地址,只要Router2和Router3上存在到对端VTEP IP地址的三层路由,就可以建立到对端的VXLAN隧道;同样的,只要Router4和Router3上存在到对端VTEP IP地址的三层路由,就可以建立到对端的VXLAN隧道。
图1 VXLAN组网图

VXLAN运行机制(图3)

VXLAN报文转发
VXLAN将二层网络报文封装为VXLAN格式的报文,可以跨传统的三层网络进行传输,使得用户能够在三层网络之上构建逻辑的大二层网络。
MAC地址学习
在VXLAN网络中,为了实现用户的互通,支持MAC地址动态学习。下面分别结合图1和图2,详细介绍同子网主机互通时MAC地址学习过程。由于是首次进行通信,PC_1上没有PC_2的MAC地址,所以会发送ARP广播报文请求PC_2的MAC地址。
图1 ARP请求报文转发流程

VXLAN运行机制(图4)

如图1所示,ARP请求报文的转发流程如下:
    PC_1发送源MAC为MAC_1、目的MAC为全F、源IP为IP_1、目的IP为IP_2的ARP广播报文,请求PC_2的MAC地址。
Router1收到来自PC_1发出的ARP请求后,根据报文接入端口的配置判断报文需要进入VXLAN隧道。由于接入端口的配置与BD是1:1的映射关系,因此就确定了报文所属BD,同时,也就确定了报文所属的VNI。然后,VTEP1学习MAC_1、VNI和报文入接口的对应关系,并记录在本地MAC表中。之后,VTEP1根据对应的BD获取对应VNI的隧道列表,对报文进行复制并分别进行封装。封装的外层源IP地址为源端VTEP1的IP地址,外层目的IP地址为目的端VTEP2和VTEP3的IP地址;外层源MAC地址为源端VTEP1的MAC地址,而外层目的MAC地址为去往目的网络中下一跳设备的MAC地址。封装后的报文,根据外层MAC和IP信息,在网络中进行传输,直至到达对端VTEP2/VTEP3。
Router2/Router3上VTEP2和VTEP3收到VXLAN报文后对报文进行解封装,得到PC_1发送的原始报文。同时,VTEP2和VTEP3学习PC_1的MAC地址、VNI和远端VTEP的IP地址的对应关系,并记录在本地MAC表中。之后,VTEP2和VTEP3根据接口上的配置对报文进行相应的处理并在对应的二层域内广播。
    PC_2和PC_3接收到ARP请求后,判断报文中的目的IP地址是否为本机的IP地址。如果目的IP不是本机IP,则将报文丢弃;如果目的IP是本机IP,则对ARP请求做出应答。
图2 ARP应答报文转发流程

VXLAN运行机制(图5)

如图2所示,ARP应答报文的转发流程如下:
    由于PC_2学习到PC_1的MAC地址,所以ARP应答报文为单播报文。报文源MAC为MAC_2,目的MAC为MAC_1,源IP为IP_2、目的IP为IP_1。
VTEP2收到ARP应答报文后,识别报文所属VNI。同时,VTEP2学习MAC_2、VNI和报文入接口的对应关系,并记录在本地MAC表中。之后,VTEP2对报文进行封装。封装的外层源IP地址为源端VTEP2的IP地址,外层目的IP地址为目的端VTEP1的IP地址;外层源MAC地址为源端VTEP2的MAC地址,而外层目的MAC地址为去往目IP的网络中下一跳设备的MAC地址。封装后的报文,根据外层MAC和IP信息,在网络中进行传输,直至到达对端VTEP1。 报文到达VTEP1后,VTEP1对报文进行解封装,得到PC_2发送的原始报文。同时,VTEP1学习PC_2的MAC地址、VNI和远端VTEP2的IP地址的对应关系,并记录在本地MAC表中。之后,VTEP1将解封装后的报文发送给PC_1。PC_1和PC_2均已学习到了对方的MAC地址,之后,PC_1和PC_2将采用单播方式进行通信。
同子网报文转发
根据报文中包含的目的MAC地址类型,报文转发流程分为已知单播报文转发和BUM(Broadcast&Unknown-unicast&Multicast)报文转发两部分。
同子网已知单播报文转发与BUM报文转发只在VXLAN二层网关之间进行,三层网关无需感知。
    已知单播报文转发流程
    已知单播报文转发流程如图3所示。
    图3 已知单播报文转发流程图

VXLAN运行机制(图6)

    Router1收到来自PC_1的报文,根据报文中接入的端口和VLAN信息获取对应的二层广播域,并在该二层广播域内查找出接口和封装信息。
    Router1上VTEP1根据查找到的封装信息对数据报文进行VXLAN封装,然后根据查找到的出接口进行报文转发。
    Router2上VTEP2收到VXLAN报文后,根据UDP目的端口号、源/目的IP地址、VNI判断VXLAN报文的合法有效性。然后依据VNI获取对应的二层广播域,进行VXLAN解封装,获取内层的二层报文。
    Router2根据内层二层报文的目的MAC,从本地MAC表找到对应的出接口和封装信息,为报文添加VLAN Tag,转发给对应的主机PC_2。
PC_2向PC_1发送报文的过程类似,这里不再赘述。
BUM报文转发流程
当BUM报文进入VXLAN隧道,源端VTEP依据获取的隧道列表对报文进行复制,并分别进行封装。BUM报文出VXLAN隧道,目的端VTEP对报文解封装。BUM报文的转发流程如图4所示。
隧道列表:在VXLAN网络中,同一个VNI可以配置多个目的端VTEP的IP地址,这些目的端VTEP的IP地址可以看作隧道列表。接口收到BUM报文,源端VTEP将收到的BUM报文根据隧道列表进行复制并分别进行封装,最后发送给属于同一个VNI的所有VTEP。
图4 BUM报文转发流程图

VXLAN运行机制(图7)

        Router1收到来自PC_1发出的报文,根据报文中接入的端口和VLAN信息获取对应的二层广播域。
        Router1上VTEP1根据对应的二层广播域获取对应VNI的隧道列表,依据获取的隧道列表进行报文复制,并进行VXLAN封装。然后将封装后的报文从出接口转发出去。
Router2/Router3上VTEP2/VTEP3收到VXLAN报文后,根据UDP目的端口号、源/目的IP地址、VNI判断VXLAN报文的合法有效性。然后依据VNI获取对应的二层广播域,进行VXLAN解封装,获取内层二层报文。
        Router2/Router3检查内层二层报文的目的MAC,发现是BUM MAC,在对应的二层广播域内的非VXLAN隧道侧进行广播处理,即:Router2/Router3分别从本地MAC表中找到非VXLAN隧道侧的所有出接口和封装信息,为报文添加VLAN Tag,转发给对应的PC_2/PC_3。
    PC_2/PC_3向PC_1回应报文与已知单播报文转发流程类似,这里不再赘述。

跨子网报文转发
VXLAN为站点内的租户提供三层业务时,需要在网络中部署VXLAN三层网关,以便站点内的租户通过三层网关与外界网络或其他VXLAN网络内的租户进行三层通信。跨子网报文转发的流程如图5所示。
由于是首次进行通信,且PC_1和PC_2处于不同的网段,PC_1需要先发送ARP广播报文请求网关VBDIF10的MAC,获得网关的MAC后,PC_1先将数据报文发送给网关;之后网关也将发送ARP广播报文请求PC_2的MAC,获得PC_2的MAC后,网关再将数据报文发送给PC_2。以上MAC地址学习流程与MAC地址学习的流程一致。
图5 跨子网报文转发示意图

VXLAN运行机制(图8)

    Router1收到来自PC_1的报文,根据报文中接入的端口和VLAN信息获取对应的二层广播域,在对应的二层广播域内查找出接口和封装信息。
    Router1上VTEP1根据查找到的出接口和封装信息进行VXLAN封装,向Router3转发报文。
    Router3收到VXLAN报文后进行解封装,发现内层报文中的目的MAC是三层网关接口VBDIF10的MAC地址MAC_3,判断需要进行三层转发。
    Router3剥除内层报文的以太封装,解析目的IP。根据目的IP查找路由表,找到目的IP的下一跳地址,再根据下一跳地址查找ARP表项,获取目的MAC、VXLAN隧道出接口及VNI等信息。
    Router3重新封装VXLAN报文,向Router2转发。其中内层报文以太头中的源MAC是三层网关接口VBDIF20的MAC地址MAC_4。
Router2上VTEP2收到VXLAN报文后,根据UDP目的端口号、源/目的IP地址、VNI判断VXLAN报文的合法有效性。依据VNI获取对应的二层广播域,然后进行VXLAN解封装,获取内层二层报文,并在对应的二层广播域内查找出接口和封装信息。
    Router2根据查找到的出接口和封装信息,为报文添加VLAN Tag,转发给对应的PC_2。
PC_2向PC_1发送报文的过程类似,这里不再赘述。


1、本站资源长期持续更新。
2、本资源基本为原创,部分来源其他付费资源平台或互联网收集,如有侵权请联系及时处理。
3、本站大部分文章的截图来源实验测试环境,请不要在生产环境中随意模仿,以免带来灾难性后果。

转载请保留出处:  www.zh-cjh.com珠海陈坚浩博客 » VXLAN运行机制

作者: cjh


手机扫一扫,手机上查看此文章:

一切源于价值!

其他 模板文件不存在: ./template/plugins/comment/pc/index.htm

未雨绸缪、居安思危!

数据安全、有备无患!

注意操作、数据无价!

一切源于价值!