ns简介&仿真

上传人:第*** 文档编号:38814729 上传时间:2018-05-08 格式:DOC 页数:10 大小:54KB
返回 下载 相关 举报
ns简介&仿真_第1页
第1页 / 共10页
ns简介&仿真_第2页
第2页 / 共10页
ns简介&仿真_第3页
第3页 / 共10页
ns简介&仿真_第4页
第4页 / 共10页
ns简介&仿真_第5页
第5页 / 共10页
点击查看更多>>
资源描述

《ns简介&仿真》由会员分享,可在线阅读,更多相关《ns简介&仿真(10页珍藏版)》请在金锄头文库上搜索。

1、NS 简介&仿真 2007-04-23 15:15 一。一。NSNS 简介简介NS 是一个由 UC Berkeley 开发的用于仿真各种 IP 网络的为主的优秀的仿真软件。 该软件的开发最初是针对基于 UNIX 系统下的网络设计和仿真而进行的。Tcl(Tool Command Language)与 Tk 是安装在 UNIX/Linux 环境下的两个包, 他们一起构成了一套开发系统应用程序和图形用户界面接口(GUI)应用程序的 环境。Tk 是 Tcl 在 X Window 环境下的扩展,它包含了 Tcl 的全部 c 库函数,以 及支持 X Window 的窗口,控件等 c 库函数,为用户开发图形

2、用户界面提供了方 便。NS 的设计实现了使用两种程序设计语言,C+和 Otcl。这两种程序设计语言都 是面向对象的。C+程序模块的运行速度非常快,是强制类型的程序设计语言, 容易实现精确的,复杂的算法,但是修改和发现,修正 bug 所花费的时间较长, 因为它比较复杂。Otcl 是脚本程序编写语言,是无强制类型的,比较简单,容 易实现和修改,容易发现的修正 bug,虽然它的运行速度和 C+的模块相比要慢 很多。NS 的仿真原理-网络组件。NSobject 是所有基本网络组件的父类它本身的父类 是 TclObject 类。这个类的对象有一个基本功能,就是处理数据包(PACKET)。 所有的基本网络

3、组件可以划分为两类,分类器(Classifier)和连接器 (Connector)。它们都是 NSobject、的直接子类,也是所有基本网络组件的父类。 分类器的派生类组件对象包括地址分类器和多播分类器等。连接器的派生类组 件对象包括队列,延迟,各种代理,和追踪对象类。应用程序是建立在传输代 理上的应用程序的模拟。NS2 中有两种类型的“应用程序”,数据源发生器和模 拟的应用程序。NS 是离散事件驱动的网络仿真器。它使用 Event Scheduler 对 所有组件希望完成的工作和计划该工作发生的时间进行列表和维护。NS 的工作平台可以是 Windows,Linux,Uinx,machitos

4、h,还要求系统装有 C+编译 器。NS 的工作流程:NS 代码使用 OTCL 语言编写,通过 OTCL 语言解释器解释, 使用 NS 仿真库进行编译和仿真,输出仿真结果,根据仿真结果记录,可进一步 进行相关内容分析,生成网络拓补图或者得到数据的可视化的图表。使用辅助 的 NAM 工具,在 NS 中可以清晰显示网络拓补图,使用 X Graph 工具,可以将 NS 的仿真结果用图表形式表示,NS 设计的出发点是基于网络仿真,它集成了多种网络协议,业务类型,路由排 队管理机制,路由算法。此外,NS 还集成了组播业务和应用于局域网仿真有关 的部分、MAC 层协议。其仿真主要针对路由层,传输层,数据链路

5、层展开,因此 NS 可以进行对固定,无线,卫星以及混合等多种网络的仿真。但它最适用于 TCP 层以上的模拟。NS 的特点是源代码公开;可扩展性强;速度和效率优势明 显。二二 简介简介 2 2NS2(Network Simulator, version 2)是一种面向对象的网络仿真器,本质上 是一个离散事件模拟器。由 UC Berkeley 开发而成。它本身有一个虚拟时钟, 所有的仿真都由离散事件驱动的。目前 NS2 可以用于仿真各种不同的 IP 网,已 经实现的一些仿真有:网络传输协议,比如 TCP 和 UDP;业务源流量产生器,比 如 FTP, Telnet, Web CBR 和 VBR;路

6、由队列管理机制,比如 Droptail , RED 和 CBQ;路由算法,比如 Dijkstra 等。NS2 也为进行局域网的仿真而实现了多 播以及一些 MAC 子层协议。NS2 使用 C+和 Otcl 作为开发语言。NS 可以说是 Otcl 的脚本解释器,它包含仿 真事件调度器、网络组件对象库以及网络构建模型库等。事件调度器计算仿真 时间,并且激活事件队列中的当前事件,执行一些相关的事件,网络组件通过 传递分组来相互通信,但这并不耗费仿真时间。所有需要花费仿真时间来处理 分组的网络组件都必须要使用事件调度器。它先为这个分组发出一个事件,然 后等待这个事件被调度回来之后,才能做下一步的处理工作

7、。事件调度器的另 一个用处就是计时。NS 是用 Otcl 和 C+编写的。由于效率的原因,NS 将数据通 道和控制通道的实现相分离。为了减少分组和事件的处理时间,事件调度器和 数据通道上的基本网络组件对象都使用 C+写出并编译的,这些对象通过映射对 Otcl 解释器可见。当仿真完成以后,NS 将会产生一个或多个基于文本的跟踪文件。只要在 Tcl 脚 本中加入一些简单的语句,这些文件中就会包含详细的跟踪信息。这些数据可 以用于下一步的分析处理,也可以使用 NAM 将整个仿真过程展示出来。2 2、使用、使用 NSNS 进行网络仿真的方法和一般过程。进行网络仿真的方法和一般过程。进行网络仿真前,首先

8、分析仿真涉及哪个层次,NS 仿真分两个层次:一个是基 于 OTcl 编程的层次。利用 NS 已有的网络元素实现仿真,无需修改 NS 本身,只 需编写 OTcl 脚本。另一个是基于 C+和 OTcl 编程的层次。如果 NS 中没有所需 的网络元素,则需要对 NS 进行扩展,添加所需网络元素,即添加新的 C+和 OTcl 类,编写新的 OTcl 脚本。假设用户已经完成了对 NS 的扩展,或者 NS 所包含的构件已经满足了要求,那 么进行一次仿真的步骤大致如下:(1)开始编写 OTcl 脚本。首先配置模拟网络拓扑结构,此时可以确定链路的 基本特性,如延迟、带宽和丢失策略等。(2)建立协议代理,包括端

9、设备的协议绑定和通信业务量模型的建立。(3)配置业务量模型的参数,从而确定网络上的业务量分布。(4)设置 Trace 对象。NS 通过 Trace 文件来保存整个模拟过程。仿真完后,用户可以对 Trace 文件进行分析研究。(5)编写其他的辅助过程,设定模拟结束时间,至此 OTcl 脚本编写完成。(6)用 NS 解释执行刚才编写的 OTcl 脚本。(7)对 Trace 文件进行分析,得出有用的数据。(8)调整配置拓扑结构和业务量模型,重新进行上述模拟过程。NS2 采用两级体系结构,为了提高代码的执行效率,NS2 将数据操作与控制部分 的实现相分离,事件调度器和大部分基本的网络组件对象后台使用

10、C+实现和编 译,称为编译层,主要功能是实现对数据包的处理;NS2 的前端是一个 OTcl 解 释器,称为解释层,主要功能是对模拟环境的配置、建立。从用户角度看,NS2 是一个具有仿真事件驱动、网络构件对象库和网络配置模块库的 OTcl 脚本解释 器。NS2 中编译类对象通过 OTcl 连接建立了与之对应的解释类对象,这样用户 间能够方便地对 C+对象的函数进行修改与配置,充分体现了仿真器的一致性和 灵活性。三。NS 仿真这一章主要讲述 NS 的仿真功能。仿真是指把模拟器连到真实的网 络上。模拟器中有专门的对象,它们有能力把真实的网络数据包引入到模拟器 中并能够把处理过的数据包发回到真实的网络

11、中。关于仿真器的注意点: 尽管用户不希望下面的接口描述经常地改变,但是 NS 的仿真功能正在 不断的开发,也在不断地进行实验和改进,因此接口肯定会发生变化。 NS 的仿真功能是在 FreeBSD 2.2.5 上开发的,我们并没有在其它系统 上进行测试。 由于当前仿真功能的有限的可移植性,因此仿真功能被编译到 nse 中 (使用“make nse”编译选项),而不是标准的 ns 中。39.1 概述仿真功能能分成两种模式:1不透明模式 模拟器认为网络数据包是不透明的整体。2 协议模式 模拟器能够解释和生成网络数据包。在不透明模式中,模拟器认为网络数据包是不可理解的。特别是,真实网络中数据包的协议字

12、段不能被模拟器直接的操作。在不透明模式中,真实 网络数据包可能被模拟器丢弃、延迟、重新排序或者复制。但是因为没有执行 协议处理过程,所以一些协议相关的,操作网络数据包的操作可能不会执行。 在协议模式中,模拟器能够识别并且/或者能够生成网络数据包,这些数据包能 够包含任意相关的字段。直到现在(1998.3),NS 只实现了不透明模式的仿真功能。NS 中一些对象的集合包括 tap agents 和 network objects 对象集提 供能了模拟器和真实网络环境之间的接口。Tap agents 把真实的网络数据包插 入到模拟器的模拟数据包中,或者把真实的网络数据包从模拟器的模拟数据包 中提取出

13、来。Network objects 被安装在 tap agents 中,它们提供发送和接收 真实网络数据的入口。Tap agents 和 Network objects 都在下面的章节进行讲 述。当 NS 工作在仿真模式时,使用了一个特别版本的系统调度器:实时 调度器(RealTime scheduler)。这个调度器使用了和标准的基于 calendar- queue 的调度器相同的底层结构,但是它能够实时的执行事件。实时调度器如下 所述:39.2 实时调度器实时调度器实现了一个调度器事件在真实时间上运行的软件调度器。 假使 CPU 的速度足够快,能与到来的包同步,那么模拟器的虚拟时间就会与真

14、 实时间和很接近。如果模拟器太慢而落后于真实时间,模拟器的虚拟时间就会 与真实时间有一个偏差。当这个偏差大于某个预先设定的常量“溢出系数 (slop factor,当前是 10ms)”时,模拟器就会不断地产生警告。调度器分发事件的主循环在文件 scheduler.cc 中的 RealTimeScheduler:run() 函数里。它本质上遵循下面的算法:_只要模拟器没有停止就执行下面的操作:-获得当前的真实时间(“now”)。-分发所有时间戳在当前时间之前的未处理的模拟器事件。-如果有下一个(将来的)事件到来,就取得该事件。-延迟直到下一个模拟器事件准备好或有一个 Tcl 事件发生。-如果有一

15、个 Tcl 事件发生,重新把下一个事件插入模拟器事件队列并且回到主循环开始处继续执行。-否则,就分发模拟器事件,回到主循环开始处继续执行。-如果没有将来事件,就检查 Tcl 事件并且回到主循环开始处继续 执行。实时调度器一定要与仿真功能一起使用。否则就会导致模拟器的虚拟时间快于 真实时间。在这种情况下,网络数据包通过模拟网络时,就不会被延迟适当的 时间。使用实时调度器需要在仿真脚本的开始处做如下说明:set ns new Simulator$ns use-scheduler RealTime39.3 Tap AgentsTapAgent 类是一个从基类 Agent 派生的简单类。这样,它就能生

16、成模拟器的数 据包,同时在 NS 的数据包公共头中包含任意指定的值。Tap agent 处理数据包 公共头中包大小字段和包类型字段。它把插入到模拟器中的包的类型字段指定 为 PT_LIVE。每个 Tab agent 只能具有一个相关的网络对象,然而一个模拟器 的节点中却可以具有多个 Tab agent 对象。Tap agent 对象能够从一个相关的网络对象接收数据包,也能够把数据包发到一 个相关的网络对象。假设$netobj 代表一个网络对象,一个 tap agent 需要使 用类的 network 方法进行配置:set a0 new Agent/Tap$a0 network $netobj$a0 set fid_ 26$a0 set prio_ 2$ns connect $a0 $a1要注意流 ID 和优先级的配置是由基类 Agent 处理的。在数据包公共头中设置流 ID 的目的是在真实数据的特定流中标识出属于它的数据包。针对这些数据包能 够进行特别的处理,例

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 办公文档 > 其它办公文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号