Vxlan

深入学习下vxlan的玩法

VTEP

VTEP,即Vxlan隧道端点,可以是单独的硬件设备,也可以集合在软件中,主要作用就是封装、解封vxlan报文。VTEP成员需要知道自己下连所有终端(vm)的MAC地址,同时需要知道其他所有VTEP成员下所有终端的MAC地址表,其他终端MAC地址表是通过底层物理网络组播进行传播,一个VXLAN网络一个组播地址

VNI

VNI(3个字节),即vxlan报文的网络标识符,用于隔离不同的网络(租户),不同的VNI网络间,不能直接进行源二层的通信(因为一个VNI对应了一个Vxlan的组播组)

报文格式


由上图可知,vxlan报文,是在主机报文的UDP载荷字段中再嵌套一个Vxlan Header和其真实报文(两端VTEP通信的报文)实现的。其中Vxlan Header占了8个字节
注:上图的UDP Header中的VXLAN Port指的就是UDP传输中的目的端口号,只不过在VXLAN报文中,又被称为VXLAN Port,一般为默认值4789(可以修改)

vm arp请求及回应流程

首先,明确一点,在传输过程中,将先以组播报文进行传输,对端收到后,再由对端VTEP进行其下联vm的广播,而回复数据包则是以单播的形式在underlay网络中进行传输

VM1——VTEP1——物理交换机——VTEP2——VM2
1、VM1使用广播发送ARP请求查找VM2的MAC地址
2、VTEP1收到VM1的广播后,查找自己的MAC地址表,如果下联vm没有此mac地址,则将封装报文为VXLAN,内层VNI为100,外层目的地址为此VNI对应的组播地址,外层源IP为VTEP1地址。
3、通过组播VTEP2接受到VTEP1的报文,解封装后。记录报文的内层VNI、外层源VTEP1的IP、内层MAC地址
4、VTEP2通过广播将数据包广播到自己连接的vm
5、VM2接受到ARP请求后,做出回应
6、VTEP2接受到VM2的回应后,查找流表,发现需要发送给VTEP1,重新把数据包进行封装为VXLAN并以单播的形式发送给VTEP1
7、VTEP1收到回应后,记录内层VNI、外层源VTEP2的IP、内层VM2的MAC地址
8、VTEP1解封装后转发给VM1。至此VM1收到了VM2的MAC地址

vm TCP/UDP数据传输流程

vm间正常的数据传输,在underlay网络中都将以单播的形式进行

VM1——VTEP1——物理交换机——VTEP2——VM2
1、VM1给VM2发送了一个TCP/UDP报文
2、VTEP1收到报文后检查VM1和VM2是否属于同一个VNI,(如果不属于将转发给VXLAN网关)检查后属于一个VNI,需要转发给VTEP2
3、VTEP1封装VXLAN报文以单播的形式发送给VTEP2
4、VTEP2收到报文后解封装,查找流表,找到vm2对应的端口,进行发送
5、VTEP2单播的形式发送给VM2,至此一个报文发送完毕

注意:若不存在VXLAN网关设备,则此VXLAN网络中,只存在一个VNI和一个组播组