NS2 中 GOD

转自:http://hi.baidu.com/karashun/blog/item/994e3700d86250037aec2c70.html  ,很好的一个个人博客

http://blog.csdn.net/bocai_fire/article/details/6824969

我想在NS2的DSR 路由上做一些工作。他的路由发现机制, 跟AOMDV 类似, 都是通过在全网广播RREQ,目的节点dst 会返回RREQ的传播路径给src。只不过DSR限制更多一点, 比如中间节点只处理第一次到达的RREQ。
但问题是, 我想让源节点src知道全网拓扑,这一点很难保证。即便去掉处理RREQ的限制条件,RREQ也不能保证遍历了网络中所有可能的路径, 尤其是这些RREQ可能因为冲突而丢失。AOMDV 的route discovery 我想也是一样 。
比如, 在如下的简单拓扑中(4个节点的线性拓扑)
如果节点1~4的位置是(0,150, 250, 300 ) ,纵坐标相同。 则 只能发现 link1-2, 2-4.
如果节点位置是(0,150,280, 300),则能发现 1-2, 2-3, 3-4.
更严重的问题是, link(1,3)总是不能发现,即便我设置为(0,150,160,300)。这对我研究的MORE协议应该是很重要的link 。
头大之余,我依稀记得GOD好像可以记录网络中所有的节点信息和邻居信息。 但是一时找不到 介绍God 详细用法的资料。 不知道你有没有什么好的建议或者资料,如何方便地让源节点获得全网的全部拓扑图呢?
我不太想用 link state routing 的方法

二、 God 简介
(./mobile/god.h, god.cc)
GOD, called general operations director, is an object which is aware of the
whole mobile wireless network topology during the period of simulation.

在无线网络模拟中,借助God可以获得整个网络的一些全局性信息。在有些情况下,这些信息非常必要,比如要判断两个相邻无线节点是否在传输范围之类。
GOD is used to store global information about the states of the simulated mobile
wireless network, i. e. , GoD is an omniscient observer, but the global
information GOD owns should not be totally available to any nodes in the
simulation, a node can obtain its partial information when needed.
Currently, GOD is only used to store an array of the shortest number of hops
required to reach from one node to another. GOD does not calculate them
on the fly during the simulation, since it can be quite time consuming.
The information is loaded into GOD from the movement pattern file where
the lines similar to
$ns_ at 666.66 "$god_ set-dist 10 20 2"
are used to load GOD with the information that the shortest path
between node 10 and node 20 is changed to 2 hops at time 666.66.
三、 如何使用God

四、 如何使用 God
 2010-08-22,修改。God 成功帮我解决了拓扑发现的问题。 在C++代码中,可以直接利用God来获得网络全局信息
4.1 God 类的基本成员和方法
    NS2对God的支持在C++空间中主要是God类,该类分别声明和实现在ns-2.30/mobile/god.h文件和ns-2.30/mobile/god.cc文件中(我使用的是ns-2.30版)。
 4.2 使能 GOD
4.2.1 方法一: 开启能量模型
     这是普遍介绍的方法,但不知道为何我总是设置出问题。 所谓能量模型, 就是要设置节点的初始能量, 每次发送消耗的能量等等, 我想在sensor (传感器网络)中比较重要。 Mesh 中的路由器应该无关紧要。
     需要开启能量模型, 主要是因为在God::IsNeighbor(int i, int j)函数中, 有一段是检查每个节点的能量是否是足够。如果不开启能量模型,God认为所有节点不相邻, 那么接下来什么工作也不能做。

如果在仿真脚本里使用God,需要以下几个基本设置:

在node-config命令的选项中要开启能量模型,如果不开启能量模型,God将认为所有的节点之间都不相邻,其他信息也无从获得,这显然不是我们想要的。


$ns_ node-config    -...... \
                                  -energyModel $opt(engmodel) \
                                  -initialEnergy $opt(initeng) \
                                  -txPower $opt(txPower) \
                                  -rxPower $opt(rxPower) \
                                  -idlePower $opt(idlePower) \
                                   -......

当然前面设置好上面这些参数的值:(以下为常用的典型值)


set opt(engmodel)    EnergyModel
set opt(initeng)         10000.0
set opt(txPower)       0.660
set opt(rxPower)       0.395
set opt(idlePower)    0.035

4.2.2 方法二: 注释掉God中中关于能量检查的代码。
     我倾向于这种方法, 简单。

bool God::IsNeighbor(int i, int j) {
assert(i
//注释掉
}
vector a(mb_node[i]->X(), mb_node[i]->Y(), mb_node[i]->Z());
vector b(mb_node[j]->X(), mb_node[j]->Y(), mb_node[j]->Z());
vector d = a - b;
if (d.length() < RANGE) return true;
else return false;
}

4.3 tcl 脚本中God 的创建:
以上设置完毕,下面创建God对象:

set god_ [create-god $opt(nn)]
$god_ on
#这里还可以加一些其他设置,比如
#$god_ allow_to_stop

其中create-god  $opt(nn) ,主要是对路由协议性能评价,存储了节点的总数,节点间最短路径等信息,节点MAC对象会调用God对象,因此即便不使用,也要建立此对象。

上面的变量$opt(nn)是网络中节点的数量,也许要提前赋值,例如:
创建God对象后,C++空间的God对象也被创建,并且C++空间的God对象里的mb_node数组被分配,每个数组元素是一个 MobileNode对象的指针,数组大小就是网络节点的数量大小。但现在这些指针的值都还为NULL,不指向任何MobileNode对象 (MobileNode类是对应无线网络节点的类)。为了给这些指针赋值,在Tcl脚本里需要添加一些代码,具体的位置是在NS创建节点后,将这些节点与 God联系起来:


for {set i 0} {$i < $opt(nn)} {incr i} {
set node_($i) [$ns_ node]
$node_($i) random-motion 0
$god_ new_node $node_($i)
}

这样这些节点对应的MobileNode对象的指针被填充到上面提到的mb_node数组中,在C++代码中可以随时随地通过God来获得当前网络的全局情况。

【1】比如判断两个节点是否邻节点,可以调用:
God::instance()->IsNeighbor(i,j)   //其中i,j是网络节点的地址

【2】Get the number of nodes in the network ,当需要获得节点的个数时,

#include  
God::instance()->nodes();

NS2中GOD的使用相关推荐

  1. NS2中数据包Packet的分析 (转帖)

    1. NS2中数据包packet类结构图: packet类中的access函数如下: inline unsigned char* access(int off) const {      if (of ...

  2. 向NS2中添加协议PING

    在NS2中增加自己的协议模块一般分一下几个步骤: (1)       添加协议类 (2)       定义协议分组头结构 (3)       编译代码 其实在ns3.35版本中已经有ping协议,此步 ...

  3. 向NS2中添加协议PING[转载]

    原文地址:http://www.cnblogs.com/xyl-share-happy/archive/2012/03/20/2407732.html ------------------------ ...

  4. NS2中的WirelessPhyExt工作机制研究

    NS2中的WirelessPhyExt工作机制研究 @NS2开发笔记 1.概述 WirelessPhyExt是WirelessPhy的扩展,是直接从WirelessPhy继承而来的,但是在Wirele ...

  5. NS2中的TDMA的实现和分析

    NS2中的TDMA的实现和分析 1.  NS2中的Tdma时帧结构如下图: 其中前导的数据结构为:static int *tdma_preamble_; tdma_preamble_ = new in ...

  6. 理解NS2中的OTcl/tclCL

    题记 真正触动我写这篇短文的原因是试图理解NS2的基本原理. 在"the NS2 manual"中, 解释了为什么采用了两种语言来建构整个系统, 然后在第三章描述了tclcl的六个 ...

  7. NS2中Trace部分的一点认识

    NS2中Trace部分的一点认识 NS2追踪部分的源码主要涉及以下几个文件: ns-2.34/trace/basetrace[.cc][.h] ns-2.34/trace/trace[.cc][.h] ...

  8. NS2中802.11代码深入理解—packet传输的流程 (转帖)

    如何传送一个封包(How to transmit a packet?) 首先,我们要看的第一个function是在mac-802_11.cc内的recv( ),程式会先判断目前呼叫recv( )这个p ...

  9. NS2中的数据包common头结构hdr_cmn

    在aomdv_rqueue.cc中多次遇到了HDR_CMN(p),查遍了AOMDV协议都没有找到定义,最后还是度娘出了结果,在下边列出.不得不说,看得越深入,涉及到NS底层的实现也越多. ------ ...

  10. ns2中无线通信距离的一些小节

    zz:http://hi.baidu.com/cqupt_dingo/blog/item/9b8ba2cad013f20d93457e13.html 首先仿真时会输出以下内容 highestAnten ...

最新文章

  1. nodejs redis 发布订阅_SpringBoot整合Redis,怎么实现发布/订阅?
  2. 观看马云网商大会视频的一些感想.
  3. 和Leo一起做爱字符串的好孩子量子纠缠
  4. linux卸载模块驱动程序,Linux设备驱动程序 之 装载和卸载模块
  5. 每天学点Shiro-集成spring
  6. 【经验分享】linux交叉编译 - openssl动态库
  7. python多线程飞速写入文件
  8. 清华周界详解《基于图神经网络的事实验证》 | 百万人学 AI
  9. ILSPY反编译工具下载代替收费的Reflector工具
  10. 【源码】采用PI反馈控制的DC-DC降压变换器仿真
  11. VS2013配置OpenGL
  12. 深入解析Superdome 2:惠普关键业务平台再加强?
  13. 分享几个在线网站备案查询
  14. 画廊效果的ViewPager实现(附带无限自动轮播)
  15. 巴比特 | 元宇宙每日必读:连续七个季度出现亏损,Meta元宇宙部门Q2亏损28 亿美元,扎克伯格称这种情况可能会持续数年...
  16. 人工智能写作产品解决的痛点
  17. 计算机网络常见面试题目总结,含答案
  18. 微信小程序自定义模态框
  19. Scrapy图片自动下载配置
  20. 微信小程序 通过获取地理位置查看天气

热门文章

  1. java spider爬虫_一个简单的java网络爬虫(spider)
  2. THINKPHP5(TP5)新手入门必看教程
  3. IOS中使用getUserMedia获取视频流展示到video中,进行人脸识别
  4. python中eval()函数的作用及使用方法
  5. 计算机怎么保存窗口画面,电脑视频怎么旋转保存 怎样将视频画面进行旋转并保存|视频画面旋转工具...
  6. 2021年软件定义通信发展环境(PEST)分析:新兴网络业务推动软件定义通信行业发展 [图]
  7. 小波图像处理 —— 奇异点(不连续点)检测
  8. 景深决定照相机什么特性_什么是景深?
  9. 学做一点吃食烤面包虾粥
  10. 《HelloGitHub》第 61 期