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…...
conda相比python好处
Conda 作为 Python 的环境和包管理工具,相比原生 Python 生态(如 pip 虚拟环境)有许多独特优势,尤其在多项目管理、依赖处理和跨平台兼容性等方面表现更优。以下是 Conda 的核心好处: 一、一站式环境管理:…...
C++初阶-list的底层
目录 1.std::list实现的所有代码 2.list的简单介绍 2.1实现list的类 2.2_list_iterator的实现 2.2.1_list_iterator实现的原因和好处 2.2.2_list_iterator实现 2.3_list_node的实现 2.3.1. 避免递归的模板依赖 2.3.2. 内存布局一致性 2.3.3. 类型安全的替代方案 2.3.…...
从零实现富文本编辑器#5-编辑器选区模型的状态结构表达
先前我们总结了浏览器选区模型的交互策略,并且实现了基本的选区操作,还调研了自绘选区的实现。那么相对的,我们还需要设计编辑器的选区表达,也可以称为模型选区。编辑器中应用变更时的操作范围,就是以模型选区为基准来…...
FFmpeg 低延迟同屏方案
引言 在实时互动需求激增的当下,无论是在线教育中的师生同屏演示、远程办公的屏幕共享协作,还是游戏直播的画面实时传输,低延迟同屏已成为保障用户体验的核心指标。FFmpeg 作为一款功能强大的多媒体框架,凭借其灵活的编解码、数据…...
连锁超市冷库节能解决方案:如何实现超市降本增效
在连锁超市冷库运营中,高能耗、设备损耗快、人工管理低效等问题长期困扰企业。御控冷库节能解决方案通过智能控制化霜、按需化霜、实时监控、故障诊断、自动预警、远程控制开关六大核心技术,实现年省电费15%-60%,且不改动原有装备、安装快捷、…...
网络编程(UDP编程)
思维导图 UDP基础编程(单播) 1.流程图 服务器:短信的接收方 创建套接字 (socket)-----------------------------------------》有手机指定网络信息-----------------------------------------------》有号码绑定套接字 (bind)--------------…...
2023赣州旅游投资集团
单选题 1.“不登高山,不知天之高也;不临深溪,不知地之厚也。”这句话说明_____。 A、人的意识具有创造性 B、人的认识是独立于实践之外的 C、实践在认识过程中具有决定作用 D、人的一切知识都是从直接经验中获得的 参考答案: C 本题解…...
SQL慢可能是触发了ring buffer
简介 最近在进行 postgresql 性能排查的时候,发现 PG 在某一个时间并行执行的 SQL 变得特别慢。最后通过监控监观察到并行发起得时间 buffers_alloc 就急速上升,且低水位伴随在整个慢 SQL,一直是 buferIO 的等待事件,此时也没有其他会话的争抢。SQL 虽然不是高效 SQL ,但…...
[大语言模型]在个人电脑上部署ollama 并进行管理,最后配置AI程序开发助手.
ollama官网: 下载 https://ollama.com/ 安装 查看可以使用的模型 https://ollama.com/search 例如 https://ollama.com/library/deepseek-r1/tags # deepseek-r1:7bollama pull deepseek-r1:7b改token数量为409622 16384 ollama命令说明 ollama serve #:…...
用鸿蒙HarmonyOS5实现中国象棋小游戏的过程
下面是一个基于鸿蒙OS (HarmonyOS) 的中国象棋小游戏的实现代码。这个实现使用Java语言和鸿蒙的Ability框架。 1. 项目结构 /src/main/java/com/example/chinesechess/├── MainAbilitySlice.java // 主界面逻辑├── ChessView.java // 游戏视图和逻辑├──…...
