初识The ONE

转载于:http://www.cnblogs.com/bakari/p/3519841.htm

本学期开始做真正意义上的研究,主要方向为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网络模拟,这些问题可以忽略不计。

时间: 2024-11-02 09:35:26

初识The ONE的相关文章

初识Python,望君多多关照

在学习Python之前,我们接触过数据结构和网页制作.前者让我们学习如何把C语言运用的更加整齐规范,而后者让我们亲身学习如何运用所学,制作一个静态网页.通过这些课程的学习,让我对C语言产生了比较大的压力,以至于对编程.对这学期的Python课程都有一种如临大敌的感觉. 但是真的学习了这门课程,体会了编码过程中的一些固定运用方法和套路之后,也许过程中对这门课程隐隐约约产生了一点点朦胧的感觉,仿佛他也并没有想象中的那么困难,起码现在的学习让我认为,他可能没有C语言那么繁琐和麻烦.当然,以一个初学者的

初识数组排序!!!!

<!doctype html> <html lang="en"> <head> <meta charset="UTF-8"> <title>初识数组排序</title> <!--调试成功--> <style type="text/css"> *{ padding:0; margin: 0; } li,ul{ list-style: none; } #p

初识操作系统和linux

初识操作系统和linux 1.计算机系统由硬件系统和软件系统两大部分组成:是一种能接收和存储信息,并按照存储在其内部的程序对海量数据进行自动.高速地处理,然后把处理结果输出的现代化智能电子设备. 2.世界上第一台计算机是1946年诞生在美国宾州大学. 3.冯·诺依曼体系结构:1946年数学家冯·诺依曼于提出计算机硬件系统由运算器.控制器.存储器.输入设备.输出设备.摩根定律:当价格不变时,集成电路上可容纳的元器件的数目,约每隔18-24个月便会增加一倍,性能也将提升一倍.现在计算机技术进本很难遵

JAVA 初识类加载机制 第13节

JAVA 初识类加载机制 第13节 从这章开始,我们就进入虚拟机类加载机制的学习了.那么什么是类加载呢?当我们写完一个Java类的时候,并不是直接就可以运行的,它还要编译成.class文件,再由虚拟机解释给当前的操作系统去执行.这些过程都是我们看不见的,我们能看见的也就是一个.class文件.既然虚拟机要解释这些.class文件给当前的操作系统听,那么他怎么获得这些.class文件呢?虚拟机获得这些.class文件的过程就是类加载了. 所以,总结来说就是:虚拟机将.class文件从磁盘或者其他地

初识React

原文地址:北云软件-初识React 专注于UI 在MVC分层设计模式中,react常被拿来实现视图层(V).React不依赖于技术栈的其他部分,因此可以方便的在现有项目中尝试用它来实现一个小特性. 虚拟DOM React从DOM中抽象出来,给出一种更简洁的编程模型,且性能表现更好.能够通过NodeJS实现服务端渲染,通过React Native开发原生app. 数据流React实现单向.响应式数据流,减少boilerplate且比传统数据绑定更容易理解. 简洁的组件React的组件都实现了一个r

泛型的几种类型以及初识webform

今天学习的可以分为两类吧,但是学习的都是比较抽象的,不太容易掌握吧.首先我们大部分时间学习了泛型,泛型的委托,泛型接口以及枚举器,迭代器,扩展方法:最后简单的认识了webform,实现了一个简单的功能. 一.泛型 定义:泛型(generic)可以软糖多个类型共享一组代码,泛型允许我们声明类型参数化.可以用不同的类型进行实例化,说白了,就是可以用类型占位符,创建具体类型致命的真实概念.C#中提供了五种泛型,类,结构,接口,委托和方法.下面举例说明可能更容易理解, class MyStack<T>

最新计算机技术与管理科学应用专家——初识ERB

ERB管理系统:英文全称Enterprise Resource and Behavior,英文简称:ERB,中文名全称:企业资源与行为管理系统.ERB是由理文企业管理顾问有限公司首席管理师,现任商翼ERB企业管理系统项目总监吴志华先生,于2010年9月首先提出的.ERB不再单以供应链管理作为系统应用的基础,而是以企业行为与企业资源规划的最佳结合作为系统应用设计的核心基础,强调企业行为的规划.执行.监督与追溯,强调企业管理水平与员工素养的持续提升:提供企业行为与企业资源管理最佳结合的整体应用解决方

[OpenGL]环境搭建以及OpenGL初识

想往游戏行业发展的话,经常被提及到的就是OpenGL和DirectX,这两者听起来感觉是一门挺高深的技术,今天我也开始摸索学习OpenGL,那么OpenGL到底是什么?它和DirectX有什么区别和联系? OpenGL初识 OpenGL只是一套图形函数库 DirectX包含图形.声音.输入.网络等模块. 但就图形而论,DirectX的图形库性能不如OpenGL,OpenGL稳定,可以跨平台使用,DirectX只支持Windows平台,所以OpenGL还是有它的优势!OpenGL ES是OpenG

初识git

初识git 1 安装git 最早Git是在Linux上开发的,很长一段时间内,Git也只能在Linux和Unix系统上跑.不过,慢慢地有人把它移植到了Windows上.现在,Git可以在Linux.Unix.Mac和Windows这几大平台上正常运行了. 要使用Git,第一步当然是安装Git了.根据你当前使用的平台来阅读下面的文字: 1.1 在Linux上安装Git 首先,你可以试着输入git,看看系统有没有安装Git: ``` $ git The program 'git' is curren

初识linux文件管理

初识linux文件管理 1.文件系统与目录结构 文件系统从根目录 下开始,用"/". 以. 开头的文件为隐藏文件,路径分隔用/表示.文件系统的层级结构是LSB(linux standard base),遵循文件系统层级标准(FHS ) 文件命名规则:   文件名最长255个字节,包括路径名在内共4095个字节 蓝色–> 目录 绿色–> 可执行文件 红色–> 压缩文件 浅蓝色–> 链接文件 灰色–> 除了斜杠和NUL, 所有字符都有效,但不推荐使用特殊字符,