张志超: DSDV路由协议分析与仿真
3.4 Otcl脚本编写
在使用NS2进行模拟前,首先要分析模拟涉及哪个层次。NS2模拟分两个层次:一个是基于Otcl编程的层次,利用NS2已有的网络元素实现模拟,无需对NS2本身进行任何修改,只要编写Otcl脚本;另一个层次是基于C++和Otcl编程的层次,如果NS2中没有所需的网络元素,就需要首先对NS2扩展,添加所需要的网络元素。这就需要利用到分裂对象模型,添加新的C++类和Otcl类,然后再编写Otcl脚本。
在本课题中的模拟主要是基于Otcl编程的层次,一般来说,编写一个Tcl脚本文件分为以下几个步骤,脚本编写流程图如图3.1所示:
图3.1 脚本编写流程图
结束分析trace文件获取有用信息否是否需要重新建模是调整配置拓扑结构和业务量模型执行Otcl脚本配置网络拓扑结构建立协议代理设置Trace对象配置业务量相关参数编写辅助过程设置仿真时间开始(l) 开始编写Otcl脚本。首先配置模拟网络拓扑结构,拓扑结构反映了节点与节点之间的位置关系,同时还可以确定链路的一些基本特性,如带宽、延迟和丢失策略等。
(2) 建立协议代理,包括端设备的协议绑定和通信业务量模型的建立。
(3) 配置业务量模型的参数,从而确定网络上的业务量分布。设置Trace对象。Trace对象能够把模拟过程中发生的特定类型的事件全部记录在trace文件中。NS2通过trace
18
2010届通信工程专业毕业设计(论文)
文件来保存整个模拟过程。仿真完成后,我们可以对trace文件进行分析研究。使用相关命令从中提取出重要信息,进行分析。
(4) 编写其它的辅助过程,设定模拟结束时间,至此Otcl脚本编写完成。 (5) 用NS2解释执行刚才编写的Otcl脚本。
(6) 对trace文件进行分析,得出有用的数据,可以使用Gnuplot或Xgraph工具来绘图直观显示数据变化情况,也可以用Nam等工具观看网络模拟运行过程。
(7) 调整配置拓扑结构和业务量模型,重新进行上述模拟过程。
3.5 NS2仿真流程
使用NS2进行网络模拟的基本流程如图3.2所示。如果NS2中己经包含了在仿真中所要采用的协议,就不需要再编写新的代码。此时用户的主要任务就是编写TCL/OTCL模拟代码。通过建立不同的仿真场景,能够对协议在不同网络条件下的性能进行测试。NS2中自带了两个工具:setdest以及cbrgen。使用setdest工具能够方便地生成节点运动的场景。对无线网络的模拟常常要借助这个工具。通过建立节点运动的仿真场景,能够比较真实地模拟出无线网络的特点,考察协议适应网络拓扑变化的能力。Cbrgen工具能够建立网络中任意两节点间的cbr或top数据流,模拟网络中的数据流量。模拟结束后一般会生成两个文件:.nam文件以及.tr文件。其中NAM是基于Tcl/Tk的动画演示工具,用来把模拟的过程用可视化的方式呈现出来。用NAM文件能够动态观察仿真过程,能使用户更加生动直观地了解仿真过程以及网络拓扑变化的情况。Trace文件中记录了整个仿真过程,包括包的发送、接收、转发。在无线网络的模拟中,可以在代理层、路由层、MAC层等多个层次对仿真过程进行记录。代理层记录数据包的收发,路由层记录路由信息的处理,MAC层记录各种信息帧的发送。trace文件记录了仿真过程中对每个数据包的处理过程,包括发送、接收、转发、丢弃等,数据量庞大。要对trace文件进行分析必须要借助别的工具从中提取有用的信息,而后利用NS2中提供的Xgraph工具或是Gnuplot工具作图,才能够直观地反映出协议的性能参数。
19
张志超: DSDV路由协议分析与仿真
仿真开始分析问题修改源代码重新编译NS2是是否需要修改源代码否编译是否通过否调试NS2是编写TCL执行仿真分析结果是否得到预期结果仿真结束否分析问题图3.2 NS2的仿真过程
3.6 NS2相关工具介绍
1. Nam Nam是基于Tcl/Tk的动画演示工具,用于观察网络模拟的trace行为和现实世界中数据包地trace数据。例如网络拓扑、包传输和队列管理等。Nam的设计理念是要创造一个动画演示工具,以能够读取大量的动画演示数据集,并能够灵活的扩展,以适应不同网络环境下的场景可视化要求。
使用Nam进行演示的第一步是产生trace文件,其中包含了网络的拓扑信息,如节点、链路以及数据包的trace数据。该文件一般由NS2创建。生成trace文件之后,就可以用Nam进行演示。演示开始时,Nam会读取trace文件,创建网络拓扑,显示窗口界面,进行必要的布局设置,然后停止在时间标记为0的地方。
2. Xgraph Xgraph是NS2中自带的一个小巧的绘图工具,它可以根据数据文件里的数据绘制出相应的图形。数据格式文件的格式非常简单,由两栏数据组成,每一行表示一个点,第一栏为x坐标,第二栏为y坐标。根据trace文件和不同仿真实验中需要的具体性能参数,编写性能参数提取代码,程序运行后的数据存放在某个文件中,在Xgraph中运行该文件,即可绘制出所需的性能参数图形。
20
2010届通信工程专业毕业设计(论文)
3.7 本章小结
本章首先对NS2仿真软件进行概述,然后描述了NS2的结构组成以及C++与Otcl之间的接口,接着通过流程图分析了NS2仿真软件的一般仿真流程,最后简单介绍了NS2中常用的实验辅助工具,为实现仿真打下了基础。
21
张志超: DSDV路由协议分析与仿真
第4章 DSDV路由协议分析
4.1 协议的提出
DSDV(Destination-Sequence Distance-Vector)路由协议是先应式路由协议[11],又称为表驱动路由协议。在这种路由协议中,每个节点无论当前是否需要通信,都要建立和维护一张或多张表格,此表格包含到达网络中其他所有节点的路由信息。当检测到网络拓扑结构发生变化时,节点在网络中发送更新消息。收到更新消息的节点更新自己的路由表,以维护及时、准确的路由信息。不同的先应式路由协议的区别在于拓扑更新消息在网络中传播的方式和需要存储的表的类型不同。先应式路由协议不断地检测网络拓扑和链路质量的变化,根据这些变化更新路由表,因此路由表可以准确地反映网络的拓扑结构。
DSDV路由协议是由传统的Bellman-Ford路由协议改进得到的,其特点是利用目的节点序列号解决路由环路和无穷计数问题。在DSDV中,每个节点保存一张路由表,路由表维护本节点到网络内部所有可到达的目的节点的路由信息。路由条目中保存目的节点的序列号(Sequence Number),用以区别新旧路由。为维护路由表的最新,节点周期性地广播路由更新分组。邻居节点收到路由更新分组后,节点比较其中的目的节点序列号和自己路由表中保存的到达同一目的节点的序列号,如果前者大,就更新自己的路由表;如果路由序列号相同,则选择具有较小跳数的路由。当节点的路由表更新完成后,为了防止出现波动,节点要延迟一段时间再发送路由更新分组。
4.2 工作原理
目的序列距离矢量路由协议(DSDV)[12]是一种基于表驱动的主动路由协议,通过目的节点给每个路由设定序列号来区分新旧路由,从而避免了路由环路的产生。DSDV采用时间驱动和事件驱动技术控制路由表的传送,即每个移动节点在本地都保留一张路由表,其中包括所有有效目的节点、路由跳数、目的节点路由序列号等信息。路由更新分组在全网内周期性地广播而使路由表保持连贯性。每个节点周期性地将本地路由表传送给邻居节点,或者当其路由表发生变化时,也会将其路由信息传给邻近节点。当无节点移动时,DSDV使用间隔较长、包括多个数据单元的大数据分组进行路由更新;在节点移动时使用较小的数据分组,并且只对移动的节点更新路由,这样降低了
22