计算机防火墙论文 第5页
第二章 网络仿真软件NS-2介绍
网络仿真软件是网络性能理论分析、评估网络设计方案以及网络故障诊断的有力工具。在网络系统方案设计阶段,对于规模稍大的互连网络目前还没有哪个理论能够对其进行较精确的分析,一般都是依靠仿真的方法对设计方案进行评估,这对于减少投资风险,降低网络实现费用等都有着巨大的好处。在网络仿真软件中,比较有名的有MIL3公司的OPNET软件、Cadence公司的VCC软件,这些软件一般的价格都在20-30万美元左右, 每年还需要几万美元的服务费,对于研究单位、学校甚至大型的公司来讲都是一笔巨大的投资。除了上面的商业软件,在网络仿真领域还有一些免费软件、这里面比较有名的就是VINT的ns-2(Network Simulator V.2)软件。
2.1 NS-2 网络仿真软件介绍
在研究和设计网络协议时通常需要利用仿真软件对其性能进行测试和评价,NS 作为一种免费软件,以其协议代码与真实网络应用代码的相似性和仿真结果的可靠性,成为众多仿真软件中的首选。NS 是一种面向对象的离散事件驱动的网络模拟器, 支持多个流行的网络协议如各个版本的TCP、UDP 和路由调度、拥塞控制算法等。NS源代码完全公开,可供使用者在Unix、Linux、Windows 等系统平台上使用和进行二次开发,并可以提供有线网络、无线网络中链路层及其高层精确到数据包的诸多网络行为的模拟与仿真,目前国内利用该模拟器来仿真和分析的研究人员也逐渐开始增多。
2.1.1 NS构成与仿真原理
NS 是一个面向对象的、一个可扩展的、容易配置的、可编程的事件驱动仿真引擎( simulation engine) , 由LBNL(Lawrence Berkeley National Laboratory) 的网络研究组研制开发,是DARPA 支持的VINT 项目的核心部分,其源代码全部公开,提供开放的用户接口,可用于各类IP 网络模拟。
(1)NS 软件包及NS2 的基本结构
NS 软件包主要包括Tcl/ Tk、OTcl 、NS、Tclcl 四部分。软件包各个部分的相互联系可由图2.1来简单刻画。若图片无法显示请联系QQ3249114
图2.1
OTcl 是Tcl(Tool Command Language) 的面向对象扩展,是NS 的仿真描述语言。NS 仿真器共用到了六种Otcl 接口类,分别是Tcl 类、TclObject 类、TclCommand 类、EmbededTcl 类和InstVar 类。其中TclObject 在类的层次结构中处于最高层,所有其他主要的类都从它派生而来。它有一个静态链表记录了用户创建的所有对象,每一个对象都有一个唯一的标识,记录了每个对象所属的类名。InstVar 类定义了一些方法和机制,在编译类结构对象的成员变量和对应的解释类结构对象的成员变量之间建立映射,使两类变量一致共享; TK是Tcl 的图形界面开发工具,帮助用户在图形环境中开发图形界面。
NS 是整个软件的核心,采用编译和解释双层结构,编译层由C+ + 类组成,它的前端是一个Otcl解释器。仿真器内核定义了有层次结构的多种类,称为编译类结构;在Otcl 解释器中有相似的类结构,称为解释类结构。用户通过解释器创立新的仿真对象之后,解释器对它进行初始化,与编译类结构中相应的对象建立映射。从用户的角度看,C + +代码层与OTcl 代码层是一一对应的。NS 中同时使用两种语言是因为C + + 语言执行速度快而修改和编译速度慢,故只用于编译层协议细节的实现,而Otcl 修改快且可用于交互操作,用于解释层中仿真对象的设置。NS 采用策略跟机制分离的原则,提高了代码的重用率;同时为了降低分组和事件的处理时间,事件调度器和基本的网络元素用C + + 进行编译,C + + 对象的控制权交给Otcl 。
NS 由事件调度器( Event Schedualer) 、网络元素对象库和网络设置模型库三个主要部分组成。其中调度器是仿真器的重要组成部分,它记录当前时间,调度网络事件链表中的事件。它有一个静态成员变量instance-供所有的类访问同一个调度器,并提供函数产生新事件,指定事件发生的时间。事件和TCP 分组( Event&TCP Packet) 事件表示仿真器产生的实际事件,包括事件产生的时间、处理事件的事件处理器(是指所有处理事件类的基类,它只是一个虚拟函数,每个继承类实现自己的功能) 。网络元素对象包括节点、链路、代理(Agent) 、业务追踪(Trace) 和数据源等;节点、链路、代理同时继承了NsObject 和事件处理器类,来处理多项事务;代理是实际产生和消费分组的对象,它们属于传输层实体,运行在端主机(模拟) ,节点的每一个代理自动被赋与一个唯一的端口号(模拟TCP/ UDP 端口) 。NS 提供了丰富的网络元素,使用者只需要熟悉相关研究方向的基本元素,其它的可做“透明”处理。Tclcl 用于提供C + + 和OTcl 之间的接口,使对象和变量能同时出现在两种语言中。
(2)NS 仿真原理
用户在用NS 仿真器进行仿真工作以前,首先需要分析该仿真过程所涉及是解释层还是编译层。
如果仅涉及解释层,则只需要利用现成的网络元素编写OTcl 脚本,构造合适的网络拓扑并确定链路的基本特性(如延迟、带宽和丢包策略等) 以及对节点的特性化配置(如进行节点的代理、路由协议、事件调度等的初始化) ;此外还要建立追踪文件对仿真过程中用户感兴趣的网络元素的变化或特定的网络现象进行跟踪,以便于仿真过程结束后用XGraph进行静态或者用NAM(Network Animator) 进行动态分析。其中NAM可以表现仿真的全部宏观过程,显示从开始到结束整个过程中的拓扑结构、代理行为和链路状态;XGRAPH 用__于对网络微观特性进行跟踪纪录并生成图形。此类模拟主要用于加深对网络协议和算法的形象理解和网络协议类教学。
如果仿真方案涉及C + + 代码层,途径有二,其一根据现有网络元素的C + + 代码进行某个算法修改或增加某个功能的实现来满足对一些现有协议功能完善的类的仿真;其二通过编写全新的协议代码,满足一些网络工程师新的设计需要。建立新的协议必须注意以下几个问题:
1) 首先必须定义头文件,包括数据结构和新代理的继承结构,并建立适当的类定义;
2) 定义C + + 代码和OTcl 代码之间的接口连接;
3) 定义接收函数recv() 和Tcl 命令触发函数Command ( )及时钟类函数等必要的函数;
4) 新协议代码完成后需对相关程序进行必要改动,并在NS 目录下运行Make Depend 和Make ,重新编译NS 内核,直至生成新的NS。使用NS2 进行网络仿真,最终目的是要得到实验的结果。NS 提供跟踪和监视两种方式收集输出数据并存到指定文件中,来对仿真结果进行评价。其中跟踪是指使用trace - all 记录每个包在队列或链路的行为(到达、离开、丢弃等) ;它的输出文件为:
上一页 [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] ... 下一页 >>