当前位置: 首页 > news >正文

OPNET Modeler 例程——ALOHA和CSMA的性能对比

文章目录

  • 概述
  • 一、创建 ALOHA 协议模型
  • 二、创建 CSMA 协议模型
  • 三、创建收信机进程和节点模型
  • 四、创建总线型链路模型
  • 五、创建网络模型
  • 六、查看仿真结果
  • 总结


概述

本例程以以太网为例论述总线型网络的建模方法,对数据链路层的 MAC 技术进行建模分析,并进行 ALOHA 和 CSMA 的网络性能对比。以太网是一种重要的计算机局域组网方式,采用了总线型的网络建模方法,节点通过总线进行信息的发送和接收。
ALOHA 协议是最基本的随机多址接入技术,CSMA 协议在其基础上增加了载波侦听的功能。关于 ALOHA 协议和 CSMA 协议的介绍可以参考文章:计算机网络——数据链路层介质访问控制。
总线模型是通过收、发节点对象和总线对象共同构建的,总线对象又分为总线(Bus)和总线接头(Tap)两种对象。发送节点通过总线发送机,将数据包传至总线接头,再由总线接头将包发送至总线中,在总线中进行数据传输与共享。接收机通过接头接收来自总 线的数据包,然后在接收节点中进行数据处理。总线收发的逻辑如下图所示。
在这里插入图片描述
CSMA 和 ALOHA 协议都是在发送节点中实现的,ALOHA 在发送过程中不侦听信道,因此发送节点不需要接收信号。而 CSMA 需要侦听信道后发送信号,因而既需要发送机也需要接收机。下图是 ALOHA 和 CSMA 发送节点模型的对比。
在这里插入图片描述
单箭头实线是包流线,在发送端将数据源经数据发送处理后送至发信机,在接收端将接收机收到的包传送至接收模块。单箭头虚线表示状态线,将接收机的信道忙或闲通知数据发送模块,实现信道侦听功能。双箭头虚线为逻辑线,关联收信机和发信机。
数据源模块负责随机产生数据包,可以通过 simple_source 进程模型实现。数据接收处理只需要将接收包销毁并释放内存即可,可以通过 sink 进程模型实现。
纯 ALOHA 的工作原理:站点只要产生帧,就立即发送到信道上,规定时间内若收到应答,表示发送成功,否则重发。
重发策略:等待一段随机的时间重发,如果再次冲突,则再等待一段随机时间,直到重发成功为止。
纯 ALOHA 中信道吞吐量和信道流量的关系: S = G e − 2 G S=Ge^{-2G} S=Ge2G
可以推知,当 G=0.5 时, S m a x = 1 2 e ≈ 0.18 S_{max}=\frac{1}{2e}≈0.18 Smax=2e10.18
1-坚持 CSMA 的工作原理:发送节点在发送信息帧之前,必须侦听媒体是否处于空闲状态,当信道忙或发生冲突时,要发送帧的站点,不断持续侦听,一有空闲便可发送,若收到应答,表示发送成功,否则重发。
重发策略:不断持续侦听,一有空闲便可发送,直到重发成功为止。
1-坚持 CSMA 中信道吞吐量和信道流量的关系: S = G ( 1 + G ) e − G G + e − G S=\frac{G(1+G)e^{-G}}{G+e^{-G}} S=G+eGG(1+G)eG
可以推知,当 G=1 时, S m a x = 0.5 S_{max}=0.5 Smax=0.5


一、创建 ALOHA 协议模型

ALOHA 发送处理模块的进程模型如下图所示。
在这里插入图片描述
添加整型状态变量max_packet_count。
在进程编辑器的 Interface——>Global Attributes下按照下图设置。
在这里插入图片描述
头块中的代码如下。

/*input stream from generator module.*/
#define IN_STRM 0
/*output stream from generator module.*/
#define OUT_STRM 0
/*condition macros*/
#define PKT_ARVL (op_intrpt_type()==OPC_INTRPT_STRM)
/*global variables*/
extern int subm_pkts;

初始化入口执行代码如下。

/*get the maximum packet count set at simulation run-time*/
op_ima_sim_attr_get_int32("max packet count",&max_packet_count);

tx_pkt 状态的入口执行代码如下。

Packet* out_pkt;
out_pkt=op_pk_get(IN_STRM);
op_pk_send(out_pkt,OUT_STRM);
++subm_pkts;
/*发送数据包总量等于系统仿真最大的数据包值时,结束仿真*/
if(subm_pkts==max_packet_count){op_sim_end("max packet count reached.","","","");}

进程接口的属性设置如下图所示。
在这里插入图片描述
ALOHA 节点模型如下图所示。
在这里插入图片描述
gen 模块的属性设置见下图。
在这里插入图片描述
确保两条包流线的 src stream 和 dest stream 都是 src stream[0] 和 dest stream[0]。
节点接口的设置如下图所示。
在这里插入图片描述


二、创建 CSMA 协议模型

另存 ALOHA 发送处理模块的进程模型并重新命名,在其基础上修改状态转移图如下。
在这里插入图片描述
只有头块部分的代码添加了几行,如下。

/*input stream from generator module.*/
#define IN_STRM 0
/*output stream from generator module.*/
#define OUT_STRM 0
/*condition macros*/
#define PKT_ARVL (op_intrpt_type()==OPC_INTRPT_STRM)
/*input statistics indices*/
#define CH_BUSY_STAT 0
/*condition macros*/
#define FREE (op_stat_local_read(CH_BUSY_STAT)==0.0)
#define PKTS_QUEUED (!op_strm_empty(IN_STRM))
#define CH_GOES_FREE (op_intrpt_type()==OPC_INTRPT_STAT)
/*global variables*/
extern int subm_pkts;

除此之外,其余部分的设置与 ALOHA 发送处理模块的进程模型一致。
CSMA 节点模型如下图所示。
在这里插入图片描述
该节点模型也是在 ALOHA 节点模型的基础上修改,sink 模块的进程模型指配为 sink,橘色关联线可有可无,红色的状态线属性设置如下图所示。
在这里插入图片描述


三、创建收信机进程和节点模型

本例程中,ALOHA 和 CSMA 使用的收信机模型是一样的,下面进行创建。
收信机的进程模型如下图所示。
在这里插入图片描述
定义一个整型的状态变量 rcvd_pkts,并在初始化进入代码中添加如下代码。

rcvd_pkts=0;

头块代码如下。

#define IN_STRM 0
#define PKT_RCVD (op_intrpt_type()==OPC_INTRPT_STRM)
#define END_SIM (op_intrpt_type()==OPC_INTRPT_ENDSIM)
int subm_pkts=0;

函数块代码如下。

/*this function gets the received packet,destroys it,and logs the incremented received packet total.*/
static void proc_pkt(void){Packet* in_pkt;FIN(proc_pkt());/*get packet from bus receiver input stream*/in_pkt=op_pk_get(IN_STRM);/*destroy the received packet.*/op_pk_destroy(in_pkt);/*increnment the count of received packet*/++rcvd_pkts;FOUT;}/*this function writes channel triffic and throughput statistics at the end of simulation.*/
static void record_stats(void){double cur_time;FIN(record_stats());cur_time=op_sim_time();op_stat_scalar_write("Channel Traffic G",(double)subm_pkts/cur_time);op_stat_scalar_write("Channel Throughput S",(double)rcvd_pkts/cur_time);FOUT;}

进程接口的属性设置如下图所示。
在这里插入图片描述
收信机的节点模型如下图所示。
在这里插入图片描述
为 rx_proc 模块指配进程模型,节点接口中hidden所以属性,设置为仅支持固定节点。


四、创建总线型链路模型

新建一个仅支持总线和总线接口链路模型,按照下图设置,保存该模型。
在这里插入图片描述


五、创建网络模型

新建一个工程文件,建立一个 Office 场景,尺寸设为 700m × 700m。
在对象面板里把前面创建的发送节点、接收节点和链路模型添加到当前场景的面板中。
在菜单栏选择 Topology——>Rapid Configuration,选择 Bus,按照下图所示设置各项参数。
在这里插入图片描述
然后选中某一条tap,右键选择 Select Similar Links,然后编辑其属性,将其 model 设置为前面自己新建的链路模型,勾选底部Apply to selected objects,点击 OK 即可。
在对象面板中找到接收节点模型,将其添加到项目中,并选择自己创建的链路模型中的总线接头,连接总线和节点。
完成后的 ALOHA 网络模型如下图所示。
在这里插入图片描述
全局属性 max packet count 的值设为 1000。
在这里插入图片描述
对象属性 Packet Interarrival Time 设置为多指数型随机变量,均值为20,30,40,…,170,180。
在这里插入图片描述
仿真时间设置为 3 小时。
以上设置完成后复制场景,在复制的场景里去除掉原有的 ALOHA 发送节点,加入 CSMA 发送节点,执行方法是选中其中一个,然后右键选择相似的节点,再右键其中的一个,将其节点模型选为 CSMA 的即可,然后勾选底部 Apply to selected objects,点击 OK 即可。
完成后的 CSMA 网络模型如下图所示。
在这里插入图片描述
注意给总线接头增加接收功能,由于 CSMA 需要侦听信道后发送信号,因而既需要发送机也需要接收机,其箭头是双向的。


六、查看仿真结果

仿真参数在前面已经设置好了,只要运行仿真即可。
采用 ALOHA 协议仿真后的结果如下图所示。
在这里插入图片描述
上图中的 X 轴是信道业务量,Y 轴是吞吐量,仿真随机种子数是1280。由仿真结果可知,在采用 ALOHA 协议仿真时,随着业务量的增大,吞吐量先增大然后减小。
采用 CSMA 协议仿真后的结果如下图所示。
在这里插入图片描述
上图中的 X 轴是信道业务量,Y 轴是吞吐量,仿真随机种子数是1500。由仿真结果可知,在采用 CSMA 协议仿真时,随着业务量的增大,吞吐量的增长速率慢慢变小,然后趋于稳定。
点击 Show 后可以设置将两个曲线绘制到一起,如下图所示。
在这里插入图片描述
也可以右击编辑图形属性,修改左上方的 title。
从上图的仿真结果可以看出,采用 ALOHA 协议最大的吞吐量不会超过0.18,而采用 CSMA 协议最大的吞吐量不会超过0.5。总体对比来说,CSMA 的性能要比 ALOHA 的性能好很多。
随机数种子的数量大小也会对吞吐量曲线的走向产生影响,大家可以自己试试。


总结

以上就是 OPNET Modeler 例程——ALOHA 和 CSMA 性能对比的所有内容了,希望本文能够让你了解 ALOHA 和 CSMA 的区别!
参考文章:基于OPNET的通信网仿真/郜林著. ——西安:西安电子科技大学出版社,2018.2

相关文章:

OPNET Modeler 例程——ALOHA和CSMA的性能对比

文章目录 概述一、创建 ALOHA 协议模型二、创建 CSMA 协议模型三、创建收信机进程和节点模型四、创建总线型链路模型五、创建网络模型六、查看仿真结果总结 概述 本例程以以太网为例论述总线型网络的建模方法,对数据链路层的 MAC 技术进行建模分析,并进…...

kali整体版本更新方法,为啥更新?

玩过kali都知道,如果不更新版本,那么安装某个软件总是有很多依赖版本问题,解决起来的确麻烦,这篇文章彻底解决这些问题。 1,更新源 国外源与国内源的选择 kali默认配置的是国外源,但国外源的下载速度非常慢…...

微服务之服务容错

Informal Essay By English Share a sentence that I think is very reasonable, as long as you can know the underlying logic of anything, you can hold it without fear 参考书籍: “凤凰架构” 引言 在 Martin Fowler 与 James Lewis合写的文章《Micros…...

js 计算日期加减、某某天后的日期、星期几、几月、闰年

需要引入jquery.js. Date.prototype.DateAdd function (strInterval, Number) { var dtTmp this; switch (strInterval) { case s: return new Date(Date.parse(dtTmp) (1000 * Number));// 秒 case n: return new Date(Date.pars…...

Vue3迎来升级,助力企业数字化转型

近年来,随着“互联网”的推进与应用普及,数字化转型已经成为企业发展的必备选项。低代码开发平台的迅速普及和广泛应用,也为企业数字化的转型提供了支撑技术。 JNPF快速开发平台深度集成java.net 6 双技术引擎,具备易维护、便部署…...

Java面试知识点(全)- Java并发- Java并发基础一

Java面试知识点(全) 导航: https://nanxiang.blog.csdn.net/article/details/130640392 注:随时更新 多线程解决什么问题 CPU、内存、I/O 设备的速度是有极大差异的,为了合理利用 CPU 的高性能,平衡这三者的速度差异&#xff0c…...

淘宝商品详情数据采集,支持高并发请求

一、如何通过手动方式查看阿里巴巴商品详情页面的数据 1.淘宝天猫商品详情 API 接口(item_get - 获得淘宝商品详情接口),淘宝API 接口代码对接可以获取到宝贝 ID,宝贝标题,价格,优惠价,掌…...

Java版spring cloud 本工程项目管理系统源码-全面的工程项目管理

​ ​工程项目管理系统是指从事工程项目管理的企业(以下简称工程项目管理企业)受业主委托,按照合同约定,代表业主对工程项目的组织实施进行全过程或若干阶段的管理和服务。 如今建筑行业竞争激烈,内卷严重&#xff0c…...

瑞吉外卖 - 后台系统退出功能(4)

某马瑞吉外卖单体架构项目完整开发文档,基于 Spring Boot 2.7.11 JDK 11。预计 5 月 20 日前更新完成,有需要的胖友记得一键三连,关注主页 “瑞吉外卖” 专栏获取最新文章。 相关资料:https://pan.baidu.com/s/1rO1Vytcp67mcw-PD…...

JavaScript 基础 API DOM(一)

1.1 作用和分类 作用: 就是使用 JS 去操作 html 和浏览器 分类:DOM (文档对象模型)、BOM(浏览器对象模型) 1.2 什么是DOM DOM( Document Object Model——文档对象模型)是用来呈现以及与任意 HTML 或 XML文档交互的…...

Java基础知识:1,DOS命令

1,盘名称 加 : 进入该盘目录下 例如:e: 进入e盘 2,dir 查看当前路径下文件和文件夹 3,md 文件夹名字 》 创建文件夹(md后要加空格) (md make directory) 4,c…...

NEFU ERP 企业资源计划[1] 详细知识点

NEFU ERP 企业资源计划[1] 详细知识点 ERP 企业资源管理计划第 0 章 术语第 1 章 ERP 概述1、什么是 ERP2、ERP 目的3、ERP 应用 第 2 章 ERP 理论与发展1、ERP 发展概述订货点法物料需求计划 MRP(时段 MRP、基本 MRP)闭环 MRPMRP II(制造资源计划&#…...

Science文章复现(Python):图1 - Aircraft obs(机载的观测 CO2)

之前有写过science文章后处理的复现Science文章复现(Python):在机载观测中明显的强烈南大洋碳吸收 在这里是针对图细节的理解: 首先需要下载这个项目 https://github.com/NCAR/so-co2-airborne-obs 这里的环境配置会比较麻烦 con…...

安全基础第十一天:nginx

目 录 一、nginx的反向代理 1.反向代理原理 2.反向代理的几种算法 (1)轮询(默认) (2)weight (3)ip_hash (4)fair(第三方) …...

设计模式之【命令模式】,方法调用的花式玩法

文章目录 一、什么是命令模式1、命令模式使用场景2、命令模式的主要角色3、命令模式优缺点4、命令模式注意事项及细节 二、使用示例1、命令模式的一般写法2、播放器功能案例3、遥控器案例 三、源码中的命令模式1、Thread 一、什么是命令模式 命令模式(Command Patt…...

企业需要专业电子邮件地址的4大原因

专业的企业电子邮件地址具有贵公司的自定义域名,而不是通用的Zoho Mail 、gmail或yahoo帐户,例如:john stargardening.com 大多数初学者使用不带域名的通用免费企业电子邮件帐户,这不是很专业。例如:zhangsan2022zoho.…...

国民游戏王者荣耀的真实地图开发之路

👉腾小云导读 相信很多人都玩过王者荣耀,大家在欣赏其华丽的游戏界面以及炫酷的游戏技能时,是否好奇过王者荣耀的地图是怎样开发出来的?在开发的历程中,都有哪些问题?是怎样解决的?本文将从其地…...

浅谈IDC数据中心综合布线第二篇——结构化布线

数据中心网络在当今的业务中扮演着越来越重要的作用,提供数据的存储、管理、共享、交换、应用等功能。在数据中心中,大量的数据在服务器、交换机、存储设备之间通过物理层的光缆(仅讨论光纤布线)进行传输。数据表明,在…...

电脑格式化后数据恢复软件EasyRecovery16

EasyRecovery是一款由Kroll Ontrack公司开发的专业数据恢复软件,旨在帮助用户从各种数据丢失情况下恢复文件。无论是因为误删除、格式化、分区丢失、系统崩溃还是其他原因导致的数据丢失,EasyRecovery都具有强大的恢复功能。 EasyRecovery提供了多种恢复…...

(2020)End-to-end Neural Coreference Resolution论文笔记

2020End-to-end Neural Coreference Resolution论文笔记 Abstract1 Introduction2 Related Work3 Task4 Model4.1 Scoring Architecture4.2 Span Representations5 Inference6 Learning7 Experiments7.1 HyperparametersWord representationsHidden dimensionsFeature encoding…...

黑马Mybatis

Mybatis 表现层&#xff1a;页面展示 业务层&#xff1a;逻辑处理 持久层&#xff1a;持久数据化保存 在这里插入图片描述 Mybatis快速入门 ![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/6501c2109c4442118ceb6014725e48e4.png //logback.xml <?xml ver…...

shell脚本--常见案例

1、自动备份文件或目录 2、批量重命名文件 3、查找并删除指定名称的文件&#xff1a; 4、批量删除文件 5、查找并替换文件内容 6、批量创建文件 7、创建文件夹并移动文件 8、在文件夹中查找文件...

django filter 统计数量 按属性去重

在Django中&#xff0c;如果你想要根据某个属性对查询集进行去重并统计数量&#xff0c;你可以使用values()方法配合annotate()方法来实现。这里有两种常见的方法来完成这个需求&#xff1a; 方法1&#xff1a;使用annotate()和Count 假设你有一个模型Item&#xff0c;并且你想…...

MVC 数据库

MVC 数据库 引言 在软件开发领域,Model-View-Controller(MVC)是一种流行的软件架构模式,它将应用程序分为三个核心组件:模型(Model)、视图(View)和控制器(Controller)。这种模式有助于提高代码的可维护性和可扩展性。本文将深入探讨MVC架构与数据库之间的关系,以…...

相机从app启动流程

一、流程框架图 二、具体流程分析 1、得到cameralist和对应的静态信息 目录如下: 重点代码分析: 启动相机前,先要通过getCameraIdList获取camera的个数以及id,然后可以通过getCameraCharacteristics获取对应id camera的capabilities(静态信息)进行一些openCamera前的…...

k8s业务程序联调工具-KtConnect

概述 原理 工具作用是建立了一个从本地到集群的单向VPN&#xff0c;根据VPN原理&#xff0c;打通两个内网必然需要借助一个公共中继节点&#xff0c;ktconnect工具巧妙的利用k8s原生的portforward能力&#xff0c;简化了建立连接的过程&#xff0c;apiserver间接起到了中继节…...

MySQL用户和授权

开放MySQL白名单 可以通过iptables-save命令确认对应客户端ip是否可以访问MySQL服务&#xff1a; test: # iptables-save | grep 3306 -A mp_srv_whitelist -s 172.16.14.102/32 -p tcp -m tcp --dport 3306 -j ACCEPT -A mp_srv_whitelist -s 172.16.4.16/32 -p tcp -m tcp -…...

Spring是如何解决Bean的循环依赖:三级缓存机制

1、什么是 Bean 的循环依赖 在 Spring框架中,Bean 的循环依赖是指多个 Bean 之间‌互相持有对方引用‌,形成闭环依赖关系的现象。 多个 Bean 的依赖关系构成环形链路,例如: 双向依赖:Bean A 依赖 Bean B,同时 Bean B 也依赖 Bean A(A↔B)。链条循环: Bean A → Bean…...

初探Service服务发现机制

1.Service简介 Service是将运行在一组Pod上的应用程序发布为网络服务的抽象方法。 主要功能&#xff1a;服务发现和负载均衡。 Service类型的包括ClusterIP类型、NodePort类型、LoadBalancer类型、ExternalName类型 2.Endpoints简介 Endpoints是一种Kubernetes资源&#xf…...

动态 Web 开发技术入门篇

一、HTTP 协议核心 1.1 HTTP 基础 协议全称 &#xff1a;HyperText Transfer Protocol&#xff08;超文本传输协议&#xff09; 默认端口 &#xff1a;HTTP 使用 80 端口&#xff0c;HTTPS 使用 443 端口。 请求方法 &#xff1a; GET &#xff1a;用于获取资源&#xff0c;…...