https://support.huawei.com/enterprise/zh/doc/EDOC1100023543?section=j018
在VXLAN网络中,同子网虚拟机的互通是通过查找MAC表进行转发。如下图所示,VM1给VM2发送报文时,经过VTEP1转发,VTEP1上需要学习到VM2的MAC地址。
最初的VXLAN标准并没有定义控制平面,VTEP之间无法传递学习到的主机MAC地址。但是VXLAN有着与传统以太网非常相似的MAC学习机制,当VTEP接收到VXLAN报文后,会记录源VTEP的IP、虚拟机MAC和VNI到本地MAC表中,这样当VTEP接收到目的MAC为此虚拟机的MAC时,就可以进行VXLAN封装并转发。
以VTEP2学习到VM1的MAC过程为例:
- VM1发送目的地址为VM2的报文。
- VTEP1接收到报文后,进行VXLAN封装,并将其转发至VTEP2。同时,VTEP1可以学习到VM1的MAC地址、VNI、入接口。
- VTEP2接收到报文后,对报文进行解封装。同时,VTEP2可以学习到VM1的MAC地址、VNI、入接口(为VTEP1)。
经过上述流程,VTEP1和VTEP2可以学习到VM1的MAC地址。VTEP1和VTEP2学习到VM2的MAC地址过程与之类似。
BUM报文转发
前面描述的报文转发过程都是已知单播报文转发,如果VTEP收到一个未知地址的BUM报文(广播、组播、未知单播)如何处理呢。与传统以太网BUM报文转发类似,VTEP会通过泛洪的方式转发流量。
以上图中VM1想向VM2发送报文为例,因为VM1不知道VM2的MAC地址,所以会发送ARP广播报文请求VM2的MAC地址。
- VM1发送ARP广播请求,请求VM2的MAC地址。
- VTEP1收到ARP请求后,因为是广播报文,VTEP1会在该VNI内查找所有的隧道列表,依据获取的隧道列表进行报文封装后,向所有隧道发送报文,从而将报文转发至同子网的VTEP2和VTEP3。
- VTEP2和VTEP3接收到报文后,进行解封装,得到VM1发送的原始ARP报文,然后转发至VM2和VM3。
- VM2和VM3接收到ARP请求后,比较报文中的目的IP地址是否为本机的IP地址。VM3发现目的IP不是本机IP,故将报文丢弃;VM2发现目的IP是本机IP,则对ARP请求做出应答。
由于此时VM2上已经学习到了VM1的MAC地址,所以ARP应答报文为已知单播报文,转发流程与前文描述的一致,此处不在赘述。
- VM1收到VM2的ARP应答后,就可以学习到VM2的MAC地址。后续的转发流程同已知单播转发流程一致。
VXLAN网关部署
与不同VLAN需要通过三层网关互通一样,VXLAN中不同VNI的互通也需要有三层网关。
在典型的“Spine-Leaf”VXLAN组网结构下,根据三层网关的部署位置不同,VXLAN三层网关可以分为集中式网关和分布式网关。
集中式网关部署
集中式网关是指将三层网关集中部署在Spine设备上,如下图所示,所有跨子网的流量都经过三层网关进行转发,实现流量的集中管理。
图7-7 集中式网关组网示意图集中式网关部署方式可以对跨子网流量进行集中管理,网关的部署和管理比较简单,但是因为同Leaf下跨子网流量也需要经过Spine转发,所以流量转发路径不是最优。同时,所有通过三层转发的终端租户的表项都需要在Spine上生成。但是,Spine的表项规格有限,当终端租户的数量越来越多时,容易成为网络瓶颈。
分布式网关部署
VXLAN分布式网关是将Leaf节点作为VXLAN隧道端点VTEP,每个Leaf节点都可作为VXLAN三层网关,Spine节点不感知VXLAN隧道,只作为VXLAN报文的转发节点。
图7-8 分布式网关组网示意图在Leaf上部署VXLAN三层网关,即可实现同Leaf下跨子网通信。此时,流量只需要在Leaf节点进行转发,不再需要经过Spine节点,从而节约了大量的带宽资源。同时,Leaf节点只需要学习自身连接虚拟机的ARP表项,而不必像集中三层网关一样,需要学习所有虚拟机的ARP表项,解决了集中式三层网关带来的ARP表项瓶颈问题,网络规模扩展能力强。
对于分布式网关场景,因为需要在三层网关间传递主机路由才能保证虚拟机间互通,所以需要有控制平面来进行路由的传递。下一章节就是描述EVPN作为控制平面技术在VXLAN网络里的应用。