VTEP
VTEP,即Vxlan隧道端点,可以是单独的硬件设备,也可以集合在软SW中,主要作用就是封装、解封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(可以修改)
VTEP表内容
VTEP表项其大致内容如上图所示,其中VNI是配置的,其余则是通过学习,或者控制器下发而获得
利用组播维护VTEP表的方式下,vm的通信流程
SDN控制器不感知VTEP节点内vm的mac和ip,则需要VXLAN自身通过组播方式(一般不用单播),去维护VTEP,该使用方式下,通信流程如下:
vm arp请求及回应流程
首先,明确一点,在传输过程中,将先以组播报文进行传输,对端收到后,再由对端VTEP进行其下联vm的广播,而回复数据包则是以单播的形式在underlay网络中进行传输
VM1——VTEP1——物理交换机——VTEP2——VM2
1、VM1使用广播发送ARP请求查找VM2的MAC地址
2、VTEP1收到VM1的广播后,查找自己的MAC地址表,如果下联vm没有此mac地址,则将封装报文为VXLAN,内层VNI为100(可在vtep上配置),外层目的地址为此VNI对应的组播地址,外层源IP为VTEP1地址。
3、通过组播VTEP2接受到VTEP1的报文,解封装后。对比报文的内层VNI相同,则再记录外层源VTEP1的IP、内层MAC地址(维护本端VTEP表),若VNI不同则丢弃。
4、VTEP2通过广播将数据包广播到自己连接的vm
5、VM2接受到ARP请求后,做出回应
6、VTEP2接受到VM2的回应后,查找流表,发现需要发送给VTEP1,重新把数据包进行封装为VXLAN并以单播的形式发送给VTEP1
7、VTEP1收到回应后,对比报文的内层VNI相同,则再记录外层源VTEP2的IP、内层VM2的MAC地址(维护本端VTEP表),若VNI不同则丢弃。
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,至此一个报文发送完毕
利用SDN控制器下发vm mac&&ip的方式下,vm的通信流程
若SDN控制器支持下发本端的vm mac和ip至其他Vxlan节点,即无需Vxlan自身在去维护VTEP表,则本端vm发起arp请求走Vxlan后,会被VTEP节点优先用控制器下发的对端ip做代答,若VTEP节点没找到此ip的表项,则在发起组播进行学习
其他
一般超融合厂商,一个超融合集群就只有一个vni