【物联网】基于树莓派的物联网开发【17】——物联网通信协议MQTT基础知识

使用背景

MQTT最初是为了解决物联网(IoT)领域设备之间的低带宽、高延迟、不稳定网络连接等问题而设计的。

场景介绍

广泛应用物联网领域,数据实时传输,连接各种智能设备和应用的关键桥梁

MQTT简介和概述

MQTT(Message Queuing Telemetry Transport)是一种轻量级的消息传输协议,它是一种基于发布(Publish)/订阅(Subscribe )模式的消息传输协议(物联网通信协议),它工作在TCP/IP协议族上,并为低带宽、高延迟或不稳定的网络环境提供了可靠的消息传输服务。MQTT协议是基于TCP/IP协议栈构建的,可以在不同的设备和平台之间进行通信。凭借简单易实现、支持 QoS、报文小等特点,占据了物联网协议的半壁江山. MQTT在物联网方向的开发出现的频率非常高, 因此从事该行业方向开发有必要对其进行下系统的学习。

在这里插入图片描述

MQTT的主要特点是什么?

MQTT协议的主要特点是轻量级、简单、灵活和可扩展。它使用了发布/订阅的消息传递模式,这意味着消息的发送者(发布者)和接收者(订阅者)不需要直接进行连接,而是通过代理(Broker)进行消息的转发。这种设计使得MQTT非常适合于物联网场景,因为物联网中的设备通常具有不同的通信能力和需求。
● 开放消息协议,简单易实现
● 发布订阅模式,一对多消息发布
● 基于TCP/IP网络连接,提供有序,无损,双向连接。
● 1字节固定报头,2字节心跳报文,最小化传输开销和协议交换,有效减少网络流量。
● 消息QoS支持,可靠传输保证

注意:
1、 主流的MQTT是基于TCP连接进行数据推送的,但是同样有基于UDP的版本,叫做MQTT-SN。
2、 关于Qos,需要指出的是三种消息发布质量。

QoS消息发布质量介绍
QoS0:“至多一次”,消息发布完全依赖底层TCP/IP网络。会发生消息丢失或重复。这一级别可用于如下情况,环境传感器数据,丢失一次读记录无所谓,因为不久后还会有第二次发送。这一种方式主要用于普通APP的推送,倘若你的智能设备在消息推送时未联网,推送过去没收到,即使再次联网也收不到了。

QoS1:“至少一次”,确保消息到达,但消息重复可能会发生

QoS2:“只有一次”,确保消息到达一次。在一些要求比较严格的计费系统中,可以使用此级别。在计费系统中,消息重复或丢失会导致不正确的结果。这种最高质量的消息发布服务还可以用于即时通讯类的APP的推送,确保用户收到且只会收到一次。

MQTT的基本原理是什么?

MQTT的基本原理是发布/订阅模式。在MQTT中,消息发布者(Publisher)将消息发布到一个主题(Topic)上,而消息订阅者(Subscriber)则订阅这个主题,当有新的消息发布到这个主题上时,订阅者将会收到这个消息。MQTT的消息传递过程如下:

● 发布者将消息发送到MQTT Broker(代理服务器)上,并指定消息发布的主题。
● 订阅者通过订阅相应的主题,向MQTT Broker注册对该主题的订阅。
● 当有新的消息发布到该主题时,MQTT Broker会将消息发送给所有订阅了该主题的订阅者。

MQTT协议使用TCP/IP协议栈进行通信,因此在使用MQTT协议时需要建立TCP连接。MQTT协议支持三种不同的服务质量级别(QoS级别),可以根据需求选择适当的级别。当消息发布者发布消息时,可以指定消息的QoS级别,用于保证消息的可靠性和传递的顺序。

MQTT协议还支持保留消息(Retained Messages)和遗嘱消息(Last Will and Testament)。保留消息是指最新的消息将一直保存在服务器上,新的订阅者可以获取最新的消息。遗嘱消息是指在客户端异常断开连接时自动发送一条消息,用于通知其他订阅者该客户端已经离线。

实现MQTT协议需要客户端和服务器端通讯完成,在通讯过程中,MQTT协议中有三种身份:发布者(Publish)、代理(Broker)(服务器)、订阅者(Subscribe)。其中,消息的发布者和订阅者都是客户端,消息代理是服务器,消息发布者可以同时是订阅者。MQTT传输的消息分为:主题(Topic)和负载(payload)两部分:
● Topic,可以理解为消息的类型,订阅者订阅(Subscribe)后,就会收到该主题的消息内容(payload);
● payload,可以理解为消息的内容,是指订阅者具体要使用的内容。
在这里插入图片描述

网络链接

由底层传输协议提供给MQTT使用的架构

● 底层传输协议能够连通客户端和服务端
● 底层传输协议提供有序的,可靠的,双向字节流

应用消息

指通过MQTT在网络中传输的应用程序数据。 当应用消息通过MQTT传输的时候会附加上质量服务(QoS)和话题名称。

客户端

一个使用MQTT协议的应用程序或者设备,它总是建立到服务器的网络连接。客户端可以

● 发布, 订阅消息
● 退订和删除应用程序消息
● 断开和服务器连接

服务端

MQTT服务器被称为"消息代理"(Broker),它可以是一个应用程序或一台设备。是位于消息发布者和订阅者之间,它可以:

● 接收客户端消息
● 处理客户端订阅和退订请求
● 向订阅的客户端转发消息

主题名

指附着于应用消息的标签,服务端用它来匹配订阅。服务端给每个匹配到的客户端发送一份应用信息的拷贝。

主题过滤器

是包含在订阅里的一个表达式,用来表示一个或多个感兴趣的话题。话题过滤器可以包含通配符。

MQTT控制包

通过网络连接发送的包含一定信息的数据包。MQTT规范定义了14个不同类型的控制包,其中一个(PUBLISH包)用来传输应用信息。

发布/订阅、主题、会话

mqtt工作流程

● 客户端发送连接请求到服务器, 在服务器确认(认证)后则建立连接.
● 之后客户端则可以将消息以主题的形式 发布 到服务器 broker
● 然后其他客户端则可以 订阅 相关主题, 接收对应主题的信息(依照订阅发布模型)
● 同时消息服务器broker 会接收客户端的心跳请求并返回心跳响应, 用于监测客户端,服务器健康状况.

MQTT有什么优点?

1、轻量级
MQTT协议非常轻量级,传输的数据包头很小,通信的负载也很小,适用于各种网络环境。
2、发布/订阅模式
MQTT协议采用发布/订阅模式,可以实现多个客户端之间的消息传递。
3、QoS级别
MQTT协议支持三种不同的服务质量级别(QoS级别),可以根据需求选择适当的级别。
4、保留消息
MQTT协议支持保留消息,可以将最新的消息保留在服务器上,新的订阅者可以获取最新的消息。
5、遗嘱消息
MQTT协议支持遗嘱消息,可以在客户端异常断开连接时自动发送一条消息。
6、安全性
MQTT协议支持TLS/SSL加密,可以保证通信的安全性。
7、易于实现和部署
MQTT协议的实现和部署都非常容易,可以适用于各种物联网应用场景。
8、开放性
MQTT协议是一个开放的标准,可以与其他协议和系统进行集成。

MQTT有什么缺点?

1、可扩展性有限
MQTT协议的可扩展性有限,不适合大规模的物联网应用。
2、不支持请求/响应模式
MQTT协议不支持请求/响应模式,限制了一些应用场景。
3、不支持消息队列
MQTT协议不支持消息队列,限制了一些应用场景。
4、消息传递的延迟
由于MQTT协议的发布/订阅模式,消息传递的延迟可能会比较大,不适合实时性要求较高的应用场景。

MQTT应用领域有哪些?

传感器数据的采集和传输
许多传感器需要将采集的数据传输到服务器或其他设备中进行处理,MQTT协议可以实现数据的实时传输和管理。
智能家居
MQTT协议可以用于智能家居中各种设备之间的通信和控制,例如智能灯光、智能家电、智能安防等。
智能交通
MQTT协议可以用于智能交通系统中各个设备之间的通信和协作,例如智能导航、智能停车、智能交通灯等。
智能制造
MQTT协议可以用于智能制造中各种设备之间的通信和控制,例如智能生产线、智能仓储等。
物流和供应链
MQTT协议可以用于物流和供应链中各个环节之间的通信和协作,例如智能仓储、智能物流等。
能源管理
MQTT协议可以用于能源管理中各种设备之间的通信和控制,例如智能电网、智能能源监测等。
智慧城市
MQTT协议可以用于智慧城市的建设和管理中,例如智能路灯、智能公交、智能城市管理等。

MQTT的安全认证机制是什么?

用户名和密码认证
MQTT协议可以通过用户名和密码认证机制来确保客户端的身份。在连接MQTT Broker之前,客户端需要提供用户名和密码以进行身份验证。
SSL/TLS加密
MQTT协议可以通过SSL/TLS加密来保证通信的安全性。客户端和MQTT Broker之间的数据传输会被加密,确保数据的机密性和完整性。
X.509证书认证
MQTT协议可以通过X.509证书认证机制来确保客户端和MQTT Broker之间的身份认证和通信安全。
IP过滤
MQTT Broker可以通过IP过滤来限制客户端的访问,确保安全性和可控性。
ACL(访问控制列表)
MQTT Broker可以通过ACL机制来限制客户端的访问权限,确保数据的安全性和保密性。
防火墙
MQTT Broker可以通过防火墙来限制客户端的访问,确保网络的安全性和稳定性。

MQTT的会话和持久化机制是什么?

MQTT协议支持两种类型的会话:非持久化会话和持久化会话
非持久化会话:当客户端连接到MQTT代理时,会创建一个非持久化会话。这种会话会在客户端断开连接时自动结束,会话中的QoS0消息也会被丢弃。
持久化会话:当客户端连接到MQTT代理时,可以选择创建一个持久化会话。这种会话会在客户端断开连接后继续存在,会话中的QoS1和QoS2消息也会被保存。客户端可以重新连接并恢复未接收的消息。
MQTT代理可以使用持久化机制来保存持久化会话的状态信息,以便在客户端重新连接时恢复会话。这通常是通过将会话状态信息保存在磁盘或数据库中实现的。

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

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

相关文章

【qml-3】qml与c++交互第二次尝试(类型方式)

背景: 【qml-1】qml与c交互第一次尝试(实例方式) 【qml-2】尝试一个有模式的qml弹窗-CSDN博客 【qml-3】qml与c交互第二次尝试(类型方式) 还是qml学习笔记。 这次搁置太久了。其实不太会,还是以教程为主…

输电线路观冰精灵在线监测装置:科技赋能电网安全的新利器

一、技术架构与工作原理输电线路观冰精灵在线监测装置(简称“观冰精灵”)是一款集成多源感知、智能分析、远程通信于一体的专业化覆冰监测设备。其核心功能通过以下技术路径实现:1. 数据采集模块视觉识别系统:搭载工业级夜视摄像机…

Ubuntu22 上,用C++ gSoap 创建一个简单的webservice

创建calc.h// calc.h // gSOAP 服务定义 int ns__add(double a, double b, double &result); int ns__subtract(double a, double b, double &result);创建my_server.cpp#include "soapService.h" #include "ns.nsmap" class MyService : public S…

Java(LinkedList和ArrayList底层分析)

LinkedList全面说明:LinkedList底层操作机制:LinkedList的方法:add():增加节点对象remove():删除一个节点对象(默认删除第一个节点对象)set():修改一个节点对象get():得到一个节点对象LinkedList的遍历:增强for循环迭代器普通for循化LinkedList的源码解读:增加源码:1. LinkedLi…

开源项目XBuilder的user逻辑

stores \ userquery-keys.ts 统一管理Vue Query(TanStack Query的Vue适配版本)缓存键,在下面的文件中复用index.ts 入口文件,统一用户信息查询signed-in.ts 登录状态管理、认证逻辑在用户登录后,系统颁发一个令牌&…

第十五章 SEO的简单免费工具

SEO的基础工具和检测 前文中主要是讲一些SEO的网站基本功,而在这一章那,会讲到一些非常基本的工具,主要是关于:网站的流量、停留时长、关键词密度、内容、以及Google的站长工具。 Google Search Console Google Search Console这是…

SSL 证书与 HTTPS 的关系:一文理清核心关联

HTTPS(Hypertext Transfer Protocol Secure)和 SSL 证书(Secure Sockets Layer Certificate)是网络安全的两大基石,它们共同保障了互联网通信的安全性和可信度。以下从定义、功能、关系及实际应用层面进行解析&#xf…

使用Jmeter参数化实现接口自动化测试

🍅 点击文末小卡片,免费获取软件测试全套资料,资料在手,涨薪更快 本文记录如何使用Jmeter参数化(csv)实现接口自动化——测试Token不同入参情况下,接口请求能够返回正确的结果1. 首先需要使用Jmeter获取一个…

X-plore File Manager v4.34.02 修改版:安卓设备上的全能文件管理器

在使用安卓设备时,文件管理是日常操作中不可或缺的一部分。X-plore File Manager 作为一款功能强大的文件管理器,凭借其丰富的功能和便捷的操作,成为安卓用户管理文件的首选工具之一。最新版 v4.34.02 修改版更是解锁了更多高级功能&#xff…

React+threejs两种3D多场景渲染方案

在现代 Web 开发中,3D 可视化需求日益增长,特别是在 React 生态系统中实现多 3D 场景的展示与交互。本文通过对比两种实现方案,探讨 React 中构建多 3D 场景的最佳实践,分析它们的技术特点、性能表现和适用场景。方案一&#xff1…

React性能优化终极指南:memo、useCallback、useMemo全解析

掌握 React.memo、useCallback、useMemo 的正确使用姿势,让你的 React 应用性能飞起来! 🎯 React.memo 作用 React.memo 是一个高阶组件,用于函数组件,通过浅比较 props 的变化来决定是否重新渲染。如果 props 没有变…

借助 VR 消防技术开展应急演练,检验完善应急预案​

应急演练是企业应对火灾事故的重要手段,而 VR 消防技术的应用,为应急演练带来了全新的体验和更高的效率。VR 消防技术通过虚拟现实技术模拟逼真的火灾场景,让参与者能够身临其境地感受火灾发生时的紧张氛围。某知名物流企业,仓库众…

【电赛学习笔记】MaxiCAM 项目实践——二维云台追踪指定目标

前言 本文是对视觉模块MaixCam实现二维云台人脸跟踪_哔哩哔哩_bilibili大佬的项目实践整理与拓展,侵权即删。 单路舵机基本控制 #导入必要模块 from maix import pwm, time , pinmap#定义全局变量,设初值 SERVO_FREQ 50 #主频 SERVO_MIN_DUT…

深入解析 ArkUI 触摸事件机制:从点击到滑动的开发全流程

摘要 随着 HarmonyOS NEXT 的不断发展,ArkUI 逐渐成为主流的 UI 构建方式。而用户交互在任何应用中都是基础而又关键的一环,如何利用 ArkUI 提供的触摸事件机制,如 onTouch、onClick、onSwipe 等,来实现自然、顺滑、用户友好的交互…

Tailwind CSS 自定义工具类与主题配置指南

一、自定义工具类配置在 src/tailwind.css 文件中,我们可以通过 layer utilities 指令添加自定义工具类:tailwind base; tailwind components; tailwind utilities;layer utilities {/* 自定义工具 上下浮动效果 */.animate-floatY {animation: floatY 3…

【代码随想录二刷|704.二分查找、27.移除元素、977.有序数组的平方】

704.二分查找 题目链接&#xff1a;704. 二分查找 - 力扣&#xff08;LeetCode&#xff09; class Solution { public:int search(vector<int>& nums, int target) {//不用二分查找&#xff0c;直接求// for(int i0;i<nums.size();i){// if(nums[i]target)…

基于Vue的工业设备大屏可视化模板(含设备地图分布+宣传模块+报表展示+三维模型加载预览)

场景 为实现工业设备可视化大屏需求&#xff0c;可实现基于地图的设备数据管理&#xff0c;点击具体设备可进行详细介绍和三维模型展示。 可播放宣传视频&#xff0c;可展示PM数据报表等数据&#xff0c;可接受报警数据提醒、统计等数据。 基于现有开源平台框架进行二次改造…

堆(Heap)优先级队列(Priority Queue)

一、堆的概念堆&#xff08;Heap&#xff09;是一种特殊的基于树的数据结构&#xff0c;通常分为最大堆和最小堆两种类型。它满足堆属性&#xff1a;对于最大堆&#xff0c;父节点的值总是大于或等于其子节点的值&#xff1b;而对于最小堆&#xff0c;父节点的值总是小于或等于…

踩坑记录:因版本不匹配导致 Boost 1.85 编译失败的完整解决过程

踩坑记录&#xff1a;因版本不匹配导致 Boost 1.85 编译失败的完整解决过程 转载请注明出处&#xff0c;欢迎评论区交流。 背景 最近在 Windows 11 VS2022 环境下尝试用 b2 编译 Boost 1.85.0&#xff0c;结果一路踩坑&#xff0c;最后发现罪魁祸首是 Boost.Build 自带的 msv…

InfluxDB Line Protocol 协议深度剖析(二)

四、Line Protocol 写入操作与实践&#xff08;一&#xff09;HTTP API 写入使用 HTTP API 是通过 Line Protocol 写入数据到 InfluxDB 的常用方式。InfluxDB 1.x&#xff1a;请求方式为 POST&#xff0c;URL 格式为 “http://host:port/write?dbdatabase_name”。其中&#x…