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=Ge−2G
可以推知,当 G=0.5 时, S m a x = 1 2 e ≈ 0.18 S_{max}=\frac{1}{2e}≈0.18 Smax=2e1≈0.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+e−GG(1+G)e−G
可以推知,当 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 的高性能,平衡这三者的速度差异,…...

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

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

瑞吉外卖 - 后台系统退出功能(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…...
如何对Video视频进行SEO优化?
如何对Video视频进行SEO优化? 在现代互联网的海洋中,搜索引擎优化(SEO)无疑是每一个网站管理员和内容创作者必须掌握的技能。而今天,我要向大家介绍一个极为强大的工具——Schema.org。它不仅能提升你的网站在搜索引擎…...

JVM 核心概念深度解析
最近正在复习Java八股,所以会将一些热门的八股问题,结合ai与自身理解写成博客便于记忆 一、JVM内存结构/运行时数据区 JVM运行时数据区主要分为以下几个部分: 程序计数器(PC Register) 线程私有,记录当前线程执行的字节码行号唯…...
for AC500 PLCs 3ADR025003M9903的安全说明
1安全说明 必须遵守特殊的环境条件(例如,由于爆炸性物质、重污染或腐蚀影响的危险区域)。必须在指定的技术数据和系统数据范围内处理和操作设备。该装置不含可维修部件,不得打开。除非另有规定,否则操作过程中必须关闭可拆卸的盖子。拒绝对不…...
MYSQL(二) ---MySQL 8.4 新特性与变量变更
MySQL 8.4 新特性与变量变更 作者:程序员LSP 分类:MySQL 8.4 教程 / 新特性 / 升级指南 更新时间:2025年6月 📌 前言 MySQL 8.4 是当前最新的稳定版本,相较于 8.0 系列,在审计日志、高可用、性能调优、认证…...
php执行系统命令的四个常用函数
php执行系统命令有四个常用函数:1.exec()执行命令并返回最后一行输出,可传数组获取全部结果;2.shell_exec()返回完整输出结果,适合一次性获取;3.system()直接输出命令结果,可接收状态码;4.权限控…...

Impromptu VLA:用于驾驶视觉-语言-动作模型的开放权重和开放数据
25年5月来自清华和博世的论文“Impromptu VLA: Open Weights and Open Data for Driving Vision-Language-Action Models”。 用于自动驾驶的“视觉-语言-动作” (VLA) 模型前景光明,但在非结构化极端场景下却表现不佳,这主要是由于缺乏有针对性的基准测…...

2025年06月07日Github流行趋势
项目名称:netbird 项目地址url:https://github.com/netbirdio/netbird项目语言:Go历史star数:14824今日star数:320项目维护者:mlsmaycon, braginini, pascal-fischer, lixmal, pappz项目简介:使…...
Axios学习笔记
Axios简介 axios前端异步请求库类似JQuery ajax技术, ajax用来在页面发起异步请求到后端服务,并将后端服务响应数据渲染到页面上, jquery推荐ajax技术,但vue里面并不推荐在使用jquery框架,vue推荐使用axios异步请求库。…...
Java 中 ArrayList、Vector、LinkedList 的核心区别与应用场景
Java 中 ArrayList、Vector、LinkedList 的核心区别与应用场景 引言 在 Java 集合框架体系中,ArrayList、Vector和LinkedList作为List接口的三大经典实现类,共同承载着列表数据的存储与操作功能。然而,由于底层数据结构设计、线程安全机制以…...
探索NoSQL注入的奥秘:如何消除MongoDB查询中的前置与后置条件
随着互联网技术的飞速发展,数据库作为信息存储与管理的核心,其安全性问题日益凸显。近年来,NoSQL数据库因其灵活性和高性能逐渐成为许多企业的首选,其中MongoDB以其文档存储和JSON-like查询语言在开发社区中广受欢迎。然而&#x…...