无线传感器网络仿真平台NS2
计算机应用技术 张道远
内容
NS2介绍
OTcl语言简介
NS2的实现机制和体系结构
利用NS2模拟流程和注意事项
NS2—协议仿真
NS2介绍
NS2是面向对象的,离散事件驱动的网络环境模拟器,开发于
UC Berkeley,它可以模拟各种IP网络环境。
NS2实现了对许多网络协议的模拟,如TCP,UDP,和数据源
发生器(traffic source)如FTP,WWW,Telnet,Web,CBR和
VBR等。
NS2模拟了路由队列的管理机制,如Drop Tail,RED和VBR,
实现了Dijkstra和其他的路由算法。
NS2也实现了Multicasting和一些应用于局域网模拟的在MAC层
的协议。
NS2采用分裂对象模型的开发机制,由C++和Otcl(加上面向对
象特性的TCL脚本程序设计语言,开发于MIT)两种程序设计语
言实现。
OTcl语言简介
Tk是Tcl在X Window环境下的扩展,它包含了Tcl的全部的C库函
数,以及支持X Window的窗口、控件等C库函数,为用户开发
图形用户界面提供了方便。
Tcl是解释执行的脚本语言。它的实现依赖于Tcl内部的C函数库。
添加新的C函数就可以扩充Tcl的命令和功能,是扩展性非常强的
脚本程序设计语言。
Tcl解释器把用户输入的命令和程序语句进行初步分析,然后调
用C函数库里的相应函数来执行,输出结果。
Tcl是无强制类型的脚本语言,一切变量,不论整型,浮点型等,
都以字符串的形式存储。
Otcl是Tcl的面向对象(Object Oriented)的扩展,在
Otcl中加入了类的概念。
对象是类的实例,它有自己的属性(成员变量,InstVar)
和自己的内部操作(成员函数,InstProc)。
对象具有继承、封装、多态性和动态绑定等性质。
面向对象机制的加入使得原始的Tcl变得更加强大,更加
方便使用。
实际上,Tcl和OTcl的关系就像C和C++ 。因此,所有的
Tcl命令都可以在OTcl中使用。
C++程序模块的运行速度非常快,是强制类型的程序设
计语言(变量严格定义整型,浮点型和字符、字符串类
型),容易实现精确的、复杂的算法,但是修改和发现、
修正bug所花费的时间要长一些。适合对具体协议的模拟
和实现,因为它需要很有效率的处理字节(Byte),报
头(Packet Header)等信息,需要应用合适的算法在大
量的数据集合上进行操作。
Otcl是脚本程序编写语言,是无强制类型的,比较简单,
容易实现和修改,容易发现和修正bug,虽然它的运行速
度和C++的模块相比要慢很多。许多网络中的研究工作
都围绕着网络组件和环境的具体参数的设置和改变而进
行的,需要在短时间内快速的开发和模拟出所需要的网
络环境(scenarios),并且方便修改和发现、修复程序
中的Bug。这种环境的配置只需要一次。
NS2的实现机制和体系结构
N
S
仿
真
试
图
NS是一种面向对象Tcl(OTcl)语言脚本解释器,它有一个事件调度器、一个网络组件
库。换句话说,使用NS时需要使用OTcl语言编写脚本文件。
事件调度器:事件在NS中是一个具有唯一ID号的数据包、数据包被处理的时间及处
理它的主对象的总称。事件调度器跟踪仿真的时间并且根据预定时间安排队列中的
事件,激活当前时间对应的处理该事件的网络对象。事件调度器维护一个排序的数
据结构(缺省情况下ns使用链表),对事件有序地执行、释放,并激活事件处理对
象。
NS由C++和OTcl写成:其中C++语言实现各种网络组件,这是为了提高效
率;OTcl语言编写脚本文件来建立网络和运行仿真,这样是为了简单而快速
地进行网络环境的建立。
编译过的C++对象只要通过链接,创建一个与之匹配的OTcl对象就可在OTcl
解释器中使用。
OTcl与C++的类对应示意图
NS2的总体系结构