OPNET Modeler 例程——停等协议的建模和仿真

news2025/1/13 13:49:49

文章目录

  • 一、概述
  • 二、链路模型和包格式创建
  • 三、进程模型
    • 1.src 进程模型
    • 2.sink 进程模型
  • 四、节点模型
  • 五、网络模型
  • 六、仿真结果


一、概述

本例程是在 OPNET Modeler 中对停等协议的建模和仿真,其中停等协议的操作过程如下:
(1)发送方每次仅将当前信息帧作为备份保留在缓冲存储器中;
(2)当发送方开始发送信息帧时,赋予该信息帧一个帧序号,随即启动计时器;
(3)当接收方收到无差错的信息帧后,即向发送方返回一个与该帧序号相同序号的ACK确认帧;
(4)当接收方检测到一个含有差错的信息帧时,便舍弃该帧;
(5)若发送方在规定时间内收到ACK确认帧,即将计时器清零,需而开始下一帧的发送;
(6)若发送方在规定时间内未收到ACK确认帧,则应重发存于缓冲器中的待确认信息帧。


二、链路模型和包格式创建

创建点对点双工链路模型,其设置如下图所示。
在这里插入图片描述
ACK 反馈包的包格式设置如下图所示。
在这里插入图片描述


三、进程模型

1.src 进程模型

停等协议模块的进程模型状态转移如下表所示。

当前状态转移条件执行函数下一状态
initPOWER_UPidle
idleFRAME_ARRIVALsend_frame()ACKWait
idleLINK_FAILLinkdown
idledefaultidle
ACKWaitFRAME_ARRIVALqueue_frame()ACKWait
ACKWaitACK_ARRIVAL && !QUEUE_EMPTYproc_ack();send_next_frame()ACKWait
ACKWaitTIME_OUTresend_frame()ACKWait
ACKWaitLINK_FAILACK_Wait_Linkdown
ACKWaitACK_ARRIVAL && QUEUE_EMPTYproc_ack()idle
LinkdownLINK_UP && QUEUE_EMPTYidle
LinkdownLINK_UP && !QUEUE_EMPTYsend_next_frame()ACKWait
LinkdownFRAME_ARRIVALqueue_frame()Linkdown
ACK_Wait_LinkdownLINK_UPproc_flag()ACKWait
ACK_Wait_LinkdownFRAME_ARRIVALqueue_frame()ACK_Wait_Linkdown
ACK_Wait_LinkdownTIME_OUTflag = 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 例程——停等协议的建模和仿真的全部内容了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/501730.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Spring Cloud Alibaba】Nacos config的使用和高阶用法

文章目录 🐍第一步,创建配置文件到nacos中🐍第二步,在项目中配置nacos的地址和指定文件🐍第三步,读取配置文件🐦高阶用法🐦高阶用法一:使用yaml文件🐦第一步&…

5年功能测试,薪资定格8K迷茫了....我该如何破局?

前言 来自一位粉丝的投稿,从毕业开始就一直在从事软件测试的工作,到目前已经是第5个年头了,从4k涨到了8K,显而易见我们这位粉丝并不满足现状,于是问我怎么破局,他当下应该干什么事情,或者应该学习什么技术…

从零开始学习Linux运维,成为IT领域翘楚(十)

文章目录 🔥Linux网络防火墙🔥Linux内核机制 🔥Linux网络防火墙 防火墙管理工具 firewalld概述 Centos 系统中集成了多款防火墙管理工具,其中 firewalld服务是默认的防火墙配置管理工具,它拥有基于 CLI(…

Aha! Adaptive History-driven Attack for Decision-based Black-box Models

AHA!基于决策的黑盒模型的自适应历史驱动攻击 Aha! Adaptive History-driven Attack for Decision-based Black-box Models ABSTRACT 基于决策的黑盒攻击指的是只使用受害者模型的前1个标签来制作对抗示例。一种常见的做法是从一个大的扰动开始,然后用一个确定的方…

【Nacos源码分析】

Nacos源码分析 Nacos源码分析1.下载Nacos源码并运行1.1.下载Nacos源码1.2.导入Demo工程1.3.导入Nacos源码1.4.proto编译1.4.1.什么是protobuf1.4.2.安装protoc1.4.3.编译proto 1.5.运行 2.服务注册2.1.服务注册接口2.2.客户端2.2.1.NacosServiceRegistryAutoConfiguration2.2.2…

【软件测试】| 软件测试 - 答疑篇

🎗️ 主页:小夜时雨 🎗️ 专栏:软件测试 🎗️ 如何优雅的活着,是我找寻的方向 目录 一、什么是软件测试二、测试和调试的区别三、软件测试和开发的区别 一、什么是软件测试 最常见的理解是:软…

使用J-Link的J-Scope功能查看数据实时波形

使用串口打印波形的不便之处 对于要查看的实时变量,一般可以用串口打印到可以查看波形的上位机上。但是这种办法有几个不方便的地方: 需要根据配套上位机的通讯协议,在单片机上编写上传数据的代码 单片机CPU需要浪费部分时间在串口数据上传上…

Makefile基础教程(变量的介绍和使用)

文章目录 前言一、Makefile变量概念介绍二、Makefile中变量的赋值方式1.简单赋值2.递归赋值3.条件赋值4.追加赋值 三、Makefile赋值在工程中的应用总结 前言 在C语言等语言中存在变量这个概念那么在Makefile中也是存在变量这个概念的,现在就让我们来学习一下什么是…

Solr(5):Solr控制台说明-主面板

1 Dashboard(仪表盘) 访问 http://ip:8983/solr时,出现该主页面,可查看到solr运行时间、solr版本,系统内存、虚拟机内存的使用情况 这里的图片描述 2 Logging(日志) 显示solr运行出现的异常或错误 3 Core Admin (core管理) 主要有Add Cor…

Java--io流知识总结

什么是输入/输出流 Java 程序通过流来完成输入/输出,所有的输入/输出以流的形式处理。因此要了解 I/O 系统,首先要理解输入/输出流的概念。 输入就是将数据从各种输入设备(包括文件、键盘等)中读取到内存中,输出则正好…

抢先微软,Google版Copilot上线!谷歌宣布给Google全家桶开放Bard功能

夕小瑶科技说 原创作者 | 智商掉了一地、兔子酱 就在本月 5 号,Bard 和 Google Workspace 同步更新了一则新闻,宣布 Workspace 的团队用户即日起可以申请体验由 Bard 大模型驱动的生成式 AI 工具。 这项计划在今年 3 月份首次公布,当时该工具…

上架Google play 提示 不符合64位版本应用的要求

此版本不符合 Google Play 关于提供 64 位版本应用的要求以下 APK 或 App Bundle 面向 64 位设备,但只有 32 位原生代码:[29]请向应用中添加64位和 32 位原生代码。使用 Android App Bundle 发布格式可自动确保每种设备架构仅收到所需加应用的总大小。 在build.gra…

HCIA-RS实验-路由配置-RIPv2 路由汇总和认证

RIPv2 路由汇总和认证简介: RIPv2 是一个距离向量路由协议,用于在网络中选择最佳路径。RIPv2 路由汇总和认证是两个重要的功能,可以提高路由协议的可靠性和安全性。 1. 路由汇总 路由汇总是将多个路由表项合并成一个较小的路由表项的过程。在…

vscode IDE 能用的上的扩展工具功能介绍

记录分享vscode扩展,包括提升开发效率。必备。主题美化。ChatGPT等。 参考 vscode-extensions [Best] 记录分享方式,整理自己用的扩展,还有一键备份和还原方法。 ⭐快速下载和使用扩展 后面会介绍很多vscode扩展.这裡有一个技巧,…

腾讯云2核2G4M轻量服务器带宽CPU流量系统盘性能测评

腾讯云轻量2核2G4M服务器自带4M公网带宽,下载速度可达512KB/秒,100%CPU性能,系统盘为50GB SSD盘,300GB月流量,折合每天10G流量,地域节点可选上海/广州/北京。腾讯云百科分享腾讯云轻量应用服务器2核2G4M配置…

【1++的Linux】之Linux常见指令(一)

👍作者主页:进击的1 🤩 专栏链接:【1的Linux】 文章目录 一,ls指令二,pwd命令三,cd指令四,touch 指令五,mkdir指令六,rmdir指令 && rm 指令 一&#…

sensor的感光原理

文章内容来自网络,联系我可以删掉。 目录 CMOS sensor上有什么? 不同像素对应的图像质量: 像点感光原理: Bayer格式变换成RGB格式: CMOS sensor上有什么? CMOS sensor 通常由像敏单元阵列、行驱动器、…

mosn基于延迟负载均衡算法——走得更快,期待走得更稳 | 京东云技术团队

前言 这篇文章主要是介绍mosn在v1.5.0中新引入的基于延迟的负载均衡算法。 对分布式系统中延迟出现的原因进行剖析介绍mosn都通过哪些方法来降低延迟构建来与生产环境性能分布相近的测试用例来对算法进行验证 地址: https://github.com/mosn/mosn/pull/2253 在开…

python安装包遇到问题解决手册

问题描述: Windows安装 pip install pycocotools 出现问题。显示 error: Microsoft Visual C 14.0 or greater is required. Get it with "Microsoft C Build Tools": https://visualstudiomicrosoft.com/visual-cpp-build-tools/ 解决方法:…

力扣算题day16(树使用递归方法需要记住,都会遍历完整个树,叶子节点是整个递归的某次递归结束)

104、二叉树最大深度 给定一个二叉树,找出其最大深度。二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。 测试代码: class TreeNode:def __init__(self, valNone, leftNone, rightNone):self.val valself.left leftself.right rightclass …