基于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...。
基于OPNET的路由协议仿真教程(AODV、OLSR 、DSR等)的更多相关文章
- 基于modelsim-SE的简单仿真流程—下
基于modelsim-SE的简单仿真流程—下 编译 在 WorkSpace 窗口的 counter_tst.v上点击右键,如果选择Compile selected 则编译选中的文件,Compile A ...
- 基于modelsim-SE的简单仿真流程—上
基于modelsim-SE的简单仿真流程 编写RTL功能代码 要进行功能仿真,首先得用需要仿真的模块,也就是RTL功能代码,简称待测试的模块,该模块也就是在设计下载到FPGA的电路.一个电路模块想要有 ...
- 基于node.js制作爬虫教程
前言:最近想学习node.js,突然在网上看到基于node的爬虫制作教程,所以简单学习了一下,把这篇文章分享给同样初学node.js的朋友. 目标:爬取 http://tweixin.yueyishu ...
- Modelsim使用流程---基于TCL命令的仿真
Modelsim使用流程---基于TCL命令的仿真 本文使用的Modelsim版本为Modelsim SE-64 10.1.c 1.File -> new -> Project 2.添加或 ...
- 分享六个基于Bootstrap的实用开发教程和模板演示
关于Bootstrap,相信大家一定不陌生,它已经成为现在主流产业的一个重要工具,Bootstrap提供了优雅的HTML和CSS规范,它基于jQuery框架开发的,它在jQuery框架的基础上进行了更 ...
- 基于VirtualBox安装Ubuntu图文教程
基于VirtualBox虚拟机安装Ubuntu图文教程 一. 下载安装VirtualBox 官网下载VirtualBox,目前版本:VirtualBox 5.1.8 for Windows hosts ...
- 基于HTML5气3D仿真培训系统
根据最近的上线HTML5的燃气3D培训仿真系统.曾经的老系统是採用基于C++和OpenGL的OpenSceneGraph引擎设计的,OSG引擎性能和渲染效果各方面还是不错的,但由于这次新产品需求要求能 ...
- 基于VirtualBox虚拟机安装Ubuntu教程
基于VirtualBox虚拟机安装Ubuntu图文教程 一. 下载安装VirtualBox 官网下载VirtualBox,目前版本:VirtualBox 6.0.4 for Windows hosts ...
- ModelSim仿真教程
本文章详细介绍了怎样用ModelSim仿真Verilog,虽然只是很简单的一个二分频器的例子,但却正式小白入门所需要的. 本教程以ModelSim SE 10.4为例 1. 新建工程 file-> ...
随机推荐
- SAS信用评分之逻辑回归的变量选择
SAS信用评分之逻辑回归的变量选择 关于woe的转化,这一部在之前的这篇文章:sas批量输出变量woe值中已经写了,woe也只是简单的公式转化而已,所以在这系列中就不细究了哈.这次的文章我想来讲逻辑回 ...
- 转:Linux--进程间通信(信号量,共享内存)
源地址:http://www.cnblogs.com/forstudy/archive/2012/03/26/2413724.html Linux--进程间通信(信号量,共享内存)(转) 一. 信 ...
- httpclient遇到java.net.URISyntaxException: Illegal character in scheme name at index 0:
正准备按照大佬的解决办法处理, 看会一条回复,说url有空格 检查了一下,还真是有空格 去除url中的空格,问题解除
- 使用jstl el表达式对form表单的功能进行区分 比如新建和修改共用一个form
新建一个专栏,修改这个专栏信息 完全可以做在一个jsp的一个form中 但是,需要注意的是,使用mvc的对象属性自动封装的话 如果id为空,将会报错,无法进入controller中的 所以要在页面上判 ...
- Maven实战01_Maven简介
1:何为Maven Maven:中文翻译为"知识的积累",也可翻译为"专家"或"内行". 谈到Maven,就不得不提"构建(bui ...
- jmeter是什么
Apache JMeter 是Apache 组织开发的基于 Java 的压力测试工具: 适用的测试领域:地方 用于对软件做压力测试,它可以用于测试静态和动态资源,例如:静态文件,Java 小程序.CG ...
- PHP 缓存详解
为什么要使用缓存 一个网站或者一个应用的标准流程是浏览器向应用服务器发出请求,应用服务器做一些计算和逻辑判断之后再请求数据库,数据库收到请求后在经过计算将数据返回给应用服务器,应用服务器再次计算后把数 ...
- CentOS如何升级openssl到最新版本
本文不再更新,可能存在内容过时的情况,实时更新请移步原文地址:CentOS如何升级openssl到最新版本: 环境信息 CentOS Linux release 7.6.1810 (Core): Op ...
- 【noip】跟着洛谷刷noip题2
noip好难呀. 上一个感觉有点长了,重开一个. 36.Vigenère 密码 粘个Openjudge上的代码 #include<cstdio> #include<iostream& ...
- Crontab 入门
参考网址: http://www.centoscn.com/CentOS/help/2014/0820/3524.html 简单命令 service crond restart //重启crontab ...