VXLAN简介
VXLAN:Virtual eXtensible Local Area Network的缩写,虚拟扩展局域网,现代数据中心的的一种网络虚拟化技术,即在传统的三层IP网络上虚拟出一张二层的叠加网络,本质上是一种大二层的虚拟网络技术,引入一个UDP格式封装的外层隧道作为数据的链路层,原有数据报文内容作为隧道净负荷来传输,使得净荷数据可以轻松在二三层网络中传播。
VXLAN引入三层IP组播替代以太网广播;
Open vSwitch是基于软件实现的支持VxLan协议的虚拟网络交换机。
VXLAN协议标准是IETF发布的RFC 7348文档。
协议历史
协议最早由VMware,Arisa网络,思科提出,后期加入华为,博科,Red Hat,Intel等公司支持,IETF 与2012年8月发布第一个RFC Internet Draft版本,最新的标准是2014年8月RFC 7348
VxLan解决的问题
VxLan的提出,主要是云计算、现代数据中心的发展要求,主要关注的是现代数据中心的网络基础设施问题。
- STP协议和VLAN的限制。STP解决二层帧循环转发问题,不支持多路径,无法解决服务器内部虚拟机通信问题;VLAN支持将二层网络划分为最大4094个虚拟局域网(0和4095保留,VLAN ID只有12位),在虚拟化、STP限制以及多租户环境等原因影响下,VLAN不能满足;
- 多租户环境。公有云服务为多租户提供服务,采用二层或者三层网络隔离租户网络流量。二层网络使用VLAN,在租户过多时,VLAN不够用;三层网络隔离方案因为多用户使用相同的地址集合,需要云服务商提供特有的隔离方法,例如要求所有租户使用IP隔离网络而不是二层,或者使用非IP的3层协议用于内部虚拟机之间通信;
- ToR交换机MAC地址表大小的限制。典型的ToR交换机可以连接24-48个物理服务器,由于虚拟化,单个物理服务器将有多个虚拟机,实际上等于连接更多的服务器,容易造成MAC表溢出,如果溢出,交换机停止学习新地址直到MAC表有空间;
- 虚拟机迁移的需要。为保证业务的高可用性,需要迁移虚拟机到新的服务器上,例如跨数据中心,此时需要保证虚拟机IP地址和MAC地址不变,需要业务网络是一个二层网络,并且网络本身具备多路径的冗余备份和可靠性。
VXLAN协议说明
- VXLAN报文格式:原有的以太网帧外部加上新的外部以太网头部、IP头部、UDP头部以及新增的VXLAN头部,VXLAN头部只有8字节,其中24位用来标识VXLAN,称为VNI;
- VTEP:完成VXLAN报文的封装和解封装,VTEP与物理网络相连,分配有物理网络的IP地址,虚拟机中的数据报经过其封装可在Internet上传播,VTEP收到数据报,解封装,按照一定规则交付给后端的虚拟机;
- VXLAN网关:实现VXLAN虚拟网络之间以及虚拟网络与物理网络之间的通信;
- VXLAN是在现有的三层网络上覆盖二层网络,单个二层覆盖网络称为一个VXLAN分段;
- 只有在相同的VXLAN分段的虚拟机之间可以相互通信;
- VXLAN分段使用24位标识ID号,称为VNI(VXLAN Network Identifier),允许将近1600万的VXLAN分段;
- VXLAN分段也可以称为VXLAN Overlay Network 覆盖网络,VXLAN是隧道协议,采用三层IP数据包分装VXLAN头部信息和虚拟机产生的MAC帧,VTEP(VXLAN Tunnel End Point)负责填充和解包,虚拟机无法看到VXLAN协议包;VETP可以采用物理的交换机和服务器实现,也可以使用Hypervisor等软件实现;
- VXLAN控制机制负责VETP IP到虚拟机MAC地址映射学习,典型的有data plane learning,其它还有central autority-/directory-based lookup等;
VXLAN应用
虚拟机到虚拟机之间的通信
虚拟机不知道VXLAN,虚拟机A与不同主机的虚拟机B通信时,过程如下:
- A与传统一样,发送原始MAC帧给服务器B
- A所在的服务器主机的VTEP-A完成以下操作:
- 寻找虚拟机A所在的VNI(也就是VXLAN号)
- 判断虚拟机B是否和A的VNI相同,也就判断是否在同一个VXLAN内;
- 判断是否存在虚拟机B的MAC地址和对应的主机的VTEP-B的映射;
- 以上条件符合,在A发送的原始MAC帧外面加上外部MAC地址,外部IP头部,UDP头部以及VXLAN头部,组成新的MAC帧,发给远端的VTEP-B;
- 寻找虚拟机A所在的VNI(也就是VXLAN号)
- B所在的VTEP-B收到A的VTEP-A发的VXLAN帧,完成如下操作:
- 验证VNI是否有效;B的MAC地址是否在VNI中;
- 以上条件符合,VTEP-B解包VXLAN帧,除去加的VXLAN头部信息,还原原始的MAC帧,发送给目的虚拟机B,这个过程中对虚拟机B透明;
- VTEP-B学习地址,将内部原始mac帧的源地址MAC:A和外部IP地址VTEP-A映射记录下,当需要响应虚拟机A时,不用再通过发广播去寻找
广播通信、多播:
当虚拟机发送ARP广播帧请求时,在non-VXLAN环境下,该帧将被在同一个VLAN多个交换机中广播;对于VXLAN数据包只在其所在的IP多播组广播,为实现该控制需要VXLAN VNI 与 IP多播组的映射关系。VTEP负责维护该映射,提供IGMP管理成员加入或离开;
对现有设施要求
- VXLAN主机间IP连通
- 交换机支持IP多播(组播),支持多播路由协议支持(例如PIM-SM),打开IGMP Snooping功能;
- VXLAN网络需要分配一个(224.0.0.0-239.255.255.255)IP多播地址
- VTEP不能对VXLAN包进行分片,路由器对超过帧大小限制的VXLAN包进行分片,目的VTEP对于分片的VXLAN包直接扔掉。为避免分片,物理网络的MTU值应该和VXLAN包适应;
VXLAN帧格式
IPv4 VXLAN帧格式由以下几部分组成:其中前四个是VXLAN协议新增的,其余和以太网帧格式一致;
- Outer Ethernet Header:外部以太网头部,格式和传统的以太网格式一致
- Outer IPv4 Header:外部IPv4头部
- Outer UDP Header: 外部UDP头部
- VXLAN Header:VXLAN头部,8字节长度
- Inner Ehternet Header:内部以太网头部
- Payload:以太网数据负荷,也就是实际的数据,这里不包括原始帧的FCS字段
- Frame Check Sequence:新的帧检测序列,检测Outer以太网帧
Outer Ethernet Header:
- Outer Destination MAC Address:6字节,外部目的MAC地址
- Outer Source MAC Address:6字节,外部源地址
- OptnlEthtype = C-Tag 802.1Q:2字节,可选,802.1Q,表明支持VLAN
- Outer.VLAN Tag Information:2字节,支持VLAN时,VLAN ID等信息
- EtherType=0x0800:以太网数据类型,0x0800表示IPV4数据包
Outer IPv4 Header:
参见IPv4协议格式,主要包括IP数据类型(TCP、UDP)、源IPv4地址、目的IPv4地址;
- Source IP address:源IP地址,VTEP的源地址
- Destination IP address:目的IP地址,可以是单播地址或多播地址,单播地址时填的是目的方的VTEP地址
Outer UDP Header:
- Source Port:2字节,源端口,推荐使用inner Ethernet frame header的hash值,端口号范围49152-65525
- Dest Port : 2字节,VXLAN Port,IANA已经指定4789作为VXLAN UDP默认端口
- UDP Length:2字节,UDP首部和数据长度
- UDP Checksum:2字节,UDP校验和,校验和可以设置为0,这样不在校验,当设置不为0时,UDP报文将被校验
VXLAN Header:
- Flag:1字节,其中第5 比特位设为1,表明是VNI有效,其余保留,设为0
- Reserved 1:3字节,保留字段,设置为0
- VXLAN Network Identifier/Segment ID(VNI):3字节,VXLAN网络号,不同的VNI无法通信
- Reserved 2:1字节,保留字段,必须设为0
VXLAN的ARP协议过程
例如有两个虚拟机VM1,VM2,其中VM1部署在服务器server1,VM2部署在服务器Server2;server1支持VXLAN协议,由VTEP1实现功能, server2 也只支持VXLAN协议,由VTEP2实现功能;
ARP请求:
- VM1发送ARP请求,请求中包含自身MAC地址,目标地址全部设为1,广播给同一VLAN
- server1的VTEP1负责封装上面请求报文,封装的头部填写目标IP地址为多播IP,源IP为VTEP1的IP地址
- 报文在VXLAN中被多播,到达VTEP2所在的本地网络
- VTEP2对报文进行解封装,学习 VM1 MAC-VTEP的映射关系,并在本地局域网广播报文
ARP应答:
- VM2准备ARP响应报文向VM1发送
- VTEP2收到该报文,封装IP单播报文中,根据学习到的映射表,填充VTEP 1的IP地址和MAC地址,单播发送给VTEP1
- VTEP1收到单播报文,学习VM2-VTEP2之间的地址映射,并解封装转发报文给VM1
- VM1收到ARP应答报文,ARP交互结束
VXLAN报文转发
VM之间通信模式三种:同一个VXLAN下的不同VM,不同VNI下的跨网通信,VXLAN和非VXLAN之间访问。其中第一种通过二层网关支持,后两种需要三层网关支持。