初识The ONE
Author:bakari Date:2014.1.14
转载请注出处:http://www.cnblogs.com/bakari/p/3519841.html,谢谢!
本学期开始做真正意义上的研究,主要方向为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网络模拟,这些问题可以忽略不计。
转载请注出处:http://www.cnblogs.com/bakari/p/3519841.html,谢谢!
初识The ONE的更多相关文章
- Android动画效果之初识Property Animation(属性动画)
前言: 前面两篇介绍了Android的Tween Animation(补间动画) Android动画效果之Tween Animation(补间动画).Frame Animation(逐帧动画)Andr ...
- 初识Hadoop
第一部分: 初识Hadoop 一. 谁说大象不能跳舞 业务数据越来越多,用关系型数据库来存储和处理数据越来越感觉吃力,一个查询或者一个导出,要执行很长 ...
- python学习笔记(基础四:模块初识、pyc和PyCodeObject是什么)
一.模块初识(一) 模块,也叫库.库有标准库第三方库. 注意事项:文件名不能和导入的模块名相同 1. sys模块 import sys print(sys.path) #打印环境变量 print(sy ...
- 初识IOS,Label控件的应用。
初识IOS,Label控件的应用. // // ViewController.m // Gua.test // // Created by 郭美男 on 16/5/31. // Copyright © ...
- UI篇(初识君面)
我们的APP要想吸引用户,就要把UI(脸蛋)搞漂亮一点.毕竟好的外貌是增进人际关系的第一步,我们程序员看到一个APP时,第一眼就是看这个软件的功能,不去关心界面是否漂亮,看到好的程序会说"我 ...
- Python导出Excel为Lua/Json/Xml实例教程(一):初识Python
Python导出Excel为Lua/Json/Xml实例教程(一):初识Python 相关链接: Python导出Excel为Lua/Json/Xml实例教程(一):初识Python Python导出 ...
- 初识SpringMvc
初识SpringMvc springMvc简介:SpringMVC也叫Spring Web mvc,属于表现层的框架.Spring MVC是Spring框架的一部分,是在Spring3.0后发布的 s ...
- 初识redis数据类型
初识redis数据类型 1.String(字符串) string是redis最基本的类型,一个key对应一个value. string类型是二进制安全的.意思是redis的string可以包含任何数据 ...
- Redis初识、设计思想与一些学习资源推荐
一.Redis简介 1.什么是Redis Redis 是一个开源的使用ANSI C 语言编写.支持网络.可基于内存亦可持久化的日志型.Key-Value 数据库,并提供多种语言的API.从2010 年 ...
- MongoDB【第一篇】MongodDB初识
NoSQL介绍 一.NoSQL简介 NoSQL,全称是”Not Only Sql”,指的是非关系型的数据库. 非关系型数据库主要有这些特点:非关系型的.分布式的.开源的.水平可扩展的. 原始的目的是为 ...
随机推荐
- Session & Cookie 简介
(一)简介 会话(Session)跟踪是Web程序中常用的技术,用来跟踪用户的整个会话.常用的会话跟踪技术是Cookie与Session.Cookie通过在客户端记录信息确定用户身份,Session通 ...
- python入门(三):循环
1.for i in xxx xxx: 序列(列表,元祖,字符串) xxx: 可迭代对象 >>> for i in "abc": ... print(i) ...
- PHPStorm 2018 的安装 汉化 与使用
下载地址 和安装方法 链接:https://pan.baidu.com/s/1FT8aZoQajw044qlNXkRPfg 提取码:z4sx 配置与使用方法 https://blog.csdn.net ...
- xml文件中&符号需要转义为&
xml文件中&符号需要转义为&
- Eclipse 创建Android 模拟器失败:no cpu/abi system image available for this target
(从网上搜了一个使用Android 4.4 API 20编译的图片) 这是因为SDK中没有模拟器使用的操作系统镜像. 如果项目使用API 19编译,则SDK中的system-images文件夹下,需要 ...
- vue的条件渲染和列表渲染介绍
一.条件渲染 1.v-if语句 <div v-if="seen">hahahah</div> <!-- v-if插入或者删除元素的指令 --> ...
- thinkphp 视图(三)系统变量——原生标签
查看系统变量 dump($_SERVER); 在view中获取服务器变量 <p>{$Think.server.HTTP_HOST}</p> 获取env变量 status=dev ...
- 可视化-echarts流向图制作
案例: http://www.internetke.com/jsEffects/2018040406/ 前段时间用echarts做了流程图,在此记录下制作步骤. 一.Echarts是什么 Echart ...
- ManageEngine SeviceDesk Plus帮助台和资产管理软件
- Django中的缓存(内存,文件,redis)
一.Django中的缓存的几种方法 1)单个视图缓存.时间测试 import time from django.views.decorators.cache import cache_page @ca ...