VxLAN简介
1.VxLAN的定义
VxLAN 全称是 Visual eXtensible Local Area Network(虚拟扩展本地局域网),它是一个 VLAN 的扩展协议。
VxLAN 本质上是一种隧道封装技术。它使用 TCP/IP 协议栈的惯用手法–封装/解封装技术,将 L2 的以太网帧(Ethernet frames)封装成 L4 的 UDP 数据报(datagrams),然后在 L3 的网络中传输,效果就像 L2 的以太网帧在一个广播域中传输一样,实际上是跨越了 L3 网络,但却感知不到 L3 网络的存在。
如下图所示,左右两边是 L2 广播域,中间跨越一个 L3 网络,VTEP 是 VxLAN 隧道端点(VxLAN Tunnel Point),当 L2 以太网帧到达 VTEP 的时候,通过 VxLAN 的封装,跨越 L3 层网络完成通信,由于 VxLAN 的封装"屏蔽"了 L3 网络的存在,所以整个过程就像在同一个 L2 广播域中传输一样。
2.VxLAN的产生背景
-
VLAN ID 数量的限制
虚拟化技术发展起来后,一台物理主机可能虚拟出上百上千台虚拟设备,整个云数据中心可能要划分超过成千上万个的广播域,而 VLAN 的数量最多 4094 个。
从图中可以得到VLAN ID使用12 bit来表示,所以最多为4096个。 -
网络规模与MAC地址表耗尽
交换机的原理是根据 MAC 地址表完成数据包的二层转发。在虚拟化技术没出现之前,数据中心的 TOR(Top of Rack) 交换机的一个端口连接一台物理主机,并对应一个 MAC 地址,当虚拟化技术出现之后,一台物理主机虚拟出几十甚至上百台虚拟机,TOR 交换机的一个端口虽然还是连接一台物理主机,但却对应多个 MAC 地址(这还在不算 VLAN 划分的情况下),如下图所示:
这无疑会造成 TOR MAC 地址表的膨胀,交换机本身 MAC 表的空间是有限的,如果溢出,就会造成交换机的不断泛洪,增加了处理负担。如果使用 VxLAN 则不然,VxLAN 使用 VTEP 封装虚拟机的二层帧,在三层网络上传输,通常,一台物理机对应一个 VTEP,一个 VTEP 可以被该台物理机上的所有虚拟机共有,所以,对于 TOR 交换机的 MAC 地址表来说,一台物理机只用记录一条 VTEP 信息即可。这样就避免了 MAC 地址表暴增的问题。
-
虚拟机迁移范围受网络架构限制
虚拟机启动后,可能由于服务器资源等问题(如CPU过高,内存不够等),需要将虚拟机迁移到新的服务器上。为了保证虚拟机迁移过程中业务不中断,则需要保证虚拟机的IP地址、MAC地址等参数保持不变。在采用 VLAN 的虚拟网络环境下,虚拟机的 VLAN 数据包直接在物理网络上传输,和物理网络上的 VLAN 数据包融合在一起,这样的好处是虚拟机能直接访问到物理网络的设备,但坏处也很明显,虚拟网络无法打破物理网络的界限,具体表现在虚拟机的部署和迁移不太灵活。
如图所示,网络1中的负载较重时,采用VLAN隔离的网络不能将虚拟机迁移到网络2中。使用 VxLAN 则完全不全在这些问题,通过 VxLAN 的封装,在一个 L3 网络上构建了 L2 网络,或者说基于 underlay 网络的 overlay 网络,虚拟机的数据可以打破 L2 网络的限制,在 L3 网络上传输,虚拟机的部署和迁移也不受物理网络的限制,可以灵活部署和迁移,使得整个数据中心保持一个平均的利用率。
3.VxLAN报文格式
其中VxLAN头由8Bytes组成,分别是:
- Flags: 占 8bits,具体是 RRRRIRRR,其中 I 必须设置为 1,表示是是一个合法的 VxLAN ID,其它 7bits 的 R 作为保留字段并且设置为 0。
- VNI: 占 24bits,VxLAN 的 ID 标识。最多可以支持2^24 = 16777216,约等于16M个虚拟网络。远远超过VLAN 4096个限制。
- Reserved: 保留字段。
对于 UDP 头部,需要注意的是,目的端口(dst port) 默认设置为 4789,这是 IANA 分配的 VxLAN 协议使用端口号。
4.VxLAN数据传输过程
图中,VTEP 叫做 VxLAN 隧道端点(VxLAN Tunnel Endpoint),是 VxLAN 协议中将对原始数据包进行封装和解封装的设备,它可以由硬件设备实现,也可以由软件实现。
假如图中 VM1 ping VM2,会是怎样一个通信过程:
- VM1 不知道 VM2 的 MAC 地址,会发出 ARP 请求。
- VM1 所在主机的 VTEP 封装 ARP 请求包,并向网络中其余 VTEP 广播。同时在 MAC 地址表中记录 VM1 的表项。
- VM2 所在主机的 VTEP 接收 ARP 请求包,解封装之后将原始包发到 VM2,同时记录 VM1 的 MAC 地址表项。
- VM2 发出 ARP 响应,经过 VTEP,再次封装之后,由于之前学习到 VM1 的地址,所以直接单播发给 VM1 所在主机的 VTEP,同时记录 VM2 的 MAC 地址表项。
- VM1 所在主机 VTEP 接收 ARP 响应包,解封装之后发给 VM1,同时记录 VM2 的 MAC 地址表项。
- VM1 拿到 VM2 的 MAC 地址之后,发出 ICMP 包,这个时候 VTEP 的 MAC 地址表中已经学习到 VM2 的地址,所以直接封装之后,单播发给 VM2 所在主机 VTEP。
- VM2 所在主机 VTEP 解封装之后,直接发给 VM2。
- VM2 构造 ICMP 的响应包,同样的过程发给 VM1,至此完成整个 ping 的过程。
5.VxLAN存在的问题
VxLAN具有很多优势,但是同时也要注意到隧道技术本身有封装与解封装的开销,因此VxLAN的性能势必会有一定的下降。在实际使用时需要结合网络规模综合考虑。