当前位置: 首页 > 科技观察

隧道与网络虚拟化:NVGREvsVXLAN

时间:2023-03-22 15:32:55 科技观察

相信大家对NVGRE和VXLAN隧道协议都不陌生,但实际上隧道协议只是虚拟化网络的一部分,并不提供实质性的功能,只是定义了不同的虚拟化机器之间如何封装和转发数据包。本文想强调两点:第一,NVGRE和VXLAN都是用三层协议封装了一个二层协议;第二,这两项技术解决了固定VLAN大小的问题,不再局限于4094。随着各种新技术的兴起,一个标准已经不能满足需求。科技巨头们争先恐后地将自己的标准打造成行业的统一标准。其中,NVGRE和VXLAN就是典型的例子。那么这两种技术的区别到底在哪里呢?VXLANVXLAN主要由Cisco推出。VXLAN的头部有一个24位的ID段,表示1600万个唯一的虚拟网段。此ID通常由UDP端口的伪随机算法生成。(UDP端口由该帧中的原始MACHash生成)。这样做的好处是可以保证基于5元组的负载均衡,保存VM之间数据包的顺序。具体方法是将数据包内部的MAC组映射到一个唯一的UDP端口组。二层广播转IP组播,VXLAN使用IP组播泛洪虚拟网段,依赖动态MAC学习。VXLAN封装将包大小扩展到50字节,如下图所示:由于包比较大,VXLAN需要一个支持大帧的传输网络来支持包大小的扩展。NVGRENVGRE的主要支持者是微软。与VXLAN不同,NVGRE不使用标准传输协议(TCP/UDP),而是使用通用路由封装协议(GRE)。NVGRE使用GRE报头的低24位作为租户网络标识符(TNI),它支持像VXLAN一样的1600个虚拟网络。为了提供描述带宽利用粒度的流,传输网络需要使用GRE头,但这使得NVGRE与传统的负载均衡不兼容。这是NVGRE与VXLAN最大的区别,也是最大的不足。为了提高负载均衡能力,建议每台NVGRE主机使用多个IP地址,保证更多的流量可以负载均衡。NVGRE不是依靠泛洪和IP多播进行学习,而是以更灵活的方式进行广播,但这取决于硬件/供应商。最后一个区别是分片,NVGRE支持减少数据包的传输单元来减小内部虚拟网络数据包大小,不要求传输网络支持大帧的传输。实验性的OVS(openVswitch)可以支持这两种隧道协议。它可以实现两个虚拟机之间的简单通信,分别在两个主机上运行虚拟机,并在虚拟机之间建立隧道。没有GRE隧道,两个VM无法连接。在主机之间创建隧道的简单步骤:1.主机1配置如下:ovs-vsctladd-brbrgreovs-vsctladd-brbrvmovs-vsctladd-portbrgreeth0ifconfigeth00ifconfigbrgre192.168.1.100netmask255.255.255.0routeadddefaultgw1??92.168.1.1brgreifconfigbrvm10.1.2.10netmask255.255.255.0ovs-vsctladd-portbrvmgre1--setinterfacegre1type=greoptions:remoteip=192.168.1.1112,主机2配置如下:ovs-vsctladd-brbrgreovsvsctl添加-brbrvmovs-vsctl添加端口brgreeth0ifconfigeth00ifconfigbrgre192.168.1.111网络掩码255.255.255.0route添加默认gw1??92.168.1.1brgreifconfigbrvm10.1.2.11网络掩码255.255.255.255.0add-25setinterfacegre1type=greoptions:remoteip=192.168.1.100在每个主机中创建2个网桥,其中brvm用于模拟虚拟机,另一个brgre用作与其他主机的隧道(VTEP)连接。eth0连接到brgre,brgre绑定IP用于隧道。为了简化实验,我把GRE隧道设置在同一个子网,当然也可以放在不同的域,让模拟场景更逼真。可以测试以下内容。10.1.2.10和10.2.1.11应该是可ping通的。这两个VM域通过隧道连接。同样,也可以改为VXLAN隧道配置。