您好,欢迎访问三七文档
当前位置:首页 > 行业资料 > 其它行业文档 > 网络仿真软件OPNET基础介绍
网络仿真软件OPNET1.1OPNET仿真软件概述OPNET公司是全球领先的决策支持工具提供商,总部在美国华盛顿特区,主要面向网络领域的专业人士,为网络专业人士提供基于软件方面的预测解决方案。OPNET公司最早是由麻省理工学院(MIT)信息决策实验室受美国军方委托而成立的。1987年OPNET公司发布了第1个商业化的网络仿真软件,提供了具有重要意义的网络性能优化工具,使得具有预测性的网络性能管理和仿真成为可能。1987年以来,OPNET迅速而稳步地发展,作为高科技网络规划、仿真及分析工具,OPNET在通信、国防及计算机网络领域已经被广泛认可和采用。成千上万的组织使用OPNET软件来优化网络性能、最大限度地提高通信网络和应用的可用性。至今OPNET已经升级到了11.5以上版本。它的产品线除了Modeler外,还包括ITGuru、SPGuru、OPNETDevelopmentKit和WDMGuru等。OPNET的产品主要针对网络服务提供商、网络设备制造商和一般企业这3类客户。OPNET目前在全球有超过5000个客户,在全美设立了4个办事处,分别在加州、德州、北卡罗来纳州及马萨诸塞州,另外,OPNET也在全球设立了4个办事处,分别为法国的巴黎、英国的剑桥、澳大利亚的悉尼以及比利时的根特。新加坡经纬线科技公司是OPNET产品在亚洲地区的总代理。OPNET的全球部分电信级运营商客户,如AT&T、NTTDoCoMo、FranceTelecom等,这部分客户相对于中型企业,具有更复杂的网络结构和协议配置,因此管理起来更复杂。OPNET利用高网络智能来辅助运营商的网管人员管理网络,同时OPNET具有很好的开放性和互联性,可以和当前很多流行的网络管理和监控软件一起协同工作,如HP公司的OpnetView、Tivoli公司的NetView、Cisco的Netflow以及Angilent公司的NetMetrix等。目前OPNET的应用在国内还处于起步阶段,因此OPNET具有很大的研究及应用价值。1.2OPNET仿真技术1.2.1三层建模机制网络是复杂的系统,OPNETModeler建模采用层次化和模块化的方式,将复杂的体系分解为不同的层次结构,每层完成一定的功能,一层内又由多个模块组成,每个模块完成更小的任务。网络域、节点域、进程域是构建OPNETModel模型的三个层次。节点域建模的方法是基于节点模块,每个节点模块实现节点行为的某一方面,诸如数据生成、数据存储、数据的处理或选路和数据的传输等。多个节点模块的集合构成功能完整的节点。模块间用包流线或统计线相连,其中包流线承载了模块间数据包的传输,统计线可实现对模块待定参数变化的监视,通过modules,paeketstreams和statisticwires的联合使用,用户可对节点的行为进行仿真。节点模块根据功能可以划分为处理器类、数据流线类和收/发机类三种。处理器类功能的实现是在进程域中通过Pro-C编程完成的。数据流类和收/发机类是通过管道阶段模型实现的。是通过管道阶段模型实现的。作为三层建模机制的最底层,进程模型是实施各种算法的载体,因此是建模仿真过程中最重要的部分,同时也是最难实现的部分。进程模型主要用来刻画节点模型里的处理机以及队列模型的行为,可以模拟大多数软件或者硬件系统,包括通信协议、算法、排队策略、共享资源、特殊的业务源等。进程模型主要由状态和转移线构成。状态就是进程在仿真过程中所处的众多模式之一,状态之间是互斥和互补的,进程在某一时刻只能处在一个状态中,而所有的状态则构成了进程状态空间的全集。状态分为两类,强迫状态和非强迫状态,强迫状态是不允许停留的状态,当进程进入强迫状态时,仿真核心将强迫进程立刻转移到下一个状态。而非强迫状态不同,当进程进入非强迫状态后,将停留在此状态,等待事件、其他进程或仿真核心的触发。在每个进程模型中都至少有一个初始状态,是进程被访问的第一个状态,既可以是强迫状态,也可以是非强迫状态。每个状态都有相应的动作与其对应,在Pro-C中这些动作被称为执行代码。状态的执行代码分为两部分,上面部分称为进入代码,是进程进入该状态时执行的动作;下面部分称为离开代码,是进程离开状态时执行的动作。非强迫状态被认为是系统真正的状态,因为当进程执行完非强迫状态的进入代码后,进程就处于阻塞,等待新的触发,而强迫状态是为了实际编程和状态控制的需要而提出的一种状态,进程不会停留在该状态。转移则描述了进程模型从一个状态向另一个状态转移的过程和条件,包含4个部分:源状态、目的状态、转移条件和转移执行代码。其含义为在源状态时,进程只要完成源状态的离开代码,就立即对转移条件进行判断,当转移条件成立,则执行转移代码,之后转移到目的状态。转移分为条件转移和无条件转移,分别用虚线和实线表示。Proto-C语言是进程建模中支持各种算法实现的OPNET独有的语言。他包括三个方面,在限状态机,OPNET核心函数,标准的C和C++。Modeler采用阶层性的模拟方式,从协议间关系看,节点模块建模完全符合OSI标准,业务层-TCP层-IP层-IP封装层-ARP层-MAC层-物理层;从网络物件层次关系看,提供了三层建模机制,最底层为进程模型,以状态机来描述协议;其次为节点模型,由相应的协议模型构成,反映设备特性;最上层为网络模型。三层模型和实际的协议、设备、网络完全对应,全面反映了网络的相关特性。在过程层次模拟单个对象的行为,在节点层次中将其互连成设备,在网络层次中将这些设备互连组成网络。几个不同的网络场景组成“项目”,用以比较不同的设计方案。OPNET中的建模工作在3种不同的层中完成,这3种层次也称为3个域。Modeler采用面向对象模拟方式,每一类节点开始都采用相同的节点模型,再针对不同的对象,设置特定的参数。基于事件出发的有限状态机建模(FiniteStateMachineModeling),避免以时间出发,变成以事件出发的建模。采用离散事件驱动(DiscreteEventDriven)的模拟机理,将基于包的分析方法和基于统计的数学建模方法结合,与时间驱动相比,计算效率得到了很大提高。例如在仿真路由协议时,如果要了解封包是否到达,不必要每隔很短时间周期性地查看一次,而是收到封包,事件到达才去看。每一时刻,FSM将停留在特定状态,之后收到事件,完成事件并跳转状态。例如路由协议要做的事有获取周边节点地址,建立拓扑信息,之后路由表稳定下来,在收到封包将其转发到下一个节点,这些事件中断将引起相应的状态转移。采用混合建模机制,把基于包的分析方法和基于统计的数学建模方法结合起来,既可得到非常细节的模拟结果,也大大提高了仿真效率。1.2.2离散事件仿真机制OPNET采用基于离散事件驱动的仿真机制。事件是指网络状态的变化。当网络状态发生变化时,模拟机进行仿真,状态不发生变化的时间段,不进行仿真,即被跳过,因而仿真时间是离散的。每个仿真时间点上可以同时出现多个事件,事件的发生可以有疏密的区别。仿真中的各个模块之间通过事件中断方式传递事件信息。每当出现一个事件中断时都会触发一个描述网络系统行为或者系统处理的进程模型的运行,通过离散事件驱动的仿真机制实现了在进程级描述通信的并发性和顺序性,再加上事件发生时刻的任意性,决定了可以仿真计算机和通信网络中的任何情况下的网络状态和行为。1.2.3仿真调度机制在OPNET中使用基于事件列表的调度机制,合理安排调度事件,以便执行合理的进程来仿真网络系统的行为。调度的完成通过仿真软件的仿真核和仿真工具模块以及模型模块来实现,事件列表的调度机制具体描述如下:1.每个OPNET仿真都维持一个单独的全局时间表,其中的每个项目和执行都受到全局仿真时钟的控制,仿真中以时间顺序调度事件列表中的事件,需要先执行的事件位于表的头部。当一个事件执行后将从事件列表中删除该事件。2.仿真核作为仿真的核心管理机构,采用高效的办法管理维护事件列表,按顺序通过中断将在队列头的事件交给指定模块,同时接收各个模块送来的中断,并把相应事件插入事件列表中间。仿真控制权伴随中断不断地在仿真核与模块之间转移。3.当事件同时发生时,仿真核按照下面两种办法来安排事件在事件列表中的位置:(1)按照事件到达仿真核的时间先后顺序,先到达先处理(firstcomefirstserve)。(2)按照事件的重要程度,为事件设置不同的优先权,优先权高的先处理。1.3opnet通信机制1.基于包的通信a)包:OPNET采用基于包的建模机制(Simulationonpacketlevel)来模拟实际物理网络中包的流动,包括在网络设备间的流动和网络设备内部的处理过程;模拟实际网络协议中的组包和拆包的过程,可以生成、编辑任何标准的或自定义的包格式,利用调试功能;还可以在模拟过程中察看任何特定包的包头(Header)和净荷(Payload)等内容。包是OPNET为支持基于信息源(Message-oriented)通信而定义的数据结构。包被看作是对象,可以动态创建、修改、检查、拷贝、发送、接收和销毁。每个包含有一些存储信息的区域。包的类型可以是有格式(formatted)或无格式(unformatted)的。一个有格式包中每个域以名字标识,作为访问(设置或者读取)包域的依据,而无格式包只为每个域指定索引号。包域可以存储不同类型的信息,如整型和双精度型用来存储数字数据;包结构类型用来封装另一个包;结构体用来内嵌用户自定义的数据结构。b)包流是支持包在同一节点模型的不同模块间传输包的物理连接,具体来说,它是源模块的输出端口和目的模块输入端口间的物理连接。包流通常分为源模块的输出流(Outputstream)和目的模块的输入流(Inputstream)。虽然连接到模块的包流(输入流和输出流)的个数没有限制,但是OPNET不允许群收(Fan-in)和群发(Fan-out)模式,具体来说,每个输入流只能是一个包的唯一接收者,相对应地,每个输出流只能是每个包的唯一发送者。c)OPNET为目的模块设置了一个包队列,允许包在没有被移除之前在队列中积压。包队列是隶属于模块,而不隶属于某个包流,因此连接模块的包流可以有多个,而包队列只有一个。仿真核心不限制该队列的大小。队列采用先进先出(FIFO)模式管理包,位于队首的包才能被目的模块通过op_pk_get(streamindex)获取并移除。2.中断初始状态有以下四种:初始状态为强制状态,beginsimulationintermpt被启用。因为是强制状态,仿真开始就进入下一个状态。下一个状态的进入代码不能包含和处理主流中断相关的内容。1)初始状态为强制状态,beginsimulationintemipt没有被启用。初始化仿真由主流中断引起。除完成初始化工作外还要处理该中断。2)初始状态为非强制状态,beginSimulationintemipt被启用。此时初始化通常是放在进入执行部分,在仿真时间为零时完成初始化。之后,进程将被阻塞,知道第一次主流中断到达后才被激活。初始化的退出执行代码用于处理主流中断,也可以将主流中断交由下一个状态的进入代码或转移代码完成。3)初始状态为非强制状态,beginsimulatinninten’Upt不被启用。主流中断需要完成初始化,与第一主流中断相关的进程要内含在输入初始化状态中。这是不常用的初始化。初始中断可以由仿真核心beginsimulationintenupt引发,也可以由主流中断引发。一般建议使用beginsimulationinienupt作为初始中断。其优点是因beginsimulationintenupt发生在所有中断之前,进程以标准的方式处理所有主流中断,并且进程在执行第一次主流中断之前能够完成所有初始化的活动,这是非常重要的。通过使用beginsimulationintenupt队列和处理器对象设置可能产生的初始化中断。如果包流的源模块是进程模块,则可以通过op_pk_send()及其演变的3种方式将包发送至目的模块输入流。(一)常用的发送方式是调用op_p
本文标题:网络仿真软件OPNET基础介绍
链接地址:https://www.777doc.com/doc-7283935 .html