2 NS(Network Simulator)介绍
2.1 NS2简介
NS是Network Simulator的首写字母缩写,它是由LBNL(Lawrence Berkeley National Laboratory )的网络研究小组开发的仿真工具。NS是一种可扩展、易配置、可编程的事件驱动的网络仿真软件[6]。NS支持许多基本的协议,如Tcp协议、一些路由协议和多点发送协议等。
LBNL的网络仿真软件的开发始于1990年5月对S.Keshav的REAL网络仿真程序的修改。91年夏天,对仿真描述语言进行了修改,称为Tcpsim。1994年12月,Mccane用C++重写了Tcpsim,并用基于Tcl ( Tool Command Language ) 的仿真语言代替了基于yacc ( yet another compiler’s compiler ) 的仿真语言,同时支持多点发送。从此时开始不再称为Tcpsim,而称为NS[7]。
最初的NS版本,如版本1使用Tcl ( Tool Command Language )。现在使用的是NS-2.31版,使用麻省理工大学开发的Otcl ( Object Tool Command Language ) 语言作为命令行和配置界面。除了流管理以外,NS-2保留了所有功能的先后兼容性,因此支持NS1版中用Tcl脚本书写的程序。NS-2相对于NS-1来说发生了三个基础性的改变:1〕为了获得更大的灵活性,NS-1中较复杂的对象被分解为较简单的分量。2〕配置界面是OTcl,Tcl的面向对象版。3〕Otcl解释器的界面代码独立于主要的仿真器。
NS的新功能包括RED ( Random Early Detection ) 网关,CBQ ( Class-Based Queueing ) 以及带有SACK ( selective acknowledgements ) 的TCP的两种实现方式。
2.2 NS2的软件构成
NS2 包含Tcl/Tk,OTcl。其中Tcl是一个开放脚本语言,用来对NS2进行编程;Tk是Tcl的图形界面开发工具,可帮助用户在图形环境下开发图形界面;OTcl是基于Tcl/Tk的面向对象扩展,有自己的类层次结构;NS2为本软件包的核心,是面向对象的仿真器,用C++编写,以 OTcl解释器作为前端;Tcl/Tk则提供NS2和OTcl的接口,使对象和变量出现在两种语言中[8]。为了直观的观察和分析仿真结果,NS2 提供了可选的Xgraphy、可选件Nam。
2.3 使用NS2的流程
进行网络仿真前,首先分析仿真涉及哪个层次,NS仿真分两个层次:一个是基于OTcl编程的层次。利用NS已有的网络元素实现仿真,无需修改NS本身,只需编写OTcl脚本。另一个是基于C++和OTcl编程的层次[8]。如果NS中没有所需的网络元素,则需要对NS进行扩展,添加所需网络元素,即添加新的C++ 和OTcl类,编写新的OTcl脚本。
假设用户已经完成了对NS的扩展,或者NS所包含的构件已经满足了要求,那么进行一次仿真的步骤大致如下:
(1)开始编写OTcl脚本。首先配置模拟网络拓扑结构,此时可以确定链路的基本特性,如延迟、带宽和丢失策略等。
(2)建立协议代理,包括端设备的协议邦定和通信业务量模型的建立。
(3)配置业务量模型的参数,从而确定网络上的业务量分布。
(4)设置Trace对象。NS通过Trace文件来保存整个模拟过程。仿真完后,用户可以对Trace文件进行分析研究。
(5)编写其他的辅助过程,设定模拟结束时间,至此OTcl脚本编写完成。
(6)用NS解释执行刚才编写的OTcl脚本。
(7)对Trace文件进行分析,得出有用的数据。
(8)调整配置拓扑结构和业务量模型,重新进行上述模拟过程。
图2. 1 NS2进行网络模拟的基本流程图
NS2 采用两级体系结构,为了提高代码的执行效率,NS2 将数据操作与控制部分的实现相分离,事件调度器和大部分基本的网络组件对象后台使用C++实现和编译,称为编译层,主要功能是实现对数据包的处理;NS2 的前端是一个OTcl 解释器,称为解释层,主要功能是对模拟环境的配置、建立。从用户角度看,NS2 是一个具有仿真事件驱动、网络构件对象库和网络配置模块库的OTcl脚本解释器。NS2中编译类对象通过OTcl连接建立了与之对应的解释类对象,这样用户间能够方便地对C++对象的函数进行修改与配置,充分体现了仿真器的一致性和灵活性。 网络拥塞控制经典算法RED仿真(4):http://www.youerw.com/tongxin/lunwen_8262.html