VXLAN 简介
为什么要VXLAN?
● 虚拟机规模受网络规格限制
在大二层网络环境下,数据报文是通过查询MAC地址表进行二层转发,而MAC地址表的容量限制了虚拟机的数量。
● 网络隔离能力限制
当前主流的网络隔离技术是VLAN或VPN(Virtual Private Network),在大规模的虚拟化网络中部署存在如下限制:
─ 由于IEEE 802.1Q中定义的VLAN Tag域只有12比特,仅能表示4096个VLAN,无法满足大二层网络中标识大量用户群的需求。
─ 传统二层网络中的VLAN/VPN无法满足网络动态调整的需求。
● 虚拟机迁移范围受网络架构限制
虚拟机启动后,可能由于服务器资源等问题(如CPU过高,内存不够等),需要将虚拟机迁移到新的服务器上。为了保证虚拟机迁移过程中业务不中断,则需要保证虚拟机的IP地址、MAC地址等参数保持不变,这就要求业务网络是一个二层网络,且要求网络本身具备多路径的冗余备份和可靠性。
VXLAN解决的问题
● 针对虚拟机规模受网络规格限制
VXLAN将虚拟机发出的数据包封装在UDP中,并使用物理网络的IP/MAC地址作为外层头进行封装,对网络只表现为封装后的参数。因此,极大降低了大二层网络对MAC地址规格的需求。
● 针对网络隔离能力限制
VXLAN引入了类似VLAN ID的用户标识,称为VXLAN网络标识VNI(VXLAN Network ID),由24比特组成,支持多达16M((2^24-1)/1024^2)的VXLAN段,从而满足了大量的用户标识。
● 针对虚拟机迁移范围受网络架构限制
通过VXLAN构建大二层网络,保证了在虚拟迁移时虚拟机的IP地址、MAC地址等参数保持不变。
什么是VXLAN?
VXLAN-Virtual eXtensible Local Area Network(虚拟化可扩展局域网)
VXLAN是NVO3(Network Virtualization over Layer3)中的一种网络虚拟化技术,通过将VM或物理服务器发出的数据包封装在UDP中,并使用物理网络的IP/MAC作为报文头进行封装,然后在IP网络上传输,到达目的地后由隧道终结点解封装并将数据发送给目标虚拟机或物理服务器。
NVE-Network Virtual Endpoint
网络虚拟边缘节点NVE,是实现网络虚拟化功能的网络实体。报文经过NVE封装转换后,NVE间就可基于三层基础网络建立二层虚拟化网络。
VTEP-VXLAN Tunnel Endpoints
VTEP是VXLAN隧道端点,封装在NVE中,用于VXLAN报文的封装和解封装。
VNI-VXLAN Network Identifier
VXLAN网络标识VNI类似VLAN ID,用于区分VXLAN段,不同VXLAN段的虚拟机不能直接二层相互通信。
一个VNI表示一个租户,即使多个终端用户属于同一个VNI,也表示一个租户。VNI由24比特组成,支持多达16M((2^24-1)/1024^2)的租户。
数据报文转发
Vxlan网关
VM之间的通信模式主要有3种:同VNI下的不同VM,不同VNI下的跨网访问,VXLAN和非VXLAN之间的访问。如下VXLAN 网关示意图。
VXLAN网关分为二层网关和三层网关。
位于同一网段的终端用户通信,二层网关收到用户报文后,根据报文中包含的目的MAC类型,报文转发流程分为:
● MAC地址为BUM(broadcast&unknown-unicast&multicast,广播&未知单播&组播)地址,按照 BUM报文转发流程进行处理。
● MAC地址为已知单播地址,按照已知单播报文转发流程进行处理。
三层网关,用于非同一网段的终端用户通信或VXLAN和非VXLAN用户间的通信。
二层网关
VXLAN二层网关工作流程
VXLAN二层网关工作流程分为BUM 报文转发工作流程和VXLAN已知单播转发工作流程。
1. VXLAN BUM报文转发工作流程
当BUM报文进入VXLAN隧道,接入端VTEP采用头端复制方式进行报文的VXLAN封装。BUM报文出VXLAN隧道,出口端VTEP对报文解封转。BUM报文具体转发流程如下图所示。
头端复制:接口收到BUM(Broadcast&Unknown-unicast&Multicast)报文,本地VTEP通过控制平面获取属于同一个VNI的VTEP列表,将收到的BUM报文根据VTEP列表进行复制并发送给属于同一个VNI的所有VTEP。
通过头端复制完成BUM报文的广播,不需要依赖组播路由协议。
1) Switch_1收到来自终端A的报文,根据报文中接入的端口和VLAN信息获取对应的二层广播域,并判断报文的目的MAC是否为BUM MAC。
● 是,在对应的二层广播域内广播,并跳转到2)。
● 不是,通过已知单播报文转发流程。
2) Switch_1上VTEP根据对应的二层广播域获取对应VNI的头端复制隧道列表,依据获取的隧道列表进行报文复制,并进行VXLAN封装。基于每个出端口和VXLAN封装信息封装VXLAN头和外层IP信息,并从出端口转发。
3) Switch_2/Switch_3上VTEP收到VXLAN报文后,根据UDP目的端口号、源/目的IP地址、VNI判断VXLAN报文的合法有效性。依据VNI获取对应的二层广播域,然后进行VXLAN解封装,获取内层二层报文,判断报文的目的MAC是否为BUM MAC。
● 是,在对应的二层广播域内非VXLAN侧进行广播处理。
● 不是,再判断是否是本机MAC。
─ 是,上送主机处理。
─ 不是,在对应的二层广播域内查找出接口和封装信息,并跳转到4)。
4) Switch_2/Switch_3根据查找到的出接口和封装信息,为报文添加VLAN Tag,转发给对应的终端B/C。
终端B/C回应终端A的消息,按照已知单播报文转发流程进行转发。
2. VXLAN已知单播转发工作流程
已知单播报文具体转发流程如下图所示。
1) Switch_1收到来自终端A的报文,根据报文中接入的端口和VLAN信息获取对应的二层广播域,并判断报文的目的MAC是否为已知单播MAC。
● 是,再判断是否是本机MAC。
─ 是,上送主机处理。
─ 不是,在对应的二层广播域内查找出接口和封装信息,并跳转到2)。
● 不是,在对应的二层广播域内广播,并跳转到2)。
2) witch_1上VTEP根据查找到的出接口和封装信息进行VXLAN封装和报文转发。
3) Switch_2上VTEP收到VXLAN报文后,根据UDP目的端口号、源/目的IP地址、VNI判断VXLAN报文的合法有效性。依据VNI获取对应的二层广播域,然后进行VXLAN解封装,获取内层二层报文,判断报文的目的MAC是否为已知单播报文MAC。
● 是,在对应的二层广播域内查找出接口和封装信息,并跳转到4)。
● 不是,再判断是否是本机MAC。
─ 是,上送主机处理。
─ 不是,通过BUM报文转发流程。
4) Switch_2根据查找到的出接口和封装信息,为报文添加VLAN Tag,转发给对应的终端B。
三层网关
不同网段的VXLAN间通信,及VXLAN和非VXLAN的通信,需要通过IP路由实现。
在三层网关上创建BD,将VNI以1:1方式映射到BD,基于BD创建BDIF接口,通过BDIF接口配置IP地址实现不同网段的VXLAN间,及VXLAN和非VXLAN的通信。
BDIF接口类似VLANIF接口。
三层网关分类
L3网关分为集中式网关和分布式网关。
集中式网关,南北向/东西向的流量都需要经过网关,本地跨子网流量也通过集中式网关进行转发,流量迂回。
分布式网关,跨子网流量也是最优路径转发,只有南北向的流量压力,没有东西向的流量压力。
分布式网关分为软件分布式网关和硬件分布式网关,其中软件分布式网关位于vSwitch, vSwitch实现VXLAN封装和解封装,通过DVR实现跨子网东西向流量转发。硬件分布式网关位于硬件网络边缘设备,由硬件网络设备做VXLAN封装和解封装。
报文转发流程
VXLAN二层网关工作流程分为BUM 报文转发工作流程和VXLAN已知单播转发工作流程。
不同网段的VXLAN网络之间通信,以及不同网段VXLAN网络和非VXLAN网络的通信,需要通过VXLAN三层网关实现,VXLAN三层网关工作流程如下:
三层网关通信具体实现过程如下:
1. 作为VXLAN二层网关的Switch_4收到VXLAN报文后进行解封装,确认内层报文中的DMAC是否是本网关接口的MAC地址。
● 是,转给对应目的网段的三层网关处理,并跳转2。
● 不是,在对应的二层广播域内查找出接口和封装信息。
2. 作为VXLAN三层网关的Switch_4剥除内层报文的以太封装,解析目的IP。根据目的IP查找ARP表项,确认DMAC、VXLAN隧道出接口及VIN等信息。
● 没有VXLAN隧道出接口及VIN信息,进行三层转发。
● 有VXLAN隧道出接口及VIN信息,跳转3。
3. 作为VXLAN二层网关的Switch_4重新封装VXLAN报文,其中内层报文以太头中的SMAC是网关接口的MAC地址。
Switch_4与其他Switch之间的通信,请参见二层网关实现原理。