VXLAN逻辑抽象
VXLAN的简化理解—---两次虚拟化
1、第一次虚拟化:利用隧道技术将边缘设备互连透传二层报文;整网抽象理解成一台端口数目扩展的超大LAN switch。
2、第二次虚拟化利用VNI将这台超大的交换机虚拟出多个二层的广播域,和VLAN本质是一样的, VNI类比VLANID. 并通过定义VXLAN header中的VNI字段,将子网范围由4K扩展至16M。
官方报文图:
其中VNI的24bit就是将子网范围4K扩展至2的24次方(16M)的原因。
两个VTEP可以确定一条VXLAN隧道,VTEP间的这条VXLAN隧道将被两个NVE间的所有VNI所公用。
假设A、B、C、D都属于同一VNI ID的VNI 1。
1、A到B的ARP request 广播
2、B回复A的ARP reply 单播
3、A到B的单播数据报文
假设NVE5作为三层网关,HOST A属于VNI 1,HOST E属于VNI 2,默认主机与网关都互相学习到ARP表, 各个节点MAC都已学习。
A到E单播转发流程
上面的看完还是没有了解的话,可以再继续看看数据包层面的详细分析。部署在集中式网关场景中,此篇集中式还是分布式不是重点,后续文章会解释,在这里就先知道这个名词就好了。
Leaf1上部署了Server1和Server3,Leaf2上部署了Server2,Spine上部署三层网关。
配置如下(此篇不是重点不做解释,后续文章后有相应解释):
sysname Leaf1
#
bridge-domain 10
vxlan vni 5010
#
bridge-domain 20
vxlan vni 5020
#
interface 10GE1/0/2.1 mode l2
encapsulation dot1q vid 10
bridge-domain 10
#
interface 10GE1/0/3.1 mode l2
encapsulation dot1q vid 30
bridge-domain 20
#
interface Nve1
source 2.2.2.2
vni 5010 head-end peer-list 3.3.3.3
vni 5020 head-end peer-list 3.3.3.3
vni 5020 head-end peer-list 4.4.4.4
#
return
同子网已知单播报文转发只在VXLAN二层网关之间进行,三层网关无需感知。
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。
跨子网报文转发需要通过三层网关实现。
1.Leaf1收到来自Host1的报文,根据报文中接入的端口和VLAN信息获取对应的二层广播域,在对应的二层广播域内查找出接口和封装信息。
2.Leaf1上VTEP根据查找到的出接口和封装信息进行VXLAN封装,向Spine转发报文。
3.Spine收到VXLAN报文后进行解封装,发现内层报文中的目的MAC是三层网关接口VBDIF10的MAC地址MAC3,判断需要进行三层转发。
4.Spine剥除内层报文的以太封装,解析目的IP。根据目的IP查找路由表,找到目的IP的下一跳地址,再根据下一跳地址查找ARP表项,获取目的MAC、VXLAN隧道出接口及VNI等信息。
5.Spine重新封装VXLAN报文,向Leaf2转发。其中内层报文以太头中的源MAC是三层网关接口VBDIF20的MAC地址MAC4。
6.Leaf2上VTEP收到VXLAN报文后,根据UDP目的端口号、源/目的IP地址、VNI判断VXLAN报文的合法有效性。依据VNI获取对应的二层广播域,然后进行VXLAN解封装,获取内层二层报文,并在对应的二层广播域内查找出接口和封装信息。
7.Leaf2根据查找到的出接口和封装信息,为报文添加VLAN Tag,转发给对应的Host2。
上面都是在MAC已知的情况下,下面看看在未知条件下如何解决:
同子网BUM报文转发只在VXLAN二层网关之间进行,三层网关无需感知。同子网BUM报文转发可以采用头端复制方式。
头端复制是指,当BUM报文进入VXLAN隧道时,接入端VTEP根据头端复制列表进行报文的VXLAN封装,并将报文发送给头端复制列表中的所有出端口VTEP。BUM报文出VXLAN隧道时,出口端VTEP对报文解封装。
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。