NS是网路仿真器(NetworkSimulator)的简称。本质上是一个离散事件模拟器。
基本介绍
- 中文名NS
- 外文名NetworkSimulator
- 实质网路仿真器
- 释义免费的软体模拟平台
定义
NS2(Network Simulator, version 2)是一种面向对象的网路仿真器,本质上是一个离散事件模拟器。由UC Berkeley开发而成。它本身有一个虚拟时钟,所有的仿真都由离散事件驱动的。
简介
目前NS2可以用于仿真各种不同的IP网,已经实现的一些仿真有网路传输协定,比如TCP和UDP;业务源流量产生器,比如FTP, Telnet, Web CBR和VBR;路由伫列管理机制,比如Droptail , RED和CBQ;路由算法,比如Dijkstra等。NS2也为进行区域网路的仿真而实现了多播以及一些MAC 子层协定。 NS2使用C++和Otcl作为开发语言。
NS可以说是Otcl的脚本解释器,它包含仿真事件调度器、网路组件对象库以及网路构建模型库等。事件调度器计算仿真时间,并且激活事件伫列中的当前事件,执行一些相关的事件,网路组件通过传递分组来相互通信,但这并不耗费仿真时间。所有需要花费仿真时间来处理分组的网路组件都必须要使用事件调度器。它先为这个分组发出一个事件,然后等待这个事件被调度回来之后,才能做下一步的处理工作。事件调度器的另一个用处就是计时。NS是用Otcl和C++编写的。由于效率的原因,NS将数据通道和控制通道的实现相分离。为了减少分组和事件的处理时间,事件调度器和数据通道上的基本网路组件对象都使用C++写出并编译的,这些对象通过映射对Otcl解释器可见。 当仿真完成以后,NS将会产生一个或多个基于文本的跟蹤档案。只要在Tcl脚本中加入一些简单的语句,这些档案中就会包含详细的跟蹤信息。这些数据可以用于下一步的分析处理,也可以使用NAM将整个仿真过程展示出来。NS是一种针对网路技术的原始码公开的、免费的软体模拟平台,研究人员使用它可以很容易的进行网路技术的开发,而且发展到今天,它所包含的模组已经非常丰富,几乎涉及到了网路技术的所有方面。所以,NS成了目前学术界广泛使用的一种网路模拟软体。在每年国内外发表的有关网路技术的学术论文中,利用NS给出模拟结果的文章最多,通过这种方法得出的研究结果也是被学术界所普遍认可的,,NS也可作为一种辅助教学的工具,已被广泛套用在了网路技术的教学方面。,目前在学术界和教育界,有大量的人正在使用或试图使用NS。
2、使用NS进行网路仿真的方法和一般过程。
进行网路仿真前,分析仿真涉及哪个层次,NS仿真分两个层次一个是基于OTcl编程的层次。利用NS已有的网路元素实现仿真,无需修改NS本身,只需编写OTcl脚本。另一个是基于C++和OTcl编程的层次。如果NS中没有所需的网路元素,则需要对NS进行扩展,添加所需网路元素,即添加新的C++和OTcl类,编写新的OTcl脚本。
假设用户已经完成了对NS的扩展,或者NS所包含的构件已经满足了要求,那幺进行一次仿真的步骤大致如下
(1)开始编写OTcl脚本。配置模拟网路拓扑结构,此时可以确定链路的基本特性,如延迟、频宽和丢失策略等。
(2)建立协定代理,包括端设备的协定绑定和通信业务量模型的建立。
(3)配置业务量模型的参数,从而确定网路上的业务量分布。
(4)设定Trace对象。NS通过Trace档案来保存整个模拟过程。仿真完后,用户可以对Trace档案进行分析研究。
(5)编写其他的辅助过程,设定模拟结束时间,至此OTcl脚本编写完成。
(6)用NS解释执行刚才编写的OTcl脚本。
(7)对Trace档案进行分析,得出有用的数据。
(8)调整配置拓扑结构和业务量模型,重新进行上述模拟过程。
NS2採用两级体系结构,为了提高代码的执行效率,NS2 将数据操作与控制部分的实现相分离,事件调度器和大部分基本的网路组件对象后台使用C++实现和编译,称为编译层,主要功能是实现对数据包的处理;NS2的前端是一个OTcl 解释器,称为解释层,主要功能是对模拟环境的配置、建立。从用户角度看,NS2 是一个具有仿真事件驱动、网路构件对象库和网路配置模组库的OTcl脚本解释器。NS2中编译类对象通过OTcl连线建立了与之对应的解释类对象,这样用户间能够方便地对C++对象的函式进行修改与配置,充分体现了仿真器的一致性和灵活性。
3、NS2的功能模组 NS2仿真器封装了许多功能模组,最基本的是节点、链路、代理、数据包格式等等,下面分别来介绍一下各个模组。
(1)事件调度器目前NS2提供了四种具有不同数据结构的调度器,分别是鍊表、堆、日曆表和实时调度器。
(2)节点(node)是由TclObject对象组成的複合组件,在NS2中可以表示端节点和路由器。
(3)链路(link)由多个组件複合而成,用来连线网路节点。所有的链路都是以伫列的形式来管理分组的到达、离开和丢弃。
(4)代理(agent)负责网路层分组的产生和接收,也可以用在各个层次的协定实现中。每个agent连线到一个网路节点上,由该节点给它分配一个连线埠号。
(5)包(packet)由头部和数据两部分组成。一般情况下,packet只有头部、没有数据部分。
4、NS2的软体构成
NS2包含Tcl/Tk, OTcl, NS,Tclcl。其中Tcl是一个开放脚本语言,用来对NS2进行编程;Tk是Tcl的图形界面开发工具,可帮助用户在图形环境下开发图形界面;OTcl是基于Tcl/Tk的面向对象扩展,有自己的类层次结构;NS2为本软体包的核心,是面向对象的仿真器,用C++编写,以OTcl解释器作为前端;Tclcl则提供NS2和OTcl的接口,使对象和变数出现在两种语言中。为了直观的观察和分析仿真结果,NS2 提供了可选的Xgraphy、可选件Nam。
5、NS现有的仿真元素
从网路拓扑仿真、协定仿真和通信量仿真等方面介绍NS的相应元素
(1)网路拓扑主要包括节点、链路。NS的节点由一系列的分类器(Classifier,如地址分类器等)组成,而链路由一系列的连线器(Connector)组成。
(2)在节点上,配置不同的代理可以实现相应的协定或其它模型仿真。如NS的TCP代理,传送代理有TCP,TCP/Reno,TCP/Vegas,TCP/Sack1,TCP/FACK,TCP/FULLTCP等,接收代理有TCPSINK,TCPSINK/DELACK。TCPSINK/SACK1,TCPSINK/SACK1/DELACK等。,还提供有UDP代理及接收代理Null(负责通信量接收)、Loss Monitor(通信量接收并维护一些接收数据的统计)。
(3)网路的路由配置通过对节点附加路由协定而实现。NS中有三种单播路由策略静态、会话、动态。
(4)在链路上,可以配置频宽、时延和丢弃模型。NS支持Drop-tail(FIFO)伫列、RED缓冲管、CBO(包括优先权和Round-robin 调度)。各种公平伫列包括FQ,SFQ,DRR等。
(5)通信量仿真方面,NS提供了许多通信套用,如FTP,它产生较大的峰值数据传输;Telnet则根据相应档案随机选取传输数据的大小。,NS提供了四种类型的通信量产生器EXPOO,根据指数分布(On/Off)产生通信量,在On阶段分组以固定速率传送,Off阶段不传送分组,On/Off的分布符合指数分布,分组尺寸固定;POO,根据Pareto分布(On/Off)产生通信量,它能用来产生长範围相关的急剧通信量;CBR,以确定的速率产生通信量,分组尺寸固定,可在分组间隔之间产生随机抖动;Traffic Trace,根据追蹤档案产生通信量。