VXLAN概述

VXLAN是一种将二层报文用三层协议进行封装的技术,可以对二层网络在三层范围进行扩展。每个覆盖域被称为VXLAN segment,它的ID是由位于VXLAN数据包头中的VNI标识来区分的。VNI字段包含24bits,故segments最大数量为2的24次方,并且只有在相同的VXLAN segments才能通信。


它是一种在UDP中封装MAC的简单机制,可以创建跨多个物理IP子网的虚拟2层子网(也就是在三层子网中跑2层)

其实EtherIP和GRE也可以实现在IP中封装MAC,但是它们都无法做到VLAN逻辑标记

根据VXLAN的封包模式,也可以将它看作一种隧道模式的网络覆盖技术,这种隧道是无状态的。隧道端点VTEP一般位于拥有虚机的hypervisor宿主机中,因此VNI和VXLAN隧道只有VTEP可见,对于虚机来说是透明的。那么不同的VXLAN segments就可以有相同的MAC地址的虚机。并且VTEP也可以位于物理交换机或物理主机中,甚至可以用软件来定义

VTEP之间完全是通过L3协议交互的,也就意味着VTEP之间可以由Router相连,而非类似于GRE封装模式的固定端到端隧道连接。

实例:


VM1要向VM2发送数据前,必须要知道VM2的MAC地址,其获取过程如下:

1、VM1发送ARP请求包,请求192.168.0.101[VM2_IP]的MAC地址;

2、ARP请求包被VTEP1封装成多播包,发给VNI=864的多播组;

3、所有的VTEP接收此多播包,并添加(VNI–VTEP1–VM1_MAC Address)映射关系到自己的VXLAN表中;

4、目的主机上的VTEP2接收到多播包后将其解开,并向本主机上VNI=864的所有虚拟机发送广播包;

5、VM2看到了ARP包后,回应了自己的MAC地址;

6、VTEP2再次封装回应的单播包,通过路由发给VTEP1;

7、VTEP1解包,并将包传给VM1,则最终获取了VM2的MAC地址;

8、VTEP1将(VNI–VTEP2–VM2_MAC Address)映射关系添加到自己的VXLAN表中;


VM1获知VM2的MAC地址后,发送数据包,过程如下:

1、  VM1发送IP数据包到VM2,即192.168.0.100 到 192.168.0.101;

2、  VTEP1查找自己的VXLAN表知道要发给VTEP2,然后依次封装以下数据包头;

            a)VXLAN包头,VNI=864;

            b)标准UDP包头,校验和checksum为0x0000,目标端口号4789;

            c)标准IP包头,目标地址为VTEP2的IP地址,协议号设为0x11表面为UDP包。

            d)标准MAC数据包,目标地址为下一跳设备的MAC地址00:10:11:FE:D8:D2,可路由到目标隧道端VTEP2。

3、  VTEP2接收数据包,根据UDP的destination端口找到VXLAN数据包。接着查找所有所在VXLAN的VNI为864的端口组,找到VM2的

4、  VM2接收并处理数据包,拿到Payload数据。

你可能感兴趣的:(VXLAN概述)