- 文章名称:A Network in a Laptop: Rapid Prototyping for Software-Defined Networks
- 文章来源:Lantz B , Heller B , Mckeown N . A Network in a Laptop: Rapid Prototyping for Software-Defined Networks[C]// Acm Workshop on Hot Topics in Networks Hotnets. DBLP, 2010.
ABSTRACT:
Mininet是一个在单个笔记本电脑的有限资源上快速构建大型网络原型的系统。Mininet使用操作系统级虚拟化功能(包括进程和网络名称空间)的轻量级方法,允许扩展到数百个节点。我们最初实现的经验表明,实时运行、插入和调试的能力代表了工作流程的质的变化。我们分享了从18个机构的100多个用户中挑选出来的,开发软件定义网络(SDN)的支持性案例研究,最终我们认为Mininet最大的价值将是支持协作网络研究,通过支持自包含的SDN原型,任何拥有PC的人都可以下载、运行、评估、探索、调整和构建这些原型。
1. INTRODUCTION
一天深夜,灵感涌上心头,你想到了一个改变世界的想法:一个新的网络架构、地址方案、移动协议,或者是一个添加到路由器上的功能。随着论文截止日期的临近,你有一台笔记本电脑和三个月。你应该使用什么样的原型环境来评估你的想法?
考虑到这个问题,我们着手创建了一个具有以下属性的原型工作流:
- Flexible:应该使用熟悉的语言和操作系统在软件中定义新的拓扑和新的功能。
- Deployable:在基于硬件的网络和测试台上部署功能正确的原型,不需要更改代码或配置。
- Interactive:管理和运行网络应该是实时的,就像与真实的网络交互一样。
- Scalable:原型环境应该扩展到有成百上千个交换机的在一个笔记本上的网络。
- Realistic:原型行为应该以高度的可信度来表示真实的行为,例如,应用程序和协议栈应该可以使用而无需修改。
- Share-able:自包含的原型应该很容易与协作者共享,然后协作者可以运行和修改我们的实验。
当前可用的原型环境有其优缺点。特殊用途的试验台价格昂贵,大多数研究人员都买不到。模拟器,如Ns-2或Opnet很吸引人,因为它们可以在笔记本电脑上运行,但它们缺乏真实感——模拟器中创建的代码与实际网络中部署的代码不同,而且它们不具有交互性。乍一看,虚拟机网络(VMS)很吸引人。每个交换机或路由器有一个虚拟机,每个主机有一个虚拟机,使用虚拟接口可以很容易地将真实的拓扑连接在一起。但我们的经验是VM过于繁重——每个VM的内存开销将规模限制为只有少数交换机和主机。
我们想要更具扩展性的产品。目前正在努力建立可编程的试验台(例如Emulab , VINI, GENI, FIRE)来支持真实的用户流量、规模和交互行为。我们的方法是对这些系统的补充,通过寻求一个本地环境,使我们能够快速实现功能正确、理解良好的原型,然后直接将其转移到共享的全球基础设施上。
Mininet(本文描述的新原型环境)通过使用轻量级虚拟化来支持此工作流。用户可以实现一个新的网络特性或全新的体系结构,并在具有应用程序流量的大型拓扑上对其进行测试,然后将完全相同的代码和测试脚本部署到实际的生产网络中。Mininet在一台笔记本电脑上运行得非常好,它利用了Linux的特性(网络名称空间中的进程和虚拟以太网对)来启动具有千兆带宽和数百个节点(交换机、主机和控制器)的网络。整个网络可以打包为一个VM,这样其他人就可以下载、运行、检查和修改它。Mininet还远远不够完美——性能逼真度和多机支持可以提高——但这些都是实现的局限性,而不是方法。其他工具也使用轻量级虚拟化,但是Mininet在支持快速原型软件定义网络方面有所不同,这是我们在本文中重点关注的一个用例。
2. SOFTWARE-DEFINED NETWORKS:
在SDN中,控制平面(或“网络OS”)与转发平面分离。
通常,网络操作系统(例如NOX、ONIX或Beacon)从一个中心位置观察和控制整个网络状态,托管诸如路由协议、访问控制、网络虚拟化、能量管理和新的原型功能等功能。网络操作系统通过一个窄的、自动的接口(如OpenFlow)控制转发平面,该接口定义每个转发元素(交换机、路由器、接入点或基站)的低级转发行为。例如,OpenFlow为每个流定义了一个规则:如果一个数据包与一个规则匹配,则执行相应的操作(例如丢弃、转发、修改或排队)。
SDN的主要结果是:在网络所有者和运营商的控制下,网络的功能是在部署之后定义的。新功能可以在软件中添加,而无需修改交换机,允许行为以软件速度而不是标准的体速度发展。SDN实现了状态管理的新方法(从集中式到分布式的频谱上的任何地方)和分组报头的新用途(具有特定层处理的字段成为无层的比特海)。软件定义网络的示例包括4D, Ethane, PortLand and FlowVisor。这些例子暗示了SDN的潜力,但我们认为快速原型工作流程是释放软件定义的网络全部潜力的关键。Mininet上的各种原型系统都支持这个断言,我们在第6节中描述了几个这样的案例研究。
3. MININET WORKFLOW:
通过将轻量级虚拟化与可扩展的CLI和API相结合,Mininet提供了一个快速原型工作流程,用于创建、交互、自定义和共享软件定义的网络,以及在真实硬件上运行的平滑路径。
3.1 Creating a Network![](https://i-blog.csdnimg.cn/blog_migrate/b5da8668df3f133a97b400c5cd1bf2b9.png)
第一步是使用mn命令行工具启动网络。例如,该命令启动OpenFlow交换机网络。在本例中,Open-Vswitch内核交换机在NOX的控制下连接在深度2和扇出8的树拓扑中(即9个交换机和64个主机),然后进行Pingall测试以检查每对节点之间的连接。为了创建这个网络,Mininet模拟链接、主机、交换机和控制器。Mininet使用内置在Linux操作系统中的轻量级虚拟化机制——运行在网络名称空间中的进程和虚拟以太网对。
Links:
虚拟以太网对(或veth对)的作用类似于连接两个虚拟接口的电线,通过一个接口发送的数据包被传送到另一个接口,并且每个接口作为一个功能齐全的以太网端口出现在所有系统和应用软件中。veth对可以连接到虚拟交换机,例如Linux网桥或软件OpenFlow交换机。
Hosts:
网络名称空间是网络状态的容器,它们为进程(和进程组)提供接口、端口和路由表(如ARM和IP)的独占所有权。例如,两个网络名称空间中的两个Web服务器可以共存于一个系统上,这两个服务器都侦听端口80上的私有Eth0接口。Mininet中的主机只是一个Shell进程(例如Bash),通过Unshare(Clone Newnet)系统调用移动到自己的网络命名空间中。每个主机都有自己的虚拟以太网接口(通过IP链路添加/设置创建和安装)和到父Mininet进程mn的管道,mn发送命令并监视输出。
Switches:
软件OpenFlow交换机提供与硬件交换机相同的包传递语义,用户空间和内核空间交换机都可用。
Controllers:
控制器可以位于真实或模拟网络中的任何位置,只要运行交换机的计算机与控制器具有IP级别的连接。对于在虚拟机中运行的Mininet,控制器可以在虚拟机内部、本机上或云中运行。
图1说明了用mininet创建的双主机网络中的组件和连接:
3.2 Interacting with a Network
启动网络后,我们希望与之交互——在主机上运行命令,验证交换机操作,可能导致故障或调整链路连接。Mininet包含一个网络感知命令行界面(CLI),允许开发人员从单个控制台控制和管理整个网络。由于CLI知道节点名和网络配置,因此它可以自动将主机IP地址替换为主机名。
例如,CLI命令告诉主机H2 Ping主机H3的IP地址,此命令通过管道传输到模拟主机H2的Bash进程,导致ICMP echo请求离开H2的专用Eth0网络接口,并通过veth对进入内核。请求由根命名空间中的交换机处理,然后退出到另一个主机的另一个veth对。如果包需要穿越多个交换机,它将留在内核中而不需要额外的副本。如果是用户空间交换机,包将在每个跳上引起用户空间转换。除了充当主机的终端多路复用器之外,CLI还提供各种内置命令,还可以计算Python表达式。
3.3 Customizing a Network
Mininet导出Python API以创建自定义实验、拓扑和节点类型:交换机、控制器、主机或其他。有几行Python非常适合定义一个自定义回归测试,该测试创建一个网络,在多个节点上执行命令并显示结果。
示例脚本:
创建一个小型网络(4个主机,3个交换机)并在大约4秒内从一个主机ping到另一个主机。当前的Mininet发行版有几个示例应用程序,包括基于文本的脚本和图形应用程序,其中两个应用程序如图2和3所示:
我们希望Mininet API将被证明对系统级测试和实验、测试网络管理、教学材料和应用程序非常有用,这将给作者带来惊喜。
3.4 Sharing a Network
Mininet是作为一个VM分发的,所有依赖项都是预先安装的,可在常见的虚拟机监视器(如VMware、XEN和VirtualBox)上运行。虚拟机为分发提供了一个方便的容器,一旦开发了原型,VM映像就可以分发给其他人来运行、检查和修改。一个完整的压缩Mininet虚拟机大约是800MB。Mininet也可以安装在支持CONFIG NET NS的Linux发行版上,比如Ubuntu 10.04,而不需要替换内核。
3.5 Running on Hardware
要在第一次尝试时成功地连接到硬件,就要求:
- 每个Mininet模拟组件的操作方式必须与其对应的物理组件相同
- 虚拟拓扑应该与物理拓扑匹配
- 虚拟以太网对必须由链路级以太网连接替换
- 被模拟为进程的主机应被具有自己的操作系统映像的主机替换
- 每个模拟的OpenFlow交换机都应该被配置为指向控制器的物理交换机所替代,但是不需要更改控制器。
当Mininet运行时,控制器“看到”一个由交换机组成的物理网络,这是由一个定义良好的状态语义接口实现的。通过代理对象表示物理交换机上的OpenFlow数据路径和物理主机上的SSH服务器,CLI可以使用未修改的test scripts.kernel,用和以前相同的方式与网络交互。
4. SCALABILITY:
轻量级虚拟化是在保持交互性能的同时扩展到数百个节点的关键。
在本节中,我们将测量单个操作的总体拓扑创建时间、可用带宽和微基准。
表2显示了使用Mininet创建各种拓扑所需的时间:
在Mininet上可以启动更大的拓扑结构,但是这些拓扑结构不适合系统虚拟化的内存,在实践中,等待10秒让一个完整的胖树启动是非常合理的(而且比硬件交换机的启动时间还要快)。Mininet可以扩展到所示的大型拓扑(超过1000个主机),因为它虚拟化更少,共享更多。文件系统、用户ID空间、进程ID空间、内核、设备驱动程序、共享库和其他公共代码在进程之间共享并由操作系统管理。主机大约只有1 MB的开销是Shell进程和小型网络命名空间状态的内存开销,这个总数几乎比精简虚拟机的内存映像和转换状态所需的每台主机70MB少两个数量级。
事实上,在表2中所示的拓扑结构中,如果使用系统虚拟化,只有最小的一个可以放入典型笔记本电脑的内存中。
Mininet还提供可用的带宽量,如表1所示:
通过一个交换机提供2-3Gbps,或通过100个交换机链提供超过10 Gbps的聚合内部带宽。
表3显示了构建拓扑时单个操作所消耗的时间:
令人惊讶的是链接添加和删除是昂贵的操作,分别需要大约250毫秒和400毫秒。随着我们对Mininet的资源使用和与Linux内核的交互有了更好的了解,我们希望进一步提高它的性能,并为内核和Open-Vswitch提供优化。
5. LIMITATIONS:
目前Mininet最大的限制是缺乏性能保真度,特别是在高负载下。CPU资源被默认的Linux调度程序及时多路复用,这不能保证准备发送数据包的主机将会被及时调度,或者所有交换机将以相同的速率转发。此外,软件转发可能与硬件不匹配。
软件表的O(n)线性查找无法接近供应商交换机中硬件加速TCAM的O(1)查找,从而导致对于大通配符表大小的包转发速率下降。为了在链路上实施带宽限制和服务质量,可以使用Linux流量控制程序(TC)。Linux CPU容器和调度器优先级为提高公平性提供了额外的选项,Mininet目前运行在一台机器上只模拟有线链路,与性能保真度一样,这些限制似乎不是根本性的,我们希望以后能解决这些问题。Mininet的部分虚拟化方法也限制了它的功能——它不能同时处理不同的操作系统内核,所有主机共享同一个文件系统,但可以通过使用chroot进行更改,主机不能像VMS那样实时迁移。
我们认为,这些损失是在更大范围内尝试想法能力的合理权衡。
6. CASE STUDIES:
Mininet已经被超过18个机构的100名研究人员使用,这些机构包括Princeton,Berkeley,Purdue,ICSI,UMass,University of Alabama Huntsville,NEC,NASA,Deutsche Telekom Labs,Stanford和一家初创公司,以及巴西的7所大学。用例大致分为原型设计、优化、演示、教程和回归套件。对于每种用途,我们描述一个项目,它面临的挑战,以及Mininet是如何帮助的。
Prototyping:
RIPCORD是一个模块化和可扩展的平台,用于创建横向扩展的数据中心网络。主要的挑战是跨多个地理位置开发一个通用的无硬件代码库。第二个挑战是回归测试——每一个更改都需要针对许多拓扑进行测试。Mininet支持并发开发,加上新拓扑的简单回归测试。更好的是,代码可以直接移植到硬件上——当一个硬件测试平台在截止日期前一周可用时,代码和测试脚本就可以不加修改地进行传输,从而允许论文包含硬件结果。
Optimization:
OpenFlow控制器NOX通过发送周期性LLDP数据包广播到每个交换机端口来构建拓扑数据库。过多的拓扑发现消息导致生产网络中断,交换机CPU利用率达到100%。由于拓扑结构和通信量的变化,在生产网络中复制错误被证明是困难的。使用Mininet,我们可以尝试许多拓扑来重现错误,尝试新的拓扑发现算法,并验证修复。
Tutorials:
在OpenFlow实践教程中,与会者将一个简单的集线器控制器转换为一个流加速以太网交换机,让他们体验openFlow调试工具和编写控制器代码。最初,本教程使用优化的QEMU VM实例来连接交换机和主机,并将它们作为VM分发,但是速度太慢导致无法使用。在重新实现Mininet上的教程之后,它的启动速度加快了几分钟。一个意想不到的好处是,与会者可以在内存不足的小型上网本计算机上运行教程。
Demos:
一些用户已经创建了他们的研究的现场互动演示,并在海外会议上展示,虽然连接到真正的硬件是首选,高延迟,不稳定的网络访问,或在流量演示硬件可以出轨的现场演示。在Mininet中维护Demo的一个版本,以一个本地的、不需要网络备份的形式,为此类问题提供了保险。
Regression Suites:
Mininet被用来创建按钮回归套件来测试原型网络架构。一个例子是Scaffold,它是一个以服务为中心的网络体系结构,它将通信绑定到逻辑对象名(与地址相对),在对象组实例之间提供Anycast,并在网络层中结合路由和解析。另一个是用于支持OpenFlow的网络的高级API和运行时环境,它允许程序员在Python之上以声明的方式描述网络行为。
7. RELATED WORK:
Mininet建立在最近使用Oslevel虚拟化进行网络仿真的基础上。为了简洁起见,我们省略了OpenFlow、硬件测试台和模拟器的相关工作,而是将重点放在轻量级虚拟化技术上。IMUNES在BSD内核中添加了虚拟以太网接口和类似于网络名称空间的特性,IMUNES的工作提出了一个正确的问题:“您真正需要多少虚拟化?“
轻量级虚拟化支持快速原型,但它本身并不能提供硬件部署的路径或分发和共享的方法。
EMULAB采用了另一种操作系统级虚拟化技术FreeBSD jails,并对其进行了修改,允许每个进程组有多个虚拟接口,类似于网络名称空间。jails提供了比Linux容器更粗粒度的控制,控制可以在哪些方面使用虚拟化。与Mininet不同,EMULAB的虚拟节点试图仔细地复制EMULAB硬件节点的完整环境,从而允许在这两个节点中同时使用相同的系统映像。EMULAB虚拟节点代表一个不同的设计点,在一台PC上模拟10个或更多节点,逼真度很高;Mininet放弃逼真度,在笔记本上模拟100个或更多节点。尽管EMULAB目前不支持OpenFlow,但EMULAB的Protogeni演进将包括硬件OpenFlow交换机。
8. DISCUSSION
如第6节中的案例研究所示,Mininet与其他工作流相比,可以更有效地利用时间和资源,它为网络创新提供了一个本地环境,补充了共享的全球基础设施,具有交互式原型、可扩展性、到硬件部署的无缝路径以及直接的共享和协作。结合软件定义网络,我们认为它可以在三个阶段中为实际系统提供一个更简单、更快的路径:
Prototyping:
任何人(学生、研究人员、网络管理员等)都可以使用Mininet快速原型化SDN想法,快速的启动时间和较低的开销有助于探索设计空间,并构建一个具有有趣规模的系统,该系统可以在适当的硬件上进行仿真运行。多个研究人员可以共享脚本、配置和拓扑,并且可以同时工作而不受干扰。
Deployment:
一旦一个想法在Mininet上生效,它就可以部署在研究或生产网络上以供验证、测量和一般使用。Mininet通过利用软件定义网络(特别是OpenFlow)在仿真和硬件之间保留交换机、应用程序和脚本语义,促进了这种传输。硬件部署可以在本地可用的PC和交换机集群上,也可以在共享的研究基础设施(如GENI)上进行。
Sharing:
在Mininet上运行的设计可以很容易地收缩包装在VM映像中并重新分发,Mininet在内部利用的是轻量级流程虚拟化(但是使用系统虚拟化,可以打包和分发整个基于Mininet的系统)。我们提供了一个VM映像,其中包括预先安装的Mininet,以及创建和运行新SDN设计所需的所有部分,而无需额外配置或安装。
将基于Mininet的设计包装到VM中会创建一个可以通过Internet分发的“网络设备”。人们可以下载并运行一个新的网络系统的活生生的例子,而不是仅仅依赖于一份会议论文、一份书面规范,甚至一段录制的视频。我们期待着创建一个基于Mininet的软件定义网络库,并与其他人一道创建该库,任何人都可以以令人兴奋和意外的方式下载、检查、运行、修改和构建该库。