本文的主要内容是 OPNET Modeler 软件的简单介绍与使用,包括 OPNET 中的一些重要概念、OPNET 编辑器简介、用 OPNET 建立网络拓扑结构、收集统计量、运行仿真、查看仿真结果、复制场景并扩展网络等。
OPNET 的英文全称是 OPtimized Network Engineering Tool,即优化的网络工程工具,其最早是MIL-3公司的核心软件产品。
使用 Modeler 仿真大体分成6个步骤,分别是配置网络拓扑(Topology)、配置业务(Traffic)、收集结果统计量(Statistics)、运行仿真(Simulation)、调试模块再次仿真(Re-simulation)、最后发布结果和拓扑报告(Report),这些步骤可以总结为两个 T 两个 S 和两个 R。
1、项目(Project)与场景(Scenario)
一个项目就是一组仿真环境,一个场景就是其中的一个仿真环境。场景是网络的一个实例,一种配置,具体来说就是拓扑结构、协议、应用、流量以及仿真设置。在 Modeler 仿真时,最高层次永远是一个项目,每个项目底下至少包含一个仿真场景,代表网络模型,它是具体的网络仿真环境配置。项目的提出初衷是方便对不同的场景的仿真结果进行比较,项目提供场景复制功能,可以对场景进行备份,通过改变新场景的参数运行仿真来测试系统各方面的功能及是否存在瓶颈。
2、子网(Subnet)
OPNET 的子网是将网络中的一些元素抽象到一个对象中去。子网可以是固定子网、移动子网或者卫星子网。子网不具备任何行为,只是为了表示大型网络而提出的一个逻辑实体。
3、节点(Node)
节点通常被看作设备或资源,由支持相应处理能力的硬件和软件共同组成,数据在其中生成、传输、接收并被处理。Modeler 包含三种类型的节点:第一种为固定节点,例如路由器、交换机、工作站、服务器等;第二种为移动节点,例如移动台,车载通信系统等: 第三种为卫星节点,顾名思义是代表卫星。每种节点所支持的属性也不尽相同,如移动节点支持三维或者二维的移动轨迹,卫星节点支持卫星轨道。
4、链路(Link)
相对固定节点、移动节点以及卫星节点,链路也有不同的类型,有点对点的链路、总线链路以及无线链路。点对点的链路在两个固定节点之间传输数据;总线链路是一个共享媒体,在多个节点之间传输数据;无线链路是在仿真中动态建立的,可以在任何无线的收发信机之间建立。卫星和移动节点必须通过无线链路来进行通信,而固定节点也可以通过无线链路建立通信连接。
5、仿真随机种子(Seed)
Seed 是产生随机数的种子值,反映随机数的状态。只要选定一个种子值,整个随机事件系统就固定了,复杂仿真的随机过程就成了一次实现。目的是测试仿真系统的稳健性,具体来说,针对不同的 Seed 值进行一系列仿真,每次不同 Seed 值对应的仿真结果相近,则表明建立的模型有较高的稳健性。一般在发布仿真结果之前都要改变仿真种子进行多次测试,如果结果完全改变,则说明模块有疏漏,所得的结果只是一个特例, 而不能反映系统的性能。
6、模块(Module)与仿真(Simulation)
对于某个协议的仿真,可能因为其涉及的事件及其相互的联系非常庞大,造成建模的困难,这时把该协议分解成一系列的协议行为,对这些行为单独建模后通过有限状态机把它们联系起来后便形成一个系统,这个系统可以称之为模块,它将抽象的协议直观化。仿真是基于一系列模块的一组实验,它反映模块和模块之间的互相作用关系。因此,从分层的角度来看仿真比模块的属性高,仿真属性具备比模块属性更高的等级,代表最高级别的参数。
7、属性的隐藏(Hidden)
属性的隐藏使得属性的可读具有阶层性,如有些厂商设备的一些性能参数用户并不需要调节的,而为了避免用户混淆就把这些属性隐藏起来,变成预设值(Default Value),当需要时再去底层查找。
8、属性的提升(Promoted)
与属性的隐藏相反,OPNET 规定等级低的参数可以不断提升,最后可变成级别最高的仿真属性。主要用在测试某个参数对网络仿真结果有何影响的场合,用户需要把在底层的参数提升出来就可以在仿真之前在仿真属性设置对话框中调整这些参数。属性的提升至仿真属性有一个特殊的用途,就是可以成为序列仿真的输入变量。
9、对象ID(Objid)与用户ID(user id)
Objid 是对象识别号系统分配的,全局唯一,整数。user id 是节点模型的一个属性,由用户设置,可以不唯一。
10、模型(Model)、模块(Module)与对象(Object)
模型通常指的是进程模型、节点模型和网络模型等。
模块具有实在的物理含义,例如进程模块,就是节点模型里面的小方块。
对象分为两种:一种是抽象对象,如复合属性;第二种是具体对象,例如模块、节点、 收信机、发信机。在 OPNET 中对象提出的目的是设置和获取它的属性,因此对象需要有它的对象ID号Objid。作为程序获取对象属性的依据,一般通过IMA核心函数(以Objid 为输入参数)获取或设置对象的属性。
进程模型没有Objid,它不是一个对象,而是抽象概念,代表协议行为的逻辑关系,在没有被激活成进程时,对仿真没有任何意义,因此模型和对象没有必然的联系。
在 OPNET 下点击 File—>New,点击下三角展开后如下图所示。
其中 Project、Node Model、Process Model 分别为工程编辑器、节点编辑器和进程编辑器,分别对应与 OPNET 建模的三个阶层。
Link Model 是有线链路模型编辑器,设定链路的传输速率、支持的封包格式及采用哪些管道阶段来描述链路的物理特性。
Path Model 用来显示流经过的路径,当配置了一个背景流量,仿真完成之后,会出现与路径模型相对应的路由表,通过路径模块显示一个流是怎么路由。
Demand Model 背景流量模型,用来配置应用背景流或网络背景流。
ETS (External Tool Support) 是外部工具支持文件,代表为 OPNET 界面额外附加的一些功能键。
External Source 是外部文件,其中包含若干个外部函数,主要用在进程模块中,一般进程模块只是本身用到函数在函数块中定义,如果某个函数在两个或以上的进程模块中用到,就应该定义成外部函数,使用的时候通过申明(declare external file)的方式将其包含进来。
Headerfile 收集了所有头文件,使得对头文件进行修改和重建更加方便。
Pipeline Stage 为管道阶段模型,描述物理层的表现,OPNET 有三种链路:有线点到点、总线和无线链路都是由相应管道阶段组成。
Network Model 网络模型文件,可以直接打开。
Probe Model 探针模型用来收集统计量,如果要收集未提升到网络层的统计,可以使用探针模型,它可以加入各种各样的统计,单击相应的统计功能键可收集节点、链路、路径、背景流量、配对物件(Coupled Node)、属性的统计。
Simulation Sequence 高级仿真配置文件,用来定义更加全面的仿真,该文件与高级仿真属性对话框的设定是互相关联的。
Antenna Pattern 天线模型和 Modulation Curve 调制曲线用于无线模型。
Extemn System Definition 定义 OPNET 与外部系统交互的信息格式,例如外部系统传输数据的类型,以及从哪个系统成员到另一个成员,它作为模块形式放在节点模型中,看上去像是回字型的图标。
Filter Model 自定义结果过滤器。OPNET 已经提供了20多种基本过滤器,用来对已得到结果进一步加工,使得结果更能突出某方面或更容易被理解。
Environment File 对应高级仿真属性 Files 选项卡,包含运行仿真的各种环境设定。
Generic Data File 是一个文本文件,OPNET 有一类标准的核心函数专门针对这种特殊文件的读取,并且可以检验内存和做一些预处理工作。
ICI (Interface Control Information) Editor 接口控制信息格式编辑器,ICI 可想象成是一种特别的封包格式,在个节点模型中,ICI 可以将一些控制信息从一个进程模块捎带到另一个进程模块,如握手信息。虽然通常比较建议能用包格式传输信息时尽量使用封包,但是封包局限在必需使用封包流,而 ICI 可与任何类型的中断进行绑定,另外在 OPNET 中很多的标准协议都采是用 ICI 交换握手信息,以逼近实际情况。
Icon Database 图标库文件,支持自定义图标来做网络物件的标志。
Packet Format 封包格式编译器,定义封包的域,包括域的类型、域的颜色等设定。
PDF Editor 为概率分布函数编辑器,OPNET 定义业务时通常使用了各种各样分布概率,OPNET 提供了一系列标准的概率分布函数,而该编辑器支持用户自定义概率分布函数。
Profile Library 对应高级仿真属性中的 Profiling 选项卡。
Wireless Domain Model 无线区域模型,用来划分接收主询。
要创建一个新的网络模型,首先需要创建一个新的项目和一个新的场景。一个项目为一系列场景的集合,而每个场景对网络建模的侧重点不同。
下面通过配置一个简单的网络来了解 OPNET Modeler 软件的使用。
首先打开软件,File下选择New,从弹出的下拉菜单中选择Project,点击OK,弹出对话框如下图所示。
点击OK后弹出建立向导(Startup Wizard),如下图所示。
选择Create empty scenario,点击Next,弹出下面网络范围的选定框。
这里选择Office,点击Next,弹出下面的尺寸大小设置框。
这里保持默认值,点击Next,弹出 OPNET 自带的对象模型家族种类,如下图所示。
往下拉到Sm_Int_Model_List这里选择Yes,其他的保持默认,点击Next,弹出下面的对话框。
检查没有错误就点击Finish,弹出对象框 Object Palette Tree,如下图所示。
使用快速拓扑配置,在Topology下选择Rapid Configuration,如下图。
在Rapid Configuration下选择Star,点击Next。
接下来需要为网络指定节点模型和链路模型。
选择中心节点模型为:3C_SSII_1100_3300_4s_ae52_e48_ge3(3Com公司的交换机)。
选择边缘节点模型为:Sm_Int_wkstn,设置节点数为30。
选择链路模型为:10BaseT。
网络在工作空间中放置的位置,中心X轴和Y轴的坐标均设置为25,设置局域网的半径范围为20。
设置好以后如下图所示。
点击OK后,项目编辑器中出现下图所示的网络拓扑。
接下来扩展这个网络,先增加一个服务器,增加的方法是打开对象模板,在 Sm_Int_Model_List 下找到 Sm_Int_server 对象,选中并将它拖放在工作空间中(或者双击该对象,在工作空间中直接左键放置即可),然后点击右键结束放置,放置完成后如下图所示。
接下来需要将星型网络和服务器连接起来,在对象模板中找到 10BaseT 链路对象,在服务器上单机鼠标左键,移动光标,再单击星型网络的中心节点,这时出现连接两个节点对象的链路,点击右键结束链路创建,如下图所示。
在对象模板中分别找到 Sm_Application_Config和Sm_Profile_Config 对象将其放置在工作空间中,放置完成后如下图所示。
OPNET 采用三层建模机制,最底层为进程模型,以状态机来描述协议;其次为节点模型,由相应的协议模型构成,反映设备特性;最上层为网络模型。三层模型和实际的网络、设备、协议层次完全对应,全面反映了网络的相关特性。
每个网络对象(链路除外)都是一个节点模型,它由一个或多个模块组成,模块与模块之间通过包流(Packet streams)或状态线相连。而模块实际上为进程模型,它通过状态转移图(STD,State Transition Diagram)来描述模块的行为。
在项目编辑器中双击 node_31 服务器节点,打开一个新的节点模型编辑器窗口,如下图所示。
上图由几个模块(CPU、rsvp)以及连接模块的包流和状态线组成。
在仿真过程中,来自客户端的数据包被收信机 hub_rx_0_0 接收,然后由下至上穿过协议栈到 application 模块,经过处理后,又沿原路返回至发信机 hub_tx_0_0,最后被传输到客户端。
传输适应层 tpal 模块的结构查看:鼠标双击上图中 tpal 模块,弹出进程模型编辑器,如下图所示。
上图中 wait 和 open 之间有两条线,wait 到 open 是虚线,虚线中间的条件 OPEN 必须满足才能从 wait 状态转移到 open 状态,而从 open 状态转移到 wait 状态(实线表示)是无条件的,因此执行完 open 状态的代码后立即转移到 wait 状态。
在 init 状态的上半部双击鼠标,打开它的入口代码,在 init 状态的下半部双击鼠标,打开它的出口代码。进程中的每个状态(红色或绿色的圆圈)都包含一个入口代码和一个出口代码,它们由 C/C++ 代码组成,入口代码在进入状态时执行,出口代码在离开状态时执行。
init 的入口和出口代码如下图所示。
在网络模型中可以对单个对象收集统计量,也可以对整个网络收集全局统计量。一般需要选择一个对象统计量:Server Load 和一个全局统计量:Ethernet Delay。服务器负载(Server Load)是整个网络的性能瓶颈,下面收集与服务器负载相关的统计量。
在服务器节点(node_31)上单击鼠标右键,从弹出的菜单中选择 Choose Individual DES Statistics。
在弹出的框中按照下图依次找到 Load(bits/sec),一定要在其前面打勾选中,然后点击OK。
全局统计量可以用来收集整个网络的信息,通过选择全局 Delay 统计量来查看整个网络的延时性能。
在网络编辑器工作空间的空白处单击鼠标右键,从弹出的菜单中选择 Choose Individual DES Statistics,单击 Gobal Statistics 树型结构,找到并打开 Ethernet 节点统计量,选中 Delay(sec)统计量,单击 OK,如下图所示。
接下来保存项目,将其保存到默认位置即可。
运行仿真前要确保 repositories 属性设置正确,在 Edit 下选择 Preferences,在查找文本框输入 repositories,点击 Find 按钮,双击下图所示的条目,在弹出的对话框中点击 Insert 按钮,在文本框中输入stdmod,然后回车,点击 OK 并关闭对话框,如下图所示。
接着就可以运行仿真了,在 DES(Discrete Event Simulation) 菜单中选择 Configure/Run Discrete Event Simulation,或者点击下图中圈中的图标就可以设置仿真参数了。
在弹出的对话框中设置仿真持续时间为0.5小时,下面的 Simulation Kernel 选择 Optimized,然后点击 Run 即可开始仿真。
这里的 Simulation Kernel(仿真核心) 有 development(调试) 和 optimized(优化) 两种,调试状态的仿真核心会收集仿真信息,这些信息可以用来调试模块,而优化仿真核心使运行速度加快。
仿真完成后弹出如下对话框,可以看到仿真已经完成,点击 Close 关闭。
在 node_31(服务器节点) 上右键,选择 View Results,在弹出的对话框中勾选 Load(bits/sec),结果如下图所示。
可以看到,负载最大值大约为 7000 bits/sec。
如果想把曲线图单独提取出来,可以点击底部的 Show 按钮。
视觉效果有Stacked Statistics,即一幅图包含多个子图,但是各子图分别绘制;Overlaid Statistics,即一幅图重叠显示多个结果。
结果示模式常用的有As Is,即不做任何处理;Average,即对曲线取值作平均;time_average,即对取值做时间平均。
将结果的收集模式改为 time_average,结果如下图所示。
可以看到,这种收集模式下绘制的图相对波动更小。
前面已经提到,Ethernet Delay 是一个全局统计量。
在工作空间的空白处右键,选择 View Results,在弹出的对话框中按下图找到 Delay(sec) 并勾选,结果如下图所示。
可以看到,网络收敛时的延时大约为 0.4 毫秒。
前面已经创建了一个网络,并且收集了相关的结果,现在可以扩展该网络并且验证在增加额外负载下,网络仍然能够很好的工作。
在保留前面网络的基础上,接下来复制场景,并于前面的场景相比较。
在 Scenarios 菜单中选择 Duplicate Scenario,新的场景名默认是 scenario2(这里都先采取默认值),然后单击 OK 按钮。
在 Rapid Configuration 下选择 Star,点击 Next。
选择中心节点模型为:3C_SSII_1100_3300_4s_ae52_e48_ge3(3Com公司的交换机)。
选择边缘节点模型为:Sm_Int_wkstn,设置节点数为15。
选择链路模型为:10BaseT。
网络在工作空间中放置的位置,中心X轴坐标设置为75,Y轴的坐标设置为62.5,设置局域网的半径范围为20。
设置好以后如下图所示,点击 OK。
这时项目编辑器中出现另外一个局域网,接着添加 Cisco 路由器,然后连接两个网络,如下图所示。
将项目保存后运行仿真,仿真的参数设置如下图所示。
仿真完成后关闭对话框,然后在 node_31(服务器节点) 上右键,选择 View Results,在弹出的对话框中 Results for 选择 Current Project,在项目下勾选两个场景,然后在对象数据下勾选 Load(bits/sec),图的显示模式选择 Overlaid Statistics,即叠加显示,得到的最终结果如下图所示。
将结果的收集模式改为 time_average,点击 Show 按钮,结果如下图所示,可以看到抖动被平滑了。
同样的操作方法比较两个场景下的 Ethernet Delay 的结果,在工作空间的空白处右键,选择 View Results,在弹出的对话框中 Results for 选择 Current Project,在项目下勾选两个场景,然后在全局统计下找到 Delay(sec) 并勾选,图的显示模式选择 Overlaid Statistics,得到的最终结果如下图所示。
从上图中可以看出,以太网的延时性能并没有因为服务器负载的增加而受影响。
以上就是 OPNET Modeler 软件的简单介绍与使用的全部内容了,本文通过配置一个简单的网络来了解 OPNET Modeler 软件的使用,该软件中还有很多的功能在本文中没有使用到,这些功能需要我们在今后的使用中慢慢了解熟悉并进行使用。
本文参考书目:OPNET 网络仿真/陈敏编著. - 北京:清华大学出版社,2004