介绍

VXLAN工作原理如下:

  1. 在每个数据中心的交换机上都配置一个VTEP(VXLAN Tunnel Endpoints),用于封装和解封装VXLAN报文。
  2. 在两个VTEP之间建立一个VXLAN隧道,用于在两个数据中心之间传输封装后的VXLAN报文。
  3. 当虚拟机之间需要通信时,它们的报文会被发送到所在数据中心的交换机上。交换机上的VTEP会将报文封装成VXLAN报文,并通过VXLAN隧道发送到另一个数据中心的交换机上。
  4. 另一个数据中心的交换机上的VTEP会将VXLAN报文解封装,还原成原始报文,并发送给目标虚拟机。

这样,虚拟机之间就可以通过VXLAN隧道进行通信了。

本文章介绍了其工作原理和配置方案。

本文章是针对华为系列网络设备的学习笔记。

VXLAN隧道的建立方式

VXLAN隧道由一对VTEP确定,报文在VTEP设备进行封装之后在VXLAN隧道中依靠路由进行传输。只要VXLAN隧道的两端VTEP是三层路由可达的,VXLAN隧道就可以建立成功。

根据VXLAN隧道的创建方式将VXLAN隧道分为以下两种:

  • 静态隧道:通过用户手工配置本端和远端的VNI、VTEP IP地址和头端复制列表(head-end peer-list)来完成。
  • 动态隧道:通过BGP EVPN(Ethernet VPN,以太网虚拟私有网络)方式动态建立VXLAN隧道。在VTEP之间建立BGP EVPN对等体,然后对等体之间利用BGP EVPN路由来互相传递VNI和VTEP IP地址信息,从而实现动态地建立VXLAN隧道。

静态VXLAN隧道

  • 静态VXLAN隧道并不是一个有状态的隧道(如IPsec VPN),只是数据传输时的隧道封装,类似于GRE VPN。
  • 头端复制列表中的地址,即进行隧道封装传输时可封装的隧道目的地址。

VXLAN MAC地址表项

  • VXLAN实现的是在Overlay网络中进行二层转发,转发单播数据帧依赖的依旧是MAC地址表项。
  • VTEP接收到BD内来自本地的数据帧,将数据帧的源MAC地址添加到该BD的MAC地址表中,出接口为收到数据帧的接口。
  • 该表项用于指导发往本VTEP下连接终端的数据帧的转发。

1
2
3
4
5
6
7
8
9
10
11
12
<S1>display mac-address bridge-domain 10
-------------------------------------------------------------------------------
MAC Address VLAN/VSI/BD Learned-From Type
-------------------------------------------------------------------------------
0000-0000-000a -/-/10 GE1/0/1.10 dynamic

<S1>display mac-address bridge-domain 20
-------------------------------------------------------------------------------
MAC Address VLAN/VSI/BD Learned-From Type
-------------------------------------------------------------------------------
0000-0000-000b -/-/20 GE1/0/1.20 dynamic

MAC地址动态学习 (1)

  • 转发属于远端VTEP下所连接设备的数据帧,需要先学习到远端设备的MAC地址。
  • 该过程与传统MAC地址表形成过程类似,依赖于主机之间的报文交互,一般通过ARP报文交互形成MAC地址表项。

  • PC1与PC2通信过程如下:
  1. PC1要与PC2通信,PC1发送ARP请求广播帧,试图请求PC2的MAC地址。
  2. SW1收到该帧后,根据VAP信息判断出流量所属的BD ID、需进入的VXLAN隧道及对应的VNI;同时学习PC1的MAC地址,将其与该BD ID、接收帧的接口等绑定。
  3. SW1对ARP请求广播帧进行VXLAN封装,按头端复制列表进行转发。
  4. SW2收到VXLAN报文后,将其解封装,得到原始数据帧;同时学习PC1的MAC地址,将该地址与SW1的VTEP地址进行绑定。
  5. SW2将该ARP帧在本地广播域内泛洪。然后,PC2收到了该帧并学习到了PC1的ARP信息。

MAC地址动态学习 (2)

  • PC2发送单播的ARP回应。

    6. SW2此时已经拥有PC1的MAC地址表项,因此将会单播转发,并且学习PC2的源MAC地址到MAC地址表项中。

    7. SW2为该ARP响应加上VXLAN封装,发送到远端VTEP 1.1.1.1。

    8. SW1收到VXLAN报文之后解封装,将PC2的源MAC地址记录到MAC地址表,出接口为远端VTEP。

    9. SW1将数据帧转发给PC1。

至此PC1、2相互学习到了对方的ARP信息,SW1、SW2完成了PC1、PC2的MAC地址学习,该过程也叫做Flood and Learn。

同子网已知目的地址单播报文转发

BUM流量转发

  • 传输BUM(Broadcast、Unknown、Multicast)流量时,VTEP会将流量复制多份发送到头端复制列表中的对端VTEP,从而在Overlay网络中实现泛洪转发的效果。
  • BUM,广播、未知、组播以太网帧

跨子网三层转发

  1. PC1希望与PC2进行通信,本地计算发现对端与自身不在同一个子网,此时将报文发送给网关。
  2. PC1发往PC2的数据帧,目的MAC为:00AB-09FF-1111(网关MAC地址),SW1收到之后执行L2查表发现出接口为远端VTEP(即L3网关),将报文加上VXLAN头部封装(VNI =1000)之后发往SW3。
  3. SW3收到报文之后解VXLAN封装发现,内部原始数据帧其目的MAC为:00AB-09FF-1111,为自身接口VBDIF 10的MAC地址,此时需要执行L3查表转发。
  4. SW3查找路由表,发现目的IP:192.168.2.1,与本地接口VBDIF 20产生的直连路由相匹配,查找ARP表项确定报文目的MAC,再查找MAC地址表确定报文的出接口。SW3中前往192.168.2.1所对应MAC地址的出接口为远端VTEP 2.2.2.2,将报文加上VXLAN封装,送往SW2。
  5. SW2收到报文之后解VXLAN封装发现目的MAC并非自身任何接口的MAC地址,执行L2查表转发,依据MAC地址表将报文从本地接口转发出去。