VxLAN: Virtual Extensible LAN. It's overlay with MAC in UDP encapsulated in L3.
1. 格式
(1) Vxlan header共8字节。 目前只用VXLAN Flags和VNI,保留字节全置0。VNI 24比特远大于12比特的VLAN ID.
(2)Outer UDP header目的端口默认4798,可改。 UDP Checksum必须置0。
(3)Inner Ethernet header
Destination Address: 目的VTEP MAC VLAN Type: 0x8100 Ethernet Type: 0x8000(IPv4)(4)Inner IP header目的IP可以是单播或多播地址。 单播时:
protocol: 0x11 (UDP) IP Destination Address: 目的VTEP IP地址 IP Source Address: 源VTEP IP地址2. 传输
VTEP 作用: (Vxlan Tunnel End Point)
打包/解包VxLAN ARP报文和正常VxLAN请求报文VTEPs之间节点的传输根据Outer Ethernet/IP header进行数据转发
VxlanARP请求 (1) vxlan初始化
VM1和VM2连接到VXLAN网络(VNI)100,两个VXLAN主机加入IP多播组239.119.1.1
(2) ARP请求
1) VM1以广播的形式发送ARP请求;
2) VTEP1封装报文, 打上VXLAN标识为100,外层IP头DA为IP多播组(239.119.1.1),SA为IP_VTEP1.
3) VTEP1在多播组内进行多播;
4) VTEP2解析接收到多播报文, 填写流表(VNI 100, 内层MAC1,外层IP_VTEP1地址),并在本地VXLAN标识为100的范围内广播(VXLAN是广播的主要应用)
5)VM2对接收到的ARP请求进行响应
(3) ARP应答
1) VM2准备ARP响应报文后向VM1发送响应报文
2)VTEP2接收到VM2的响应报文后把它封装在IP单播报文中(VXLAN标识依然为100),然 后向VM1发送单播
3)VTEP1接收到单播报文后,学习内层MAC2到外层IP_VTEP2地址的映射,解包并根据包内目的MAC1地址转发给VM1
4)VM1接收到ARP应答报文,ARP交互结束
数据传输
(1) ARP请求应答之后,VM1知道了VM2的MAC地址,并且要向VM2通信(注意,VM1是以TCP的方法向VM2发送数据的)。VTEP1 收到VM1发送数据包,用MAC地址从流表中检查VM1与VM2是否属于用一个VNI。两个VM不但位于同一个VNI中(不在同一个VNI中出网关),并且VTEP1已经知道了VM2的所有地址信息(MAC2和VTEP2_IP)。VTEP1封装新的数据包。然后交给上联交换机。
(2) 上联交换机收到服务器发来的UDP包,对比目的IP地址和自己的路由表,然后将数据报转发给相应的端口。
(3) 目的VTEP收到数据包后检查器VNI,如果UDP报中VNI与VM2的VNI一致,则将数据包解封装后交给VM2进一步处理。至此一个数据包传输完成。整个Vxlan相关的行为(可能穿越多个网关)对虚拟机来说是透明的,虚拟机不会感受传输的过程。虽然VM1与VM2之间启动了TCP来传输数据,但数据 包一路上实际是以UDP的形式被转发,两端的VTEP并不会检查数据是否正确或者顺序是否完整,所有的这些工作都是在VM1和VM2在接收到解封装的 TCP包后完成的。也就是说如果说如果被UDP封装的是TCP连接,那么UDP和TCP将做为两个独立的协议栈各自工作,相互之间没有交互。
Vxlan网关
用于VXLAN网络和非VXLAN网络连接,完成VXLAN ID和VLAN ID之间的映射和路由。
有VXLAN端口和普通端口。 当收到从VXLAN网络到普通网络的数据时,VXLAN网关去掉外层包头,根据内层的原始帧头转发到普通端口上;当有数据从普通网络进入到VXLAN网络 时,VXLAN网关负责打上外层包头,并根据原始VLAN ID对应到一个VNI,同时去掉内层包头的VLAN ID信息。相应的如果VXLAN网关发现一个VXLAN包的内层帧头上还带有原始的二层VLAN ID,会直接将这个包丢弃。
VLAN ID是一个本地信息,仅仅在一个地方的二层网络上起作用,VXLAN是隧道机制,并不依赖VLAN ID进行转发,也无法检查VLAN ID正确与否。因此,VXLAN网关连接传统网络的端口必须配置ACCESS口,不能启用TRUNK口。