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

四种应用层协议——MQTT、CoAP、WebSockets和HTTP——在工业物联网监控系统中的性能比较

目录

摘要(Abstract)

实验设置

实验结果


节选自《A Comparative Analysis of Application Layer Protocols within an Industrial Internet of Things Monitoring System》,作者是 Jurgen Aquilina、Peter Albert Xuereb、Emmanuel Francalanza、Jasmine Mallia 和 Paul Refalo,来自马耳他大学的计算机信息系统系和工业与制造工程系。论文发表在2024年IEEE国际测量与网络研讨会上。

摘要(Abstract)

论文讨论了在工业物联网(IIoT)监控系统中选择适当的应用层协议的重要性。作者指出,尽管已有研究提供了各种协议的性能比较,但这些研究结果可能不适用于工业场景。本文提出了一个实验设置,纠正了以前研究中的方法论错误,并报告了所获得的结果,这些结果与以前研究的结果存在显著差异。

实验设置

在论文的“实验设置(Experimental Setup)”部分,作者们详细描述了他们如何构建实验环境来评估和比较四种应用层协议(MQTT、CoAP、WebSockets和HTTP)在工业物联网(IIoT)监控系统中的性能。以下是实验设置的详细介绍:

  1. 实验场景

    • 实验模拟了一个微控制器向网关设备发送传感器数据的场景,这在制造工厂的监控系统中用于检测气动系统中的泄漏。
  2. 硬件选择

    • 微控制器设备:CONTROLLINO MAXI Automation,这是一个工业级的可编程逻辑控制器(PLC),与Arduino平台兼容。
    • 网关设备:Endian 4i,这是一个工业物联网网关,支持Docker容器,用于运行所需的软件组件。
  3. 网络连接

    • 微控制器和网关设备通过千兆交换机连接。
  4. 协议实现

    • 微控制器上使用Arduino平台的现有库实现所选协议:CoAP简单库用于CoAP,arduino-mqtt库用于MQTT,ArduinoHttpClient库用于WebSockets和HTTP。
    • 网关上使用Python脚本实现协议,使用相应的Python库:aiocoap用于CoAP,Paho库用于MQTT,websockets库用于WebSockets,Flask库用于HTTP。
  5. MQTT代理配置

    • 在网关上部署了Mosquitto代理的Docker容器,并调整配置以避免在有大量消息在途或排队时丢弃消息。
  6. 协议配置

    • 对CoAP、MQTT和HTTP协议的不同配置进行了测试。例如,CoAP测试了使用确认消息和非确认消息的场景,MQTT测试了三个QoS级别,HTTP测试了使用Flask内置服务器和使用Gunicorn WSGI服务器的场景。
  7. 时间同步

    • 为了确保实验的准确性,使用NTPClient库在微控制器和网关设备之间进行时间同步。
  8. 实验参数

    • 实验持续时间:2分钟。
    • 实验重复次数:3次。
    • 负载大小:42字节(包括发送时间)。
    • 消息发送间隔:5毫秒。
  9. 数据格式

    • 使用CSV格式发送随机生成的数据,因为CSV格式对负载的修改最小,对结果影响最小。
  10. 性能指标测量

    • 传输时间:通过在每个消息中添加发送时间,并在网关上添加接收时间来测量。
    • 带宽消耗:使用tshark捕获所有接收到的数据包,以测量带宽消耗。
  11. 实验重复性

    • 所有实验都重复三次,并对所有重复的平均值进行计算,以确保结果的稳健性。

通过这个实验设置,作者们能够评估和比较不同协议在工业物联网环境中的性能,特别是在传输时间、带宽消耗方面的表现。

实验结果

在论文的“结果与讨论(Results and Discussion)”部分,作者们展示了他们对四种应用层协议——MQTT、CoAP、WebSockets和HTTP——在工业物联网监控系统中的性能比较结果。以下是该部分的详细介绍:

  1. 性能指标定义

    • 平均延迟(Average Latency):从微控制器到网关传输单个有效载荷所需的平均时间。
    • 抖动(Jitter):传输单个有效载荷所需时间的标准差。
    • 吞吐量(Throughput):每秒成功传输的消息数量。
    • 协议效率(Protocol Efficiency):有用信息字节总数与交换的总字节数之间的比率。
  2. 实验结果

    • 结果通过图表展示,其中包括了MQTT不同服务质量(QoS)级别的性能对比,以及CoAP和WebSockets的性能数据。HTTP作为对照组,其性能在大多数指标上表现不佳。
  3. MQTT协议

    • MQTT在延迟方面表现最佳,尤其是当配置为QoS级别0时。然而,当使用QoS级别1或2时,其吞吐量不如CoAP和WebSockets。
  4. CoAP协议

    • CoAP在带宽使用效率方面表现最佳,尤其是使用非确认消息时。但是,CoAP在延迟和吞吐量方面并不总是优于其他协议。
  5. WebSockets协议

    • WebSockets在吞吐量方面与CoAP相当,但在延迟和抖动方面不如MQTT。
  6. HTTP协议

    • HTTP在平均延迟、吞吐量和协议效率方面表现最差。作者指出,这可能是由于HTTP协议对资源受限的微控制器造成的计算负担。
  7. 协议选择建议

    • 如果传输时间是优先考虑的因素,建议使用MQTT-0(QoS级别0)。如果带宽受限,建议使用CoAP-NONCON(非确认消息),以最小化消耗的带宽。
  8. 结果差异讨论

    • 作者讨论了他们的实验结果与文献中报告的结果之间的显著差异,强调了在现实场景中评估应用层协议性能的重要性。
  9. 实验重复性

    • 所有实验都重复了三次,以确保结果的稳健性,并且计算了所有重复的平均值。
  10. 数据捕获方法

    • 微控制器在每个消息中添加发送时间,网关接收消息并添加接收时间,然后保存这些时间以供后续处理。使用tshark捕获所有接收到的数据包,以测量带宽消耗。
  11. 实验局限性和未来工作

    • 论文指出了实验的局限性,例如没有考虑网络中添加额外客户端设备的影响。未来的工作将考虑这种fan-in通信场景,这可能在从不同设备收集传感器数据的监控系统中被采用。

通过这一部分的分析,作者们提供了对于不同应用层协议在工业物联网环境中的性能表现的深入见解,并为实际应用中的协议选择提供了指导性建议。

相关文章:

四种应用层协议——MQTT、CoAP、WebSockets和HTTP——在工业物联网监控系统中的性能比较

目录 摘要(Abstract) 实验设置 实验结果 节选自《A Comparative Analysis of Application Layer Protocols within an Industrial Internet of Things Monitoring System》,作者是 Jurgen Aquilina、Peter Albert Xuereb、Emmanuel Francalanza、Jasmine Mallia …...

MySQL的脏读、不可重复读、幻读与隔离级别

脏读/不可重复读/幻读 脏读 脏读(Dirty Read)发生在一个事务读取了另一个事务尚未提交的数据。如果第二个事务失败并回滚,第一个事务读到的数据就是错误的。这意味着数据从一开始就是不稳定或者“脏”的。 举例 事务A读取了某条记录的值为X。事务B修改该记录的值…...

程序员前端开发者的AI绘画副业之路:在裁员危机中寻找新机遇

正文: 在这个充满变数的时代,作为一名前端开发者,我经历了行业的起伏,见证了裁员危机和中年失业危机的残酷。在这样的背景下,我开始了利用AI绘画作为副业的探索,不仅为了寻求经济上的稳定,更是为…...

Burp Suite的使用和文件上传漏洞靶场试验

第一步:分析如何利用漏洞,通过对代码的查阅发现,代码的逻辑是先上传后删除,意味着,我可以利用webshell.php文件在上传到删除之间的间隙,执行webshell.php的代码,给上级目录创建一个shell.php木马…...

如何在Ubuntu中安装deepin wine版的企业微信

如何在Ubuntu中安装deepin wine版的企业微信 运行如下一条命令将移植仓库添加到系统中 wget -O- https://deepin-wine.i-m.dev/setup.sh | sh自此以后,你可以像对待普通的软件包一样,使用apt-get系列命令进行各种应用安装、更新和卸载清理了。 安装企业…...

案例:Nginx + Tomcat集群(负载均衡 动静分离)

目录 案例 案例环境 案例步骤 部署Tomcat服务器 部署Nginx服务器 实现负载均衡和读写分离 日志控制 案例 案例环境 操作系统 IP 地址 角色 CentOS 192.168.10.101 Nginx服务器(调度器) CentOS 192.168.10.102 Tomcat服务器① CentOS 1…...

【密码学】密码协议的分类:②认证协议

密码协议的分类有很多种方式,这里我采取的是基于协议实现的目的来分类。可以将密码协议分成三类:认证协议、密钥建立协议、认证密钥建立协议。 一、认证协议是什么? 认证协议都在认证些什么东西呢?认证一般要认证三个东西&#x…...

异步编程(Promise详解)

目录 异步编程 回调函数 回调地狱 Promise 基本概念 Promise的特点 1.Promise是一种构造函数 2.Promise接收函数创建实例 3.Promise对象有三种状态 4.Promise状态转变不可逆 5.Promise 实例创建即执行 6.Promise可注册处理函数 7.Promise支持链式调用 Promise的静…...

DjangoORM注入分享

DjangoORM注入 简介 ​ 这篇文章中,分享一些关于django orm相关的技术积累和如果orm注入相关的安全问题讨论。 ​ 攻击效果同数据库注入 从Django-Orm开始 开发角度 ​ Django ORM(Object-Relational Mapping)是Django框架中用于处理数…...

【HBZ分享】Redis各种类型的数据结构应用场景

String(字符串类型) 计数器: incr / decr, 比如商品库存,业务号的发号器业务数据key-value缓存, 缓存结果数据,提高网站性能,缓解DB压力分布式session会话, 集群环境下存储token鉴权信息分布式锁&#xff…...

anaconda创建并且配置pytorch(完整版)

📚博客主页:knighthood2001 ✨公众号:认知up吧 ** 🎃知识星球:【认知up吧|成长|副业】介绍** ❤️如遇文章付费,可先看看我公众号中是否发布免费文章❤️ 🙏笔者水平有限,欢迎各位大…...

高级java每日一道面试题-2024年8月10日-网络篇-你对跨域了解多少?

如果有遗漏,评论区告诉我进行补充 面试官: 你对跨域了解多少? 我回答: 跨域问题,即Cross-Origin Resource Sharing(CORS),是现代Web开发中一个非常重要的概念,涉及到浏览器的安全策略——同源策略(Same…...

AtCoder Beginner Contest 365 A~E

A.Leap Year(思维) 题意: 给你一个介于 1583 1583 1583和 2023 2023 2023之间的整数 Y Y Y。 求公历 Y Y Y年的天数。 在给定的范围内, Y Y Y年的天数如下: 如果 Y Y Y不是 4 4 4的倍数,则为 365 365 …...

多机部署, 负载均衡-LoadBalance

目录 1.负载均衡介绍 1.1问题描述 1.2什么是负载均衡 1.3负载均衡的一些实现 服务端负载均衡 客户端负载均衡 2.Spring Cloud LoadBalancer 2.1快速上手实现负载均衡 2.2负载均衡策略 自定义负载均衡策略 3.服务部署(Linux) 3.1服务构建打包…...

(回溯) LeetCode 78. 子集

原题链接 一. 题目描述 给你一个整数数组 nums ,数组中的元素 互不相同 。返回该数组所有可能的 子集 (幂集)。 解集 不能 包含重复的子集。你可以按 任意顺序 返回解集。 示例 1: 输入:nums [1,2,3] 输出&…...

DQL数据查询语言(多表处理)—/—<7>

一、多表处理 当前有两个表,一个是学生表student,一个是分数表score student表字段名表示如下(共1000条数据): score表字段表示如下(共6000条数据): 1、求每个学生的总分 SELECT …...

力扣刷题总结

去年有段时间一直在刷题,进步神速,解决了以往刷完就忘的问题,这里总结下经验,给有需要的人参考下,核心观点就仨: 1. 打好数据结构与算法基础 2. 多刷题多练习 3. 形成自己的知识体系 下图是我梳理的知识体…...

BLDC ESC 无刷直流电子调速器驱动方式

BLDC ESC 无刷直流电子调速器驱动方式 1. 源由2. 驱动方法2.1 Trapezoidal 1202.2 Trapezoidal 1502.3 Sinusoidal 1802.4 Field-Orientated Control (FOC) 3. FOC(Field-Oriented Control)3.1 引入坐标系3.2 Clarke and Park变换Clarke 变换&#xff08…...

解决 IntelliJ IDEA 编译错误 “Groovyc: Internal groovyc error: code 1” 及 JVM 内存配置问题

在使用 IntelliJ IDEA 进行开发时,我们可能会遇到各种编译和运行错误,其中之一就是 Groovy 编译器错误(Groovyc: Internal groovyc error: code 1)或 JVM 内存不足错误。这类错误可能会影响开发效率,但通过调整 JVM 内…...

LeetCode.2940.找到Alice和Bob可以相遇的建筑

友情提示:这个方法并没有通过案例,只通过了944个案例(很难受),超时了,但是想着还是分享出来吧 题目描述: 给你一个下标从 0 开始的正整数数组 heights ,其中 heights[i] 表示第 i …...

STM32F4基本定时器使用和原理详解

STM32F4基本定时器使用和原理详解 前言如何确定定时器挂载在哪条时钟线上配置及使用方法参数配置PrescalerCounter ModeCounter Periodauto-reload preloadTrigger Event Selection 中断配置生成的代码及使用方法初始化代码基本定时器触发DCA或者ADC的代码讲解中断代码定时启动…...

Linux云原生安全:零信任架构与机密计算

Linux云原生安全:零信任架构与机密计算 构建坚不可摧的云原生防御体系 引言:云原生安全的范式革命 随着云原生技术的普及,安全边界正在从传统的网络边界向工作负载内部转移。Gartner预测,到2025年,零信任架构将成为超…...

鱼香ros docker配置镜像报错:https://registry-1.docker.io/v2/

使用鱼香ros一件安装docker时的https://registry-1.docker.io/v2/问题 一键安装指令 wget http://fishros.com/install -O fishros && . fishros出现问题:docker pull 失败 网络不同,需要使用镜像源 按照如下步骤操作 sudo vi /etc/docker/dae…...

Java 二维码

Java 二维码 **技术&#xff1a;**谷歌 ZXing 实现 首先添加依赖 <!-- 二维码依赖 --><dependency><groupId>com.google.zxing</groupId><artifactId>core</artifactId><version>3.5.1</version></dependency><de…...

浪潮交换机配置track检测实现高速公路收费网络主备切换NQA

浪潮交换机track配置 项目背景高速网络拓扑网络情况分析通信线路收费网络路由 收费汇聚交换机相应配置收费汇聚track配置 项目背景 在实施省内一条高速公路时遇到的需求&#xff0c;本次涉及的主要是收费汇聚交换机的配置&#xff0c;浪潮网络设备在高速项目很少&#xff0c;通…...

IP如何挑?2025年海外专线IP如何购买?

你花了时间和预算买了IP&#xff0c;结果IP质量不佳&#xff0c;项目效率低下不说&#xff0c;还可能带来莫名的网络问题&#xff0c;是不是太闹心了&#xff1f;尤其是在面对海外专线IP时&#xff0c;到底怎么才能买到适合自己的呢&#xff1f;所以&#xff0c;挑IP绝对是个技…...

LRU 缓存机制详解与实现(Java版) + 力扣解决

&#x1f4cc; LRU 缓存机制详解与实现&#xff08;Java版&#xff09; 一、&#x1f4d6; 问题背景 在日常开发中&#xff0c;我们经常会使用 缓存&#xff08;Cache&#xff09; 来提升性能。但由于内存有限&#xff0c;缓存不可能无限增长&#xff0c;于是需要策略决定&am…...

MySQL 索引底层结构揭秘:B-Tree 与 B+Tree 的区别与应用

文章目录 一、背景知识&#xff1a;什么是 B-Tree 和 BTree&#xff1f; B-Tree&#xff08;平衡多路查找树&#xff09; BTree&#xff08;B-Tree 的变种&#xff09; 二、结构对比&#xff1a;一张图看懂 三、为什么 MySQL InnoDB 选择 BTree&#xff1f; 1. 范围查询更快 2…...

Unity UGUI Button事件流程

场景结构 测试代码 public class TestBtn : MonoBehaviour {void Start(){var btn GetComponent<Button>();btn.onClick.AddListener(OnClick);}private void OnClick(){Debug.Log("666");}}当添加事件时 // 实例化一个ButtonClickedEvent的事件 [Formerl…...

永磁同步电机无速度算法--基于卡尔曼滤波器的滑模观测器

一、原理介绍 传统滑模观测器采用如下结构&#xff1a; 传统SMO中LPF会带来相位延迟和幅值衰减&#xff0c;并且需要额外的相位补偿。 采用扩展卡尔曼滤波器代替常用低通滤波器(LPF)&#xff0c;可以去除高次谐波&#xff0c;并且不用相位补偿就可以获得一个误差较小的转子位…...