

3 NS2的工作仿真机制
NS是美国DARPA支持的VINT项目的核心部分,主要由LBI ,CMU,UCB,USC/ISI,Xe-rox PARC等大学和实验室合作开发,现由USC/ISI维护,最新版本是NS2。其目的是构造虚拟的网络平台,提供一套模拟和测评现有网络协议的仿真工具,并能实现新协议的开发和研究。
3.1 体系结构和工作原理
NS软件包主要由Tcl/Tk,OTcl,NS 和TclCL组成。其中Tcl是一种开放式的脚本语言,用于对NS编程,实现网络模拟。这种脚本语言最明显的特点就是其解释器能够很容易地嵌入到应用程序中。Tk是Tcl的图形开发工具包,OTcl则是Tcl语言面向对象的扩展。NS由模拟引擎和大量的仿真组件构成,是面向对象的模拟器,也是软件包的核心,其本身由c++写成,并带有一个前端的OTcl解释器,能够同时满足C++和OTcl的编程需要。在TclCL中定义了许多类,用于提供OTcl和c++的编程接口,使网络对象和变量能够同时出现在两种语言中,与其它的仿真软件类似,NS采用了如(图3.1)所示的体系结构。
图3.1 NS的体系结构
模拟引擎是NS模拟器的核心,包括线程调度、处理器分配、事件队列、时钟同步设置等,它采用事件驱动的方式,根据设定的事件队列控制整个模拟过程的运行。其线程调度和处理器的分配形式目前采用的是单线程的方式。
并发事件按先调度先分配(FSFD)的方式处理,不支持抢占式的处理器分配。事件队列的调度方式,按数据结构和算法的不同分为三种:表调度、堆调度和日历队列调度,事件调度的时间单位是秒(虚拟时钟)。
3.2 仿真模型
网络建模是实现网络仿真的基础,NS采取对真实网络元素进行抽象,保留其基本特征,并运用等效描述的方法来建立网络仿真模型。NS的仿真模型包括拓扑模型、协议模型和流量模型三个部分,它们由大量的仿真组件(由C++和OTcl编写)所构成,用于实现对真实网络的抽象和模拟。
(1)拓扑模型 由节点和链路构成。从本质上讲,节点是分类器(classifier) 的集合,链路则是连接器(connector)的集合,其结构如(图3.2)所示.节点主要由地址分类器、端口分类器、多播分类器和复制器等仿真组件构成。分类器的作用是对接收到的数据包的地址字段进行检查,并将其映射到相应的输出接口;复制器是一种特殊的分类器,是分类器的派生,但覆盖了分类器的分类功能,增加了把数据包复制到各个订阅了某一多播组的输出链路的功能。最基本的节点仅包含一个地址分类器和一个端口分类器,无线网节点可看作是基本节点的扩展,它们除了具有上述的分类器之外,还包含LL(数据链路层)对象、IFQ(接口队列)对象、MAC对象、PHY(物理层接口)对象以及Channel对象等仿真组件。
图3.2 NS节点和链路的内部结构
(2)跟踪与监视模型
跟踪与监视的主要功能是跟踪、显示和监视网络模拟的整个过程,采集虚拟网络的性能状态参数和输出数据,最后形成统计结果。NS模拟器主要通过在链路上增加一些跟踪对象来跟踪虚拟网络的行为。跟踪对象能够对链路上每个数据包的到达、离开或丢弃行为进行跟踪,并实时地写入跟踪文件,从而用来动态地显示模拟运行的过程或作为后续分析的数据。监视则是通过在队列中插入一些监视对象来动态地计算队列长度的变化以及到达、离开或丢弃的数据包数量,并把结果动态地记录到监视文件中,便于后续的分析和处理。
(3)可视化工具
可视化工具有动态和静态之分。动态工具Nam可利用跟踪文件动态地显示模拟运行的全过程,并可按不同的时间粒度显示不同的采集数据。静态工具XGraph可对输出的数据进行分析统计,以图形和图表显示出结果。NS的仿真过程网络仿真一般要经过建立模型、模拟实现和结果分析三个过程。NS的仿真分为两个层次:一是用户层次用户直接利用NS已有的仿真组件和模型进行网络的模拟和分析,而无需对NS本身作任何修改和扩展,即通常所言的NS仿真;二是系统层次,用户使用OTcl和C++语言对NS本身进行开发和扩展,实现新的协议和算法。转贴于 酷文网-论文下载中心 http://www.coolwen.net