基于OPNET的路由协议仿真教程(AODV、OLSR 、DSR等)

前言:

目前由于项目需要,学习了基于opnet的网络仿真方法,发现该软件的学习资料少之又少,所以将自己搜集到的学习资料进行整理,希望能帮助后来的人。

主要参考资料:OPNET网络仿真(清华陈敏版)

仿真软件介绍:

主流仿真软件如下:

OPNET:

OPNET是商业软件,所以界面非常好。功能上很强大,界面错落有致,统一严格。操作也很方便,对节点的修改主要就是对其属性的修改。由于OPNET14.5及以前的版本都是免费的,所以用户量是三种网络仿真软件中最多的,这一点很像Windows。

QualNet:

QualNet是美国Scalable Networks Technologies公司的产品,前身是GloMoSim,根源于美国国防部高级研究计划署(DARPA)的全球移动通信计划,主要对无线移动通信网络进行了优化处理,从仿真速度上得到了很大的提升,同时通过对无线信道和射频技术的建模也保证了较高的仿真精度。QualNet基于已经过验证的PARSEC并行仿真内核。每个结点都独立进行运算,这也和现实相符合。允许用户在真正的并行仿真环境当中优化并行仿真性能。对小规模同种复杂度的网络模型仿真,QualNet仿真速度是其它仿真器的几倍,对于大规模网络,QualNet仿真速度是其它仿真器的几十倍,如果QualNet采用并行仿真机制,能达到比其它仿真器快千倍的速度。相比与其他仿真软件,QualNet有其过人之处,界面友好,功能强大,接口特别灵活(单从接口这一点上来说,QualNet倒像Windows,而OPNET像Mac),在用到多系统的联合仿真是特别方便,物理层的建模可借助于Matlab实现。

NS:

NS的最好一个优点就是开源的,当然也是免费的(像Linux吧),由于是开源的,所以可以用于构建某些特殊的节点。但个人感觉,如果你不是编程高手的话,用NS仿真的话,会让你头大。同时,由于是商业软件所以版本推出不如NS快。

OPNET介绍:

OPNET软件包主要由三个模块组成:
●ItDecisionGuru 适合最终用户,它只有仿真、分析功能。
●Modeler 在ItDecisionGuru基础上增加了建库功能。
●Modeler/radio 在Modeler上又增加了对移动通信和卫星通信的支持。
ITDecisionGuru、Modeler、Modeler/Radio,这三个模块并非相互独立,而是层层嵌套的,采用同一用户界面。  

OPNET有以下几个特点:

(1) OPN ET 采用阶层性的模拟方式, 分三层机制建模. 最底层为进程模型, 描述了构成节点模型的进程, 利用有限状态机来设计; 其次为节点模型, 描述了构成网络拓扑的节点, 因而每一类节点有相应的节点模型; 最上层为网络模型, 构成了网络拓扑结构.

(2) 基于事件出发的有限状态机建模, 采用离散事件驱动的模拟机理.

(3) 基于包的通信, 通过包的字段来体现通信协议

(4) 丰富的统计量收集和分析功能.

图1 OPNET14.5软件界面

仿真教程:

试想一下,你需要为公司内部互联网的扩展制定一个合理的方案。目前,公司在办公楼的第一层有一个星型拓扑的网络,现在要在第二层增加另一个星型拓扑网络。

这时一个典型的“what-if”问题,所要解决的是确保增加的网络不会导致整个网络的连通失败,如图2所示:

 图2. 计划中扩展后的网络模型

步骤1:创建新的项目和场景

1) 打开Modeler。

2) 从File 菜单中选择New...。

3) 从弹出的下拉菜单中选择Project 并单击OK。

 

图3. 新建项目和场景

4) 单击OK 按钮, 出现开始向导,创建新的背景拓扑图,如图4所示:

 

 

图4. 开始向导:创建新的背景拓扑图

5) 单击Next,选定网络的范围,如图5所示:

 

 

图5. 开始向导:选择网络范围

6) 单击Next,指定网络的大小,如图6所示:

 

 

图6. 开始向导:指定网络大小

7) 单击Next,选择 OPNET 自带的对象模型家族种类,如图7所示:

 

 

图7. 开始向导:选择对象模型家族种类

8) 单击Next,再次确认环境变量,如图8所示:

 

图8. 设置完毕的开始向导

9) 单击完成,这时出现大小和规格如同所指定的工作空间,同时弹出一个对象模板(包含刚刚选定的对象模型家族的所有模型),如图9所示:

通过对象模板中的节点和链路模型来创建网络模型。

节点模型:代表实际的设备。

链路模型:代表连接设备的物理媒质,可以是电缆或者光缆。

可以通过对象模板中的图标直观地看出节点模型和链路模型。可以使用以下三种方法之一创建网络拓扑:

导入拓扑图。

从对象模板中选择模型并放置在工作空间中。

使用快速拓扑配置工具(Rapid Configuration)

 

 

图9. 工作空间和对象模板

步骤2:创建网络拓扑

Topology –〉Rapid Configuration

    从配置下拉列表中选择Star,单击OK...,如图11 所示:

 图11. Rapid Configuration对话框

接下来需要为网络指定节点模型和链路模型:

OPNET 中标准模型的命名规则为:

<protocol1>_..._<protocoln>_<function>_<mod>其中<protocol>为模型用到的协议,可能同时用到几个协议<function>代表模型的大致功能<mod>模型派生类别。

选择中心节点模型为3C_SSII_1100_3300_4s_ae52_e48_ge3。这是3Com 公司的交换机。

选择周边节点模型为Sm_Int_wkstn,并设置节点个数为30。

选择链路模型为10BaseT

指定网络在工作空间中放置的位置:设置中心的 X 和Y 轴坐标为25,设置局域网的半径范围为 20。

设置好单击OK 按钮,如图12所示:

 图12. 快速拓扑配置对话框

项目编辑器中出现如图13所示的网络拓扑。

 图13. 快速拓扑配置后的网络模型

    接下来,需要扩展这个网络,首先增加一个服务器。这时将用到第二种创建网络模型的方法:在对象模板中选择模型并放置在工作空间内。

打开对象模板,找到Sm_Int_server 对象,并将它放置在工作空间中。

 

图14. 从对象模板中添加Sm_Int_server 对象

接下来,需要连接服务器和星型网络:

在对象模板中找到10BaseT 链路对象。

在服务器上单击鼠标左键,移动光标,再单击星型网络的中心节点。

这时出现连接两个节点对象的链路。

单击鼠标右键结束链路创建。

 图15. 连接服务器和星型网络

最后需要为网络配置业务,包括应用定义(Application definition)和业务规格定义(Profile definition),设置业务涉及的内容较复杂,本例程不作要求,因此模板中应用定义对象和业务规格定义对象的参数已经配置好(为Light database 业务),只要将他们放置在工作空间中即可。

在对象模板中找到Sm_Application_Config 对象并将其放置在工作空间中。

单击右键,光标重新移到对象模板中,单击Sm_Profile_Config,并将其放置在工作空间中,单击鼠标右键。

关闭对象模板。

图16. 配置完毕的网络模型

步骤3:收集统计信息

1) 打开节点模型编辑器和进程模型编辑器。

OPNET 采用三层建模机制,最底层为进程(Process)模型,以状态机来描述协议;其次为节点(Node)模型,由相应的协议模型构成,反映设备特性;最上层为网络模型。三层模型和实际的网络、设备、协议层次完全对应,全面反映了网络的相关特性。

每个网络对象(链路除外)都是一个节点模型,它由一个或多个模块(Modules)组成,模块与模块之间通过包流(Packet streams)或状态线相连。而模块实际上为进程模型,它通过状态转移图(STD, State Transition Diagram)来描述模块的行为。

    现在让我们来看看第一层网络服务器的结构:

在项目编辑器中鼠标双击node_31(服务器节点),这时打开一个新的节点模型编辑器窗口,如图17所示:

 

图17. 以太网服务器节点模型

    图17为以太网服务器的内部结构,它由几个模块以及连接模块的包流和状态线组成。在仿真过程中,来自客户端的数据包被收信机hub_rx_0_0 接收,然后由下至上穿过协议栈到application 模块。经过处理后,又沿原路返回至发信机hub_tx_0_0,最后被传输到客户端,如图18 所示:

 

图18. 包的输入输出接口模块―收发机

接下来,我们来看看传输适应层tpal 模块的内容。

    在节点模型编辑器中的tpal 模块上双击鼠标,打开一个新的进程模型编辑器,如图19所示:

 图19. tpal进程模型

    在init 状态的上半部双击鼠标,打开它的入口代码。

在init 状态的下半部双击鼠标,打开它的出口代码。

进程中的每个状态(图中红色的或绿色的圆圈)都包含一个入口代码(enter executive)和一个出口代码(exit executive),它们由C/C++代码组成。入口代码在进入状态时执行,出口代码在离开状态时执行,如图20所示:

 图20. Init 状态的入口执行代码和出口执行代码

关闭这两个代码窗口。

状态与状态之间通过转移线transitions 相连。转移线可以是带条件的(必须满足条件才能转移)或者无条件的(直接转移)。图21包含两条转移线,一条是从wait 状态到open 状态的条件转移线(虚线表示)。虚线中间的OPEN 条件必须满足,wait 状态才能转移到open 状态。然而,从open 状态到wait 状态的转移(实线表示)是无条件的,因此当执行完open 状态的代码后立即转移到wait 状态。

 图21. 状态之间的条件转移

关闭节点和进程模型编辑器。

2) 收集统计量

在网络模型中可以对单个对象收集统计量(Object statistics),也可以对整个网络收集全局统计量(Global statistics)。

到现在为止,已经建好了网络模型,现在要根据实例要求解决的问题决定收集哪些统计量:

a) 服务器有能力处理扩展网络的额外业务负载吗?

b) 一旦与扩展网络连接,整个网络的延时性能还能够接受吗?

为了找到这些问题的答案,需要选择一个对象统计量:Server Load 和一个全局统计量:Ethernet Delay。

服务器负载(Server Load)是整个网络的性能瓶颈。下面来收集与服务器负载相关的统计量:

a) 在服务器节点(node_31)上单击鼠标右键,从弹出的菜单中选择Choose Individual Statistics。这时出现node_31 的选择统计量对话框,如图22所示(统计量对话框以树型结构显示统计量,可以清楚地了解它们的隶属关系)。

b) 单击Node Statistics->Ethernet,选择Load(bits/sec)统计量,如图22。

c) 单击OK 关闭对话框。

 

图22. 选择结果统计量

全局统计量可以用来收集整个网络的信息。下面,我们通过选择全局Delay 统计量来查看整个网络的延时性能。

d) 在网络编辑器的工作空间(避免指到对象)上单击鼠标右键,从弹出的菜单中选择Choose Individual Statistics,图23。

e) 单击Gobal Statistics 树型结构,找到并点开Ethernet 节点统计量,图24。

f) 选中Delay(sec)统计量,图24。

g) 单击OK 按钮关闭对话框。

 

图23. 设置网络全局统计量

图24. 选择网络全局延时统计量

步骤4:运行仿真

下面,可以准备运行仿真了。

1) 首先,需要确定repositories属性设置正确:

    a) 在Edit 菜单中选择Preferences。

    b) 在查找文本框中输入“repositories”,单击Find 按钮,图25。

    c) 在弹出的对话框的左下角单击Insert 按钮,在文本框中输入stdmod,然后回车,图26、27。

d) 单击OK 关闭repositories 和Preferences 对话框。

 图25. 确定repositories属性设置

 

图26. 编辑Network Simulation Repositories

 

图27. 设置Network Simulation Repositories为stdmod

优化仿真核心:

仿真核心有development(调试)和optimized(优化)两种。调试状态的仿真核心会收集仿真信息,这些信息可用来调试模块。而优化仿真核心使运行速度加快。系统缺省为development状态。

设置优化仿真的方法如下:

在Edit 菜单中选择Preferences,在查找文本框中输入kernel_type,单击Find 按钮。将对应的value 设置为optimized。

2) 接下来运行仿真:

a) 在Simulation 菜单中选择Configure Simulationl...,或者在工具栏中选择运行仿真按钮。

b) 将仿真时间Duration 设置为0.5,即模拟执行半小时的仿真,如图28所示。

 图28. 配置仿真参数

c) 单击Run 按钮运行仿真。

d) 运行完毕后单击Close 按钮关闭对话框。

步骤5:查看结果

    可以从项目编辑器中弹出的菜单中选择View Results 查看结果。

1) 查看服务器Ethernet load 结果:

a) 在服务器节点(node_31)上单击鼠标右键,从弹出的菜单中选择View Results,这时出现查看结果对话框,如图30所示。

b) 然后选中Load(bits/sec)。

 图30. 查看结果

c) 单击Show 按钮,这时在项目编辑器上出现如图31所示的结果。

 

图31. 网络负载结果

不同的实验曲线走势应该是大致相同,当然具体的取值会因为节点放置的位置和链路长度不同而有微弱的差别。

注意到负载最大值为 7,000 bits/second。这个场景是我们想得到的值,用它和后面扩展网络后的结果进行比较,关闭对话框。

2) 现在来查看Ethernet Delay 的结果,这是一个全局统计量:

    在工作空间中单击鼠标右键,从弹出的菜单中选择View Results。

    选择Global Statistics→Ethernet→Delay(sec),然后单击Show 按钮。

注意到网络收敛时的延时大约为0.4 微秒,如图32所示。

 图32. 网络延时结果

步骤6:复制场景并扩展网络

    现在已经创建了一个基本的网络,并且收集了相关结果。现在可以扩展该网络并且验证在增加额外负载下,网络仍然能够很好地工作。

为了保留刚才的网络场景,以便和扩展的网络场景的仿真结果相比较,需要复制场景:

    1)在Scenarios 菜单中选择Duplicate Scenario...。

    2)命名新的场景为expansion。

    3)单击OK 按钮。

    这时出现和刚才网络模型一模一样的场景。

    接下来,需要构建网络的另一部分。

    4)从Topology 菜单中选择Rapid Configuration。

    5)从配置下拉列表中选择Star,单击OK...。

    􀂉 选择中心节点模型为 3C_SSII_1100_3300_4s_ae52_e48_ge3。

    􀂉 选择周边节点模型为 Sm_Int_wkstn,并设置节点个数为15。

    􀂉 选择链路模型为 10BaseT。

    􀂉 指定网络在工作空间中放置的位置:中心的 X 轴坐标为75 和Y 轴坐标为62.5。局域网的半径范围为20。

    6)设置好以后单击OK 按钮,这时项目编辑器中出现另一个局域网。

连接这两个局域网:

    7)单击对象模板工具按钮。

    8)选中Cisco 2514 路由器并将它放置在两个局域网之间。单击鼠标右键结束放置。

    9)在对象模板中选中10BaseT 链路图标,在项目编辑器中分别连接node_30 和node_50(Cisco 路由器),以及node_49 和node_50。

    10)单击鼠标右键。

    11)关闭对象模板。

    12)在File 菜单中选择Save 保存项目。

这时整个网络建好了,如图33所示。

 

图33. 扩展后的网络模型

步骤7:再次运行

现在可以运行仿真了。

 1)在Simulation 菜单中选择Configure Simulationl...,或者在工具栏中选择运行仿真按钮。

    2)将仿真时间Duration 设置为0.5,即模拟执行半小时的仿真。

    3)单击Run 按钮运行仿真。

4)运行完毕后单击Close 按钮关闭对话框。

3.1.8步骤8:比较结果

为了回答最开始提出的问题,需要将这两个网络的仿真结果进行比较:

1)比较服务器负载:

    i)在服务器节点(node_31)上单击鼠标右键从弹出的菜单中选择View Results。

ii)选中Results for “Current Project”,选中两个场景,Office Network.node_31→Ethernet→Load(bits/sec)结果统计量,并在比较结果对话框的左下角的下拉列表中选择Overlaid Statistics,如图34所示。

 图34. 比较负载结果

    iii)单击show 查看比较的结果。

图35中曲线抖动很厉害,为了更加清楚两条曲线的走势,我们可以改变结果的收集模式,从View Results(如图36)对话框中间下面的下拉列表中选择time average,单击show,这时出现图37的结果,可以看出抖动被平滑了。

 

图35. 服务器负载结果比较图

 

图36. 平均负载比较图

iv)关闭server 的比较结果对话框。

2)比较网络延时:

最后,我们来查看增加第二个网络对网络的延时性能的影响。比较这两个场景的Ethernet delay 结果:

    i)在工作空间中单击鼠标右键,从弹出的菜单中选择View Results。

    ii)选择Global Statistics→Ethernet→Delay(sec)统计量。

iii)单击show 显示比较结果,如图37所示。

 

图37. 端对端延时比较

iv)关闭比较结果对话框。

v)从File 菜单中选择Close,保存并关闭项目文件。

结论

1)从图36可以看出服务器的负载有明显增加;

2)从图37可以看出以太网延时性能并没有因为服务器负载的增加而受影响。

posted @ 2018-08-03 09:53  蓝莓派Alex  阅读(16604)  评论(0编辑  收藏  举报