Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1621099
  • 博文数量: 268
  • 博客积分: 8708
  • 博客等级: 中将
  • 技术积分: 3764
  • 用 户 组: 普通用户
  • 注册时间: 2007-04-06 15:58
文章分类

全部博文(268)

文章存档

2014年(1)

2013年(15)

2012年(23)

2011年(60)

2010年(51)

2009年(12)

2008年(59)

2007年(47)

分类:

2010-08-23 14:40:06

一篇简单介绍NS2的文章 转自新浪博文
NS是一种针对网络技术的源代码公开的、免费的软件模拟平台,研究人员使用它可以很容易的进行网络技术的开发,而且发展到今天,它所包含的模块已经非常丰 富,几乎涉及到了网络技术的所有方面。所以,NS成了目前学术界广泛使用的一种网络模拟软件。在每年国内外发表的有关网络技术的学术论文中,利用NS给出 模拟结果的文章最多,通过这种方法得出的研究结果也是被学术界所普遍认可的,此外,NS也可作为一种辅助教学的工具,已被广泛应用在了网络技术的教学方 面。因此,目前在学术界和教育界,有大量的人正在使用或试图使用NS。

然而,对初学者来说,NS是非常难于掌握的,一般人从学习NS到上手至少需要半年多时间。原因是多方面的:一方面,NS内容庞杂,随软件所提供的手册更新 不够快,初学者阅读起来非常困难;另一方面,使用NS还要掌握其它很多必备的相关知识以及相关工具,这会使初学者感到无从入手;有的使用者可能还不了解网 络模拟的过程或是对NS软件的机制缺乏理解,这也影响了对NS的掌握。另外,不论在国外还是国内,还没有一本书能集中回答和解决这些问题,这也是NS难于 被掌握的一个重要原因。


1、NS2简介

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将整个仿真过程展示出来。


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,根据追踪文件产生通信量。



离散事件

我们周围的世界似乎是连续的:我们观察到的绝大部分过程由连续的变化构成。然而,当我们分析那些过程时,很多情况下我们需要从连续特性中抽象出一些事件来,只对系统生命中的一些重要“瞬间”和“事件”加以考虑。用这些事件来接近真实世界过程的建模方式就叫做离散事件建模。

下面是一些例子:一个顾客到了一家商店;一辆卡车完成了卸载;一台运输机停止工作;新产品的推出;库存达到了一定程度等。在离散事件建模中,如一辆 火车从A地到达B地的运动可以建模成出发和到达这两个事件,实际的运动就是这两者间的时间间隔。(但这并不是说你不能将火车动态化,事实上你可以用 AnyLogic为逻辑上的离散模型制造出视觉上连续的动画)。

Process workflow definition in AnyLogic Enterprise Library离 散事件这个术语主要采用它的狭义定义,用来表示以过程为中心的建模,以过程为中心的建模建议将系统作为一系列连续的操作过程来分析:(到达、延迟、使用资 源、分裂、结合等),将操作程序看作是在某些类型的实体(顾客、文件、零件、数据包、车辆、电话)上运行。实体是消极的,但它们的某些特性却可以影响处理 方式(例如,通话类型、任务的复杂度),或随着实体在过程(累计等待时间或费用)中的流动而改变。以过程为中心的建模的复杂度为中等偏下:虽然每个对象作 为实体单独进行建模,但建模者通常丢掉了很多“物理层”的细节,如精确的几何、加速、减速。以过程为中心的建模广泛运用于商业流程、制造、物流和保健领 域。

在决定使用这种方法前,我们建议先(从项目目标的角度)验证系统确实被描述为(可能是分层的)一系列的操作秩序。同时我们还要清楚其他方法,例如,如果描述单个实体的行为比试图建立一个完整的工作流程更简单,建模是最好的选择。同样的,如果你对总体交互而非个体交互感兴趣,就应采用建模。AnyLogic支持全部的三种建模方法,因此,只需一种工具,你就可以在理论层进行试验或者是对具体的方法进行试验。

AnyLogic企业库

以过程为中心建模使用的AnyLogic主要工具是企业库。企业库集合了所有定义工作流程的对象如原始码、接受器、延时、服务、输出选择等以及相关 的资源。所有对象都可以自定义:它们的参数可以进行动态改变,行动可能取决于实体的属性等。对象有输入/输出扩展点,你就能定义需要在实体上执行的行动。 泛型类的实体(实际上属于Java类)反过来也能通过添加自定义字段和方法而得到扩展。基于企业库的模型组成部分能自然地和、模型组成部分或AnyLogic的要素(如事件,状态图)相互操作。

如果你所建模的系统很复杂,可以将其分解为几个部分,然后在不同的活动对象里进行分别建模。你可以定义子进程的起始和结束点,将它们作为模型组件的 界面进行展示,或者隐藏子进程的执行过程。在最高级模型中,你将对那些高层组件进行实例化,并将它们联系在一起。由于每个活动对象都可以进行多次实例化和 参数化,这为模型内和跨模型组件的重复使用提供了一个很好的基础。

企业库和AnyLogic的显示/动画框架能密切配合,能使您开发非常复杂的过程动画。动画可以分为不同的层级,提供多种视角,如关于高层可能只显示关键的总指标,但你可以转换到一些子过程,那里有详细的子过程动画。

基于网络的建模

Process workflow defnition in AnyLogic Network Based Modeling企 业库还包含一系列特别为“空间感知”所设计的对象,这些对象在某类物理空间中发生并涉及实体和资源的运动。对象集很大程度上简化了建模,被称为网络建模。 使用这项技术,你需要定义网络布局(通过绘制作为背景的设施地图的AnyLogic形状)、资源地和流程本身。流程定义可能由特定网络对象(“移向定点” 或“附加资源单位”)和常规企业库对象结合而成。实体和资源会自动活动,沿着网络成分移动或待在节点,并能和常规动画交错。

阅读(1037) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~