VXLAN vs VLAN

VXLAN vs VLAN

VXLAN(Virtual eXtensible Local Area Network)或许是目前最热门的网络虚拟化技术。网络虚拟化是指在一套物理网络设备上虚拟出多个二层网络。VXLAN由RFC7348定义,这是2014年定稿的一个协议,VXLAN协议将Ethernet帧封装在UDP内,再加上8个字节的VXLAN header,用来标识不同的二层网络。

同样是网络虚拟化技术的VLAN(Virtual Local Network)在1998年就提出了第一稿,并且得到广泛的应用,VLAN直接在Ethernet帧的头部加上4个字节的VLAN Tag,用来标识不同的二层网络。VLAN已经在大部分的网络设备和操作系统中得到了支持,它处理起来也比较简单,在读取Ethernet数据的时候,只需要根据EtherType相应的偏移4个字节就行。相比之下,VXLAN因为提出的较晚,在设备上的支持率不如VLAN,而且,VXLAN数据的封装解封装,要比VLAN复杂的多。看起来没理由VXLAN抢占VLAN的地位,但是现实却不是如此,那究竟是什么原因导致的呢?

VXLAN协议

我们先来看看VXLAN协议,前面说过,VXLAN是将Ethernet Frame封装在UDP包里面,具体的协议格式如下。

除了常规的各层的header之外,VXLAN协议定义了8个字节的VXLAN Header。其中的24bit用来标识不同的二层网络,这样总共可以标识1600多万个不同的二层网络。一般的传输层端口号用来标识进程或者应用,但是在VXLAN协议里面的,Ethernet Frame封装在UDP里面,UDP的source port被用来在ECMP或者LACP做负载均衡;destination port被用来标识VXLAN数据,IANA(Internet Assigned Numbers Authority)分配给VXLAN的端口号是4789。VXLAN数据是经过VTEP(VXLAN Tunnel EndPoint)封装和解封装的,相应的VXLAN数据的外层IP地址就是VTEP的IP地址。最外层的MAC地址用来实现VTEP之间的数据传递。

VXLAN与VLAN的最大区别在于,VLAN只是修改了原始的Ethernet Header,但是整个网络数据包还是原来那个数据包,而VXLAN是将原始的Ethernet Frame隐藏在UDP数据里面。经过VTEP封装之后,在网络线路上看起来只有VTEP之间的UDP数据传递,原始的网络数据包被掩盖了。

VXLAN并不是凭空出现,这种在UDP里面封装网络数据的做法,在VXLAN之前就已经存在,例如OTV(Overlay Transport Virtualization)和LISP(Locator/ID Separation Protocol)。

为什么要VXLAN?

相比VLAN,VXLAN显得复杂很多。再加上VLAN的先发优势,已经得到了广泛的支持。那为什么还要VXLAN?

VLAN ID数量限制

--

首先是VLAN能支持的二层网络数量有限。VLAN Tag总共4个字节,其中有12bit用来标识不同的二层网络,这样总共是4000多个。而VXLAN header有8个字节,有24bit用来标识不同的二层网络,这样总共是1600多万个。这或许是知名度最高的一条原因。但这是最根本的原因吗?VLAN自身也有一些相关的协议,其中QinQ(IEEE 802.1 ad)定义在Ethernet头部加上2个VLAN Tag,这样总共也可以由12+12=24bit的数据用来标识不同的二层网络。如果仅仅是因为能支持的二层网络数量有限,只需要在现有的VLAN设备上做一些改动,直接用QinQ就好了。所以,选用VXLAN一定还有其他原因。

TOR交换机MAC地址表限制

--

数据中心的虚拟化给网络设备带来的最直接影响就是:之前TOR(Top Of Rack)交换机的一个端口连接一个物理主机对应一个MAC地址,但现在交换机的一个端口虽然还是连接一个物理主机但是可能进而连接几十个甚至上百个虚拟机和相应数量的MAC地址。传统交换机是根据MAC地址表实现二层转发。如下图所示,交换机在收到一个数据帧之后,根据VLAN和目的MAC地址,查找到相应的交换机端口,再将数据帧从相应的端口发出。

这个MAC地址表是通过交换机的flood-learn学习并记录在交换机的内存。交换机的内存比较宝贵,所以MAC地址表的大小通常是有限的。现在因为虚拟化,整个数据中心的MAC地址多了几十倍,那相应的交换机里面的MAC地址表也需要扩大几十倍。如果交换机不支持这么大的MAC地址表,那么就会导致MAC地址表溢出。溢出之后,交换机不能将新的MAC地址学习到自己的MAC地址表。如果交换机收到这些MAC地址的数据帧,因为不能通过查表转发,会flood到所有的端口。这不但增加了交换机的负担,还增加了网络中其他设备的负担。为了避免这个问题,可以用一些更大容量的交换机,但是相应的成本也要上升,而且还不能从根本上解决这个问题。

如果使用VXLAN,虚拟机的Ethernet Frame被VTEP封装在UDP里面,一个VTEP可以被一个物理主机上的所有虚拟机共用。从交换机的角度,交换机看到的是VTEP之间在传递UDP数据。通常,一个物理主机对应一个VTEP,所以交换机的MAC地址表,只需要记录与物理主机数量相当条目就可以了,虚拟化带来的MAC地址表暴增的问题也不存在了。这是VXLAN能解决的,而现有的VLAN没有办法回避的问题。

灵活的虚机部署和部署

--

采用VLAN网络的虚拟环境,不存在overlay网络。虚拟机的网络数据,被打上VLAN Tag之后,直接在物理网络上传输,与物理网络上的VLAN是融合在一起的。这样的好处是虚拟机能直接访问到物理网络的设备,但是坏处是,虚拟网络现在不能打破物理网络的限制。比如,如果要在VLAN 100部署虚拟机,那只能在支持VLAN 100的物理设备上部署虚机。通常不同的VLAN网络,会被分配不同的IP地址段,通过路由器或者其他的三层设备连接在一起。设想我有下面一个环境,紫色区域和绿色区域分别对应不同的VLAN网络,紫色区域里面每个服务器已经有10个虚机,绿色区域每个服务器只有2个虚机,紫色区域虽然服务器数量更多,但是总的负担已经够重了。现在因为业务的需求,我们还需要向紫色网络里面部署虚机,因为VLAN网络无法打破物理二层网络的限制,虚机还是只能部署在紫色区域,这明显不合理。

另一方面,就算不部署新的虚拟机,只是对现有的部署做一个优化,将部分虚拟机从紫色区域迁移到绿色区域,因为无法打破物理二层网络的限制,这也是不可行的。因为业务肯定不是平均分配的,那如果采用VLAN网络,极有可能会导致数据中心的利用率分布不均匀。

VLAN其实有自己的解决办法,如果将所有的交换机Trunk连接起来,那在物理上没有明确的区域区分。但是这样就产生了一个大的二层,相应的BUM(Broadcast,Unknown Unicast,Multicast)和交换机MAC地址表的问题也会随之产生。

如果使用VXLAN呢?因为VXLAN通过UDP传输Ethernet Frame,那相应的可以在一个L3网络上,传递L2的数据。又或者用官方的说法,在一个L3网络上构建了L2网络。物理网络的二层边界还存在,但是现在虚机的网络数据在三层网络传输,可以跨越物理二层网络的限制。

不管物理网络的二层还是三层,虚拟机现在已经感知不到了。通过VXLAN的封装,虚拟机现在走的是一套独立于物理网络(underlay network)的overlay network。这样的话,在物理网络上,就不必把所有的交换机Trunk连起来,还是可以保持一个个小的L2 Pod。但是同时,虚拟机的部署和迁移,又不用受物理网络的限制,整个数据中心可以保持一个平均的利用率。这是另外一个VXLAN能解决,但是VLAN无法回避的问题。

更好的利用多条网络链路

--

VLAN协议使用STP(Spanning Tree Protocol)来管理多条线路,STP根据优先级和cost,只会选出一条线路来工作,这样可以避免数据传递的环路。这种主备(active-passive)的模式,比只连接一条线路肯定是有优势,但是对于用户来说,相当于花了N倍的钱,却只用到了1倍的服务。当网络流量较大的时,也不能通过增加线路来提升性能。而VXLAN因为是通过UDP封装,在三层网络上传输。虽然传递的还是二层的Ethernet Frame,但是VXLAN可以利用一些基于三层的协议来实现多条线路共同工作(active-active),以实现负载均衡,例如ECMP,LACP。现在对于用户来说,花了N倍的钱,也用到了N倍的服务。当网络流量较大时,现在可以通过增加线路来减轻现有线路的负担。这在提升数据中心网络性能,尤其是东西向流量的性能时,尤其重要。这是VXLAN相比VLAN,能带来的另一个好处。

最后

所以,尽管VXLAN要复杂一些,提出的晚一些,普及率也要低一些,但是随着数据中心规模的发展和虚拟化的普及,VXLAN逐渐成为构建数据中心网络的趋势。

不过理智点看,VXLAN有这么多优点,在可以预见的未来,还是不能完全替代VLAN。首先VXLAN是一种overlay网络,不能独立存在,必须依赖underlay网络,而在构建underlay网络时,还是需要借助VLAN。其次,这里介绍的VXLAN的优势,都是在大规模环境下,如果你的数据中心的规模,不论虚机还是物理的,就百十台的样子,那直接用VLAN也可以了,没必要上VXLAN。

VXLAN最多是在构建数据中心时的一个选项,而不是唯一的选项。套用马斯洛的“工具法则”:当你只有一个锤子时,任何东西看起来都像是个钉子。在设计数据中心网络时,也应该避免用一种方法解决所有问题,VXLAN,VLAN,BGP,EVPN,OpenStack应该综合考虑。所以在下一篇,我将介绍一下OpenStack中的VXLAN是如何实现的。

发布于 2018-04-26

文章被以下专栏收录