The ONE使用笔记:DTNHost包含些什么

本文介绍DTNHost都有些什么东西,想理解这一点,想想一台PC通常会包含哪些东西。本文先给出与DTNHost相关类的UML类图,接着介绍一个节点DTNHost包含些什么,即身份识别信息+移动模型+网卡+协议栈

1. 概述

1.1 UML类图

以DTNHost为中心的类图如下。可见,DTNHost与MovementModelMessageRouter是一一对应的,与NetworkInterface是一对多的关系。

dtnhost_class_diagram

1.2 DTNHost成员变量

//DTNHost
private static int nextAddress = 0;
private String name;
private int address;

private MessageRouter router;

/*** 移动相关 ***/
private MovementModel movement;
private Coord location;     // where is the host (2D coordinates)
private Coord destination;    // where is it going (2D coordinates)
private Path path;   //the Path this node is currently traveling
private double speed;
private double nextTimeToMove;

private List<MessageListener> msgListeners;
private List<MovementListener> movListeners;
private List<NetworkInterface> net;   //Network interface of a DTNHost. Takes care of connectivity among hosts.

private ModuleCommunicationBus comBus; //Intermodule communication bus

2. 身份识别信息

DTNHost身份识别信息,用一个静态整型变量标识系统的DTNHost id,源代码如下:

private String name;
private int address;  //唯一标识DTNHost,类似于ip地址

private static int nextAddress = 0;   //静态成员变量

3. 移动模型MovementModel

DTN下的节点是移动的,需要描述起始位置,移动路径;如何移动,移动速度,下次移动时间。每个节点只有一种移动方式,即DTNHost与移动模型一一对应。相关源代码如下:

private Coord location;           //平面坐标下的位置(x,y)
private Coord destination;        //平面坐标下的位置(x,y)
private Path path;                //包含一系列坐标点, private List<Coord> coords

private MovementModel movement;   //移动模型,节点如何移动
private double speed;   //移动速度
private double nextTimeToMove;    //下次移动时间

4. 网卡NetworkInterface

一台PC可以装多个网卡(有线与无线),同理,DTN的节点也可以装多个网卡(一对多的关系),用于管理节点间的连接。

private List<NetworkInterface> net;    //Network interface of a DTNHost. Takes care of connectivity among hosts.
private ModuleCommunicationBus comBus; //总线? Intermodule communication bus

NetworkInterface管理一系列连接,还包含一些传输属性的信息(理解成物理层,传输距离、传输速度等),相关源代码如下:

//NetworkInterface.java
protected DTNHost host = null;   //每个NetworkInterface关联一个DTNHost
private int address;             //network interface address 
protected String interfacetype;  //在设置文件设置,如Group4.interface1 = btInterface(bluetooth interface) 或 highspeedInterface

protected List<Connection> connections; //一个NetworkInterface有多具连接
private List<ConnectionListener> cListeners = null; //list of listeners

protected double transmitRange; //传输范围
protected double oldTransmitRange;
protected int transmitSpeed;

protected ConnectivityOptimizer optimizer = null;  //optimizing the location of possible contacts with network interfaces of a specific range

private double scanInterval;
private double lastScanTime;

private ActivenessHandler ah;      //activeness handler for the node group
private int activenessJitterMax;   //maximum activeness jitter value for the node group
private int activenessJitterValue; //this interface's activeness jitter value

NetworkInterface是超类,目前只有SimpleBroadcastInterface(provides a constant bit-rate service, where one transmission can be on at a time)继承该类,NetworkInterface管理一系列连接(一对多)。对于一个连接,需要刻画其连接两端的DTNHostNetworkInterface,类似于IP地址+端口号。其UML类图如下:

NetworkInterface

5. 协议栈

有了网卡NetworkInterface,还需要在其上面安装协议栈,方可通信。The ONE没有MAC层(被抽象了),网络层的路由层次关系如下:MyRouter 继承 ActiveRouter 继承 MessageRouter。以EpidemicRouter为例,其层次类图如下:

6. 监听器Listeners

监听器用于统计仿真结果,当节点变化时(如:节点移动或消息创建、转发、丢弃、删除),会触发相应的监听器更新仿真结果,详情可参考博文《The ONE使用笔记:深入源码理解消息监听器MessageListener》。DTNHost有两个监听器列表,如下:

private List<MessageListener> msgListeners; //消息监听器
private List<MovementListener> movListeners;//移动监听器
赞赏

微信赞赏支付宝赞赏

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注

11 thoughts on “The ONE使用笔记:DTNHost包含些什么

  • 2017年03月27日 星期一 at 07:18下午
    Permalink

    博主:
    你好。请问在The ONE这个仿真器中,有没有写入DTN整个协议?学习了一段时间,感觉没有接触到类似于Bundle这个概念,我的理解是,这个仿真器是不是单纯模拟了延时容忍的这个场景?另外,请问这个仿真器能实现丢包率的设置吗?

    Reply
    • 2017年03月28日 星期二 at 06:21上午
      Permalink

      仿真器是针对可延迟容忍的,但可以用于模拟其他网络,比如静态网络。

      丢包率的话,得自己实现。

      Reply
      • 2017年03月28日 星期二 at 05:56下午
        Permalink

        也就是说ONE没有写入完整的DTN协议?这样理解对吗?

  • 2015年10月22日 星期四 at 10:36下午
    Permalink

    SparkandShine你好,我的配置文件里设置了a,b两组,a为消息生成,b为消息目的节点,a使用接口一(假设3G),b使用两种接口,接口一为蓝牙,二为3G,但是仿真时,a与b之间不能通信,没有消息传递成功。我是想实现a,b间3G通信(消息下发);b,b间蓝牙通信(消息互传)。请问要怎么改才能使用两种接口?谢谢。

    Reply
    • 2015年10月23日 星期五 at 01:05上午
      Permalink

      你这个问题很有意思。我也一度遇到过因为NetworkInterface不匹配,没有任何消息转发。

      但你的需求比我更进一步,我不知道怎么解决。

      Reply
      • 2015年10月23日 星期五 at 01:12上午
        Permalink

        谢谢你的回复

    • 2017年09月12日 星期二 at 08:13下午
      Permalink

      请问怎么解决的这个问题

      Reply
  • 2015年08月15日 星期六 at 06:59上午
    Permalink

    one 代码中DTNHost的update函数里调用了 –SimpleBroadcastInterface的update和MessageRouter的update,但是MessageRouter的update函数再跟踪下去是application的update函数,这里里面就是个空的,再也跟踪不下去了,请问下HOST里update里的路由更新这个地方的执行流程是这么走下去的哪?

    Reply
    • 2015年08月26日 星期三 at 06:00上午
      Permalink

      很抱歉,因为休假,没有及时回复留言。你解决了就好。

      Reply
  • Pingback: The ONE使用笔记:目录 | Spark & Shine