OPNET Modeler 例程——停等协议的建模和仿真
文章目录
- 一、概述
- 二、链路模型和包格式创建
- 三、进程模型
- 1.src 进程模型
- 2.sink 进程模型
- 四、节点模型
- 五、网络模型
- 六、仿真结果
一、概述
本例程是在 OPNET Modeler 中对停等协议的建模和仿真,其中停等协议的操作过程如下:
(1)发送方每次仅将当前信息帧作为备份保留在缓冲存储器中;
(2)当发送方开始发送信息帧时,赋予该信息帧一个帧序号,随即启动计时器;
(3)当接收方收到无差错的信息帧后,即向发送方返回一个与该帧序号相同序号的ACK确认帧;
(4)当接收方检测到一个含有差错的信息帧时,便舍弃该帧;
(5)若发送方在规定时间内收到ACK确认帧,即将计时器清零,需而开始下一帧的发送;
(6)若发送方在规定时间内未收到ACK确认帧,则应重发存于缓冲器中的待确认信息帧。
二、链路模型和包格式创建
创建点对点双工链路模型,其设置如下图所示。

ACK 反馈包的包格式设置如下图所示。

三、进程模型
1.src 进程模型
停等协议模块的进程模型状态转移如下表所示。
| 当前状态 | 转移条件 | 执行函数 | 下一状态 |
|---|---|---|---|
| init | POWER_UP | 无 | idle |
| idle | FRAME_ARRIVAL | send_frame() | ACKWait |
| idle | LINK_FAIL | 无 | Linkdown |
| idle | default | 无 | idle |
| ACKWait | FRAME_ARRIVAL | queue_frame() | ACKWait |
| ACKWait | ACK_ARRIVAL && !QUEUE_EMPTY | proc_ack();send_next_frame() | ACKWait |
| ACKWait | TIME_OUT | resend_frame() | ACKWait |
| ACKWait | LINK_FAIL | 无 | ACK_Wait_Linkdown |
| ACKWait | ACK_ARRIVAL && QUEUE_EMPTY | proc_ack() | idle |
| Linkdown | LINK_UP && QUEUE_EMPTY | 无 | idle |
| Linkdown | LINK_UP && !QUEUE_EMPTY | send_next_frame() | ACKWait |
| Linkdown | FRAME_ARRIVAL | queue_frame() | Linkdown |
| ACK_Wait_Linkdown | LINK_UP | proc_flag() | ACKWait |
| ACK_Wait_Linkdown | FRAME_ARRIVAL | queue_frame() | ACK_Wait_Linkdown |
| ACK_Wait_Linkdown | TIME_OUT | flag = 1; | ACK_Wait_LinkDown |
stop_wait_queue 模块的进程模型如下图所示。

状态变量设置如下图所示。

头块代码如下。
#define GEN_IN_STRM 0
#define RCV_IN_STRM 1
#define POWER_UP (op_intrpt_type() == OPC_INTRPT_BEGSIM)
#define FRAME_ARRIVAL (op_intrpt_type() == OPC_INTRPT_STRM && op_intrpt_strm() == GEN_IN_STRM)
#define LINK_FAIL (op_intrpt_type() == OPC_INTRPT_FAIL)
#define TIME_OUT (op_intrpt_type() == OPC_INTRPT_SELF)
#define ACK_ARRIVAL (op_intrpt_type() == OPC_INTRPT_STRM && op_intrpt_strm() == RCV_IN_STRM)
#define QUEUE_EMPTY (op_subq_empty(0) == OPC_TRUE)
#define LINK_UP (op_intrpt_type() == OPC_INTRPT_RECOVER)
函数块代码。
void send(Packet * pkptr)
{FIN(send(Packet * pkptr));copy_pk = op_pk_copy(pkptr); op_pk_send(pkptr,0);ack_event = op_intrpt_schedule_self(op_sim_time()+5.0,0); FOUT;
}void send_frame()
{FIN(send_frame());send(op_pk_get(op_intrpt_strm())); FOUT;
}void queue_frame()
{FIN(queue_frame());op_subq_pk_insert(0,op_pk_get(op_intrpt_strm()),OPC_QPOS_TAIL); FOUT;
}void resend_frame()
{FIN(resend_frame());send(copy_pk); FOUT;
}void proc_ack()
{FIN(proc_ack());op_ev_cancel(ack_event);op_pk_destroy(copy_pk);FOUT;
}void send_next_frame()
{FIN(send_next_frame());send(op_subq_pk_remove(0,OPC_QPOS_HEAD)); FOUT;
}void proc_flag()
{FIN(proc_flag());if(flag == 1)resend_frame();flag = 0;FOUT;
}
2.sink 进程模型
sink 模块的进程模型如下图所示。

状态变量设置如下图所示。

头块代码。
#define PK_RECEIVE (op_intrpt_type()==OPC_INTRPT_STRM)
init 状态的进入执行代码。
RBT_handle = op_stat_reg("Received Bit Throughput (bits/sec)",OPC_STAT_INDEX_NONE,OPC_STAT_GLOBAL);
ETE_Delay_handle = op_stat_reg("End to end Delay (sec)",OPC_STAT_INDEX_NONE,OPC_STAT_GLOBAL);
ack_count_handle = op_stat_reg("Number of ACK Packets",OPC_STAT_INDEX_NONE,OPC_STAT_GLOBAL);
op_ima_obj_attr_get(op_id_self(),"Ack Sending Delay(seconds)",&ack_delay);
received_bit = 0;
ack_count = 0;
函数块代码。
void receive_process()
{int index;Packet* pkptr;Packet* ack_ptr;double ete_delay;double creation_time;double sim_time;FIN(receive_process());index = op_intrpt_strm();pkptr = op_pk_get(index);creation_time = op_pk_creation_time_get(pkptr);sim_time = op_sim_time();ete_delay = sim_time - creation_time;op_stat_write(ETE_Delay_handle,ete_delay);received_bit += op_pk_total_size_get(pkptr);op_stat_write(RBT_handle,received_bit/sim_time);op_pk_destroy(pkptr);ack_ptr = op_pk_create_fmt("ack_pkt"); ack_count++;op_stat_write(ack_count_handle,ack_count);op_pk_send_delayed(ack_ptr,0,ack_delay);FOUT;
}
全局属性设置如下图。

全局统计量设置如下图。

四、节点模型
src 的节点模型如下图所示。

gen 模块的属性设置。

stop_wait_queue 模块的属性设置。

sink 的节点模型如下图所示。

sink 模块的属性设置。

五、网络模型
网络模型如下图所示。

除了前面创建的两个节点和链路对象外,还有一个设置链路故障的对象。
链路模型的属性设置。

Failure Recovery 的属性设置如下图所示。

设置其在180s时链路故障,480s时链路恢复,再到600s时链路故障,720s时链路再恢复。
六、仿真结果
在网络模型中设置 src 节点的发包间隔为1s,sink 节点的 ACK 回复延迟 8s,仿真持续时间为1000s,运行仿真。
端到端延时的结果如下图所示。

设置绘图为离散形式,显示如下。

可以看到,在链路没有故障时,延时是增长的,有故障时,延时就没有了。
接收到 ACK 包的数量如下图所示。

链路没有故障时,ACK 包的数量单调递增,链路故障时就没有 ACK 包到达了,此时包的数量保持不变,链路恢复后,ACK 包的数量接着增加。
吞吐量如下图所示。

吞吐量和链路的故障与否仍然有关,在链路产生故障时,吞吐量明显下降。
下行链路利用率如下图所示。

上行链路利用率如下图所示。

产生包的速率是比收到 ACK 包的速率大的,因此,下行链路利用率要比上行链路利用率高出不少。
src 节点的包动画如下。

sink 节点的包动画如下。

stop_wait_queue 模块的进程模型动画如下。

sink 模块的进程模型动画如下。

以上就是 OPNET Modeler 例程——停等协议的建模和仿真的全部内容了。
相关文章:
OPNET Modeler 例程——停等协议的建模和仿真
文章目录 一、概述二、链路模型和包格式创建三、进程模型1.src 进程模型2.sink 进程模型 四、节点模型五、网络模型六、仿真结果 一、概述 本例程是在 OPNET Modeler 中对停等协议的建模和仿真,其中停等协议的操作过程如下: (1)发…...
JavaScript - 基础+WebAPI(笔记)
前言: 求关注😭 本篇文章主要记录以下几部分: 基础: 输入输出语法;数据类型;运算符;流程控制 - 分支语句;流程控制 - 循环语句;数组 - 基础;函数 - 基础&…...
API调用的注意事项及好处!
API调用是指一个软件系统通过预定格式、协议和框架,向另一个软件系统发送请求并获得响应的过程。 在进行API调用时需要注意以下事项: 1. 认真阅读API文档:在调用API前,一定要认真仔细地阅读相关的API文档,了解API接口…...
ros2中常用命令,与ros1的区别
文章目录 1. ros1 中的rosrun tf tf_echo 在ros2中使用办法2. rqt 中 tf 树的查看3. roscd 在ros2中使用办法4. ros2获取时间的方法: 1. ros1 中的rosrun tf tf_echo 在ros2中使用办法 # ros2 run tf2_ros tf2_echo [reference_frame] [target_frame] ros2 run tf2…...
利用MySQL语句批量替换指定wordpress文章中的图片路径
很多时间我们将服务器中的图片下载到本地,然后删掉,但是有一个问题就是,所有文章中的图片路径还是以前的,没有根据域名来。导致下午某些时间段图片都是无法显示的,后来想到用MySQL直接批量替换,执行才不到1…...
Linux必会100个命令(六十)curl
在Linux中curl是一个利用URL规则在命令行下工作的文件传输工具,可以说是一款很强大的http命令行工具。它支持文件的上传和下载,是综合传输工具。 curl选项比较多,使用man curl或者curl -h获取帮助信息。 -a/--append …...
物联网硬件安全与整改梳理(1)
物联网安全工作梳理(0)_luozhonghua2000的博客-CSDN博客 上篇讲了物联网总体安全知识框架和工作梳理,这篇单独讲下硬件安全方面的问题和整改知识技能点。硬件安全主要分5个方面来讲:硬件安全现状,硬件安全技术分析,典型案例,安全架构整改,安全整改措施。 智能硬件安全总…...
【大数据学习篇3】HDFS命令操作与MR单词统计
1. HDFS命令使用 [rootmaster bin]# su hd[hdmaster bin]$ #查看/目录[hdmaster bin]$ hdfs dfs -ls / 5 #在/目录创建一个为test名字的文件夹[hdmaster bin]$ hdfs dfs -mkdir /test#查看/目录[hdmaster bin]$ hdfs dfs -ls Found 1 itemsdrwxr-xr-x - hd supergroup …...
java中设计模式总结
设计模式是实际工作中写的各种代码进行高层次抽象的总结,其中最出名的当属 Gang of Four (GoF) 的分类了,他们将设计模式分类为 23 种经典的模式,根据用途又可以分为三大类,分别为创建型模式、结构型模式和行为型模式。 有一些重…...
ChatGPT不到1分钟生成全部代码,你就说慌不慌吧?
生成过程视频: 如何使用ChatGPT快速生成代码 (qq.com) 如何使用ChatGPT快速生成SpringBoot集成Dubbo的完整案例 1、Dubbo最新版本有哪些新特性 Dubbo最新版本是2.7.9,于2021年6月发布。以下是该版本的一些新特性: 1)增加Dubbo-go…...
Python进阶知识(1)—— 什么是爬虫?爬文档,爬图片,万物皆可爬,文末附模板
文章目录 01 | 🍒 什么是 P y t h o n 爬虫? \color{red}{什么是Python爬虫?} 什么是Python爬虫?🍒02 | 🍊 怎么发起网络请求? \color{orange}{怎么发起网络请求?} 怎么发起网络请求…...
如何在andorid native layer中加log function.【转】
在开发Android一些应用或是链接库, 在程序代码中埋一些log是一定有需要的, 因为谁也无法保证自己所写出来的程序一定没有问题, 而log机制正是用来追踪bug途径的一种常用的方法. 在andorid中提供了logcat的机制来作log的目的, 在javalayer有logcat class可以用,哪在nativelayer呢…...
FreeRTOS 空闲任务
文章目录 一、空闲任务详解1. 空闲任务简介2. 空闲任务的创建3. 空闲任务函数 二、空闲任务钩子函数详解1. 钩子函数2. 空闲任务钩子函数 三、空闲任务钩子函数实验 一、空闲任务详解 1. 空闲任务简介 当 FreeRTOS 的调度器启动以后就会自动的创建一个空闲任务,这…...
快速生成HTML结构语法、快速生成CSS样式语法以及emmet
快速生成HTML结构语法 1、生成标签直接输入标签名按Tab键即可 比如 div 然后tab键 2、如果要生成多个相同标签,加上就可以了,比如 div3就可以快捷生成三个div 3、如果有父子级关系的标签,可以用 > 比如 ul>li 就可以了 4、如果有兄弟关…...
企业直播该如何做?硬件设备、网络环境、设备连接和观看权限等整个直播流程教程
这是一份面向直播新手的企业直播说明教程,字数较多,完整看完,可能会需要求10分钟,建议您可以【收藏】,如果本文章对您有帮助,就帮助【点个赞】吧~~~ 阿酷TONY / 2023-5-12 / 原创文章 / 长沙 / 文章…...
第4章 静态网站部署
第4章 静态网站部署 Nginx是一个HTTP的web服务器,可以将服务器上的静态文件(如HTML、图片等)通过HTTP协议返回给浏览器客户端 4.1 案例:将ace-master这个静态网站部署到Nginx服务器上 4.1.1 通过Xftp将ace-master到linux服务器…...
免费版的mp3格式转换器有哪些?这三款软件帮你实现!
在娱乐文化越来越丰富的今天,人们越来越追求音乐、视频等娱乐方式,其中音乐作为一种能够治愈心灵的艺术形式备受欢迎。但要欣赏一首美妙的音乐,就需要我们自己去制作、编辑并转换其格式,以适应各种软件如MP3、MP4等格式。 方法一…...
版本控制器git
目录 一、版本控制系统 二、工作流程和使用命令 (1)工作流程 (2)一次完整流程的相关命令 1.初始化1个空的本地仓库 2.克隆方式1个远程仓库到本地仓库 3.新文件添加到暂存区 4.查看仓库状态,显示有变更的文件 5…...
接口自动化测试 vs. UI自动化测试:为什么前者更快,更省力,更稳定?
从入门到精通!企业级接口自动化测试实战,详细教学!(自学必备视频) 目录 前言: 一、什么是接口自动化测试和 UI 自动化测试 二、为什么接口自动化测试效率比 UI 自动化测试高 1.执行速度 2.维护成本 3.…...
看Chat GPT解答《情报学基础教程》课后思考和习题
情报学基础教程课后思考题 情报学经验规律 (一)按照布拉德福定律,设布拉德福常数为5, 当核心期刊数量为20时,外围一区和外围二区期刊数量各是多少? 答: 核心期刊数和外围期刊比例关系:nc: n1: n2 = 1: a : a2 (a称为布拉德福常数) 外围一区期刊数量为20*5=100,…...
idea大量爆红问题解决
问题描述 在学习和工作中,idea是程序员不可缺少的一个工具,但是突然在有些时候就会出现大量爆红的问题,发现无法跳转,无论是关机重启或者是替换root都无法解决 就是如上所展示的问题,但是程序依然可以启动。 问题解决…...
Python:操作 Excel 折叠
💖亲爱的技术爱好者们,热烈欢迎来到 Kant2048 的博客!我是 Thomas Kant,很开心能在CSDN上与你们相遇~💖 本博客的精华专栏: 【自动化测试】 【测试经验】 【人工智能】 【Python】 Python 操作 Excel 系列 读取单元格数据按行写入设置行高和列宽自动调整行高和列宽水平…...
理解 MCP 工作流:使用 Ollama 和 LangChain 构建本地 MCP 客户端
🌟 什么是 MCP? 模型控制协议 (MCP) 是一种创新的协议,旨在无缝连接 AI 模型与应用程序。 MCP 是一个开源协议,它标准化了我们的 LLM 应用程序连接所需工具和数据源并与之协作的方式。 可以把它想象成你的 AI 模型 和想要使用它…...
【决胜公务员考试】求职OMG——见面课测验1
2025最新版!!!6.8截至答题,大家注意呀! 博主码字不易点个关注吧,祝期末顺利~~ 1.单选题(2分) 下列说法错误的是:( B ) A.选调生属于公务员系统 B.公务员属于事业编 C.选调生有基层锻炼的要求 D…...
大模型多显卡多服务器并行计算方法与实践指南
一、分布式训练概述 大规模语言模型的训练通常需要分布式计算技术,以解决单机资源不足的问题。分布式训练主要分为两种模式: 数据并行:将数据分片到不同设备,每个设备拥有完整的模型副本 模型并行:将模型分割到不同设备,每个设备处理部分模型计算 现代大模型训练通常结合…...
Java多线程实现之Thread类深度解析
Java多线程实现之Thread类深度解析 一、多线程基础概念1.1 什么是线程1.2 多线程的优势1.3 Java多线程模型 二、Thread类的基本结构与构造函数2.1 Thread类的继承关系2.2 构造函数 三、创建和启动线程3.1 继承Thread类创建线程3.2 实现Runnable接口创建线程 四、Thread类的核心…...
Fabric V2.5 通用溯源系统——增加图片上传与下载功能
fabric-trace项目在发布一年后,部署量已突破1000次,为支持更多场景,现新增支持图片信息上链,本文对图片上传、下载功能代码进行梳理,包含智能合约、后端、前端部分。 一、智能合约修改 为了增加图片信息上链溯源,需要对底层数据结构进行修改,在此对智能合约中的农产品数…...
技术栈RabbitMq的介绍和使用
目录 1. 什么是消息队列?2. 消息队列的优点3. RabbitMQ 消息队列概述4. RabbitMQ 安装5. Exchange 四种类型5.1 direct 精准匹配5.2 fanout 广播5.3 topic 正则匹配 6. RabbitMQ 队列模式6.1 简单队列模式6.2 工作队列模式6.3 发布/订阅模式6.4 路由模式6.5 主题模式…...
实战三:开发网页端界面完成黑白视频转为彩色视频
一、需求描述 设计一个简单的视频上色应用,用户可以通过网页界面上传黑白视频,系统会自动将其转换为彩色视频。整个过程对用户来说非常简单直观,不需要了解技术细节。 效果图 二、实现思路 总体思路: 用户通过Gradio界面上…...
Oracle11g安装包
Oracle 11g安装包 适用于windows系统,64位 下载路径 oracle 11g 安装包...
