接触网络虚拟化纯属偶然。作为研究院微博五毛小分队的成员,撰出一条微博是每天的任务。那天无意中抓取了一条新闻:Xsigo公司推出了业界第一个数据中心网络全虚拟化解决方案。巧的是Xsigo公司的方案是基于Infiniband技术的,而我最近的项目使我对Infiniband略懂,所以就重点关注了一下。这一关注不要紧,才发现里面水很深。不管是传统IT豪强还是网络巨人都对这一领域虎视眈眈,谋篇定局,更有无数的创业者们在此展开深耕。抱着对技术要略懂的心态,我入水一探究竟。这篇博文算是对我这次涉水的总结,网络虚拟化发展到现在牵涉的技术非常多,每种技术都可以单独写一篇文章来介绍,限于我的精力和知识水平只能给大家做个整体的简单介绍,不足之处还请各位批评指正。如果读者对某种技术感兴趣可以搜索相关资料做更详细的了解。什么是网络虚拟化首先我们需要明确一个问题,什么是网络虚拟化,网络虚拟化简单来讲是指把逻辑网络从底层的物理网络分离开来。这个概念产生的比较久了,VLAN,VPN,VPLS等都可以归为网络虚拟化的技术。近年来,云计算的浪潮席卷IT界。几乎所有的IT基础构架都在朝着云的方向发展。在云计算的发展中,虚拟化技术一直是重要的推动因素。作为基础构架,服务器和存储的虚拟化已经发展的有声有色,而同作为基础构架的网络却还是一直沿用老的套路。在这种环境下,网络确实期待一次变革,使之更加符合云计算和互联网发展的需求。云计算的大环境下,网络虚拟化的定义没有变,但是其包含的内容却大大增加了。云计算环境下的网络虚拟化需要解决端到端的问题,笔者将其归纳为三个部分:(一)第一部分是服务器内部。随着越来越多的服务器被虚拟化,网络已经延伸到Hypervisor内部,网络通信的端已经从以前的服务器变成了运行在服务器中的虚拟机,数据包从虚拟机的虚拟网卡流出,通过Hypervisor内部的虚拟交换机,在经过服务器的物理网卡流出到上联交换机。在整个过程中,虚拟交换机,网卡的I/O问题以及虚拟机的网络接入都是研究的重点。(二)第二部分是服务器到网络的连接。10Gb以太网和Infiniband等技术的发展使一根连接线上承载的带宽越来越高。为了简化,通过一种连接技术聚合互联网络和存储网络成为了一个趋势。(三)第三部分是网络交换,需要将物理网络和逻辑网络有效的分离,满足云计算多租户,按需服务的特性,同时具有高度的扩展性。下面我就围绕这三个方面来讲述网络虚拟化中的一些主要技术和标准。服务器内部I/O虚拟化多个虚拟机共享服务器中的物理网卡,需要一种机制既能保证I/O的效率,又要保证多个虚拟机对用物理网卡共享使用。I/O虚拟化的出现就是为了解决这类问题。I/O虚拟化包括了从CPU到设备的一揽子解决方案。从CPU的角度看,要解决虚拟机访问物理网卡等I/O设备的性能问题,能做的就是直接支持虚拟机内存到物理网卡的DMA操作。Intel的VT-d技术及AMD的IOMMU技术通过DMARemapping机制来解决这个问题。DMARemapping机制主要解决了两个问题,一方面为每个VM创建了一个DMA保护域并实现了安全的隔离,另一方面提供一种机制是将虚拟机的GuestPhysicalAddress翻译为物理机的HostPhysicalAddress。从虚拟机对网卡等设备访问角度看,传统虚拟化的方案是虚拟机通过Hypervisor来共享的访问一个物理网卡,Hypervisor需要处理多虚拟机对设备的并发访问和隔离等。这样Hypervisor容易行成一个性能瓶颈。为了提高性能,一种做法是虚拟机绕过Hypervisor直接操作物理网卡,这种做法通常称作PCIpassthrough,VMware,Xen和KVM都支持这种技术。但这种做法的问题是虚拟机通常需要独占一个PCI插槽,不是一个完整的解决方案,成本较高且扩展性不足。另一种做法是设备如网卡直接对上层操作系统或Hypervisor提供虚拟化的功能,一个以太网卡可以对上层软件提供多个独立的虚拟的PCIe设备并提供虚拟通道来实现并发的访问。这种方法也是业界主流的做法和发展方向,目前已经形成了标准,主要包括SR-IOV(SingleRootIOVirtualization)和MR-IOV(Multi-RootIOVirtualization)。这方面的技术在网上已有很好的文章来做介绍,推荐想进一步了解的同学读一读:虚拟接入在传统的服务器虚拟化方案中,从虚拟机的虚拟网卡发出的数据包在经过服务器的物理网卡传送到外部网络的上联交换机后,虚拟机的标识信息被屏蔽掉了,上联交换机只能感知从某个服务器的物理网卡流出的所有流量而无法感知服务器内某个虚拟机的流量,这样就不能从传统网络设备层面来保证QoS和安全隔离。虚拟接入要解决的问题是要把虚拟机的网络流量纳入传统网络交换设备的管理之中,需要对虚拟机的流量做标识。在解决虚拟接入的问题时,思科和惠普分别提出了自己的解决方案。思科的是VN-Tag,惠普的方案是VEPA(VirtualEthernetPortAggregator)。为了制定下一代网络接入的话语权,思科和惠普这两个巨头在各自的方案上都毫不让步,纷纷将自己的方案提交为标准,分别为802.1Qbh和802.1Qbg。关于虚拟接入也有一篇很好的文章来介绍,想深入了解的可以看看:网络连接网络连接技术一直都在追求更高的带宽中发展。比如Infiniband和10Gb以太网。在传统的企业级数据中心IT构架中,服务器到存储网络和互联网络的连接是异构和分开的。存储网络用光纤,互联网用以太网线(ISCSI虽然能够在IP层上跑SCSI,但是性能与光纤比还是差的很远)。数据中心连接技术的发展趋势是用一种连接线将数据中心存储网络和互联网络聚合起来,使服务器可以灵活的配置网络端口,简化IT部署。以太网上的FCOE技术和Infiniband技术本身都使这种趋势成为可能。InfinibandInfiniband技术产生于上个世纪末,是由Compaq、惠普、IBM、戴尔、英特尔、微软和Sun七家公司共同研究发展的高速先进的I/O标准。最初的命名为SystemI/O,1999年10月,正式改名为InfiniBand。InfiniBand是一种长缆线的连接方式,具有高速、低延迟的传输特性。基于InfiniBand技术的网卡的单端口带宽可达20Gbps,最初主要用在高性能计算系统中,近年来随着设备成本的下降,Infiniband也逐渐被用到企业数据中心。为了发挥Infiniband设备的性能,需要一整套的软件栈来驱动和使用,这其中最著名的就是OFED(OpenFabricsEnterpriseDistribution),它基于Infiniband设备实现了RDMA(remotedirectmemoryaccess).RDMA的最主要的特点就是零拷贝和旁路操作系统,数据直接在设备和应用程序内存之间传递,这种传递不需要CPU的干预和上下文切换。OFED还实现了一系列的其它软件栈:IPoIB(IPoverInfiniband),SRP(SCSIRDMAProtocol)等,这就为Infiniband聚合存储网络和互联网络提供了基础。OFED由OpenFabrics联盟负责开发。OpenFabrics最初叫做OpenIB,从2006年开始OpenIB在Infiniband之外也开始支持以太网,业务做的大了名字也从OpenIB改为OpenFabrics。OFED现已经被主流的Linux发行版本支持,并被整合到微软的windowsserver中。图1OFED软件栈FCOE就在大家认为Infiniband就是数据中心连接技术的未来时,10Gb以太网的出现让人看到了其它选择,以太网的发展好像从来未有上限,目前它的性能已经接近Infiniband(详见),而从现有网络逐渐升级到10Gb以太网也更易为用户所接受。FCOE的出现则为数据中心互联网络和存储网络的聚合提供了另一种可能。FCOE是将光纤信道直接映射到以太网线上,这样光纤信道就成了以太网线上除了互联网网络协议之外的另一种网络协议。FCOE能够很容易的和传统光纤网络上运行的软件和管理工具相整合,因而能够代替光纤连接存储网络。虽然出现的晚,但FCOE发展极其迅猛。与Infiniband技术需要采用全新的链路相比,企业IT们更愿意升级已有的以太网。在两者性能接近的情况下,采用FCOE方案似乎性价比更高。网络交换在这一层面上要解决的问题则是要对现有的互联网络进行升级,使之满足新业务的需求,网络虚拟化则是这一变革的重要方向。在这一方向上目前有两种做法,一种是在原有的基础设施上添加新的协议来解决新的问题;另一种则完全推倒重来,希望设计出一种新的网络交换模型。当虚拟数据中心开始普及后,虚拟数据中心本身的一些特性带来对网络新的需求。物理机的位置一般是相对固定的,虚拟化方案的一个很大的特性在于虚拟机可以迁移。当虚拟机的迁移发生在不同网络,不同数据中心之间时,对网络产生了新的要求,比如需要保证虚拟机的IP在迁移前后不发生改变,需要保证虚拟机内运行在第二层(链路层)的应用程序也在迁移后仍可以跨越网络和数据中心进行通信等等。在这方面,Cisco连续推出了OTV,LISP和VXLAN等一系列解决方案。OTVOTV的全称叫做OverlayTransportVirtualization。通过扩展链路层网络,它可以使局域网跨越数据中心。很多应用需要使用广播和本地链路多播。通过扩展链路层网络,OTV技术能够跨地域的处理广播流和多播,这使得这些应用所在的虚拟机在数据中心之间迁移后仍然能够正常工作。OTV扩展了链路层网络实际上也扩展了其相关的IP子网,需要IP路由同样的做改变,这就引出了新的问题,这个问题就由LISP来解决了。LISPLISP的全称是Locator/IDSeparationProtocol。传统的网络地址IP蕴含了两个含义,一个是你是谁(ID),另一个是你在哪里(Locator)。这样带来的一个问题就是如果你的位置变了(Locator变了),IP必须跟着变化。LISP的目标是将ID和Locator分开,再通过维护一个映射系统将两者关联。这样虚拟机和服务器在网络不同位置进行迁移时可以保持相同的IP地址。图2OTV和LISP的应用VXLANVXLAN的目的是在云计算环境中创建更多的逻辑网络。在云计算的多租户环境中,租户都需要一个逻辑网络,并且与其它逻辑网络能够进行很好的隔离。在传统网络中,逻辑网络的隔离是通过VLAN技术来解决的。不幸的是在IEEE802.1Q标准中,VLAN的标识号只有12位,这就限制了在一定范围内虚拟网络最多只能扩展到4K个VLANs。为了解决这个问题,思科联合VMware在今年推出了VXLAN技术,通过MACinUserDatagramProtocol(MAC-in-UDP)封装技术,加入了一个24位的段标识符。用UDP的多播代替广播,将数据包限定在目标网段内。VXLAN技术极大的扩充了云计算环境中所能支持的逻辑网络的数量,同时通过逻辑段可以将逻辑网络扩展到不同的子网内,使虚拟机能够在不同的子网间做迁移。图3VXLAN帧格式图4通过VXLAN来扩展网络NVGRE对于云计算环境中的下一代网络,各大IT厂商们都不想随便就丢掉话语权,就在Cisco推出VXLAN不久,Microsoft就联合Intel,HP&Dell提出了NVGRE标准。NVGRE的全称是NetworkVirtualizationusingGenericRoutingEncapsulation。它和VXLAN解决相同的问题,只是用了稍微不同的方式,使用GRE(GenericRoutingEncapsulation)key的低24位作为网络租户的标识符。前面我们讲的都是在原有的基础设施上添