没有合适的资源?快使用搜索试试~ 我知道了~
首页NS2仿真软件详细介绍
NS2仿真软件详细介绍

然而,对初学者来说,NS是非常难于掌握的,一般人从学习NS到上手至少 需要半年多时间。原因是多方面的:一方面,NS内容庞杂,随软件所提供的手册更新不够快,初学者阅读起来非常困难;另一方面,使用NS还要掌握其它很多必 备的相关知识以及相关工具,这会使初学者感到无从入手;有的使用者可能还不了解网络模拟的过程或是对NS软件的机制缺乏理解,这也影响了对NS的掌握。 网络模拟器NS-2及其应用分析 对利用ns2进行网络拓扑的输入、结构定义、运行仿真、动态观察仿真过程、仿真数据处理进行了分析,同时用一个例对仿真过程进行了说明。
资源详情
资源评论
资源推荐

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 脚本。整个仿
真的过程简图如图 2 所示:
假设用户已经完成了对 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++对象的函数进行修改与配置,充分体现了仿真器的一致性和灵活性。
2、NS2 的功能模块
NS2 仿真器封装了许多功能模块,最基本的是节点、链路、代理、数据包格式等等,下面分别来介绍一下各个模块。
⑴ 事件调度器:目前 NS2 提供了四种具有不同数据结构的调度器,分别是链表、堆、日历表和实时调度器。

(2)节点(node):是由 TclObject 对象组成的复合组件,在 NS2 中可以表示端节点和路由器。
(3)链路(link):由多个组件复合而成,用来连接网络节点。所有的链路都是以队列的形式来管理分组的到达、离开
和丢弃。
(4)理(agent):负责网络层分组的产生和接收,也可以用在各个层次的协议实现中。每个 agent 连接到一个网络节点
上,由该节点给它分配一个端口号。
(5)( packet):由头部和数据两部分组成。一般情况下,packet 只有头部、没有数据部分。
3、NS2 的软件构成
NS2 包含 Tcl/Tk,OTcl,NS,Tclcl。其中 Tcl 是一个开放脚本语言,用来对 NS2 进行编程;Tk 是 Tcl 的图形界面开发工具,
可帮助用 户在图形环境下开发图形界面;OTcl 是基于 Tcl/Tk 的面向对象扩展,有自己的类层次结构;NS2 为本软件包
的核心,是面向对象的仿真器,用 C++编 写,以 OTcl 解释器作为前端;Tclcl 则提供 NSh 和 OTcl 的接口,使对象和变
量出现在两种语言中。为了直观的观察和分析仿真结果,NS2 提供了可选的 Xgraphy、可选件 Nam。
4、NS 现有的仿真元素
从网络拓扑仿真、协议仿真和通信量仿真等方面介绍 NS 的相应元素:
⑴ 网络拓扑主要包括节点、链路。NS 的节点由一系列的分类器(Classifier,如地址分类器等)组成,而链路由一系列
的连接器(Connector)组成。
⑵ 在 节 点 上 , 配 置 不 同 的 代 理 可 以 实 现 相 应 的 协 议 或 其 它 模 型 仿 真 。 如 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(通信量接收并维护一些接收数据的统计)。
⑶ 网络的路由配置通过对节点附加路由协议而实现。NS 中有三种单播路由策略:静态、会话、动态。
⑷ 在链路上,可以配置带宽、时延和丢弃模型。NS 支持:Drop-tail(FIFO)队列、RED 缓冲管、CBO(包括优先权和
Round-robin 调度)。各种公平队列包括:FQ,SFQ,DRR 等。
⑸ 通信量仿真方面,NS 提供了许多通信应用,如 FTP,它产生较大的峰值数据传输;Telnet 则根据相应文件随机选取
传输数据的大小。此外,NS 提供了四 种类型的通信量产生器:① EXPOO,根据指数分布(On/Off)产生通信量,在
On 阶段分组以固定速率发送,Off 阶段不发送分组,On/Off 的分 布符合指数分布,分组尺寸固定;② POO,根据 Pareto
分布(On/Off)产生通信量,它能用来产生长范围相关的急剧通信量;③ CBR,以确定的速 率产生通信量,分组尺寸
固定,可在分组间隔之间产生随机抖动;④ Traffic Trace,根据追踪文件产生通信量。
网络模拟器 NS-2 及其应用分析
引言
随着 Internet 的迅猛发展,网络规模和复杂性的迅速增加,网络研究人员一方面要不断思考新的网络协议和 算法,为网
络发展做前瞻性的基础研究;另一方面也要研究如何利用和整合现有的网络资源,使网络达到最高效能。无论是哪一方
面都需要对新的网络方案进行验证 和分析。分析方法的有效性和精确性受假设的限制很大。实验方法的局限在于成本很
高,实验床的规模很难做到很大,不能实现网络中的多种通信流量和拓扑的融 合。而模拟方法在很大程度上可以弥补前
两种方法的不足。NS-2 是美国 DARPA 支持的项目 VINT(the Virtual InterNet Tested)中的基础和核心部分。由 USI/ISI,
Xerox PARC, LBNL 和 UC Berkeley 这些美国大学和实验室合作研究开发,其目的在于建立一个网络仿真平台,为网络研
究人员提供一系列的仿真工具,来实现新的网络协议的设计和实现。
1 NS-2 体系结构及功能模块
1.1 NS-2 简介
NS-2 是面向对象的,基于离散事件驱动的网络环境模拟器。它实现了多种网络协议的模拟,如网络协议 TCP、UDP,
流量源行为,如 FTP、Telnet、Web、CBR、VBR;实现了 DropTail、RED、CBQ 等几种路由器队列管理机制以及
Dijkstra,动态路由、静态路由、组播路由等路由算法。此外,NS-2 还支持组播协议 SRM 及部分 MAC
层协议。
NS-2 用 C++和 Otcl 语言编写而成。它是免费的,开放源代码的,可以很方便地扩展 NS-2 的功能,将自己开发的新协议
模块集成到 NS-2 环境中。
1.2 NS-2 体系结构
NS-2 的结构如图 1 所示。

NS-2 采用了两级体系结构,为了提高代码的执行效率,NS-2 将数据操作与控制部分的实现相分离,事件调度器和基本
的网络组件使用 C++编写和编译,其主要功能是 实现对数据包的处理;NS-2 的前端是一个 Otcl 解释器,主要的功能是
对模拟环境的配置、建立。从图 1 的左下角看,用户利用 Otcl 库中的模拟对象设计和运行 TCL 仿真,事件调度器和网
络组件通过 OTcl 链接(tclcl 类)和 Otcl 相关联,这样用户可 以在 Otcl 空间能够方便地对 C++对象的函数和变量进行修
改与配置。
1.3 NS-2 的功能模块
在 NS-2 中,整个模拟过程由一个名为 Simulator 的 Tcl 类来定义和控制的,Simulator 类提供了一系列对模拟进行配置的
接口,这其中包括选择“事件调度器(event scheduler)”的接口。进行模拟通常要首先创建一个 Simulator 类的实例对象,
并调用该对象的一系列方法来创建节点(Node)、拓扑( Topology)等模拟所必需的对象。
模拟器封装了许多功能模块:节点、链路、分组、代理、流量发生器、应用模拟器等。
1) 事件调度器: NS-2 是一个事件驱动的模拟器,调度器也就成为 NS-2 的调度中心,主要功能是 处理分组(packet)的
延迟和充当定时器。从所有事件中选择发生时刻最早的事件执行,调用它的 handle 函数,把该事件执行完毕,然后从剩
余的所有 事件中选择发生时刻最早的事件执行,如此反复执行。NS-2 只支持单线程,如果有多于一个事件安排在同一
时刻,那么会按照事件代码插入的先后次序执行。
2) 节点(Node): 表示端节点和路由器,主要由地址分类器、端口分类器、多播分类器和复制器等模拟组件构成。分
类器从逻辑上匹配一个分组,并基于匹配的结果把该分组传递给相应的对象。复制器是生成一个分组的多份拷贝,并把
这些拷贝转发到各个订阅了某一多播组 G 的输出链路。
3) 链路(Link): 用来连接网络节点,所有的链路都是以队列的形式来管理分组的到达、离开和丢弃。主要由
DelayLink、Queues 和 TTLChcker 等连接器 (Connector)构成。DelayLink 构造链路带宽和延迟特征;Queues 构造和模
拟与该链路相连的路由器的输出缓冲;TTLChcker 对该链路的数据包的 TTL 字段减 1 操作,并丢弃 TTL 值为 0 的数据包。
(图 2)
图 2 链路
4) 分组(Packet):是对象间交互的基本单元。由一系列分组头和一个可选的数据空间组成。分组头的结构在 Simulator
对象创建时就被初始化了,同时每个分组头相对于分组的起始地址的偏移量也被记录下来,提供用户来存取各个头部所包
含的信息。
5)代理(Agent):代表了网络层分组的起点和终点,并被用于实现如 TCP
和 UDP 等网络协议。Agent 类支持分组的产
生和接收,C++的 Agent 包含一系列的内部状态变量来表示分组的各个域。Agent 可以实现多个层次的协议,对于一些运
输层的协议,分组的大小和发送时间通常由 Agen 提供的应用程序接口(API)来控制,对于在低层使用的 Agent(路由
Agent),分组的大小和发送时间通常由 Agent 自己控制。
6)流量发生器(traffic generator)、应用模拟器(simulated application): 是构建在运输层代理之上,流量发生器是模拟应用
程序产生网络通信量,有四类:(1)EXPOO_Traffic、(2) POO_Traffic、(3)CBR_Traffic、(4)TafficTrace,它们一般用在
UDP 代理之上,应用模拟器有 FTP,Telnet,一般用在 TCP
代理之上。
2 用 NS-2 进行网络模拟
进行模拟之前,首先要分析模拟涉及哪个层次。NS 模拟分两个层次:一个是基于 Otcl 编程的层次,利用 NS 已有的网络
元素实现模拟,无需对 NS 本身进行任何修改,只要编写 Otcl 脚本,另一个层次是基于 C++和 Otcl 编程的层次,如果 NS
中没有所需的网络对象,就需要对 NS 扩展,利用 Otcl 和 NS 的接口类实现 NS 的更新,然后再编写 Otcl 脚本。整个模
拟的过程如图 3 所示:
剩余11页未读,继续阅读


















安全验证
文档复制为VIP权益,开通VIP直接复制

评论4