一、如何理解
overlay(又叫叠加网络、覆盖网络)简单理解就是把一个逻辑网络建立在一个实体网络之上。就好比C/S架构是overlay internet、最开始网络overlay 电话网络、现在语音通信overlay ip 网络。我们现在说的overlay是将二层数据包重新封装在UDP中。比如IPsec over GRE就是一种嵌入式封装。
Overlay是vmware NSX主要运用的技术,已经被IETF收录。
二、overlay种类:
网络overlay:主要针对物理服务器,物理交换机作为边缘设备。(物理交换机为VTEP节点)
主机overlay:针对虚拟化,vSwitch作为网络边缘设备。(vSwitch为VTEP节点)
混合overlay:上面两种的结合。(软件VTEP和硬件VTEP之间需要标准协议互通)
三、现在主要的几个overlay技术:
VXLAN:由cisco和vmware支持,L2 over UDP ,会增加50个字节的IP包头。
NVGRE:由微软支持,L2 over GRE ,会增加42字节的包头长度。(缺点是需要网络设备支持GRE)
STT:由VMware(Nicira)支持,L2 over TCP,会增加58+76字节。(需要修改TCP)
四、VxLAN主要解决的问题:
1、服务器虚拟化技术,允许在物理机上运行多个MAC地址各不相同的虚拟机,随着数量的增加,交换机上的MAC地址表将剧烈膨胀,甚至需要MAC覆盖。
2、数据中心多以VLAN为虚拟机划分网络,但是VLAN数量受制于VLAN(802.1Q)协议4096,这远远满足不了现实的需求。
3、多租户环境的要求,其每个租户都有自己隔离的网络环境,导致物理网络中每个租户所分配的MAC地址和VLAN ID会存在重叠的可能。
4、Spanning Tree Protocol (STP)算法会产生大量多路路径冗余。
5、支持远距离虚拟机迁移,避免处理复杂的L2 (VLAN)网络环境。
6、ToR(Top of Rack) Switch链接着物理server,它记录着各个server/VM相连的MAC地址映射表。当地址映射表满时,ToR就会停止学习新的地址,这样就会导致网络泛洪,直到有记录过期被换出,腾出空闲表项。
五、VxLAN术语介绍:
VTEP:用于建立VxLAN隧道的端点设备成为VTEP,封装和解封装在VTEP节点上进行。
VTEPs:表示一个VXLAN网络内的所有VTEP。
VNI:VXLAN网络标识符,占用VXLAN报头的24位
六、overlay转发机制介绍:
1、报文封装格式:
UDP端口使用目的4798
2、组播协议转播MAC地址:
VXLAN网络(表示一个VXLAN VNI,比如VLAN10、VLAN20属于两个VLAN网络,这里一个VXLAN网络指比如VXALN10)和MAC地址表有绑定关系,VNI和IP组播地址有映射。在一个VXLAN网络中,每个VTEP成员都需要知道自己下连所有终端的MAC地址,同时需要知道其他所有VTEP成员下所有终端的MAC地址表,其他终端MAC地址表是通过底层物理网络组播进行传播,一个VXLAN网络一个组播地址。由于VXLAN最多可以有16M个网络,这就意为着对传统网络的组播条目数不断增加有一定挑战。不过已经有一些网络厂商比如H3C,在SDN架构下有一个控制器,所有的VTEP把MAC地址都转发给他,他再进行分发给需要的VTEP成员,所以在请求时只需要单播发送报文给控制器。
同样,VXLAN也有学习的功能,收到一个报文时,会检查自己有没有相关信息,如果没有就会记录源VNI、源外层VTEP的IP、源内层MAC地址。
3、VXLAN三层互通:
在VXLAN网络下的终端和其他VXLAN进行通信或者和远端访问时,VXLAN网关会对VXLAN报文剥离,重新封装为传统的IP数据包送入网络。同样,当远端或者其他VXLAN成员访问本VXLAN成员时,VXLAN根据目的IP查找所属VXLAN和所属的VTEP。重新封装成VXLAN报文送入目的地。
4、VXLAN二层互通:
在一些特定情况下,需要VXLAN网络和传统网络在同一个二层网络中时,VXLAN网络用二层网关和传统二层互通。当数据包到达VXLAN二层网关时,剥离VXLAN报文,重新打上目的网络对应的VLAN 802.1Q 标记后送入目的网络。反之,VXLAN通过VLAN编号获取VXLAN编号,再根据MAC地址确定目的VTEP的IP。然后进行转发。
注意:如果VTEP收到的来自VXLAN报文中带有VLAN ID的会给予丢弃,因为VLAN ID只是一个本地信息,转发了没有意义。所以连接VTEP的交换机端口需要设置成access模式,而不是TRUNK模式。
七、ARP请求流程:
VM1——VTEP1——物理交换机——VTEP2——VM2
1、VM1使用广播发送ARP请求查找VM2的MAC地址。
2、VTEP1收到VM1的广播后,查找自己的MAC地址表,如果下联终端没有将封装报文为VXLAN,内层VNI为100,外层目的地址为VXLAN组播地址,外层源IP为VTEP1地址。
3、通过多播组VTEP2接受到VTEP1的报文,解封装后。记录报文的内层VNI、外层源VTEP1的IP、内层MAC地址。
4、VTEP2通过广播将数据包广播到自己连接的终端下面。
5、VM2接受到ARP请求后,做出回应。
6、VTEP2接受到VM2的回应后,查找流表,发现需要发送给VTEP1,重新把数据包进行封装为VXLAN并以单播的形式发送给VTEP1.
7、VTEP1收到回应后,记录内层VNI、外层源VTEP2的IP、内层VM2的MAC地址。
8、VTEP1解封装后转发给VM1。至此VM1收到了VM2的MAC地址。
八、数据传输流程:
VM1——VTEP1——物理交换机——VTEP2——VM2
1、VM1给VM2发送了一个TCP报文。
2、VTEP1收到报文后检查VM1和VM2是否属于一个VNI,(如果不属于将转发给VXLAN网关)检查后属于一个VNI,需要转发给VTEP2。
3、VTEP1封装VXLAN报文以单播的形式发送给VTEP2。
4、VTEP2收到报文后解封装,查找流表。VM2是自己下联终端。
5、VTEP2单播的形式发送给VM2,至此一个报文发送完毕。