新网络仿真器NS3的研究综述*
2017-03-11茹新宇
茹新宇,刘 渊,陈 伟
(1. 江苏联合职业技术学院 无锡交通分院,江苏 无锡 214151; 2. 江南大学 数字媒体学院,江苏 无锡 214122)
新网络仿真器NS3的研究综述*
茹新宇1,刘 渊2,陈 伟2
(1. 江苏联合职业技术学院 无锡交通分院,江苏 无锡 214151; 2. 江南大学 数字媒体学院,江苏 无锡 214122)
仿真可实现用相对较小的成本与时间研究探索并解决问题。从简述NS2和NS3的特点与区别入手,分别从基本概念、核心概念及其模型三个方面详细介绍了NS3的体系结构、数据包传输过程、基本对象与类及其跟踪模型等细节。最后从理论上深度论述了NS3在研究领域的TCP实现过程。
网络仿真器;类;模型;应用程序接口;套接字;继承;带宽
0 引言
仿真是指当所研究的系统造价昂贵、实验危险性大或需要很长时间才能了解其参数变化所引起的后果时,利用模型重现实况,并通过模仿一些真实的事务或过程状态来研究已存在的或设计中的系统[1]。随着仿真实验在多种场合的广泛使用,其现已成为计算机领域较为普遍的评价方法之一。同样,研究通信体系和网络协议也需要网络仿真器的支持。但目前许多典型的仿真器如OPNET、QualNet和REAL等,由于使用条款限制或研发成本过高而得不到广泛应用。考虑到实施成本、情景再现、现场难度等,安装真实网络并不可行,网络仿真器NS应运而生。它通常用于路由、多播及AdHoc网络,支持当前流行协议,为有线、无线网络提供仿真结果。
1 NS2与NS3的特点与区别
网络仿真器主要基于特定条件,通过提供虚拟环境,允许仿真指定节点或路径的网络行为,如流量建模与性能分析等。NS2是个离散事件仿真器,事件由节点触发。当数据包到达节点后,仿真器按事件预定的执行时间排序队列、按步处理。作为一款用于网络教育和研究的开源软件,NS2在学术界已大获成功,但也存在着较多问题,如它采用分裂对象模型,由C++代码以及脚本语言OTcl协调完成,因而导致系统结构松散,分析工具“各自为政”,学习难度较大。另外仿真期间,网络层存在着大量抽象,导致不连续以及跟踪困难,结果常需要通过解析文件来提取。
NS3基于社区开发和维护,具有良好的发展势头。它是用C++编写的可选Python脚本的API离散事件网络仿真器。它具有面向对象、低耦合、互操作、适合无线管理、便捷性符合WSN协议等特点。同时,它具有良好的开发环境,包括COM类的接口聚合与查询、自动内存管理、回调对象等核心功能,便于仿真新的复杂模型。
当前,NS3已试图避免重复出现NS2所存在的问题,如模型之间的互操作性与耦合不足、缺乏内存管理、分裂语言对象调试等。最明显的区别是脚本语言的选择,NS2在OTcl中编写脚本,仿真结果由NAM实现可视化,但它无法纯粹地从C++运行仿真。而NS3(包括协议和场景)完全用C++编写,带有可选的Python绑定,脚本编写方便。NS3提供了全新的动画显示软件Net Anim,可勾画出网络拓扑及标记IP地址,便于更好地演示数据包发送、传递以及接收过程。
2 NS3基本概念
2.1 NS3概述
NS3项目始于2006年,目前已发展到了3.26这一稳定版本。它是广泛汲取了当前主流仿真器NS2、YANS和GTNets的成功经验及其他新技术综合而成的。其核心及各功能模块由C++代码完成[2],仿真效率极高[3]。其在功能实现、版本更新、用户使用量等方面都飞速赶超着NS2[4]。
NS3对外提供了丰富的扩展接口,研究者依据自身需求可更改或增减模块。它被构建为库,其静态或动态链接到仿真拓扑并启动NS3主程序(该程序定义了拓扑结构和仿真启动时间)。NS3体系结构的底层到顶层都是开源的,用户可独立扩展相应模块。它还将API导出至Python,允许Python以与C++相同方式导入模型。它虽没有NS2的所有模型,但却增加了部分新功能。另外NS2部分模型也已移植进了NS3,其丰富的模型几乎涉及网络技术所有方面。它包含网络组件模拟接口,如网络传输协议、通信媒介、套接字服务、客户端/服务器端应用程序等;拥有事件调度器,可通过执行相关事件,模拟真实的通信“行为”。同时它还具有完整的跟踪机制及基于文本的跟踪日志,方便用户通过第三方软件来解析数据传输过程及结果分析。
2.2 NS3体系结构
NS3由一系列层次分明的功能模块拼接而成,其最底层核心(core)模块实现了NS3的核心功能,如智能指针、动态类型系统、事件调度器、回调机制、跟踪记录、对象聚合等功能,同时提供了额外的C++语法,使编程更容易。网络(network)模块包括数据包等网络仿真对象,主要描述数据包、Pcap或Ascii文件操作及网卡和套接字等抽象基类、IP地址、节点与队列等。核心和网络这两个模块组成一个适用于不同网络类型的通用仿真底层,当前已实现了互联网和移动网。其他模块(包括各种协议、应用及设备等)都建立在这个底层模块之上。互联网(Internet)模块包括IPv4/6和MAC-48 (EUI-48在IEEE 802的术语) 地址类,以及用于TCP/IP堆栈的抽象基类。移动(mobility)模块包含移动模型的抽象基类,为移动网络提供了丰富的移动模型,如静态、恒速、恒定加速度、随机游走、随机路点和随机方向等。
目前,NS3具有TCP/IP、WiFi、CSMA(以太网)和P2P(点对点)等模型。其中包含有OLSR协议等路由模块。协议栈模块是真实协议的抽象,执行TCP/UDP/IPv4等堆栈的连接管理、传输控制及路由地址等功能。设备模块为多个NetDevice类的实现,而应用模块则为应用程序提供服务。
Helper提供了一套简单的C++类,可实现不用指针即可访问已封装的底层API。NS3程序可直接访问所有的API,顶层依据底层服务所编写的仿真脚本来运行[5]。
3 NS3核心概念
3.1 基本对象与类
TCP类在网络模型中与IPv4/6协议一起驻留,实现彼此通信的多个类与网络层之间的交互,并向应用层提供了可靠的数据传送。NS3为真实环境提供了较低层次的抽象来构造网络组件[6],其基本对象是节点、应用、信道和网络设备等,借助类来实现或表示。
(1)节点(Node):狭义上将包含应用程序、堆栈、网络设备及具有内存、CPU和I/O接口的计算机称为节点。在NS3中把所有连接到网络的基本计算单元或终端都抽象为节点,由C++中的Node类表示,给仿真提供管理计算设备的表示方法。在进行开发时,用户可将节点看作一台主机,进行应用、协议栈、网卡等添加,使其完成所需工作。
(2)应用(Application):它可在节点上运行,并与堆栈通信,是数据包的发生器和“消费者”。NS3不存在系统软件,生成仿真活动的用户程序抽象成应用,可将其部署在节点上来驱动仿真器运行。NS3应用在C++中通过抽象Application类来实现,该类用于管理用户层应用程序的多种仿真接口。开发者在实现自己定义的应用时,只需要继承Application类即可。
(3)信道(Channel):一组网络设备对象间的物理连接器。NS3中把多个节点连在一起的对象称为信道,在C++中,用Channel类实现。该类提供了管理通信子网和节点对象的连接方法,并具有模拟仿真数据包在传输过程中的传播延迟和排队延迟等功能。
(4)网络设备(NetDevice):在NS3中,要实现节点与信道交流,必须在节点上绑定网络设备,由该设备连接节点和信道。网络设备是仿真硬件和驱动软件的抽象表示,其“安装”在节点内,可插入节点的I/O接口网卡,以便节点能通过信道与其他仿真节点互相通信。节点可经过多个设备连接至多个信道。网络设备必须绑定类型匹配的信道,其抽象由C++中的NetDevice类[7]表示,以提供管理节点和信道对象的连接。
3.2 NS3代码体系结构
NS3代码由不同部分组成,从拓扑建立开始,定义要使用的模型,而后通过赋予地址和设置其他参数来配置模型,最后执行代码。NS3生成Pcap包跟踪文件,以trace格式输出,使用Wireshark等跟踪工具分析结果数据,或使用Net Anim来实现可视化。
3.3 WAF生成系统
NS3中使用WAF作为编译系统,而不再使用“./configure;make”。waf是一个基于Python的框架,可完成配置、编译并实现应用对象。它替代了其他工具,如Autotools、ScoNS、CMake及Ant等。例如要实现一个P2P仿真[8],具体步骤如下:(1)使用./waf -d[optimized|debug] configure检查编译环境;(2)使用./waf 来完成编译任务;(3)通过./waf-run来运行仿真。
3.4 NS3跟踪模型
跟踪是NS3的一大特色,NS3建立了独立的跟踪源(tracing sources)和跟踪宿(tracing sinks)机制。它基于回调收集统计信息。当某跟踪源产生了一新事件时,可通过回调函数来了解其正在发生的内部模拟和设备运行情况。该设计将多个跟踪源连接到跟踪宿,源宿相分离,用户可通过修改内核来配置自己的源和宿,实现自定义跟踪或统计输出,而无需重建仿真核心。可通过配置环境参数获得“理想”网络,并可实时跟踪和记录关键节点的信息,从而获得对网络性能的评估。
跟踪源由其自身定义,与给它提供信息的对象类相关联,由名称标识,用于运行时跟踪所描述对象的属性。它指示仿真中发生的事件并提供底层的数据访问。消耗跟踪信息的实体称为跟踪宿。跟踪源是事件的发生器,跟踪宿则是“消费者”。NS3提供了高、中、低三级跟踪。高级:使用内置跟踪源和跟踪宿,并挂接跟踪文件;中级:使用命名空间自定义跟踪源/宿的行为;低级:将跟踪源添加到命名空间或显示跟踪源。
4 结论
目前仍在大规模开发的NS3并不兼容NS2,它主要用于NS2的替换转型,同时建设并整合新的机制。本文首先比较了网络仿真器NS2和NS3之间的特点与差异,重点对NS3作了介绍和研究。该仿真器符合更多、更有弹性的网络模拟需求设计,其编程用到了C++语言,并且兼容时下流行的Python。而NS2除了用到C++外,还需要Tcl/OTcl的辅助,这大大增加了编程难度。
NS3虽然不具有NS2的所有模型,相关研究目前也较少,在无线场景的网络动画、用户友好性、易用性以及文档教程等诸方面都非常需要社区的广泛支持与良好测试,但同时,它拥有单一的语言、良好的架构、基于底层的开发等特点,使之具有更多NS2所不具备的“先天优势”,如节点多接口处理、IP寻址以及更多的因特网协议设计等功能。一些新的功能也正在积极地开发之中,如更详细的802.11模型等,非常值得期待。正如NS的研发者在其著作《NS3 Tutorial》中所说的那样,“NS3最终会逐渐取代NS2”。
[1] 梁军学,林昭文,马严. 来互联网试验平台[J]. 计算机学报,2013,36(7):1364-1374.
[2] RILEY G F, HENDERSON T R. Modeling & tools for network simulation.[M]. Springer Berlin Heidelberg,2010.
[3] WEINGARTNER E, VOM LEHN H, WEHRLE K. A performance comparison of recent network simulators.[C]. IEEE International Conference on Communications 2009 ICC’09,2009:1-5.
[5] NS-3 Manual[EB/OL]. (2014-09-18)[2016-12-01].http://www.nsnam.org/.
[6] 闵圣天, 曾文序, 李满荣,等. 基于NS3的网络协议分析与模拟[J]. 福建电脑, 2014, 30(2): 99-100.
[7] 栾俊, 李太浩. 基于NS-3的WiFi场景仿真[J]. 农业网络信息, 2012, 1(1):18-20.
[8] Wu Mingju, TSAI C J. A storage device emulator for system performance evaluation[J]. ACM Transactions on Embedded Computing Systems (TECS), 2015, 14(82): 1-27.
A survey of new network simulator NS3
Ru Xinyu1, Liu Yuan2, Chen Wei2
(1. Wuxi Transportation College, Jiangsu Union Technical Institute, Wuxi 214151, China;2. School of Digital Media, Jiangnan University, Wuxi 214122, China)
Simulation can be used to explore and solve problems with a relatively small cost and time. This paper introduces the characteristics and differences between NS2 and NS3, and discusses the details of the NS3 architecture, the process of data packet transmission, the basic objects and classes and their tracking models from the basic concept, core concept and model. Finally, it gets the TCP implementation process of NS3 in the research field with the theoretical depth.
network simulator; class; model; application program interface; socket; inherit; bandwidth
TP393
A
10.19358/j.issn.1674- 7720.2017.20.004
茹新宇,刘渊,陈伟.新网络仿真器NS3的研究综述[J].微型机与应用,2017,36(20):14-16.
国家自然科学基金(61602213);江苏省自然科学基金(BK20151131)
2017-03-20)
茹新宇(1977-),通信作者,男,硕士研究生,讲师,主要研究方向:通信安全、拥塞控制及网络安全。E-mail: ruxinyu21@163.com。
刘渊(1967-),男,硕士研究生,教授,博士生导师,主要研究方向:无线通信管理、网络测量及信息安全。
陈伟(1981-),男,博士研究生,主要研究方向:人工智能、群体智能算法。