物联网8大协议介绍及对比

news2025/1/18 20:16:45

一.物联网主流协议介绍

1.MQTT 协议

MQTT(Message Queuing Telemetry Transport)即消息队列遥测传输。

MQTT 协议最初是在 1999 年由 IBM 公司开发的,用于将石油管道上的传感器与卫星相连接。2014 年正式成为 OASIS 开放标准。

MQTT 使用类似 MQ 常用的发布 / 订阅模式,起到应用程序解耦、异步消息、削峰填谷的作用。很多 MQ 中间件也支持 MQTT 协议,比如 ActiveMQ、RabbitMQ、Kafka 等。

适用范围:在低带宽、不可靠的网络下提供基于云平台的远程设备的数据传输和监控。

优势:

使用发布 / 订阅模式,提供一对多的消息发布,使消息发送者和接受者在时间和时空上解耦。

二进制协议,网络传输开销非常小(固定头部是2字节)。

灵活的 Topic 订阅、QoS 等特性。

缺点:

集中化部署,服务端压力大,需要考虑流程控制及高可用。

对于请求 / 响应模式的支持需要在应用层根据消息 ID 做发布主题和订阅主题之间的关联。

MQTT 缺少存储转发队列功能。

2.CoAP 协议

CoAP(Constrained Application Protocol)即受限的应用协议。CoAP 是为了让低功耗受限设备可以接入互联网,由 IETF 组织制定的,它借鉴了 HTTP 大量成功经验,同样使用请求 / 响应工作模式。

使用范围:适用于互联网环境下一对一 M2M 通讯。

优势:

采用和 HTTP 相似语义的请求和响应码,使用二进制报文,报文大小较小。

传输层基于 UDP 协议,比 TCP 数据包小,并不需要建立连接带来握手的开销。

资源发送支持,通过观察者模式实现类似发布 / 订阅效果。

缺点:

基于 UDP 的不可靠传输,但通过四种报文类型的组合及重传机制提高了传输的可靠性。

基于 UDP 的无连接传输,不利于不同网络间消息的回传。

3.HTTP 协议

HTTP 协议,即超文本传输协议(Hypertext Transfer Protocol),是一种详细规定了浏览器和万维网服务器之间互相通信的规则,通过因特网传送万维网文档得到数据传送协议。

目前 HTTP 协议作为 WEB 的标准协议已被广泛使用,它在一些物联网场景中同样可以使用,例如手机、PC等终端设备。但是作为适应浏览器场景的 HTTP 协议,并不适用于物联网的其他设备。

适用范围:开放物联网中的资源,实现服务被其他应用所调用。

优势:

简单的工作模式,请求 / 响应。

完整的方法定义。

合理的状态码设计。

友好的媒体类型支持,如文本、图片、视频等。

缺点:

单向传输,可以通过客户端轮询实现类似推送效果或者HTTP2.0

安全性不高,HTTP是明文协议,可以使用 HTTPS 传输。

HTTP 是文本协议,冗长的协议头部,对于运算、存储、带宽资源受限的设备来说开销大。

4.AMQP

AMQP(Advanced Message Queuing Protocol)高级消息队列协议,是一个进程间传递异步消息的网络协议。

(1)工作过程

发布者(Publisher)发布消息(Message),经由交换机(Exchange)。

交换机根据路由规则将收到的消息分发给与该交换机绑定的队列(Queue)。

最后 AMQP 代理会将消息投递给订阅了此队列的消费者,或者消费者按照需求自行获取。

AMQP 定义了四种类型的交换机:

直接(点对点):消息直接发送给绑定到交换机的指定队列。

扇出:消息发送给绑定到交换机的所有队列。

主题(发布-订阅):消息根据路由键和交换机绑定的模式发送到相应的队列。

头部(发布-订阅):消息根据消息头部的匹配规则发送到相应的队列。

(2)AMQP 传输和帧

AMQP 是一种基于 TCP/IP 的二进制协议,它在客户端和 Broker 之间建立可靠的、持久的、面向流的连接。一个单一的套接字连接上可以创建多个信道,实现多个数据流的同时传输。

AMQP 1.0 版本中的帧由一个 8 字节的固定头部、一个可选的扩展头部和一个长度可变的二进制有效载荷组成。固定头部包含了帧类型、信道号和有效载荷大小的信息。有效载荷包含了要传输的实际消息,以及相关的元数据。

(3)AMQP的优缺点

优点:

支持存储转发队列:AMQP 支持存储转发队列,但相对于 MQTT 而言,牺牲了一些效率并增加了一些复杂度。

活的消息路由:AMQP 提供多种消息路由方式,包括点对点、发布-订阅和扇出。

安全:AMQP 支持 TLS 和 SASL 等加密和认证安全机制。

成熟的生态系统:AMQP 生态系统拥有丰富而成熟的开源服务器实现和客户端库,覆盖多种编程语言。

缺点:

复杂:AMQP 的模型涉及了许多概念,可能不太容易理解、配置和管理。

重量级:AMQP 在传输层通过“信道”实现了多路复用。而且每个 AMQP 帧都有 8 字节的头部开销。

向后兼容性差:AMQP 的最大问题是 0.9.1 版本和 1.0 版本完全不兼容,增加了解决方案的复杂度。

可扩展性和性能受限:AMQP 在一些场景中可能受到可扩展性和性能的限制。这是由于其架构相对于轻量级协议如 MQTT 而言,引入了更多的复杂性和开销。

(4)MQTT 与 AMQP 的详细对比

(5)选择 MQTT 和 AMQP 时需要考虑的因素

基于用户场景的评估:

选择 MQTT 或 AMQP 主要取决于用户场景的需求。如果您要处理资源有限的设备或不稳定的网络,MQTT 凭借其轻量级的特性可能是更佳的选择。如果您的用户场景需要复杂的路由和高可靠性,那么 AMQP 会更适合。

基于系统架构的评估:

系统架构也会影响决策。MQTT 的简单性使其成为具有清晰简单通信模型的系统的理想选择。AMQP 凭借其灵活性和强大的功能集,更适合具有多样化通信需求的复杂系统。

基于网络条件的评估:

网络条件是另一个重要因素。MQTT 在低带宽、高延迟或不可靠的网络中表现优异。相反,AMQP 由于其较高的开销,需要稳定的网络连接。

基于所需服务质量的评估:

MQTT 提供了三个级别的服务质量,可灵活保证消息的传输。AMQP 通过其持久化消息功能,可确保消息传输的高可靠性。

5.websocket

(1)概述

WebSocket 是一种用于在单个 TCP 连接上进行全双工通信的网络协议。它使用类似于 HTTP 的握手来建立连接,然后使用单独的持久连接来进行通信。这种方式使得 WebSocket 可以在浏览器和服务器之间进行实时通信,

而不需要多次发送 HTTP 请求来获取数据。这意味着连接是持久的,它一直保持打开,直到有一方主动关闭连接。这使得 WebSocket 非常适合用于实时应用程序,因为它不需要不断地建立和关闭连接。

(2)WebSocket的实际用途

最常见的用途是在实时应用程序开发中,它有助于在客户端持续显示数据。由于后端服务器不断发回此数据,WebSocket 允许在已打开的连接中不间断地推送或传输此数据,使此类数据传输更快,并利用了应用程序的性能。

WebSocket 连接是可以加密的,可以使用 TLS(Transport Layer Security,传输层安全)协议来保护数据的安全。这种加密连接使用的是 wss:// 协议前缀,与不加密的连接使用的 ws:// 协议前缀相区别。除此之外,

WebSocket 还支持安全握手协议(Secure Handshake Protocol),这使得它可以在浏览器和服务器之间进行加密通信。总的来说,WebSocket 具有较高的安全性,可以保护数据的安全。

(3)WebSocket和HTTP区别。

连接方式:HTTP是一种无状态的协议,每次请求都需要建立一个新的连接,完成请求后立即关闭连接。而WebSocket是一种全双工的协议,它在客户端和服务器之间建立一条持久的连接,可以实现双向通信。

数据传输:HTTP协议是基于请求-响应模式的,客户端发送请求,服务器返回响应。而WebSocket允许服务器主动向客户端推送数据,实现了服务器和客户端之间的实时双向通信。

数据格式:HTTP协议传输的数据通常是文本或二进制数据,而WebSocket可以传输任意格式的数据,包括文本、二进制、JSON等。

端口:HTTP协议使用的默认端口是80(HTTP)或443(HTTPS),而WebSocket使用的默认端口是80(WS)或443(WSS)。

总结来说,HTTP协议适用于客户端向服务器发送请求并获取响应的场景,而WebSocket适用于需要实时双向通信的场景,例如在线聊天、实时数据更新等。

(4)应用场景

主要应用场景:

在线聊天应用:WebSocket可以实现即时消息传递,无需轮询服务器即可接收和发送消息。

视频会议和协作工具:WebSocket可以实时传输音频和视频数据,以及屏幕共享等功能。

多人游戏:WebSocket可以实时更新游戏状态,确保玩家之间的交互流畅无延迟。

实时对战游戏:WebSocket可以快速响应玩家的动作,提供流畅的游戏体验。

股票交易平台:WebSocket可以实时推送股票市场的最新价格和交易数据。

实时新闻和体育赛事更新:WebSocket可以即时向用户推送新闻更新和赛事比分。

物联网应用场景(相对较少):

工业自动化:WebSocket可以用于实时监控和控制生产线上的设备。

智能家居:WebSocket可以实时接收和发送指令,控制家中的智能设备。

设备监控和控制:WebSocket可以用于远程监控和控制连接到互联网的设备。

实时传感器数据传输:WebSocket可以实时收集和传输来自传感器的数据。

6.XMPP协议

  (1)概述

       该协议的前身是Jabber,我们采取XMPP协议主来实现IM主要是考虑XMPP协议是以XML为基础的,它继承了在XML环境中灵活的发展性。这表明XMPP是可扩展的,所以XMPP信息不仅可以是简单的文本,

而且可以携带复杂的数据和各种格式的文件,也就是说XMPP协议不仅可以用在人与人之间的交流,而且可以实现软件与软件或软件与人之间的交流,目前支持XMPP协议的即时通讯工具有Gtalk、FaceBook IM、Twitter、

网易POPO等等通讯工具,具有非常好的发展情景。由于XMPP是一种基于XML架构的开放式协议,在IM通讯中被广泛采用。

(2)Xmpp协议内容

XMPP中定义了三个角色,客户端,服务器,网关。通信能够在这三者的任意两个之间双向发生。服务器同时承担了客户端信息记录,连接管理和信息的路由功能。网关承担着与异构即时通信系统的互联互通,

异构系统可以包括SMS(短信),MSN,ICQ等。基本的网络形式是单客户端通过TCP/IP连接到单服务器,然后在之上传输XML。

(3)应用场景

     XMPP协议主要在互联网及时通讯应用中运用的比较多,在物联网中目前较少应用;

7.DDS协议

DDS(Data Distribution Service for Real-Time Systems,实时系统数据分发服务)是一种由对象管理组(OMG)为实时系统设计的中间件和数据分发协议。它主要用于分布式实时系统中的数据传输,确保数据在多个节点之间高效、可靠地流动。

主要特点:

数据中心性:DDS 是一种数据中心协议,这意味着它以数据为中心,而不是以服务或接口为中心。这种设计使得应用程序可以直接操作和分发数据,而不需要关注底层的通信机制。

实时性:DDS 专为实时系统设计,支持低延迟和高吞吐量的数据传输,确保数据在严格的时限内得到处理和分发。

灵活性:DDS 提供了多种数据分发模式,如发布/订阅(publish/subscribe)和查询(query),这使得开发者可以根据应用需求选择合适的分发策略。

可扩展性:DDS 支持从几个到成千上万个节点的可扩展性,这使得它适用于从小型系统到大型分布式系统的各种应用场景。

容错性:DDS 提供容错机制,确保即使在部分网络或系统组件失败的情况下,也能保持数据的一致性和可用性。

DDS 应用领域(物联网领域应用较少):

金融服务:实时市场数据的分发和交易执行。

电信:网络状态信息和用户数据的实时更新。

交通管理系统:实时监控和管理交通流量。

智能电网:实时监控和管理电网状态和数据。

国防和航空:实时战术数据和态势感知信息的分发。

8.LwM2M协议

LWM2M全称lightweight Machine to Machine,是一种物联网协议,主要可以使用在资源受限(包括存储、功耗等)的嵌入式设备上。LwM2M是一种轻量级的M2M协议,旨在简化设备管理并降低带宽要求。

协议层次结构:

LWM2M属于应用层协议,位于CoAP协议之上,而CoAP可以进行DTLS加密处理,最后通过UDP或SMS方式传送。

二.总结

       从当前物联网应用发展趋势来分析,MQTT协议具有一定的优势,因为目前国内外主要的云计算服务商,比如阿里云、AWS、百度云、Azure以及腾讯云都一概支持MQTT协议。

       还有一个原因就是MQTT协议比CoAP成熟的要早,所以MQTT具有一定的先发优势,但随着物联网的智能化和多变化的发展,后续物联网应用平台肯定会兼容更多的物联网应用层协议。

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

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

相关文章

Element UI上传图片和PDF,支持预览,并支持复制黏贴上传

背景 如上图&#xff0c;使用Element UI的el-upload组件&#xff0c;并且预览的时候可以展示图片和PDF格式文件&#xff1b; 做法 index.vue <template><div><el-uploadv-model"diaForm.list":limit"5":on-exceed"handleExceed"…

使用AutoGen框架进行多智能体协作:AI Agentic Design Patterns with AutoGen

AI Agentic Design Patterns with AutoGen 本文是学习https://www.deeplearning.ai/short-courses/ai-agentic-design-patterns-with-autogen/ 这门课的学习笔记。 What you’ll learn in this course In AI Agentic Design Patterns with AutoGen you’ll learn how to buil…

vue+vscode 快速搭建运行调试环境与发布

1.安装node.js Node.js — Run JavaScript Everywhere 默认不断next 2.更换镜像地址 运行-cmd 执行以下代码安装 npm config set registry https://registry.npmmirror.com 检查node.js和镜像是否是否成功 node -v npm -v npm config get registry 3.安装打包工具 …

【SpringBoot】SpringBoot整合RabbitMQ消息中间件,实现延迟队列和死信队列

&#x1f4dd;个人主页&#xff1a;哈__ 期待您的关注 目录 一、&#x1f525;死信队列 RabbitMQ的工作模式 死信队列的工作模式 二、&#x1f349;RabbitMQ相关的安装 三、&#x1f34e;SpringBoot引入RabbitMQ 1.引入依赖 2.创建队列和交换器 2.1 变量声明 2.2 创建…

Java采取擦除式泛型到底兼容了什么场景?

在开始前刚好我有一些资料&#xff0c;是我根据网友给的问题精心整理了一份「 Java的资料从专业入门到高级教程」&#xff0c; 点个关注在评论区回复“888”之后私信回复“888”&#xff0c;全部无偿共享给大家&#xff01;&#xff01;&#xff01;Java擦除式泛型是一个妥协,…

高光谱图像聚类的像素-超像素对比学习与伪标签校正

Pixel-Superpixel Contrastive Learning and Pseudo-Label Correction for Hyperspectral Image Clustering 文章目录 Pixel-Superpixel Contrastive Learning and Pseudo-Label Correction for Hyperspectral Image Clustering摘要引言相关方法对比学习 方法超像素对比学习像素…

【Flask开发实战】首页模板

一、前言 前面我们已经完成登录页面的设定&#xff0c;登录后临时调转到“hello flask”的界面。现在我们根据实际首页的设计需要&#xff0c;来完成首页相关内容的开发。一般系统首页会放一些分析数据&#xff0c;多以图表的方式展示&#xff0c;方便使用者了解信息。以防火墙…

JavaScript事件监听之其它事件(页面加载事件、元素滚动事件、页面尺寸事件、M端事件)

目录 1. 页面加载事件(load、DOMContentLoaded)2. 元素滚动事件(scroll)3. 页面尺寸事件3.1 resize3.2 获取元素宽高3.3 获取元素位置(offsetLeft和offsetTop、getBoundingClientRect) 4. M端事件 1. 页面加载事件(load、DOMContentLoaded) load事件&#xff1a; 使用场景: 等…

MyBatis二级缓存开启条件

MyBatis缓存为俩层体系。分为一级缓存和二级缓存。 一级缓存&#xff1a; 一级缓存默认开启&#xff0c;一级缓存的作用域是SqlSession级别的&#xff0c;这意味着当你更换SqlSession之后就不能再利用原来的SqlSession的一级缓存了。不同的SqlSession之间的一级缓存是隔离的。…

基础概念解析:SOCKS5代理究竟是什么?SOCKS5代理ip使用场景有哪些?

在当今数字化时代&#xff0c;网络安全和隐私保护已成为我们日常生活中不可忽视的问题。随着网络攻击手段的日益复杂&#xff0c;如何安全地访问互联网资源成为了一个亟待解决的问题。SOCKS5代理作为一种先进的网络协议&#xff0c;为我们提供了解决这一问题的有效方案。 本文…

实用的 C 盘搬家软件

一、简介 1、一款专门用于 Windows 系统的文件夹移动工具&#xff0c;它允许用户将程序或游戏的安装文件夹从一台驱动器移动到另一台驱动器&#xff0c;或者同一个驱动器内的不同路径&#xff0c;而无需重新安装或破坏现有的程序安装。 二、下载 1、下载地址&#xff1a; 官网链…

3-1RT-Thread时钟管理

这里写自定义目录标题 时钟节拍是RT thread操作系统的最小时间单位。 第一个功能&#xff0c;rt tick值自动加1&#xff0c;在RT thread当中通过RT_USING_SMP定义了多核和单核的场景。第二个功能&#xff0c;检查当前线程的时间片&#xff0c;首先获取当前线程&#xff0c;将当…

AI 写高考作文丨10 款大模型 “交卷”,实力水平如何?

前言 在科技日新月异的今天&#xff0c;人工智能&#xff08;AI&#xff09;已不再是遥不可及的未来科技&#xff0c;而是逐渐融入我们日常生活的实用工具。从智能语音助手到自动驾驶汽车&#xff0c;从智能家居系统到精准医疗诊断&#xff0c;AI技术正以其强大的计算能力和数…

端午搞个零花钱,轻松赚取创业的第一桶金!2024最受欢迎的创业项目,2024新的创业机会

好好的端午节&#xff0c; 净给我添堵&#xff01; 本来我打算在端午节愉快的玩耍&#xff0c; 结果一大早起床却看到舍友在给一堆设备充电&#xff0c; 然后装的整整齐齐&#xff0c; 满满一书包。 我好奇他小子这是要干嘛&#xff1f; 不会是打算今天回去给亲朋好友准备…

Centos7 安装配置SFTP

Centos7安装配置SFTP 更新源安装 OpenSSH 服务启动服务设置为开机自启动新建一个用户 (sftpuser为你要设置的用户的用户名)编辑配置文件设置sftp用户的根目录重启SSH服务代码实现 由于最近工作中需要实现动态上传文件到帆软服务器&#xff0c;但是帆软没有提供相关API&#xff…

Allegro限制走线区域和元器件摆放区域

一、Line to Shape 当你的板框是线条形式时&#xff0c;先将线条闭合成shape&#xff0c;点击Shape–>Compose Shape,选择如下参数&#xff0c;再逐一选中分散线条&#xff0c;选择完毕右键Done即可 二、Z-Cope使用 点击Edit–>Z-Cope&#xff0c;选择如下参数&…

Django项目上线-报错汇总

Django项目上线-报错汇总 下列报错基本都是Python环境相关 pip install 报错 WARNING: pip is configured with locations that require TLS/SSL, however the ssl module in Python is not available. debian运行pip报错ssl module in Python is not available - z417 - 博…

SM481,SM432和利时DCS备件

SM481,SM432和利时DCS备件。POU名只能包含字母、数字、下划线&#xff0c;第一个字符必须是字母或者下划线&#xff0c;且遵循以下原则&#xff1a;SM481,SM432和利时DCS备件。关于重名&#xff0c;不能与变量名、变量组名、POU文件夹名、任务名、SM481,SM432和利时DCS备件。工…

OpenCompass 大模型评测平台C-Eval 基准任务评估实战

1. 引言 在人工智能迅速发展的今天&#xff0c;大型语言模型&#xff08;LLMs&#xff09;在多个领域展现出了巨大的潜力和应用价值。然而&#xff0c;如何评价这些模型的性能&#xff0c;了解它们的优缺点&#xff0c;成为了一个重要课题。OpenCompass&#xff0c;一个由上海…

【Java】解决Java报错:ArrayIndexOutOfBoundsException

文章目录 引言1. 错误详解2. 常见的出错场景2.1 直接访问数组越界2.2 循环中的索引错误2.3 多维数组的错误访问 3. 解决方案3.1 检查数组长度3.2 正确使用循环3.3 多维数组的正确访问 4. 预防措施4.1 使用增强型 for 循环4.2 编写防御性代码4.3 单元测试 结语 引言 在Java编程…