没有合适的资源?快使用搜索试试~ 我知道了~
软件X 10(2019)100248原始软件出版物NEMO:一个灵活的、高度可扩展的网络仿真器Luca Veltria, Luca Davolia,Riccardo Pecorib,Armando Vannuccia,Francesco Zanichelliaa意大利帕尔马大学工程与建筑系b意大利诺维茨基(CO)eCAMPUS大学SMARTEST研究中心ar t i cl e i nf o文章历史记录:收到2019年2019年5月6日收到修订版,2019年保留字:网络仿真协议栈Javaa b st ra ct在现实场景中评估新的应用程序和协议一直是网络领域所有利益相关者的一项非常重要作为实际部署和模拟之间的折衷,网络仿真代表了对该问题的非常强大的解决方案,提供了一个工作网络平台,而不需要实际部署所有网络组件。我们提出NEMO,一个灵活的和可扩展的基于Java的网络仿真器,它可以用来模拟要么只有一个单一的链接,一个网络的一部分,或整个网络。NEMO能够在根据测试的场景和目标,它可以作为单机上的独立实例运行,也可以分布在不同的网络连接的机器上,从而形成分布式和高度可扩展的仿真基础设施。在不同的功能中,NEMO还能够通过在顶部运行第三方Java应用程序来虚拟化它们的执行虚拟节点,可能连接到模拟或外部网络。©2019作者由爱思唯尔公司出版这是CC BY-NC-ND下的开放获取文章许可证(http://creativecommons.org/licenses/by-nc-nd/4.0/)。代码元数据当前代码版本1.1用于此代码版本的代码/存储库的永久链接https://github.com/ElsevierSoftwareX/SOFTX_2019_12合法代码许可证Apache 2.0使用git的代码版本控制系统使用Java 1.8或更高版本的软件代码语言、工具和服务编译要求、操作环境依赖性链接到开发人员文档/手册http://netsec.unipr.it/project/nemo技术支持电子邮件:luca. unipr.it1. 动机和意义网络模拟器和网络仿真器是网络架构师在实际部署新的应用程序或协议之前调查问题和性能的虽然它们有许多相似之处,但网络模拟器可能有一些缺点,因为它们依赖于网络的特定另一方面,网络仿真器允许其用户在仅涉及一些网络元件的网络平台内测试真实系统,这些网络元件可能表现出相同的真实特性,如带宽、延迟或降级的网络条件。*通讯作者。电子邮件地址:luca. unipr.it(L. Veltri)。https://doi.org/10.1016/j.softx.2019.100248有很多网络模拟器是为特定的网络场景开发的。例如,移动网络仿真器(MNE)[1]专注于IPv4和IPv6 MANET网络。类似地,QOMET是在[2]中提出的无线网络仿真器,其使用多阶段方法将真实世界场景转换为网络条件描述符序列[3]。在[4]中提出了一个用Java编写的非常简单的网络仿真器,其中通过正确地重新实现被测试应用程序使用的套接字类来仿真网络链路的行为(考虑其带宽、延迟和丢失)。NCTUns [5]是一个重要的工具,它提供了模拟和仿真功能,也是第一个利用内核重入原理的软件之一,即,数据包实际上是由Linux内核处理的。最近的网络模拟器使用Linux2352-7110/©2019作者。由爱思唯尔公司出版。这是一篇开放获取的文章,使用CC BY-NC-ND许可证(http://creativecommons.org/licenses/by-nc-nd/4.0/)。可在ScienceDirect上获得目录列表SoftwareX期刊主页:www.elsevier.com/locate/softx2L. 韦尔特里湖达沃利河,巴西-地Pecori等人/SoftwareX 10(2019)100248网络命名空间和文件系统作为用于创建虚拟节点和网络的容器化机制。例如,CORE(Common Open Research Emulator)1是一个基于Linux网络命名空间的工具,用于IMUNES(IntegratedMulti-protocol Network Emulator/Simulator)2使用Docker容器和Open vSwitch。Mininet是SDN实验中使用的主要网络仿真器,它也利用Linux网络命名空间来创建虚拟节点。尽管有几个网络模拟器可用,但它们通常缺乏使用灵活性:它们可能过于特定,或者难以修改。因此,我们开发了一个新的网络仿真器,称为NEMO,其设计旨在最大限度地提高简单性,可重用性和灵活性。与其他使用Linux虚拟化或容器化技术的网络模拟器不同,NEMO独立于底层操作系统,提供了IP堆栈的全新重新实现。一个通用网络元素的核心,一个分层的体系结构,加上一个大的内置协议集,使NEMO成为一个通用的仿真器,可用于与标准的基于IP的网络进行实验,并开发新的组件或协议。它可以在任何支持Java的平台和操作系统上运行(Linux,Windows,macOS,Android等),无需任何特定于平台的设置,保证实验的完全可以使用虚拟或实时执行仿真。在前一种情况下,实际执行时间与仿真场景无关(长时间执行仅持续CPU所需的时间),并且仅考虑具有纳秒精度的实际仿真事件,从而导致非常高的时间评估精度另一方面,使用真实时钟允许用户设置联网的仿真器,其中仿真网络或节点与外部应用和网络元件两者无缝地交互。外部系统可以通过适当的连接器连接,因此允许用户设置混合网络,包括内部和外部组件和应用程序。仿真网络可以运行在一个单一的机器或一组机器上,在一个更大的分布式仿真体系结构。由于其简单的内部结构,NEMO可扩展性非常好,如[6]所示。它可以在同一台机器上成功地模拟由多达数百万个节点组成的大型网络。NEMO已经被用于不同的网络分析和测试:通过IPv6分段路由的流量工程[7,8],网络功能虚拟化和服务链[9],新型匿名协议[10]和VoIP网络。此外,Java语言的灵活性和在用户空间工作的可能性极大地简化了开发和测试阶段。NEMO很容易使用,因为它只需要在主机上安装Java VM。 它可以从其网站4下载,作为一个单独的ZIP存档,包含所有源代码,脚本,文档,并且可以简单地在命令行中启动。一些内置的示例包含在存档中,并在在线教程中进行了描述。2. 软件描述2.1. 软件构架NEMO围绕许多模块进行高度结构化,使得更改或创建新组件非常简单和直观。它依赖于分层架构,如图所示。1.一、1 https://www.nrl.navy.mil/itd/ncs/products/core网站。2 http://www.imunes.net网站。3 http://www.mininet.org网站。4 http://netsec.unipr.it/project/nemo/网站。NEMO的核心是由一组基本的网络组件组成的,如Packet、Address 、 NetAddress 、 NetInter-face 、 Node 、 Link 、ExcellingFunction等。NetInterface可以在不同的层包装物理网卡或虚拟接口。通过使用LinkInterface将每个节点附加到公共DataLink,可以连接两个或更多节点。上述基本组件之间的关系如图所示。 二、在基本网络组件之上,存在大量内置协议。特别是,整个TCP/IP协议栈已经在Java中重新实现(IPv4,ARP,RTP,IPv6,ICMPv 6,UDP,TCP),以及一些数据链路协议(如以太 网 , SLIP , PPP , TUN ) , 配 置 和 路 由 协 议 ( DHCP ,SPF)。然而,其他协议和数据格式可以很容易地从其他开源项目中导入,其中一些已经集成和测试。在TCP和UDP之上,还有一个全新的标准Java套接字API(java.net)的实现,基于NEMOTCP/IP协议栈。这简化了上层协议的开发,受益于众所周知的编程API,此外还允许集成任何第三方Java应用程序而无需更改代码。三种不同类型的连接器通过JNI库提供与外部系统的基本交互。tuntap库是主要的方法,通过标准TUN或TAP接口为底层操作系统网络提供简单透明的接口,这些接口是第三层和第二层虚拟接口,可以设置为将应用程序连接到操作系统网络(参见第3.2节)。rawsocket库允许直接访问OS标准POSIX套接字和主机网络接口。最后,在基于Linux的操作系统中,netfilter库允许用户将NEMO元素连接到Linux内核的netfilter接口;这反过来又允许用户拦截和处理通过底层机器的任何数据包。内置的隧道集线器组件允许不同NEMO网络或运行在不同机器上的节点的互连,可能连接到NAT和/或防火墙后面的网络。2.2. 软件功能本小节详细介绍NEMO的一些主要功能。2.2.1. 创建新协议底层系统和网络堆栈的独立性,以及协议抽象和分层结构,允许轻松更改当前网络元素,并添加新协议。可以通过从外部项目导入新协议来添加新协议(关于上层协议,通过NEMO传输层提供相同的标准Java网络java.netwww.example.com来简化这种操作),或者通过从可用的基本组件和已经实现的协议开始开发它们2.2.2. 构建网络拓扑NEMO允许用户通过直接创建节点及其连接链路此外,还有一些工具允许用户自动创建一些标准拓扑,例如线性、方形(曼哈顿)、星形或三个网络或其组合。关于节点配置,它可以手动或自动执行。对于自动IP节点配置,可以通过使用nextAddressPrefix()和L. 韦尔特里湖达沃利河,巴西-地Pecori等人/SoftwareX 10(2019)1002483Fig. 1. NEMO软件体系结构包括核心对象、内置协议、网络元素、连接器、附加协议和应用程序。图二. NEMO核心对象之间的关系。getRouters()函数的IpLink对象,或通过标准的DHCP协议。还可以使用以下任一方法配置动态路由表:• 集中式控制器,在SDN方法中,收集由所有节点接收的链路状态信息,根据给定的路由算法(不同的算法,如Dijkstra、Bellman-Ford和Floyd-Warshall是可用的)计算最短路径,• 使用路由协议的分布式方法目前OSPF路由协议的精简版本可用。2.2.3. 捕获交通轨迹NEMO的优点之一是节点之间的所有通信因此,真正交换的数据包可以通过标准工具进行捕获和分析。为此,NEMO包括用于 数 据 包 拦 截 和 跟 踪 导 出 到 标 准 libpcap 文 件 的 机 制 , 与Linuxtcpdump和Wireshark的格式相同。这允许用户捕获跟踪并使用Wireshark等外部工具执行进一步的数据包分析。4L. 韦尔特里湖达沃利河,巴西-地Pecori等人/SoftwareX 10(2019)100248=-− =·=×2.2.4. 使用外部组件NEMO能够连接到外部系统(网络链路、节点和应用程序)并与之交互。这可以很容易地通过使用其不同的连接器之一。2.2.5. 分布式平台NEMO可以在多台互连的机器上运行,从而创建更大的仿真网络。这是一个重要的功能,因为它允许用户在多个主机上分配节点和处理负载2.2.6. 虚拟化NEMO还能够通过创建虚拟节点来虚拟化Java应用程序的执行,并在这些节点上运行应用程序,而无需其他虚拟化工具或应用程序代码修改。3. 说明性实例在下文中,我们提出三个说明性的例子。第三个也是可扩展性评估的一个例子3.1. 捕获流量每当用户想要拦截数据包并处理它们时,他们可以使用简单的嗅探器。特别是,如果用户想要在给定的链接link1上捕获数据包,他们只需要创建一个Sniffer对象,方法是将LinkInterface附加到link1,并将数据包处理函数传递给类构造函数。图图3显示了一个简单实例的输出,其中路由器R1互连两个网络(10. 1 .一、1 .一、0/24和10。二、二、0/24)和主机10. 1 .一、1 .一、2ping主机10. 二、二、2. 嗅探器位于R1上,正如从图中可以推断的那样。3.b,所有六个分组(三个ping请求/响应)被正确捕获。除了直接在Java中处理捕获的数据包外,还可以将流量跟踪保存到标准的libpcap文件中以供进一步分析。NEMO提供了一种简单的方法,通过LibpcapSniffer 类将所有捕获的数据包保存到libpcap文件中。这个标准文件可以打开,例如,用Wireshark,如图所示。 四、3.2. 使用tuntap连接器将NEMO网络连接到本地操作系统和/或外部网络的最简单方法是通过tuntap连接器,该连接器利用可能由底层操作系统支持的标准TUN或TAP接口。特别是,Linux原生支持TUN和TAP,macOS支持TUN的变体(名为UTUN),而在Windows中,只有TAP可以通过OpenVPN5研究团队提供的(事实上的标准)TAP实现来设置。幸运的是,NEMO tuntap连接器通过TuntapInterface和Ip4TuntapInterface类为用户提供了所有这些不同操作系统的统一接口。在图中所示的示例中,5.通过使用tuntap连接器将简单的虚拟网络连接到外部网络用几行代码(图。5.a)可以创建一个仿真网络(在该示例中为链路1),其特征在于具有Ip4TuntapInterface类型的第二接口的Ip4Router(R1),该第二接口连接到tun0接口。如果TUN或TAP接口和路由表设置正确,则在底层操作系统上运行的任何应用程序都可以与仿真网络的所有节点通信,反之亦然。此外,通过启用IP转发,可以使NEMO网络也可由外部节点路由和到达。由此产生的拓扑结构如图所示。5. b. 在该图中,显示了从外部节点执行PING的示例192. 168. 1 .一、33到内部节点10。二、二、2也显示了5https://openvpn.net。表1网络可扩展性测试。二叉树四叉树树高2110路由器4,194,3031,398,101接入链路2,097,1521,048,576核心环节4,194,3021,398,100跳数4422虚拟时间3.52毫秒1.76毫秒实时6 ms5 ms3.3. 部署大型拓扑NEMO的主要特点之一是它的高可扩展性。它可以在单个机器和/或不同的互连机器上运行非常大的网络,从而形成分布式仿真平台。创建一个分布式执行是非常简单的,通过配置一些网络节点与连接到外部隧道集线器的虚拟接口。可以设置多个隧道集线器,允许用户在任意数量的连接机器之间分配网络拓扑下面我们将重点关注单机执行,测试可以在同一台机器上运行的NEMO节点和链接的数量。我们使用两种不同程度的树拓扑,如表1所示,报告:i)维度,根据树高度,路由器数量和链路;ii)跳数; iii)虚拟时间; iv)实时。我们在一台普通PC上运行我们的实验,该PC具有16 GBRAM、Intel i7 2.70 GHz CPU和64位Windows 7 OS。我们使用标准的Oracle JDK SE 1.8 64位JVM,并为JVM分配了12 GB表1显示,我们分别成功地模拟了度为2的4,194,303个节点和度为4的1,398,101个节点的网络。我们还进行了一些吞吐量评估。我们使用了一个8 8曼哈顿拓扑结构,由64个路由器通过2(82 8)112个核心链路互连,并与4 832个接入链路连接到边界路由器。所有链路都考虑了100 Mb/s的容量。图6.A报告在位于最左上和最右下接入网络的两个端点之间交换分组所花费的虚拟时间(T虚拟)和实际时间(T实际)(因此,两个节点被15个路由器和16跳分开)。我们以最大链路比特率流式传输越来越多的数据包,并考虑两种数据包大小:50字节和P大小1000字节,包括IPv6和UDP报头。从图中可以看出,仿真器花费的实时时间随着数据包的数量呈线性增长,并且没有注意到临界条件传输小数据包的实际时间(50 B)和传输大数据包的实际时间(1000 B)几乎相同,图中相应的最后,在Fig. 6.b用于运行二叉树网络的存储器使用被绘制为节点总数的函数。可以看出,内存使用量随着节点数量的增加而线性增长。4. 影响据我们所知,NEMO是第一个同时提供以下所有功能1. 它是一个开放的仿真器,既不关注特定的网络场景,也不关注网络协议。它完全重新实现了所有协议(而不仅仅是模拟它们),而不使用底层L. 韦尔特里湖达沃利河,巴西-地Pecori等人/SoftwareX 10(2019)1002485图三. 捕获流量跟踪的示例。在左边(a),网络拓扑结构,以及相应的代码,以创建网络和附加嗅探器。右边(b)是嗅探器的输出图四、 捕获和导出流量跟踪的代码示例,以及显示导出跟踪的Wireshark屏幕截图。系统(像其他基于Linux的仿真器一样)。所有协议都根据相应的IETF和ITU-T标准实现,允许与任何外部节点和应用程序进行交互;2. 它是高度可扩展的。NEMO可以运行非常大的网络,单个机器上多达数百万个节点,或者可以部署在不同的互连机器上,创建完全分布式的大型仿真网络;3. 它是便携式的。所有协议都是用Java实现的,在用户空间中;这保证了高度的可移植性和在不同的OS平台上复制完全相同的测试和评估的可能性,而不需要OS的任何特定配置;4. 它支持实时和虚拟时间仿真。 通过使用虚拟时钟,可以以纳秒精度测量网络事件;5. 与外部系统的连接很容易。通过使用三种可用的NEMO连接器之一,可以与底层机器交互或将仿真网络连接到外部节点和网络;6. 它可以很容易地与第三方Java应用程序集成。可以在仿真节点上运行Java应用程序,透明地替换应用程序网络堆栈,而无需对应用程序代码或底层操作系统进行任何修改。特征1和3简化了现有原型的修改(例如,IPv4或IPv6的新扩展,当前6L. 韦尔特里湖达沃利河,巴西-地Pecori等人/SoftwareX 10(2019)100248×图五. tuntap使用示例。在左边(a),是创建和附加tuntap接口的代码,以及生成的网络拓扑。在右边(b), 等效的网络拓扑结构,加上一个简单的PING输出测试。见图6。大型拓扑中的传输时间和内存使用。左边(a)是8 × 8曼哈顿网络的传输时间与数据包数量增加的关系。在右边(b),堆内存使用与二叉树网络中的节点总数。(For对本图图例中所指颜色的解释,读者可参考本文的网络版传输协议、新的路由机制等)以及设计和开发新的协议。Java技术和面向对象的用户空间编程的使用也加快了开发和测试阶段,允许用户独立于底层操作系统复制实验。标准java.netAPI的替换也使新的网络应用程序的开发变得更加容易。当需要测试非常大的网络拓扑时,例如测试新的路由协议或网络范例(如SDN或ICN)时,特性2非常重要。在不同机器之间分发仿真的可能性消除了底层主机可能具有的任何约束。关于特征4,一方面,使用虚拟时钟允许用户以高时间精度和完美的结果复制来执行实验,而不管底层机器的时间精度和CPU负载;另一方面,使用真实时钟允许仿真器与外部系统和协议无缝地交互。最后,特征5和6允许用户创建有趣的混合场景,其中仿真器用于仅替换网络的一部分和/或集成现有的网络元件或应用。特别是,在新网络中透明地运行现有(Java)应用程序的可能性堆栈,而无需修改应用程序或底层操作系统,是一个全新的功能,没有其他网络仿真器提供。虽然NEMO是与这个软件出版物一起公开发布的(它已经在[6]中以初步版本呈现它已被用于研究新的网络范例(SDN和IPv6分段路由的流量工程)[7],网络功能虚拟化[8],并测试新的匿名协议[10]。5. 结论本文介绍的网络仿真器是一种新颖、功能强大、灵活的工具,可用于不同的网络环境。它可用于模拟单个链路、网络的一部分或整个大型网络。该仿真器的核心是平台和协议独立的:它可以用于仿真标准的基于IP的网络或新协议。它可以在一台机器上执行,无论底层操作系统如何,也可以在一组分布式机器上执行。外部应用程序可以轻松L. 韦尔特里湖达沃利河,巴西-地Pecori等人/SoftwareX 10(2019)1002487附加的,或者作为外部网络应用程序,或者作为运行在NEMO网络堆栈之上的考虑到所有这些优点,我们希望NEMO可以成为一个共同的和广泛的工具,为网络研究人员和管理员测试和实现自己的应用程序和产品。在本文中,我们只描述了一些有启发性的用例和一个简单的可伸缩性评估,说明NEMO可以支持在同一主机上运行的多达数百万个节点。有关该软件及其所有可能用途的更完整描述,请访问官方网站。NEMO是一个正在进行的项目:我们计划通过增加支持协议的数量来提高其性能,扩展其特性和功能,并在其他复杂网络环境中对其进行测试。确认Luca Davoli 的 工 作 由 帕 尔 马 大 学 资 助 , 在 “Iniziative diSostegno alla Ricerca di Ateneo”计划,“多接口物联网系统多层信息处理(MIoTYMIP)”项目下。作者要感谢Antonio Enrico Buonocore先生对论文的仔细校对。引用[1]Macker JP , Chao W , Weston JW. 低 成 本 、 基 于 IP 的 移 动 网 络 仿 真 器( MNE )。In:IEEE military communications conference,2003 ,vol. 1;2003.第481- 486页。http://dx.doi.org/10.1109/MILCOM.2003.1290150网站。[2][10]杨文,杨文,李文.一个多用途的无线网络仿真器:QOMET。 2008年第22届 先 进 信 息 网 络 和 应 用 国 际 会 议 。 第 223-228 页 。http://dx.doi.org/10.1109/WAINA.2008.111网站。[3]Khanduri R,Ravoss. IEEE 802.11a/b/g/n标准之间的性能比较分析,第78(1)卷; 2013年。[4]Avvenuti M,Vecchio A.通过套接字工厂实现java应用程序的互联网仿真。2002 年 第 26 届 国 际 计 算 机 软 件 与 应 用 年 会 论 文 集 。 第 111- 116 页 。http://dx.doi.org/10.1109/CMPSAC的网站。2002.1044540。[5]王世银,林永斌。用于无线资源管理的NCTUns网络模拟和仿真。无线通信移动计算2005;5(8):899-916.[6]Davoli L,Protskaya Y,Veltri L. NEMO:一个灵活的基于Java的网络仿真器。2018年第26届软件,电信和计算机网络国际会议; 2018年。p. 1比6[7]Davoli L,Veltri L,Patie PL,Siracusano G,Salsano S.带分段路由的流量工程:基于SDN的架构设计和开源实现。2015年第四届欧洲软件定义网络研讨会论文集。Washington,DC,USA:IEEE Computer Society; 2015,p. 111-2.http://dx.doi.org/10.1109/EWSDN.2015.73网站。[8]Salsano S,Veltri L,Davoli L,Patie PL,Siracusano G. PMSR -穷人的分段路 由 , 分 段 路 由 的 最 小 化 方 法 和 流 量 工 程 用 例 。 在 NOMS 2016 - 2016IEEE/IFIP 网 络 运 营 和 管 理 研 讨 会 ; 2016 年 。 第 598-604 页 。http://dx.doi.org/10.1109/NOMS.2016.7502864.[9][10]张文辉,张文辉.在基于Linux的NFV基础设施中通过分段路由实现虚拟网络 功 能 链 接 。 在 : 2017 年 IEEE 网 络 软 件 化 会 议 ; 2017 年 。 第 1-5 页 。http://dx.doi.org/10.1109/NETSOFT的网站。2017.8004208。[10]Davoli L,Protskaya Y,Veltri L.物联网的匿名协议。在:2017年无线通信系统国际研讨会;2017。第459-464页。http://dx.doi.org/10.1109/ISWCS.2017.8108159网站。
下载后可阅读完整内容,剩余1页未读,立即下载
cpongm
- 粉丝: 5
- 资源: 2万+
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- SSM动力电池数据管理系统源码及数据库详解
- R语言桑基图绘制与SCI图输入文件代码分析
- Linux下Sakagari Hurricane翻译工作:cpktools的使用教程
- prettybench: 让 Go 基准测试结果更易读
- Python官方文档查询库,提升开发效率与时间节约
- 基于Django的Python就业系统毕设源码
- 高并发下的SpringBoot与Nginx+Redis会话共享解决方案
- 构建问答游戏:Node.js与Express.js实战教程
- MATLAB在旅行商问题中的应用与优化方法研究
- OMAPL138 DSP平台UPP接口编程实践
- 杰克逊维尔非营利地基工程的VMS项目介绍
- 宠物猫企业网站模板PHP源码下载
- 52简易计算器源码解析与下载指南
- 探索Node.js v6.2.1 - 事件驱动的高性能Web服务器环境
- 找回WinSCP密码的神器:winscppasswd工具介绍
- xctools:解析Xcode命令行工具输出的Ruby库
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功