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)。 |