OPNET基础入门1.从协议间关系看,节点模块建模完全符合OSI标准,业务层-TCP层-IP层-IP封装层-ARP层-MAC层-物理层2.从网络物件层次关系看,提供了三层建模机制,最底层为进程模型,以状态机来描述协议;其次为节点模型,由相应的协议模型构成,反映设备特性;最上层为网络模型。三层模型和实际的协议、设备、网络完全对应,全面反映了网络的相关特性。3.在进程层次模拟单个对象(模块)的行为,在节点层次中将其(模块)互连成设备(节点),在网络层次中将这些设备互连组成网络。4.使用Modeler仿真可以大体分成6个步骤:配置网络拓扑(Topology-RapidConfiguration)、配置业务、收集统计量(对象统计量和全局统计量)、运行仿真并查看结果(设置repositories属性Edit-Preferences)、调试模块再次仿真、最后发布结果和拓扑报告。5.在任何打开OPNET时候,最高层次永远为一个工程,每个场景代表网络模块,一个工程就是一组仿真环境,一个场景就是其中的一个具体网络仿真环境配置方案(如网络拓扑、协议、流量等)。6.工程编辑器最开始用来新建一个工程,指定工程名字和第一个场景名字后,网络配置小精灵(StartupWizard)就出来了。可以选择手动建立网络,或者可以从特殊格式文件导入。之后设定网络的范围,同时也可以指定度量单位,可以是经纬度、米、公里、英尺、英里等。接着选择常用的模板家族(ModelFamily),把它们包含(include)进去后,它们作为构建网络的候选组件。7.可以设置背景的显示分辨率(Resolution:pixels/degree)和背景网格的解析率(Division)。View-Background-SetProperties8.在背景中,也可以引进OPNET自带的地图。例如View-Background-AddImageMap可以导入一些带有经纬度信息的卫星地图。也可以选择View-Background-AddMIFMap导入海岸线或高速公路信息。9.重要概念:opnet子网:opnet的子网是将网络中的一些元素抽象到一个对象中去。节点:被看作设备或者资源。包括固定节点、移动节点、卫星节点。链路:点对点的链路在固定节点间传输(pppLink)、总线链路通过共享介质在多个节点间传输数据(BusLink)、无线链路(WirelessLink)。仿真随机种子(seed):seed是产生随机数的种子值,反映随机数的状态。目的是测试仿真系统的稳健性,具体来说,针对不同的seed值进行一系列仿真,每次不同seed值对应的仿真结果相近,则表明建立的模型有较高的稳健性(scalability)。模型和模板:模型通常是指进程模型、节点模型、网络模型模块通常是指具有实在的物理含义,例如进程模块就是节点模型里的小方块。对象:第一种是抽象对象,如复合属性。第二种是具体对象:例如节点、模块(module)、状态机。10.链路模型10BaseT:它是Ethernet的另一种型态,它允许工作站利用双绞线连接。11.中心节点模型3C_SSII_1100_3300_4s_ae52_e48_ge3:这是3Com公司的交换机。12.ObjectStatistics:单个对象统计量GlobalStatistics:全局统计量13.Cisco2514:Cisco(思科)路由器14.ServerLoad:服务器负载统计量Delay(SEC):全局时延统计量15.OPNET采用离散事件驱动的模拟机理(Discreteeventdriven)(其中“事件”是指网络状态的变化)也就是说,只有网络状态发生变化时,模拟机才工作,否则被跳过。16.OPNET推进是仿真时间,和逝去时间(Elapsedtime)有着本质的区别。逝去时间是仿真程序运行的时间,是真实的时间,反映了仿真程序执行的速度,由机器的硬件速度决定。仿真时间是系统仿真的时间进度,反映当前仿真执行的进度。17.包发送:(1)调用op_pk_send(),当包沿着源模块输出流到达目的模块输入流时立即向目的模块触发流中断,整个过程时延由包流的“delay”属性指定。包到达的时刻为传输时延加“delay”的值。(2)如果要模拟包在包流传输过程的额外延时,以此来仿真模块有限的处理速度,这时可以调用op_pk_send_delayed()函数,包将滞后指定的时间达到目的模块。(3)op_pk_send_forced()产生的事件不需要在仿真核心的事件列表中排队,而是插队到事件列表的队首立刻执行,并且包不需要经历传输延时,直接到达目的模块。(4)用op_pk_send_quiet()函数,采取一种静默的方式发送包,目的模块隔一定的时间间隔主动地去从队列中取出一个包。中断模式:为了支持以上各种包传输模式,还必须设置相应的包流“中断模式”(intrptmethod)属性,它有三种可选值,分别是scheduled、forced和quiet。选择scheduled对应采用op_pk_send()和op_pk_send_delayed()传输包,这时可以设置包流的“delay”属性;选择forced对应采用op_pk_send_forced()传输包;选择quiet对应采用op_pk_send_quiet()传输包。包传递:包传递也有四种方式,分别是op_pk_deliver()、op_pk_deliver_delayed()、op_pk_deliver_forced()和op_pk_deliver_quiet();与包发送不同的是包传递需要指定目的模块的Objid。18.什么是ICI:用户自定义的与事件关联的数据列表。将ICI绑定在将来某个事件中,当将来发生时取出ICI信息。19.ICI包含数据的属性域:属性名、类型、默认值。其中属性名是读取ICI数据的依据。20.强制状态和非强制状态:强制状态(绿色)程序不终止,非强制状态(红色)程序中止等待下一个事件激活。21.每个状态具有两个执行模块,入口模块在转入状态后被执行,出口模块在转出状态前被执行。22.中断:中断时处于事件表表头的事件,当中断被递交到对应的模块,控制权由仿真核心转移到对应的模块。如果模块是处理器或队列,中断被递交到对应模块中的进程。BEGSIM中断在仿真时间0.0触发,先于其他所有中断类型。23.强制状态和非强制状态:强制状态执行入口代码,然后直接执行出口代码非强制状态执行入口代码,然后预约自中断,设置中断点,然后阻塞释放控制权。24.属性提升允许用户在更高的模型层次设置属性的值。25.创建进程建模过程:(1)、设计进程模块:右击转移线,EditAttributes-condition(2)、定义转移条件、变量、申明统计量:点击HB定义宏来代替复杂的转移条件点击SV定义状态变量申明本地统计量Interfaces-LocalStatistics,(3)、创建状态执行代码(4)、编辑进程接口:编辑进程接口界面来设置进程属性的值:Interfaces-ProcessInterfaces26.什么叫句柄?句柄是一个标识符,是拿来标识对象或者项目的,它就像人的名字一样。27.常用的核心函数:(1)事件类的核心函数:在仿真过程中,事件类核心函数为进程模型提供有关事件的信息。op_ev_current()返回当前事件的句柄op_ev_next()在事件列表中获得该事件的下一个事件op_ev_seek_time()可以获得与输入的仿真时间最接近的那个事件的句柄op_ev_next_local()返回下一个本地事件op_ev_count()得到事件的个数op_ev_count_local()得到本地事件的个数op_ev_cancel()将无效的将来事件删除op_ev_pending()判断一个事件是否还在事件列表中等待调度op_ev_type()可返回一个事件的类型事件的两个常用属性分别是事件类型和调度时间。op_ev_code()可以得到这些事件的事件号(opnet为每个事件分配一个事件号)op_ev_strm()决定包到达的流索引号op_ev_stat()决定事件作用的状态线索引号,注意它只返回输入状态线索引号,而得不到状态线触发条件等信息op_ev_time()可以返回事件调用的仿真时间op_ev_src_id()获取产生这些事件的源模块ID号op_ev_dst_id()获取事件的目的模块ID号有三种事件是没有源模块的,因为它们是仿真核心自动生成的,它们是:仿真开始事件bigsim,仿真结束事件endsim和regular事件。op_ev_valid()来判断事件是否有效(2)中断类核心函数:op_intrpt_self()自中断op_intrpt_strm()流中断op_intrpt_stat()状态中断op_intrpt_begsim()仿真开始中断op_intrpt_endsim()仿真结束中断(3)包类核心函数:包是OPNET中主要的数据模型,基于包的通信是OPNET仿真的主要通信机制包的操作有三类:创建和销毁包;设置和得到包中的内容;析取包的相关信息和属性。op_pk_create()创建一个无格式的包,括号中的参数指示包的大小op_pk_create_fmt()创建一个有格式的包op_pk_destroy()来销毁包op_pk_type()来判断包的类型op_pk_copy()函数可以复制一个包头、内容和原始包一摸一样新包仿真核心按照递增的顺序“0、1、2….”为包分配惟一的ID号,因此可以达到区分的目的op_pk_id()获取包的ID号(4)进程类核心函数:进程类核心函数为进程或者队列模块(本书中进程模块与队列模块统称为进程模块,不加以区分)提供创建和管理多个进程的支持。op_pro_create()创建子进程op_pro_self()得到自己的进程句柄op_pro_parent()可以得到父进程的句柄op_pro_root()得到根进程的句柄OPNET为每个进程分配了惟一的识别号,称为processid,可以调用op_pro_id()得到它op_pk_get()得到包流上的包op_stat_local_read()读出状态线上的参数op_pro_mod_objid()获得其隶属的进程模块的Objidop_pro_destroy()将它销毁,这将释放存储进程状态变量的内存空间(5)拓扑类核心函数:核心函数决定网络和节点的拓扑结构op_topo_parent()返回父对象的Objidop_topo_child_count()返回指定类型子对象的个数op_topo_child()返回子对象的Objid子对象(Child)是包含在父对象(Parent)中更底层的对象。例如,模块是节点的子对象,而节点又是子网(Subnet)的子对象;子队列和信道为复合属性的子对象,而复合属性又是队列、发信机和发信机的子对象。28.在EditAttributes中将属性提升,则在Interfaces中可以看到该属性。在Interfaces将属性hidden,则在上一层模型的EditAttributes看不到该属性。