1. 为什么需要Vxlan
普通的VLAN数量只有4096个,无法满足大规模云计算IDC的需求,而IDC为何需求那么多VLAN呢,因为目前大部分IDC内部结构主要分为两种L2,L3。L2结构里面,所有的服务器都在一个大的局域网里面,TOR透明L2,不同交换机上的服务器互通靠MAC地址,通信隔离和广播隔离靠的vlan,网关在内网核心上。而L3结构这是从TOR级别上就开始用协议进行互联,网关在TOR上,不同交换机之间的互通靠IP地址。
在云计算IDC里,要求服务器做到虚拟化,原来这个服务器挂在TOR A上,我可以随意把它迁移到TOR B上,而不需要改变IP地址,这个有点就是L2网路的特长,因为我这个虚拟服务器和外界(网关之外)通信还靠L3,但是我网关内部互访是走L2的,这个在L3里是无法做到的。因为L3里每个IP都是唯一的,地址也是固定位置的,除非你整网段物理搬迁。因此如何在L3网络里传输L2数据呢,这就是overlay技术。
因此VXLAN(Virtual eXtensible LAN可扩展虚拟局域网)诞生了,基于IP网络之上,采用的是MAC in UDP技术,本来OSI7层模型里就是一层叠一层的,这种和GRE/IPSEC等tunnel技术是不是很像,这种封装技术对中间网络没有特殊要求,只要你能识别IP报文即可进行传送。
好了,解释清楚了,那么现在总结为何需要Vxlan:
- 虚拟机规模受到网络规格的限制,大L2网络里,报文通过查询MAC地址转发,MAC表容量限制了虚拟机的数量。
- 网络隔离的限制,普通的vlan和VPN配置无法满足动态网络调整的需求,同时配置复杂
- 虚拟器搬迁受到限制,虚拟机启动后假如在业务不中断基础上将该虚拟机迁移到另外一台物理机上去,需要保持虚拟机的IP地址和MAC地址等参数保持不变,这就要求业务网络是一个二层的网络。
2. Vxlan报文格式
Outer UDP端口使用4798,但可以修改
Outer IP头封装:源IP为发送报文的虚拟机所属的VTEP的IP地址,目的IP为目的虚拟机所属的VTEP IP地址。
Outer的目的IP地址可以是单播和组播地址,单播的情况下,目的IP为VTEP(Vxlan Tunnel End Point)的IP地址,在多播的情况下引入VXLAN的管理层,利用VNI和IP多播组的映射来确定VTEP。
当目的IP为接收端的VTEP的IP时,假如不知道这个IP地址,则需要执行ARP请求来获取,步骤如下:
1. 目标IP被替换成与源虚拟机具有相同VNI的多播组IP地址;
2. 所有VTEP端都接收该多播报文,VTEP查找所在主机上的全部虚拟机来匹配源虚拟机的Inner 目的MAC。
3. 目标VTEP的虚拟机会回应该多播包,从而获得目标VTEP的IP地址。
4. 发送端VTEP添加VNI-VTEP-虚拟机MAC的映射关系到自己的VXLAN表中,以避免再次组播学习。
Outer 以太封装:SA为发送报文的虚拟机所属的VTEP MAC地址,DA为目的虚拟机所属的VTEP上路由表中下一跳MAC地址。
3. VXLAN网络结构
NVE(Network Virtrualization Edge网络虚拟边缘节点)是实现网络虚拟化的功能实体,VM里的报文经过NVE封装后,NVE之间就可以在基于L3的网络基础上建立起L2虚拟网络。网络设备实体以及服务器实体上的VSwitch都可以作为NVE。
VTEP为VXLAN隧道的端点,封装在NVE中,用于VXLAN报文的封装和解封装。VTEP与物理网络相连,分配的地址为物理网络IP地址。VXLAN报文中源IP地址为本节点的VTEP地址,VXLAN报文中目的IP地址为对端节点的VTEP地址,一对VTEP地址就对应着一个VXLAN隧道。
VNI(VXLAN Network Identifier):VXLAN网络标识VNI类似VLAN ID,用于区分VXLAN段,不同VXLAN段的虚拟机不能直接二层相互通信。一个VNI表示一个租户,即使多个终端用户属于同一个VNI,也表示一个租户。VNI由24比特组成,支持多达16M((2^24-1)/1024^2)的租户。
VAP(Virtual Access Point):虚拟接入点VAP统一为二层子接口,用于接入数据报文。为二层子接口配置不同的流封装,可实现不同的数据报文接入不同的二层子接口。
Vxlan网关
VM之间的通信模式主要有3种:同VNI下的不同VM(分布在同一实体和不同实体两种),不同VNI下的跨网访问,VXLAN和非VXLAN之间的访问。
VXLAN网关分为:
二层网关:位于同一网段的终端用户通信,L2网关收到用户报文后,根据报文中包含的目的MAC类型,报文转发流程分为:
1. MAC地址为BUM(broadcast&unknown-unicast&multicast)地址,按照 BUM报文转发流程进行处理
2. MAC地址为已知单播地址,按照已知单播报文转发流程进行处理
三层网关:用于非同一网段的终端用户通信或VXLAN和非VXLAN用户间的通信。
VXLAN二层网关:
L2网关主要解决的就是同一VNI下的VM之间的互访。
VXLAN 三层网关:
L3网关解决的就是不同VNI以及VXLAN和非VXLAN之间的互访。L3网关分为集中式网关和分布式网关,这2者的主要区别就在于L3网关是在leaf上还是在spine上。
如上图所示,集中式L3 GW在spine上,而分布式则是L2,L3 GW都在leaf上。当网络规模较大时,需采用分布式网关,因集中式spine的ARP表项瓶颈,并且子网流量转发绕远。分布式网关时,VTEP在leaf上。spine节点不感知VXLAN隧道。
需要注意的是当VM1和VM2在同一子网,但是挂在不同leaf上时,他们的三层网关需要配置相同的网关IP地址和MAC地址,当租户的VM位置移动时,不需要更改网关任何配置。
BUM报文转发流程
当BUM报文进入VXLAN隧道时,接入端VTEP采用头端复制方式(接口收到BUM报文后本地VTEP通过控制平面获取同一VNI的VTEP列表,将收到的BUM报文根据VTEP列表进行复制并发送给属于同一VNI的所有VTEP))进行报文的VXLAN封装,BUM出VXLAN隧道时,出口端VTEP对报文解封装,
综述:VXLAN网络结构定义完了,这里用通俗易懂的话解释一遍:在一台实体服务器上可以虚拟出一个交换机来,这个交换机就是VSwitch,而这个VSwitch下挂的不再是实体服务器,而是一个个VM,一个VM其实就是一个租户租用的服务器,不同租户之间肯定是不能互访的,要不然租户数据的安全性如何保障,这个隔离就是靠的VNI这个ID,其实这个你可以向下VLAN是如何隔离的,目的就是为了隔离租户。我一个租户有2个VM的话,那么我这2个之间应该可以互访吧。所以说基于VNI定义的租户,而非基于VM。内部的结构说清楚了再来说上行如何访问,在一个L2交换机你要跨网访问必然要经过网关,这个网关的IP地址就是VTEP IP,在网络上有个概念叫arp-proxy,一般用途是为了保护内部私有网络,外界的所有应答都有网关来代替回答(可以理解为门卫)。在这里外界只需要你的VTEP IP即可,对端报文到达VTEP这个网关后自己在内部走L2进行转发。因此VXLAN报文中的目的IP就是对端的网关(VTEP IP),而源地址自然也是自己的网关(VTEP IP)。而对于不同leaf上的同一VNI的VM来说,他们的VTEP IP肯定要配置相同,想下同一vlan下的服务器的网关是如何配置的就明白了。