ONE主要的功能是节点的移动,节点间的相遇情况,路由情况以及消息的处理机制。下面简要介绍下目前ONE自带的六种移动模型和六种路由模型。

Mobility Model:

从大的方面,可以分为三种,1)随机移动;2)基于Map的随机移动;3)基于用户行为的移动

进一步细分:

1)包括两种:Random Walk(RW)和Random Waypoint(RWP)

2)包括三种:Random Map-Based  Movement (MBM),  Shortest Path Map-Based Movement (SPMBM),和 Routed Map-Based Movement (RMBM).

3)包括一种:Working Day Movement Model(WDM)

所有的移动模型都封装成一个类,继承于MovementModel,提供节点选择新路径的接口,SimMap类中描述了Map数据,DijkstraPathFinder类可以使用这些数据来找到一条最短路径,PointOfInterest类可以从Map数据中选择合理的POI数据点。模型见初识the ONE。下面分别描述几种模型。

RW:节点从当前位置随机选择一个方向和速度移动到一个新的位置,方向和速度从一个预先定义的范围里面选择,如:[speedmin, speedmax],[0,2 π].通过一个固定的时间间隔t或固定的距离d之后,节点的方向和速度在重新计算。如下图:

RWP:该模型类似RW,只不过节点在选择下一个方向和速度时有一段自定义的暂停时间(Pause time),节点需要在这个节点待一段时间。

MBM:依托于Map数据,选择一个节点随机地放置在map area,使其在该路段上行驶,直到到达一个路段终点,然后选择返回或结束,如果节点到达一个十字路口,再随机选择一个方向行驶,如果达到预先配置的距离或时间,停止一段时间,在继续行驶,如果达到目的地,则停止行驶。

SPMBM:该模型为MBM的升级版,节点从map数据中通过Dijkstra算法找出一条最短的路径,然后沿着这条路径进行行驶。

RBMB:该模型适用于一些有着预定义的路径的节点,如Bus,train等节点。其包含了一条路径中所有可能遇到的stop和在stop停止的时间间隔。

WDM:该模型考虑了用户的行为,包括用户可能sleeping at home, working at office, 以及going out with friends in the evening等活动。此外,WDM中引入社交关系和社区(community)的概念。

Routing Model:

ONE实现了六种路由协议:1) Direct Delivery (DD), 2) First Contact (FC), 3) Spray-and-Wait, 4) PRoPHET, 5) Max-Prop, and 6) Epidemic.

涵盖了DTN路由协议的所有类型,包括single-copy,n-copy,unlimited-copy以及基于估计的协议。

所有的路由协议都封装成一个类,继承于MessageRouter类,该类有两个兄弟类,ActiveRouter和PassiveRouter类,所有实现的六种路由协议皆继承自ActiveRouter类,而PassiveRouter类提供用户自定义的路由协议类的上层接口。

DD:是一种single-copy的路由协议,只有当携带信息的节点遇到目的节点的时候,才进行数据转发。

FC:也是一种single-copy的路由协议,携带信息的节点只要遇到一个节点,就进行转发,直到到达目的节点。

这两种方法保证了整个网络中只有一个信息的copy,只要信息转发成功,就将原信息删除,是简单的store-and-forward.虽然节省了网络带宽,但不能提高网络中信息的传送率。

Epidemic:是一种n-copy的路由协议,泛洪式的信息传播方式,携带信息的节点将自己所有的信息进行泛洪,直到到达目的节点,或TTL时间到进行删除。

Spray-and-Wait:和Epidemic比较相像,只不过限制信息copy的数量。

这两种方法虽然能提高网络中信息的传送率,但大量消耗网络的资源,如网络带宽和节点的存储能力。所以,为了权衡上面几种协议之间的利弊,提出了下面基于估计的两种协议。基于估计的协议的本质的原理是:通过节点之间维护着一张和其他节点相遇的表,通过概率模型计算,如果两个节点相遇,那么根据他们估计的相遇概率,可以估计它们下次再次相遇的概率,选择相遇概率大的节点进行转发。

PRoPHET:该协议模型选择和目的节点相遇概率大的节点进行转发。

Max-Prop:该协议进一步优化,使用相遇概率通过Dijskra算出从一个节点到目的节点的最短路径,选择在最短路径上的节点进行转发。

上面就是对几种移动模型和路由模型的简单介绍,下面在进一步通过对源码的分析和实际场景的模拟来进一步剖析ONE,并尝试着把自己的模型放进来。

Reference:

[1] A Survey of Mobility Models for Ad Hoc Network Research

[2] The ONE Simulator for DTN Protocol Evaluation

Mobility Model and Routing Model about the ONE的更多相关文章

  1. MVC中@Html.DisPlayFor(model=>model.newsName)和 @Model.newsName的区别

    MVC中,在Controllers查询到数据,返回一个实体给View并显示,可以用@Html.DisPlayFor(model=>model.newsName)和 @Model.newsName ...

  2. 【转载】Analysis Service Tabular Model #003 Multidimensional Model VS Tabular Model 我们该如何选择?

    由于Multidimensional Model 和 Tabular Model 并不能互相转换, 所以在项目之初就应该要考虑好选择哪一种模型进行开发. 以下只是一些建议: Licensing 许可和 ...

  3. Generative model 和Discriminative model

    学习音乐自动标注过程中设计了有关分类型模型和生成型模型的东西,特地查了相关资料,在这里汇总. http://blog.sina.com.cn/s/blog_a18c98e50101058u.html ...

  4. JFinal项目eclipse出现the table mapping of model: com.gexin.model.scenic.Scenic not exists or the ActiveRecordPlugin not start.

    JFinal项目eclipse出现the table mapping of model: com.gexin.model.scenic.Scenic not exists or the ActiveR ...

  5. MVC:一个View显示多个Model(多个Model你可以使用ViewBag或ViewData , 或者:Model["myInfo"] as)

    MVC:一个View显示多个Model 多个Model你可以使用ViewBag或ViewData , 或者:Model["myInfo"] as. 比如: Tuple<str ...

  6. MVC中Model BLL层Model模型互转

    MVC中Model BLL层Model模型互转 一. 模型通常可以做2种:充血模型和失血模型,一般做法是模型就是模型,不具备方法来操作,只具有属性,这种叫做失血模型(可能不准确):具备对模型一定的简单 ...

  7. 大话胖model和瘦model

    今天业务完成到一定程度,查看下代码,猛然发现目前的这个代码有点奇怪.奇怪就奇怪在我的model中有很多文件,每个文件都对应数据库中的一张表,然后每个model中有很多是几乎没有什么逻辑代码的.比如: ...

  8. js 实现angylar.js view层和model层双绑定(改变view刷新 model,改变model自动刷新view)

    近段时间研究了下angular.js 觉得它内部实现的view和model层之间存在很微妙的关系,如下图 如上图说的,view的改变会update 数据层model, 数据层会update视图层vie ...

  9. django中通过model名字获取model

    django1.6, 通过字符串和get_app.get_model获得对应的object 只需要两行代码: from django.db.models import get_model get_mo ...

随机推荐

  1. 十四、ChainOfResponsibility 责任链模式

    设计: 代码清单: Trouble: public class Trouble { private int number; public Trouble(int number){ this.numbe ...

  2. Java获取工程目录

    背景:程序执行时,会涉及到去读取配置文件等操作,那就需要了解怎么获得文件路径   Java目录映射关系 说明一点:在Java代码执行时,会将编译生成的classes文件,以及配置文件等信息生成到tar ...

  3. 替换php remi源

    检查当前安装的PHP包 yum list installed | grep php 如果有安装的PHP包,先删除他们 这里一定要把上一步列出来的所有php包删除干净 yum remove php.x8 ...

  4. OpenJudge NOI 4976 硬币

    http://noi.openjudge.cn/ch0207/4976/ 描述 宇航员Bob有一天来到火星上,他有收集硬币的习惯.于是他将火星上所有面值的硬币都收集起来了,一共有n种,每种只有一个:面 ...

  5. 深度学习项目——基于卷积神经网络(CNN)的人脸在线识别系统

    基于卷积神经网络(CNN)的人脸在线识别系统 本设计研究人脸识别技术,基于卷积神经网络构建了一套人脸在线检测识别系统,系统将由以下几个部分构成: 制作人脸数据集.CNN神经网络模型训练.人脸检测.人脸 ...

  6. Codeforces Round #449 (Div. 2)

    Codeforces Round #449 (Div. 2) https://codeforces.com/contest/897 A #include<bits/stdc++.h> us ...

  7. 247. Strobogrammatic Number II输出所有对称数字

    [抄题]: A strobogrammatic number is a number that looks the same when rotated 180 degrees (looked at u ...

  8. 28.Mysql权限与安全

    28.Mysql权限与安全28.1 Mysql权限管理 28.1.1 权限系统的工作原理对连接的用户进行身份认证,合法的用户通过认证,不合法的用户拒绝连接:对通过认证的合法用户赋予相应的权限,用户可以 ...

  9. 通过类名或者jar名查询所在jar包

    一.问题 例如我想查看一下FilterSecurityInterceptor的源码,但是我不知道它在maven依赖中的哪个jar包中 二.解决方案 http://www.findmaven.net/ ...

  10. Spring Boot 启动(一) SpringApplication 分析

    Spring Boot 启动(一) SpringApplication 分析 Spring 系列目录(https://www.cnblogs.com/binarylei/p/10198698.html ...