DSDV路由协议分析与仿真(5)

2019-01-19 18:54

2010届通信工程专业毕业设计(论文)

FSR(Fisheye State Routing)使用了“鱼眼”技术,“鱼眼”技术是Kleinrock和Stevens提出来的,这种技术可以用来减少表示图形图像的数据。鱼眼能清晰地捕捉焦点附近的像素,但清晰度随着离焦点的距离增大而降低。“鱼眼”技术在路由中用来维护精确的距离和路由质量信息,但也会随着距离的变大而逐渐不精确。FSR在不同鱼眼域中的节点以不同的频率(这个频率是由节点距离决定的)只向邻居节点广播链路更新信息,这能够大大减少链路状态更新信息,从而降低了泛洪的开销。通过节点之间相互交换链路状态消息,每个FSR路由器都能获知网络全局的拓扑信息。根据这些最新的拓扑信息,FSR为每个目的节点计算最短路径。由于链路更新频率由距离决定,因此对于域内的节点路由都是精确的,而对于域外的节点,离目的节点越远,路由的精确度便越低,这是因为距离较近的更新较快,较远的更新较慢。但不会像按需路由那样需要花时间去寻找路由,因此能维持较低的延时。而且随着离目的节点越来越近,路由信息越来越精确,正好弥补了路由的不精确性。在移动网络中,逐渐精确的路由减小了节点移动对路由精确度的影响。当链路崩溃时,FSR不会发出任何控制信息,而且也不包含在下一个更新信息中,而是简单地删除邻居列表和拓扑结构表中的信息,因此适合于拓扑高度变化的网络环境。目的序列号的使用不仅使得FSR能使用最新的链路状态信息去维护拓扑结构,而且还避免了路由环路的形成,因此较适合高移动性的无线网络。

HSR(Hierarchical State Routing)是一种用于分级网络的路由协议。高级的节点保存它所有子孙节点的位置信息。沿着从最高级的根节点到最低级的叶节点的路径为节点分配逻辑序列地址。序列地址指示了节点的位置,可以简单地使用序列地址进行寻址。网络还配备了位置管理服务器来实现物理地址到逻辑序列地址的映射。

ZHLS(Zone based Hierarchical Link State)路由协议是一种基于区域的路由协议。网络被分割成不重叠的区域,区域与簇不同,它没有首领。并定义了两级拓扑:节点级和区域级。节点级拓扑指一个区域内的节点的物理连接。区域级拓扑指各个区域如何互相连接。网络中存在两种链路状态报文:节点链路状态报文和区域链路状态报文。节点链路状态报文包含节点的邻居信息,只在区域内传播。区域链路状态报文包含区域间的链路状态,在全网中传播。通过分区可以减少路由控制报文的个数。

2.4 本章小结

无线传感器网络是一种新型的Ad hoc网络,由传感器节点、Sink节点、Internet或通信卫星、任务管理节点等部分构成,各传感器节点以自组织形式构成网络,通过

13

张志超: DSDV路由协议分析与仿真

多跳路由方式将监测数据传到Sink节点处理,最终借助长距离或临时建立的Sink链路将整个区域内的数据传送到远程中心。本章首先介绍了无线传感器网络的定义、特点以及应用,从中体现出无线传感器网络的研究价值和应用前景。在第二节中主要分析了一下WSN的体系结构和节点的硬件结构,并按网络分层的思想,把无线传感器网络协议分成物理层、数据链路层、网络层、传输层、应用层五层和能量管理平台、移动管理平台、任务管理平台三大平台。最后对现有的路由协议进行简单的介绍。

14

2010届通信工程专业毕业设计(论文)

第3章 NS2仿真软件

3.1 NS2概述

NS2(Network Simulator )是网络仿真器,为有线和无线网络上的TCP、路由和多播等协议的仿真提供了强有力的支持。NS2是一个开源项目,所有源代码都开放,任何人可以获得、使用和修改其源代码。正因为此,世界各地的研究人员每天都在扩展和更新它的功能,为其添加新的协议支持和功能模块。它也是目前网络研究领域应用最广泛的网络仿真软件之一。

NS2使用了被称为分裂对象模型的开发机制,采用C++和Otcl两种开发语言进行开发。他们之间采用Tclcl进行自动连接和映射。考虑效率和操作便利的原因,NS2将数据通道和控制通道的实现相分离。为了减少分组和事件的处理时间,事件调度器和数据通道上的基本网络组件对象都使用C++编写。这样,仿真用户只要通过简单易用的Tcl/Otcl脚本编写出仿真代码,对仿真拓扑、节点、链路等各种部件和参数进行方便快速的配置。NS2可以说是Otcl的脚本解释器,它包含仿真事件调度器、网络组件对象库等。事件调度器控制仿真的进程,在适当时间激活事件队列中的当前事件,并执行该事件。网络组件模拟网络设备或节点的通信,他们通过制定仿真场景和仿真进程,交换特定的分组来模拟真实网络情况,并将执行情况记录到日志文件(称为Trace文件)中,以提供给仿真用户进分析解读,获取仿真结果。

NS2的构件库是用两种面向对象的语言编写的:C++和Otcl。C++是为人所熟知的高级程序设计语言,Otcl(ObjectTcl)则是Tcl的面向对象的扩展。Tcl(tool command language)是一种很通用的脚本语言,它几乎在所有的平台上都可以解释运行,功能强大。它包含了两个部分:一个语言和一个库。

Otcl则是在Tcl中加入了类、实例、继承等面向对象的概念。NS2中的构件通常都作为一个C++类来实现,同时有一个Otcl类与之对应。用户通过编写Otcl脚本来对这些对象进行配置、组合,描述模拟过程,最后调用NS2完成模拟。NS2中的构件一般都是有相互关联的两个类来实现的,一个在C++,一个在Otcl中。这种方式被称为分裂对象模型。构件的主要功能通常在C++中实现,Otcl中的类则主要提供C++对象面向用户的接口。用户可以通过Otcl来访问对应的C++对象的成员变量和函数。

NS2使用这种分裂对象模型,是出于兼顾模拟性能和灵活性两方面的考虑。一方面,C++是高效的编译执行语言,使用C++实现功能的模拟,可使模拟过程的执行获

15

张志超: DSDV路由协议分析与仿真

得较好的性能。另一方面,Otcl是解释执行的,用Otcl进行模拟配置,可以在不必重新编译的情况下随意修改模拟参数和模拟过程,提高了模拟效率。同时,这种分裂对象模型增强了构件库的可扩展性和可组合性,用户通常只需要编写Otcl脚本就可以把一些构件组合起来,成为一个“宏对象”。用户通过Otcl进行模拟配置,很多情况下只需要了解构件的使用和配置接口就可以了,而不需要了解这些构件的功能是如何实现的。

3.2 NS2结构

NS2中含有丰富的构件库,可用于模拟各种通信网络,不仅可以对有线网络中的协议进行仿真,而且可以对无线网络WLAN、移动IP和卫星通信网络进行模拟。在NS2的构件库里包含有典型的有线网络协议DV,LS等。NS2.33版本中还包括了对多种协议的实现,这正是NS2的优点所在,可以方便地利用别人所编写的协议进行研究。

NS2使用了分裂对象模型的开发机制,采用了C++和TCL(Tool Command Language)两种开发语言进行开发。大部分的网络构件都是用C++编写的,这是因为用C++编写的代码执行速度快,可以有效快速地操作字节、包头等数据结构。模拟场景都是用OTCL (Object Tcl)语言编写的,能够方便地对网络环境参数、协议参数进行快速地修改和设置。两种语言通过TCLCL(Otcl C++ Linkage)机制进行联系,使得利用OTCL可以建立C++对象,修改C++中的变量以及调用C++中的函数。在NS2中要实现一种新的协议并进行测试,不仅要用C++编写协议代码,还要用TCL语言编写出相应的测试环境并建立两种语言的关联。

NS2采用一个离散时间模拟器(Scheduler)控制整个模拟过程,其本身有一个虚拟时钟,所有的模拟都由离散事件驱动。数据包的发送、接收、处理、节点的运动等都是由Scheduler所控制。各事件依照执行的时间顺序加入到Scheduler队列中去。在程序的执行过程中依次从scheduler队列中取出并执行。

3.3 C++与Otcl的接口

在 NS2中,调度器(scheduler)是仿真器的心脏,它定义在C++类 scheduler中 ,scheduler提供了一套接口去配置仿真器和选择驱动仿真的事件调度类型。用户为了让自己编写的C++类能在解释器中可见,需要借助类 TCLclass的帮助,TCLclass类可以实现将解释器中的对象与 NS2编译类的映射,这样通过创建一个从 TCLclass 继承而来的静态类,用户就可以在OTCL脚本中直接使用 C++类。

16

2010届通信工程专业毕业设计(论文)

假设用C++语言创建了一个网络对象类,需要通过Otcl来创建一个此对象的一个实例,这时就需要定义一个从TclClass类派生出的接口元素,它生成一个特定名称的 Otcl对象,使之与C++类建立一对一的映射,通过creat成员函数调用C++类。例如:

从Agent派生出类MyAgent,为实现与OTcl类的对应,需定义一个派生自TclClass 的MyAgentClass类,他在OTcl类中又一个特定的名称 Agent/MyAgent,通过creat成员函数与MyAgent建立联系。

当NS2启动的时候,首先执行静态变量class-my-agent的构造函数,于是产生实例MyAgentClass,在这个过程中,Agent/MyAgent以及其成员函数均在OTcl空间被创建出来。用户需要生成该对象的一个实例时,只需要利用OTCl命new Agent/MyAgent, 仿真器通过静态变量class-my-agent调用create函数来真正创建一个MyAgent对象。

实际试验中常常需要在Otcl脚本中改变C++中的变量值,即让编译层中定义的类的配置参数在解释层可见。NS2提供了一种变量绑定的方法来实现这一要求,具体是将需要在Otcl仿真脚本中控制的C++变量与一个OTcl变量绑定,从而实现OTcl与C++之间的双向控制,具体代码如下:

MyAgent ::MyAgent ():Agent (PT-UDP) {

bind( “my-var1-otcl”,&my-var1);//变量绑定,实现OTcl与C++之间的双向控制 bind( “my-var2-otcl”,&my-var2);

}

my-var1,my-var2是新添加类MyAgent的两个参数变量,my-var1-otcl,my-var2-otcl则是在Otcl语言中为之设置的相应的OTcl变量,从而可以通过在OTcl脚本中控制 my-var1-otcl,my-var2-otcl来达到控制my-var1,my-var2的目的,使得仿真实验更具灵活性。需要注意的是,绑定函数在MyAgent构造函数中,当创建这个对象时实现对变量的绑定;同时需要在ns2/tcl/lib/ns-lib.tcl 文件中对OTcl变量赋初值,否则NS2平台会给出警告信息。NS2支持四种数据类型的绑定,包括实数或整数,带宽变量,时间变量,布尔值;绑定函数分别如下:

bind() ;//实数或整数 bind-time () ;//时间变量 bind-bw() ;//带宽变量 bind-bool () ;//布尔值

17


DSDV路由协议分析与仿真(5).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:跨境电商初级人才认证B卷(偏外贸基础)10.28

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: