1.2 NS2的仿真机制
NS是美国加州Lawrence Berkeley国家实验室于1989年开始开发的软件。NS是一种可扩展、以配置和可编程的事件驱动的仿真工具,可以提供有线网络、无线网络中链路层及其上层,精确到数据包的一系列行为的仿真。最值得一提的是,NS中的许多协议代码都和真实网络中的应用代码十分接近,其真实性和可靠性高居世界仿真软件的前列。
NS底层的仿真引擎主要由C++编写,同时利用0TCL语言作为仿真命令和配置的接口语言,网络仿真的过程由一段OTCL的脚本来描述,这段脚本通过调用引擎中各类属性、方法,定义网络的拓扑,配置源节点、目的节点,建立连接,产生所有事件的时间表,运行并跟踪仿真结果,还可以对结果进行相应的统计处理或制图。
通常情况下,NS仿真器的工作从创建仿真器类(simulator)的实例开始,仿真器调用各种方法生成节点,进而构造拓扑图,对仿真的各个对象进行配置,定义事件,然后根据定义的事件,模拟整个网络活动的过程。
仿真器封装了多个功能模块:
(1)事件调度器:由于NS是基于事件驱动的,调度器也成为NS的调度中心,可以跟踪仿真时间,调度当前事件链中的仿真时间并交由产生该事件的对象处理。
(2)节点:是一个复合组件,在NS中可以表示端节点和路由器,节点为每个连接到他的节点分配不同的端口,用于模拟实际网络中的端口。
(3)链路:有多个组件复合而成,用来连接网络节点。
(4)代理:代理类包含源及目的节点地址,数据包类型、大小、优先级等状态变量,每个代理链接到一个网络节点上,通常连接到端节点,由该节点给他分配端口号。
(5)包:由头部和数据两部分组成。
NS采取对真实网络元素进行抽象,保留其基本特征,并运用等效描述的方法来建立网络仿真模型。他们由大量的仿真组件所构成,用于实现对真实网络的抽象和模拟。
2 仿真平台设计
2.1 系统整体结构
NS2的主代码主要采用Tcl和C++两种语言进行编写。C++的程序运行时间很短,转换时间很长,适合具体协议的实现,而Tcl运行较慢但转换很快,正好用来仿真的配置。Tcl提供了一个强有力的平台,可以生成面向多种平台的应用程序、协议、驱动程序等等。他与Tk(too1kit)协作,可生产GUI应用程序。Tk是基于Tcl的图形程序开发工具箱,是Tcl的重要扩展部分。利用Tcl/Tk进行界面编程速度快,且界面编程工作可以从应用程序的其余部分分离开来,开发人员可以先集中精力实现程序的核心部分,然后逐步建立用户界面。