网络仿真器NS-2及其一个应用实例
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Network Simulator NS- 2 and Its Application
WU Shi- hao, LIN Qing- hua, XU Bu- gong
( South China University of Technology, Guangzhou Guangdong 510640 , China)
1 引言
随着 Internet 的迅速 发展, 网 络规 模和 应 用正 在急 剧 膨 胀, 网络技术问题也 越来 越广泛 和复 杂, 网络 技术的 研究 已 经成为目 前 网络 研 究的 热点 领 域。然而, 由于 网络 的 复 杂 性, 目前网络技术的 研究 很大程 度上 仅限 于理论 研究, 在 实 际上的应用比较困难。随着计算机技术的 发展, 仿真工具 在 分析和研究复杂网 络中发 挥了 很大的 作用。 所以寻 求性 能 优越的仿真工具对于网络技术的研究有着非常重要的作用。
仿真器封装了许多功能 模块, 最基 本的是节点、链路、代 理、数据包格式等等。下面分别是这些模块的解释。
1) 事件调度器: 由于 NS- 2 是基于 事件驱 动的, 调度 器 也就成为 NS- 2 的调 度中 心, 它 可以 跟踪 仿真时 间, 调度 当 前事件链中的仿真 事件并 交由 产生该 事件 的对 象处理。 目
拟器。它实 现了多种网络协议的模拟, 如传输层 的 TCP、UDP 协议, 应 用层 的 FTP、Telnet、Web 协 议; 实 现了 DropTail、RED 等几种路由器队列 管理 机制 以及 Dijkstra、动态路 由、静态 路 由、组播 路 由 等 路 由 算 法。此 外, NS - 2 还 支 持 组 播 协 议
图 1 NS- 2 总体体系结构
将数据操作与控制部分
的实现相分离, 事件调度器和大部分 基本的网 络组件对象 在
后台 使用 C+ + 实现和 编译, 称 为编 译 层, 主要 功能 是实 现
对数据包的处理; NS- 2 的前 端是 一个 Otcl 解释 器, 称为 解
释层, 主要 功能是对模拟环境的 配置、建 立。从用户角度看,
NS- 2 可以运行的平台有 Unix、Window。但在 Unix 运行比
较稳定和容易纠错。故一般 NS- 2 仿真都运行在 Unix 平台下。
2. 2 NS- 2 的层 次 结
构
NS- 2 的总体 结构
如图 1 所示。
NS- 2 采用了 两级
体系 结构, 为了 提高 代 码的 执 行 效 率, NS - 2
第 21 卷 第 7 期 文章编号: 1Hale Waihona Puke Baidu06- 9348( 2004) 07- 0096- 03
计 算机仿真
2004 年 7 月
网络仿真器 NS- 2 及其一个应用实例
吴仕浩, 林庆华, 胥布工
( 华南理工大学自动化科学与工程学院, 广东 广州 510640) 摘要: 由于网络本身的复杂性, 要分析网络性能显得比较困难。然而随着计算机技术的发展, 仿真已经成为一种 分析复杂系 统的有效的工具。该文介绍了目前应用较为广泛的网络仿真器 NS- 2。首先详细介绍了网络仿真 器 NS - 2 的 结构、功能及 使用方法, 其次介绍 NS- 2 的扩展方法; 最后给出一应用实例具体解释 NS- 2 的使用, 并给出仿真结果。 关键词: 网络仿真器; 扩展; 应用 中图分类号: TP393 文献标识码: A
5) 包( Packet) : 由头部和数据两部分组成。头部包括 cmn header、ip header、tcp header、rtp header 及 trace headerd 等, 其 中 最常用的是通用 头结 构 cmn header, 该头 结构 中包含 一个 唯 一的标识符, 包 类型、包的 大小 以及时 间戳 等。头结 构的 格 式是在仿真器创建时被初始化的, 各 头部的偏移 量也被记 录 下来。在 agent 产生了一个包之后, 所有的头 部都同时 生成, 用户能够根据偏移 量来存 取各 头部所 包含 的信 息。一般 情 况下, Packet 只有头部、没有数据部分。 2. 4 NS- 2 仿真程序的实现
public : MyAgentClass: Tclclass( Agent/ MyAgentOtcl ) { } TclObject* create( int, const char * const* ) { Return ( new MyAgent( ) ) ;
} } class_my_agent; MyAgentClass 在它的构 造函数中创建了一个 名为 Agent/ MyAgentOtcl 的 Otcl 对象, 与 MyAgent 类具有对应关系。当 NS - 2 启动时, 为静态变量 class_my_agent 执行 MyAgentClass 类的
3) 链路( Link) : 由 多个组 件复 合而成, 用来 连接 网络 节 点。所有的链路都是以队列的形式来管理 分组的到 达、离 开 和丢弃。在链路中增加了 Trace/ EnqT 、Trace/ DeqT、Trace/ DrpT 以及 Tracer/ RecvT 等对象可以跟踪每个数据包到达、进入、离 开队列以及被丢弃的时间; 还可以用队列监视 器( Queue Mon itor) 来监测队列长度和平均队长的变化情况。
前 NS- 2 提供了四种具有不同数据结构 的调度器, 分别是 链 表、堆、日历表和实时调度器。
2) 节点( Node) : 是由 TclObject 对 象组 成的复 合组 件, 在 NS- 2 中可以表 示端 节点 和路 由器。 每个 节点 具有 唯一 的 地址( id 标识) , 节 点有单 播节 点和组 播节 点两种 不同 类型, 通过节点内部的 nodetype_变 量来 区分, NS- 2 中默认 的是 单 播节点; 节点为每 一个连 接到 它的业 务源 分配不 同的 端口, 用于模拟实际网 络中 的端 口; 另 外, 节点 有一 个路由 表以 及 路由算法, 由地址分类器根据目的地址转发数 据包。
收稿日期: 2003- 07- 16
96
SRM 及部分 MAC 层的协议。
NS- 2 用 C+ + 和 Otcl 语言编 写而成。它的一个突出 的
优点就是它的 源代码 全部 公开, 提供 开放 的用户 接口, 并 且
容易扩展、配置, 用户可 以很 方便 地将自 己开 发的新 协议 模
块集成到 NS- 2 环境中。
NS- 2 是 一个具有仿真事件驱 动、网 络构件 对象库 和网络 配
置模块库的 Otcl 脚本解释器。NS- 2 中编译 类对象通过 Otcl
连接建立了与之对应的解释类对象, 这样用户 可以在 Otcl 空
间能够方便地对 C+ + 对象的 函数和 变量进 行修改与 配置, 充分体现了仿真器的一致和灵活性。 2. 3 NS- 2 的功能模块
通常情况下, 模 拟器模 拟工 作的开 始, 就是 通过 创建 一 个 Simulator 类的实例后开始的。simulator 类可以 看成是对 整 个仿真器的封装, 含成员类 node、link、agent、package、LAN 等。
我们从创建一个仿真器的实例对象开 始, 通 过这个仿 真 器调用各种方法 生成 节点, 进而 构造 拓扑 图, 对仿真 的各 个 对象进行配置, 定义事件, 然后根据定义的 事件, 模拟整个 网 络活动的过程。在创建模拟器对象时, 在构造函 数中同时 也 创建一个该模拟器的事件调度器( Event Scheduler) 。
用户使用 NS- 2 实现仿真的过程如下:
1) 建立仿真程序: 用户用 Otcl 源 程序来初始 化一个事 件 调度器, 定义网络拓扑结构, 配置业务源, 确定 发送和接受 传 输数据包的时间, 然后启动 NS- 2 仿真器。
2) 运行仿真程序。 3) 仿真结果分析: 程序运行 结束后, 用户根据记录 模拟数 据的文档, 利用 NS- 2 中的可视化仿真软件 NAM 动态 查看仿 真的运 行过 程、观察 跟 踪数 据, 或 使用 Linux 中的 Xgraph 或 Windows 下的 Origin 等软件将结果转换成带有坐标的平面图。
ABSTRACT: With the development of the computer technology, simulation plays an important role in analyzing and design ing complex systems, such as network. The widely used network simulator NS- 2 is introduced in this paper. We describe the NS- 2 structure, function and methods in detail, and how to extend the NS- 2. Finally, an example to explain how to use NS- 2 is given. KEYWORDS: Network simulator ; Extend; Application
3 NS- 2 的功能扩展
NS- 2 的最大的优点是其 源代码 全部公 开, 是 一个开 放 的仿真平台, 用户可以根据自己的需 求编写相 应的模块加 入 到 NS- 2 的模块中去, 从而实现 NS- 2 的功能扩展。 3. 1 模块编写
用户应该根据目标模块的功能, 详细分析 编译层的类 层 次结构, 然后确定类 的继承 关系。例 如用 户通过 Agent 类 创 建了一个新类 MyAgent, 代码如下: class MyAgent : public Agent { public :
MyAgent( ) ; Protected :
Int command( int arg c, const char* const* argv) ; Private :
Int my_var1 ; Double my_var2 ; Void MyPrivFunc( void) ; }; 由于用户的开发是在编译层, 为 在解释层 灵活地引用 新 的类对象, 集成新的对象就需要 在 NS- 2 中建 立与 C+ + 代 码的 Otcl 连接, 也就是在编 译层与 解释层 之间通 过建立 Otcl 连接实现对象 的映射, 这 样, 用户 就能够 在仿 真脚本 中方 便 地使用该对象了。 3. 2 Otcl 连接 1) 实现类的映射 在 Otcl 中创建 MyAgent 类的实例需要在编 译层定义一个 连接对象, 称之为 MyAgentClass , 这个对象是从 TclClass 继承 而来的, 其代码如下: static class MyAgent : public TclClass {
4) 代理( Agent) : 负载网络层分组 的产生 和接收, 也可 以 用在各个层次的协议实现中。Agent 类包含 源及目 的节点 地 址、分组 类型、大小、优先 级等状 态变量, 并利 用这些 状态 变 量来给所产生的分组的各个字段赋值。每个 Agent 连接到 一 个网络节点上( 一般是端节点) , 由该 节点给它分 配一个端 口 号。Agent 是实现 UDP 协议及各种版本 TCP 协议的基类。
本文要介绍的是目前应用较 为广泛的 网络仿 真软件 NS - 2( Network Simulator) , 它是由 UC Berkely 大学开 发的一个 基 于事件驱动的仿真器。它能近乎真实地模 拟网络环 境, 让 我 们可以在各个层次上模拟网络的运行。
2 NS- 2 结构和功能
2. 1 NS- 2 简介 NS- 2 是 面向对象的, 基 于离散 事件驱 动的网 络环境 模
97
构造函数, 从而生成了 MyAgentClass 类的实例, 在这个构造 函 数中, 创建了 Otcl 环 境的 Agent/ MyAgentOtcl 类及 其方法。 如 果用户在 Otcl 脚本中使用 new Agent/MyAgentOtcl 命令, 系 统 就会调用 MyAgentClass 的 create 方法, 产生一个 MyAgent 类 对 象, 这样就在 C+ + 对象和 Otcl 对象之间建立了映射关系。
WU Shi- hao, LIN Qing- hua, XU Bu- gong
( South China University of Technology, Guangzhou Guangdong 510640 , China)
1 引言
随着 Internet 的迅速 发展, 网 络规 模和 应 用正 在急 剧 膨 胀, 网络技术问题也 越来 越广泛 和复 杂, 网络 技术的 研究 已 经成为目 前 网络 研 究的 热点 领 域。然而, 由于 网络 的 复 杂 性, 目前网络技术的 研究 很大程 度上 仅限 于理论 研究, 在 实 际上的应用比较困难。随着计算机技术的 发展, 仿真工具 在 分析和研究复杂网 络中发 挥了 很大的 作用。 所以寻 求性 能 优越的仿真工具对于网络技术的研究有着非常重要的作用。
仿真器封装了许多功能 模块, 最基 本的是节点、链路、代 理、数据包格式等等。下面分别是这些模块的解释。
1) 事件调度器: 由于 NS- 2 是基于 事件驱 动的, 调度 器 也就成为 NS- 2 的调 度中 心, 它 可以 跟踪 仿真时 间, 调度 当 前事件链中的仿真 事件并 交由 产生该 事件 的对 象处理。 目
拟器。它实 现了多种网络协议的模拟, 如传输层 的 TCP、UDP 协议, 应 用层 的 FTP、Telnet、Web 协 议; 实 现了 DropTail、RED 等几种路由器队列 管理 机制 以及 Dijkstra、动态路 由、静态 路 由、组播 路 由 等 路 由 算 法。此 外, NS - 2 还 支 持 组 播 协 议
图 1 NS- 2 总体体系结构
将数据操作与控制部分
的实现相分离, 事件调度器和大部分 基本的网 络组件对象 在
后台 使用 C+ + 实现和 编译, 称 为编 译 层, 主要 功能 是实 现
对数据包的处理; NS- 2 的前 端是 一个 Otcl 解释 器, 称为 解
释层, 主要 功能是对模拟环境的 配置、建 立。从用户角度看,
NS- 2 可以运行的平台有 Unix、Window。但在 Unix 运行比
较稳定和容易纠错。故一般 NS- 2 仿真都运行在 Unix 平台下。
2. 2 NS- 2 的层 次 结
构
NS- 2 的总体 结构
如图 1 所示。
NS- 2 采用了 两级
体系 结构, 为了 提高 代 码的 执 行 效 率, NS - 2
第 21 卷 第 7 期 文章编号: 1Hale Waihona Puke Baidu06- 9348( 2004) 07- 0096- 03
计 算机仿真
2004 年 7 月
网络仿真器 NS- 2 及其一个应用实例
吴仕浩, 林庆华, 胥布工
( 华南理工大学自动化科学与工程学院, 广东 广州 510640) 摘要: 由于网络本身的复杂性, 要分析网络性能显得比较困难。然而随着计算机技术的发展, 仿真已经成为一种 分析复杂系 统的有效的工具。该文介绍了目前应用较为广泛的网络仿真器 NS- 2。首先详细介绍了网络仿真 器 NS - 2 的 结构、功能及 使用方法, 其次介绍 NS- 2 的扩展方法; 最后给出一应用实例具体解释 NS- 2 的使用, 并给出仿真结果。 关键词: 网络仿真器; 扩展; 应用 中图分类号: TP393 文献标识码: A
5) 包( Packet) : 由头部和数据两部分组成。头部包括 cmn header、ip header、tcp header、rtp header 及 trace headerd 等, 其 中 最常用的是通用 头结 构 cmn header, 该头 结构 中包含 一个 唯 一的标识符, 包 类型、包的 大小 以及时 间戳 等。头结 构的 格 式是在仿真器创建时被初始化的, 各 头部的偏移 量也被记 录 下来。在 agent 产生了一个包之后, 所有的头 部都同时 生成, 用户能够根据偏移 量来存 取各 头部所 包含 的信 息。一般 情 况下, Packet 只有头部、没有数据部分。 2. 4 NS- 2 仿真程序的实现
public : MyAgentClass: Tclclass( Agent/ MyAgentOtcl ) { } TclObject* create( int, const char * const* ) { Return ( new MyAgent( ) ) ;
} } class_my_agent; MyAgentClass 在它的构 造函数中创建了一个 名为 Agent/ MyAgentOtcl 的 Otcl 对象, 与 MyAgent 类具有对应关系。当 NS - 2 启动时, 为静态变量 class_my_agent 执行 MyAgentClass 类的
3) 链路( Link) : 由 多个组 件复 合而成, 用来 连接 网络 节 点。所有的链路都是以队列的形式来管理 分组的到 达、离 开 和丢弃。在链路中增加了 Trace/ EnqT 、Trace/ DeqT、Trace/ DrpT 以及 Tracer/ RecvT 等对象可以跟踪每个数据包到达、进入、离 开队列以及被丢弃的时间; 还可以用队列监视 器( Queue Mon itor) 来监测队列长度和平均队长的变化情况。
前 NS- 2 提供了四种具有不同数据结构 的调度器, 分别是 链 表、堆、日历表和实时调度器。
2) 节点( Node) : 是由 TclObject 对 象组 成的复 合组 件, 在 NS- 2 中可以表 示端 节点 和路 由器。 每个 节点 具有 唯一 的 地址( id 标识) , 节 点有单 播节 点和组 播节 点两种 不同 类型, 通过节点内部的 nodetype_变 量来 区分, NS- 2 中默认 的是 单 播节点; 节点为每 一个连 接到 它的业 务源 分配不 同的 端口, 用于模拟实际网 络中 的端 口; 另 外, 节点 有一 个路由 表以 及 路由算法, 由地址分类器根据目的地址转发数 据包。
收稿日期: 2003- 07- 16
96
SRM 及部分 MAC 层的协议。
NS- 2 用 C+ + 和 Otcl 语言编 写而成。它的一个突出 的
优点就是它的 源代码 全部 公开, 提供 开放 的用户 接口, 并 且
容易扩展、配置, 用户可 以很 方便 地将自 己开 发的新 协议 模
块集成到 NS- 2 环境中。
NS- 2 是 一个具有仿真事件驱 动、网 络构件 对象库 和网络 配
置模块库的 Otcl 脚本解释器。NS- 2 中编译 类对象通过 Otcl
连接建立了与之对应的解释类对象, 这样用户 可以在 Otcl 空
间能够方便地对 C+ + 对象的 函数和 变量进 行修改与 配置, 充分体现了仿真器的一致和灵活性。 2. 3 NS- 2 的功能模块
通常情况下, 模 拟器模 拟工 作的开 始, 就是 通过 创建 一 个 Simulator 类的实例后开始的。simulator 类可以 看成是对 整 个仿真器的封装, 含成员类 node、link、agent、package、LAN 等。
我们从创建一个仿真器的实例对象开 始, 通 过这个仿 真 器调用各种方法 生成 节点, 进而 构造 拓扑 图, 对仿真 的各 个 对象进行配置, 定义事件, 然后根据定义的 事件, 模拟整个 网 络活动的过程。在创建模拟器对象时, 在构造函 数中同时 也 创建一个该模拟器的事件调度器( Event Scheduler) 。
用户使用 NS- 2 实现仿真的过程如下:
1) 建立仿真程序: 用户用 Otcl 源 程序来初始 化一个事 件 调度器, 定义网络拓扑结构, 配置业务源, 确定 发送和接受 传 输数据包的时间, 然后启动 NS- 2 仿真器。
2) 运行仿真程序。 3) 仿真结果分析: 程序运行 结束后, 用户根据记录 模拟数 据的文档, 利用 NS- 2 中的可视化仿真软件 NAM 动态 查看仿 真的运 行过 程、观察 跟 踪数 据, 或 使用 Linux 中的 Xgraph 或 Windows 下的 Origin 等软件将结果转换成带有坐标的平面图。
ABSTRACT: With the development of the computer technology, simulation plays an important role in analyzing and design ing complex systems, such as network. The widely used network simulator NS- 2 is introduced in this paper. We describe the NS- 2 structure, function and methods in detail, and how to extend the NS- 2. Finally, an example to explain how to use NS- 2 is given. KEYWORDS: Network simulator ; Extend; Application
3 NS- 2 的功能扩展
NS- 2 的最大的优点是其 源代码 全部公 开, 是 一个开 放 的仿真平台, 用户可以根据自己的需 求编写相 应的模块加 入 到 NS- 2 的模块中去, 从而实现 NS- 2 的功能扩展。 3. 1 模块编写
用户应该根据目标模块的功能, 详细分析 编译层的类 层 次结构, 然后确定类 的继承 关系。例 如用 户通过 Agent 类 创 建了一个新类 MyAgent, 代码如下: class MyAgent : public Agent { public :
MyAgent( ) ; Protected :
Int command( int arg c, const char* const* argv) ; Private :
Int my_var1 ; Double my_var2 ; Void MyPrivFunc( void) ; }; 由于用户的开发是在编译层, 为 在解释层 灵活地引用 新 的类对象, 集成新的对象就需要 在 NS- 2 中建 立与 C+ + 代 码的 Otcl 连接, 也就是在编 译层与 解释层 之间通 过建立 Otcl 连接实现对象 的映射, 这 样, 用户 就能够 在仿 真脚本 中方 便 地使用该对象了。 3. 2 Otcl 连接 1) 实现类的映射 在 Otcl 中创建 MyAgent 类的实例需要在编 译层定义一个 连接对象, 称之为 MyAgentClass , 这个对象是从 TclClass 继承 而来的, 其代码如下: static class MyAgent : public TclClass {
4) 代理( Agent) : 负载网络层分组 的产生 和接收, 也可 以 用在各个层次的协议实现中。Agent 类包含 源及目 的节点 地 址、分组 类型、大小、优先 级等状 态变量, 并利 用这些 状态 变 量来给所产生的分组的各个字段赋值。每个 Agent 连接到 一 个网络节点上( 一般是端节点) , 由该 节点给它分 配一个端 口 号。Agent 是实现 UDP 协议及各种版本 TCP 协议的基类。
本文要介绍的是目前应用较 为广泛的 网络仿 真软件 NS - 2( Network Simulator) , 它是由 UC Berkely 大学开 发的一个 基 于事件驱动的仿真器。它能近乎真实地模 拟网络环 境, 让 我 们可以在各个层次上模拟网络的运行。
2 NS- 2 结构和功能
2. 1 NS- 2 简介 NS- 2 是 面向对象的, 基 于离散 事件驱 动的网 络环境 模
97
构造函数, 从而生成了 MyAgentClass 类的实例, 在这个构造 函 数中, 创建了 Otcl 环 境的 Agent/ MyAgentOtcl 类及 其方法。 如 果用户在 Otcl 脚本中使用 new Agent/MyAgentOtcl 命令, 系 统 就会调用 MyAgentClass 的 create 方法, 产生一个 MyAgent 类 对 象, 这样就在 C+ + 对象和 Otcl 对象之间建立了映射关系。