赵国锋,陶文平
(重庆邮电大学未来网络研究中心,重庆 400065)
由于可编程虚拟化路由器在控制平面和数据平面可以向用户提供灵活的编程接口,允许用户根据不同的协议需求,选择、修改、重组路由器的功能模块,使其可以并行的运行多个不同体系结构的路由器实例,并且各个实例之间相互独立运行而无干扰[1-2]。因此,由可编程虚拟化路由器构建的未来网络试验床可以在一个物理网络上构建多个独立且相互隔离的虚拟网络,实现不同体系结构的并行实验验证。与传统路由器相比,可编程虚拟化路由器具有虚拟化与灵活的可扩展可编程的特点。这些特性有利于快速地搭建试验网络平台,对未来网络多样化的体系结构、协议、算法进行评估与验证。
可编程虚拟化路由器[3]是在一个物理路由器上形成多个逻辑上独立的虚拟路由器,每个虚拟路由器都可以单独地运行各自的路由协议,并且都有自己专用的I/O端口、缓存、地址空间、路由表和网络管理软件等,并可以通过对路由器的配置和编程实现灵活的动态的部署新的路由协议。可编程虚拟化路由器可在一个实际物理网络上构建多个独立且互不干扰的虚拟网络平面,并在数据平面和控制平面具有灵活的可编程性,能通过配置与编程,在不同的虚拟网络平面快速的部署不同的网络体系结构与协议,实现灵活而动态地部署多种新的服务或者协议。
目前虚拟化路由器研究主要有两种实现方案。一种是基于软件的虚拟化路由器,该方案采用通用的硬件平台,即普通的网卡实现数据包的接收和转发,再通过上层虚拟化软件(如OpenVZ,Xen等)和路由器软件(如 Quagga,Zebra,XORP等)来实现虚拟化路由器。该方案的主要优点在于系统配置灵活、编程方便,但由于使用了软件进行数据包的处理转发,转发速率就成为了软件路由器的瓶颈问题。另一种是基于硬件的虚拟化路由器,该方案采用专用的可编程硬件(如FPGA)或者网络硬件处理器,再加上软件虚拟化技术来实现。该方案的最大优点就是利用专用硬件运行的高速、并行特性,实现高效的数据转发率,但其在配置管理方面的灵活性不及软件虚拟化路由器。
为满足实验评估与部署需求,作为为未来互联网核心设备的可编程虚拟化路由器应该具备良好的虚拟化与隔离性、灵活的可编程可扩展机制、快速数据包处理能力以及高效的管理调度能力。为了实现一个高性能的支持虚拟化的可编程路由器,我们将路由器整体架构划分为数据平面、控制平面、管理平面3个平面,如图1所示。
图1 可编程虚拟化路由器系统框架图Fig.1 System frame diagram of programmable virtual router
图1中,路由器的数据平面主要负责网络数据包的接收识别分类以及转发。控制平面主要实现路由器的虚拟化,即在一台物理路由器上实现多个相对独立的逻辑路由器,并负责路由的计算以及异常数据包的分析处理,控制平面还可以对数据平面进行简单的配置管理。管理平面主要负责多个虚拟路由器的各种协议的部署维护以及路由器的各项参数的管理配置,方便用户对单个虚拟化路由器以及整个虚拟化路由器系统进行的管理。
可编程虚拟化路由器与传统路由器的最大区别是在控制平面的主机操作系统中引入了虚拟化技术,实现了在同一硬件设备层上构建多个虚拟管理层和多个并行的虚拟路由器。其次,可编程虚拟化路由器采用数据平面与控制平面相分离的结构,提高了系统的可扩展可编程能力,并在数据平面和控制平面之上分离出了管理平面,这样可以方便灵活的配置和管理整个路由器系统的高效运行。
根据上述路由器的平面结构划分思路,可以给出可编程虚拟化路由器的详细设计框架图,如图2所示。
图2 可编程虚拟化路由器整体设计框架图Fig.2 Design frame diagram of programmable virtual router
在系统设计中,数据平面采用了 NetFPGA[4]专用硬件开发平台实现网络数据包的接收识别分类和转发。NetFPGA是由美国斯坦福大学(Stanford University)开发设计的一款基于FPGA的全编程的数据包硬件转发卡。它的出现使研究人员可以在硬件级别的开发环境上搭建Gbit/s级高性能网络系统模型,从而进行网络系统的研究和测试。NetFPGA能够很好地支持模块化设计,复杂的硬件设计可以通过各个子模块的组合来完成[5]。
控制平面的功能主要在本地物理主机上实现。NetFPGA板卡通过PCI接口与在物理主机连接,通过本地物理主机上安装开源的Linux操作系统CentOS,并在Linux操作系统下安装NetFPGA的设备驱动程序,形成NetFPGA开发板与主机操作系统的软件接口。驱动程序对NetFPGA的4个千兆以太网口 nf2c0,nf2c1,nf2c2,nf2c3进行配置,从而使得 PC主机上的用户空间软件可以通过NetFPGA开发板上的以太网端口来收发数据分组。驱动程序将板卡的寄存器信息映射到主机内存中,主机应用程序通过对这些寄存器映像的读写,从而控制NetFPGA的运行模式,监控数据通道的工作情况。控制平面主要通过PCI总线实现与底层数据平面的交互[6]。
路由管理平面在数据平面和控制平面的基础上实现,通过上层管理软件实现整个虚拟路由器的管理和配置,通过软件编程可提供良好的人机交互界面。管理平面主要负责多个虚拟路由器的各种协议的部署维护以及路由器的各项参数的管理配置,方便用户对单个或者整个虚拟化路由器进行管理。
所谓虚拟化,其实就是把计算机的资源,如运算能力、存储空间以及I/O设备抽离出来,使它们不受物理限制的约束,让资源的使用方式更具效率。虚拟化技术可以扩大硬件的处理能力,简化软件的重新配置过程,是一个为了简化管理,优化资源配置的解决方案[7]。
从虚拟化的目的来看,虚拟化技术主要可以分为以下几类:①平台虚拟化(platform virtualization),主要针对计算机和操作系统的虚拟化,主要通过CPU虚拟化、内存虚拟化和I/O接口虚拟化来实现,又可分成桌面虚拟化和服务器虚拟化;②资源虚拟化(resource virtualization),针对特定的系统资源的虚拟化,如内存、网络资源虚拟化等;③应用程序虚拟化(application virtualization),包括仿真、模拟、解释技术等。
通常所说的虚拟化技术主要是指平台虚拟化,如通过使用 Hypervisor或虚拟监控器(virtual machine monitor,VMM)的控制程序,隐藏特定计算平台的实际物理特性,为用户提供统一的、抽象的、模拟的计算环境,即虚拟机。虚拟机中运行的操作系统被称为客户机操作系统(Guest OS),运行虚拟机监控器的操作系统被称为主机操作系统(Host OS),运行虚拟机的真实系统我们称之为本地主机系统。平台虚拟化技术按照虚拟化的层次不同又可划分为3类:全虚拟化、半虚拟化和操作系统级虚拟化。
1)全虚拟化(full virtualization)是指虚拟机模拟了完整的底层硬件,包括处理器、物理内存、时钟、外设等,操作系统或其他系统软件完全不做任何修改就可以在虚拟机中运行。全虚拟化不对底层的硬件资源进行划分,而是部署一个统一的主机系统,并在其上加装了Hypervisor(VMM)层,虚拟层作为应用级别的软件存在,而不涉及操作系统内核,其原理图如图3所示。全虚拟化技术最大的优点就是客户操作系统无需任何修改就可以直接在虚拟平台上运行。使用全虚拟化技术的代表产品是VMware Workstation,Virtual Box,KVM 等。
图3 全虚拟化原理图Fig.3 Schematic diagram of full virtualization
2)半虚拟化(Para-virtualization)是一种新兴的虚拟化技术,由VMM层提供特定的应用程序接口(application programming interface,API)来支持 OS复用,并通过VMM来实现对底层硬件的共享访问,与全虚拟化的主要差别是需要更改客户操作系统内核。半虚拟化的原理图如图4所示。由于需要操作系统的内核源码来修改内核,半虚拟化适合Linux等开放源代码的操作系统,但无法支持Windows等商业化操作系统。采用半虚拟化技术的代表产品主要有Xen和UML。
图4 半虚拟化原理图Fig.4 Schematic diagram of para-virtualization
3)操作系统级虚拟化(operating system level virtualization)是基于共用操作系统内核的,这种技术在操作系统本身之上实现服务器的虚拟化,也可称为基于容器的虚拟化技术。通过对操作系统的内核进行一些修改,为用户和应用提供一个貌似独立,其实共享的操作环境,从而达到了其他虚拟机技术无法比拟的高性能、高效率和高密度。通过这种方式虚拟出的服务器,被称为虚拟专用服务器(virtual private server,VPS)或虚拟环境(virtual environment,VE)。虚拟环境之间相互独立,相互隔离,每个虚拟环境拥有各自独立的进程、操作系统用户、文件系统和系统配置文件,可以像在物理服务器上一样安装应用程序或系统软件,操作系统级虚拟化原理图如图5所示。操作系统虚拟化技术的代表是SWsoft公司的开源OpenVZ项目、Sun公司的Solaris Container以及FreeBSD 的Jail。
图5 操作系统级虚拟化原理图Fig.5 Schematic diagram of OS-level virtualization
通过以上虚拟化技术的分析比较发现,操作系统级虚拟化技术所需开销最小,且虚拟出的容器有很好安全隔离性,非常适合可编程路由器这样的功能单一且性能需求较高的专用设备。因此在可编程虚拟化路由器的设计中,在控制平面的虚拟化技术实现时,可以采用性能较好的操作系统级虚拟化软件OpenVZ。
OpenVZ[8]是开源软件,是基于 Linux平台的操作系统级服务器虚拟化的解决方案。OpenVZ可以在单个物理服务器上创建多个隔离、安全的VPS或VE,共享硬件和管理资源,从而提高服务器利用率并确保应用程序之间不会相互干扰。每个VPS的运行都和独立的服务器完全一致,拥有自身所属的用户程序进程,独立的root访问权限、IP地址、内存、处理器、文件、应用程序、系统库和配置文件等。OpenVZ允许物理服务器上运行多个操作系统,但只有一个操作系统内核,少了虚拟机和客户操作系统两个资源消耗层次,操作系统虚拟化的运行效果、理论最大密度和运行在虚拟环境中的应用性能都有着良好的表现。此外OpenVZ还提供了丰富的工具程序以创建、监控和管理VPS、软件包管理和操作系统模板管理,并支持动态资源分配、系统快照和热迁移等功能。OpenVZ的原理框图如图6所示。
图6 OpenVZ原理框图Fig.6 Principle diagram of OpenVZ
在可编程虚拟化路由设计中,控制平面使用虚拟化软件OpenVZ虚拟出多个安全隔离的虚拟服务器,每个虚拟服务器作为一个虚拟路由器,拥有自身所属的用户程序进程,独立的root访问权限、IP地址、内存、处理器、文件、应用程序、系统库和配置文件等。
不同的虚拟路由器可以独立的运行一种或者多种路由协议,协议的部署基于开源的Zebra[9]软件,它是一个路由软件包,提供基于TCP/IP路由服务,支持 RIPv1,RIPv2,RIPng,OSPFv2,OSPFv3,BGP-4 和BGP-4+等众多路由协议。除了传统的IPv4路由协议,Zebra也支持IPv6路由协议。具体路由协议部署以及路由管理层面的实现将在后续的工作中描述。
本文中我们介绍了可编程虚拟化路由器的基本特性以及研究现状,给出了基于NetFPGA的三级平面结构的设计方案,并给出了各个平面的具体功能以及详细的设计思路。首先,可编程虚拟化路由器采用数据平面与管理平面分离的思想,在兼顾高效的数据处理能力的同时,提高了系统的灵活可扩展可编程能力;其次,管理平面可以方便灵活地配置和管理整个路由器系统的高效运行。针对可编程虚拟化路由器平台,讨论了虚拟化技术的基本概念并根据虚拟化的层次进行了详细的分类比较,最后着重论述了OpenVZ操作系统级虚拟化技术在可编程路由器中的实现方案。
[1]谢高岗,张玉军,李振宇,等.未来互联网体系结构研究综述[J].计算机学报,2012,35(6):1109-1119.XIE Gaogang,ZHANG Yujun,LI Zhenyu,et al.A Survey on Future Internet Architecture[J].Chinese Journal of Computers,2012,35(6):1109-1119.
[2]贺鹏,关洪涛,谢高岗,等.支持未来网络创新的可编程虚拟化路由器技术[J].中兴通讯技术,2011,17(2):20-24.HE Peng,GUAN Hongtao,XIE Gaogang,et al.Programmable Virtual Router Technologies that Support Future Internet Innovation[J].ZTE,2011,17(2):20-24.
[3]XIE Gaogang,HE Peng,GUAN Hongtao,et al.PEARL:A Programmable Virtual Router Platform [J].IEEE Communications Magazine,2011,49(7):71-77.
[4]Stanford NetFPGA Team.NetFPGA Project[EB/OL].(2012-03-15) [2012-10-06].http://www.netfpga.org.
[5]GLEN Gibb,JOHN W,JAD Naous,et al.NetFPGA—An Open Platform for Teaching How to Build Gigabit-Rate Network Switches and Routers[J].IEEE Transactions on Education,2008,51(3):364-369.
[6]DEEPAK Unnikrishnan, RAMAKRISHNA Vadlamani,YONG Liao,et al.Scalable Network Virtualization Using FPGAs[C]//PETER YK,JOHN Wawrzynek(Eds.):Proceedings of the ACM/SIGDA 18th International Symposium on Field Programmable Gate Arrays,FPGA 2010,Monterey, California, USA, February 21-23. USA:ACM,2010:219-228.
[7]WALTERS J,VIPIN Chaudhary,CHA Minsuk,et al.A Comparison of Virtualization Technologies for HPC[C]//IEEE Computer Society,Advanced Information Networking and Applications,International Conference on,Gino-wan,Okinawa,Japan:IEEE Press,2008:861-868.
[8]OpenVZ Project Team.OpenVZ Linux Containers[EB/OL].(2012-10-17)[2012-10-23].http://wiki.openvz.org.
[9]GNU Project Software.GNU Zebra FREE TCP/IP Routing Software[EB/OL].(2012-10-06) [2012-11-12].https://www.mangob2b.com/en/zebra.