初识The ONE

Author:bakari  Date:2014.1.14

      本学期开始做真正意义上的研究,主要方向为wireless and mobile network,VANET。之前一直在看paper,现在由于任务需求,需要尽早把一些科研工具学透,包括模拟器,建模解模工具以及非常重要的python,一切都是新东西,只能边学边实践,并尽可能提高效率,尽量地往前赶。

      今天第一次接触one这个模拟器,关于MN的模拟器有很多,之前有接触过NS2和NS3,NS2是一款开源的免费软件,用C++外加tcl脚本语言所写,对于一般的场景已经足够,主要用于模拟MANET,对于拓扑动态变化的场景适应不是很好,非常不稳定,如VANET,另外,如果仿真的节点过多,速度会非常慢。此外,仿真的脚本用tcl来写,除了对C++精通外,还要下功夫了解之;

 NS3,并不是NS2的升级版,用C++语言所写,外加一些脚本优化模块,用python所写,python是世界上效率最高的语言(Bruce大师所讲),在NS3中,新增了802.11协议的很多模块,而且对物理层中MAC层和PHY层做了相当的优化,仿真速度更快而且占用内存更少,目前不支持GUI,听说正在开发,但由于没有GUI,反而减少了仿真的限制,可以自定义节点的数量和通信的接口,更加的灵活,另外一点简单易学,但需要熟悉python,仿真的脚本部分要用python来写。

     本来之前一直在学NS3,但和学长交流后,他建议我学ONE,ONE也是一款开源免费的,不过是用java所写的DTN网络模拟器,使用于任何DTN的环境的路由协议和应用研究分析。它具有面向对象,离散事件驱动、可以模拟真实网络环境的特点。ONE在单个框架中具有模拟分析多种DTN协议的能力,并且不像其他DTN模拟器那样只是关注于路由的模拟,它将移动模型、DTN路由和可视化的图形界面整合为一体。这样ONE就非常容易进行扩展,并可以提供大量的结果报告和分析模型,以便后期做进一步的数据分析和模拟。

     此外,还有一些模拟器,如OMNeT++(类似于ns2)和DTN 路由(如dtnsim and dtnsim2),前者缺乏对DTN很好的支持,而后者只是集中在路由的模拟。另外,还有一款商业的网络仿真软件OPNET,功能很强大,可以仿真基本上所有的网络,如以太网、无线网络等等。因为是商业软件,所以它的图形界面做的很好,并且带有各种分析工具,提供了大量的网络设备模型,用户可以直接使用这些模型进行仿真,同时也可以自己建立进程、节点和网络进行仿真,最后根据自己的仿真结果分析问题,提出改进意见。但由于是商业的,缺点就是价格很贵,而且模块的更新很慢。

1、下面主要对今天所看的有关ONE的相关资料进行总结,并巩固相关知识点:

reference:

【1】The ONE Simulator for DTN Protocol Evaluation

【2】Opportunistic Network Environment simulator

【3】homepage:http://www.netlab.tkk.fi/tutkimus/dtn/theone/可以下载软件和源码

首先,从整体上把握ONE的基本框架,如下图:

      从图上可以看出,在ONE中,一个模拟环境包含节点的移动模拟,路由模拟,可视化的界面以及消息报告模块。移动模型可以通过整合的移动模块产生,也可以通过外部的接口人工导入,模拟产生的消息事件可以导出到报告模块做进一步分析。

     节点移动行为通过movement models实现,软件已经整合了六种移动模型,详见【2】,当然也可以自定义自己的移动模型,定义的方法有两种,一种方法通过外部收集的trace集进行导入,trace集有严格的数据格式(比如节点位置(GPS),buffer size,速度等),CARWDAD网站中收集了各种移动模型的真实场景的数据。另外一种方法通过一个外部模块接口实现。路由功能通过routing modular实现,同样,ONE已经定义了六种路由模型,详见【2】,这六种路由模型皆为active routing,为了与外部的其他DTN路由模拟器的路由模型(如dtnsim)交互,或是方便自定义自己的路由算法,ONE特意设定了一个passive routing接口,如此,方便了ONE路由模型的扩展。路由模块主要负责消息的传送,包括消息的copy,relay,receive,abort等事件。消息事件的产生则由event generator负责。模拟的结果作为输出事件通过simulation engine输入到report modular中做进一步分析处理,处理结果再进一步被外部的post-processing tools处理,产生关于本次模拟的统计信息,这些信息可以通过作图工具(如Graphviz和gnuplot)直观地显示出来。另外,GUI可以显示出整个模拟的场景和节点的状态信息,如:位置,相遇时间,信息携带者,信息传送的量等。

      各个模块详细记录了当前操作的状态,模块之间通过bus进行通信,共享各模块相互操作的结果。如节点移动模块可以根据路由模块的状态改变它的移动行为,反过来,路由模块可以基于节点移动模块中的相遇时间调整通信的参数。

2、下面对软件框架的各个部分进行简单的说明和整理:

Software architecture

     首先,软件各个模块的package,以及它们之间的交互显示如下:

     每个模块分别对应上面的体系结构,其实现都是继承至一个基类,然后进行自身模块的扩展,core package实现了DTN主机以及它们之间的连接关系;gui package实现和GUI相关的类,playfield package是它的一个子类,负责整个界面的中央部分,ui实现了与用户交互的接口类和基于文本的console 接口(传说中的黑框,ONE中也作为模拟界面,名为patch);routing实现

路由功能,movement实现节点的移动行为,将routing和movement模块产生的结果导入到report package中进行处理,最后,test package没有直接和核心模块相连,它主要包含系统测试的相关类,以此来检验模拟的结果是否达到真实的场景需求。

Movement models

      如下图,节点的移动实现都是继承自MovementModel,软件实现了六种基本的移动模型,每种模型的运作机理详见【2】,ExternalMovement模块可以对导入的trace进行操作,trace数据的移动模型一般是基于map的,其数据格式是WKT,换句话说,只有WKT格式,ONE才能识别,有一个工具可以将获取的trace数据格式转化成WKT进行模拟,即一个GIS的开源项目OpenJUMP。

Routing models

同样,各路由模块的实现也是继承自MessageRouter,主要实现了六种active routing, First Contact [13], Direct Delivery [24], Spray and Wait [25] (normal and binary), Epidemic[26], PRoPHET [17] and MaxProp [3].详见【2】and within reference。PassiveRouter模块定义了加载其他路由协议的接口。

3、模拟器基本的框架就是这样,另外加几点说明:

     节点按组分成不同的类型,如car,pedestrian,bus,etc.相同组的成员共享相同的配置参数,如buffer size,radio range 和mobility model。全部的移动模型,报告模块,路由算法以及事件产生器等模块在模拟开始建立时就自动加载到模拟环境中,开发人员开发的模块亦是如此。

External event and reporting frameworks是系统主要外部通信接口,一个充当输入,一个充当输出,External event framework将外部消息事件导入到模拟器进行模拟,有两种导入的方法:trace文件和事件产生器模块。trace文件包括时间戳的文本文件。而事件产生器模块则是一个java类,能够产生和trace文件相同的消息事件。模拟后的结构交由reporting framework进行处理。

      ONE提供了两种模拟的环境,一种就是GUI,另外一种是patch mode,通过命令行实现,批处理的方式在模拟的数据量大,运行时间长的时候使用效果好,由于没有GUI,所以可以使用硬件全部的处理能力进行模拟。另外,该模式有一个有用的特性叫run indexing。该特性有个好处可以在一个配置文件中定义一组场景,用数组的形式进行存储,每个场景有不同的配置参数,可以根据不同的参数组合来决定模拟的过程,而且,可以在命令行下定义模拟运行的次数和每次运行的时间。

     ONE容易被扩展,因为它的程序被一个开源的GPL许可发布。任何人都可以去修改它并重新发布。为此,开发维护人员已经开发了可扩展的钩子函数,可以直接利用这些函数接口进行扩展,而不需要对源码进行修改。将修改的模块或新添加的模块作为一个插件来使用,而不用对整个模块进行批处理,大大方便了开发人员。

4、下面,总结几款以后会用到的工具:

CRAWDAD:http://crawdad.cs.dartmouth.edu/里面的数据集是真实场景下收集的数据。

OpenJUMP:http://openjump.org/将获取的map数据转换成WKT格式进行模拟。

TRANSIMS:Evaluating Vehicle Network Strategies for Downtown Portland: Opportunistic Infrastructure and the Importance of Realistic Mobility Models 可以合成移动的trace集

Graphviz:http://www.graphviz.org/可以显示节点间的连接图和消息从源节点到目的节点的传送图。

gnuplot:http://gnuplot.info/可以分析节点相遇时间及衡量网络性能的参数,如延迟,带宽等。

OpenStreetMap:http://www.openstreetmap.org/允许导出真实世界的道路数据,可以很方便地进行道路拓扑图的设计工作。在http://www.tm.kit.edu/~mayer/osm2wkt/ 下载一个osm2wkt.jar包进行转换,方法:java -jar ./osm2wkt.jar mapfile.osm

      当然,该模拟器目前还存在一些缺陷,主要表现在:为了使仿真町行,有时需要对现实世界的某些方面进行抽象或完全舍弃,这几乎是仿真软件的通病。例如,基于地图的移动模型无法体现出交通阻塞等现象。ONE仿真的环境缺少物理层和链路层的支持,当两个节点在彼此的通信范围内时,它们的通信速率是不变的,但是在真实世界中,由于距离或干扰等情况的发生,传输速率往往达不到预设的最大值。另外,在仿真过程中,移动设备都是假设为总是开启的,但是现实中为了节省电能,有些设备往往会切换成空闲状态,也有一些设备会周期性地对邻居节点进行探测。综上分析,ONE仿真环境中的通信时间过于乐观。不过现在的功能足以实现一个好的DTN网络模拟,这些问题可以忽略不计。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏玉树芝兰

如何用Python批量提取PDF文本内容?

本文为你展示,如何用Python把许多PDF文件的文本内容批量提取出来,并且整理存储到数据框中,以便于后续的数据分析。

50520
来自专栏精讲JAVA

你真的很熟分布式和事务吗?

微吐槽 hello,world. 不想了,我等码农,还是看看怎么来处理分布式系统中的事务这个老大难吧! 本文略长,读者需要有一定耐心,如果你是高级码农或者架构师...

21590
来自专栏Laoqi's Linux运维专列

Ansible线上部署出现中文乱码

29620
来自专栏企鹅号快讯

Reddit 如何实现大规模的帖子浏览计数

对浏览计数有四个主要要求,满足这四项要求比听起来要复杂得多。 -- Krishnan Chandra 本文导航 ◈ 计数方法 08% ◈ 总结 88% 编译自 ...

26090
来自专栏Crossin的编程教室

喜大普奔!Django官方文档终于出中文版了

之前对于 Django 的学习我一直推荐看官方文档,但不得不加上一句“如果你英语水平允许的话……”。现在总算是等来好日子了。各位想向网站/服务器开发方向进阶的同...

22510
来自专栏平凡文摘

你真的很熟分布式和事务吗?

19820
来自专栏IT大咖说

Elastic探秘:技术海洋里遗落的珍珠

内容来源:2018 年 06 月 30 日,Elastic工程师与布道师曾勇在“Elastic Meetup 南京交流会”进行的《Elastic探秘之遗落的珍珠...

11430
来自专栏程序猿DD

来自95后的天池中间件大赛总结

天池中间件大赛的初赛在今早终于正式结束了,公众号停更了一个月,主要原因就是博主的空余时间几乎全花在这个比赛上,第一赛季结束,做下参赛总结,总的来说,收获不小。

80460
来自专栏刘君君

Rest Notes-表述性状态移交(Representational State Transfer ,REST)

19950
来自专栏FreeBuf

APP漏洞自动化扫描专业评测报告(中篇)

*本文原创作者:Sunnieli,本文属FreeBuf原创奖励计划,未经许可禁止转载 前言 上一篇中通过对阿里聚安全[1]、360App漏洞扫描[2]、腾讯金刚...

42050

扫码关注云+社区

领取腾讯云代金券