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. keepalive高可用

    Keepalived软件起初是专门为LVS负载均衡软件设计的,用来管理并监控LVS集群系统中各个服务节点的状态,后来又加入了可以实现高可用的VRRP功能.因此,Keepalived除了能够管理LVS软 ...

  2. TZOJ 4602 高桥和低桥(二分或树状数组+二分)

    描述 有个脑筋急转弯是这样的:有距离很近的一高一低两座桥,两次洪水之后高桥被淹了两次,低桥却只被淹了一次,为什么?答案是:因为低桥太低了,第一次洪水退去之后水位依然在低桥之上,所以不算“淹了两次”.举 ...

  3. [leetcode]380. Insert Delete GetRandom O(1)常数时间插入删除取随机值

    Design a data structure that supports all following operations in average O(1) time. insert(val): In ...

  4. JS的事件流的概念(重点)

      09-JS的事件流的概念(重点)   在学习jQuery的事件之前,大家必须要对JS的事件有所了解.看下文 事件的概念 HTML中与javascript交互是通过事件驱动来实现的,例如鼠标点击事件 ...

  5. 服务器重新启动,oracle数据库重新连接问题

    最近服务器使用期限到了,用户无法登陆,联系了网络的同事,重新开启了服务器,用户可以重新登陆了,但是在使用oracle数据库的时候,发现报了以下的错误: 很明显是数据库服务没有启动,解决这个问题分两步: ...

  6. 我的java学习之旅--一些基础

    (因为我粗略学过C,C++,Python,了解过他们的一些语法,所以为了使得java的入门更为顺畅,便会忽略一些和C语法相类似的地方,着重点明一些java自己的特色之处.也减轻一下自己写文字的负担.) ...

  7. 20170805_linux

    http://blog.csdn.net/aaaaatiger/archive/2007/07/28/1713611.aspx Delphi/Pascal code   ? 1 2 3 4 5 6 7 ...

  8. python 的面相对象编程--对应c++

    在python的面相对象编程中,我们常常在class中可以看到a(),  _b() ,  __c(), __d()__这样的函数. 由于我是看廖雪峰老师的教程,廖老师为了简单起见,没有引入太多概念,我 ...

  9. 可以用到的XSS跨站语句

    我们常用的测试XSS跨站的语句一般是alert比如: <script>alert(“sex”)</script> <script>alert(/sex/)</ ...

  10. 【轻松前端之旅】HTML的块元素、行内元素和空元素

    块(block)元素 显示成一块,前后有换行.块元素常用于web页面的主要构造模块.例如:<div>,<p>,<h1>~<h6>,<blockqu ...