TCP/IP协议—MQTT

news2024/11/23 10:19:43

TCP/IP协议—MQTT

  • MQTT协议
    • MQTT协议特点
    • MQTT通信流程
    • MQTT协议概念
  • MQTT报文
    • 固定报头
    • 可变报头
    • 有效载荷

MQTT协议

消息队列遥测传输(Message Queuing Telemetry Transport,MQTT)是一个基于客户端-服务器的消息发布/订阅传输协议。它的设计思想是轻巧、开放、简单、规范,因此易于实现。这些特点使得它对很多场景来说都是很好的选择,包括受限的环境如机器与机器的通信(M2M)以及物联网环境(IoT)。
MQTT基于TCP协议(1883端口),同时支持TLS协议加密(8883端口)以及WebSocket协议。

MQTT协议源文档

MQTT协议特点

  • 开放消息协议,简单易实现
  • 发布订阅模式,一对多消息发布
  • 基于TCP/IP网络连接,提供有序,无损,双向连接。
  • 消息QoS支持,可靠传输保证

MQTT通信流程

在这里插入图片描述
客户端
使用MQTT的程序或设备。根据功能的不同也可称为发布者或者订阅者

  • 打开连接到服务端的网络连接
  • 发布应用消息给其它相关的客户端
  • 订阅以请求接受相关的应用消息
  • 取消订阅以移除接受应用消息的请求
  • 关闭连接到服务端的网络连接

服务端
作为发送消息的客户端和请求订阅的客户端之间的中介。也被称为MQTT代理,因为服务器只做消息管理,不处理应用数据,而是转发应用数据。

  • 接受来自客户端的网络连接
  • 接受客户端发布的应用消息
  • 处理客户端的订阅和取消订阅请求
  • 转发应用消息给符合条件的已订阅客户端
  • 关闭来自客户端的网络连接

MQTT协议概念

  • 会话(Subscription):客户端和服务端之间的状态交互。每一个与服务端交互的客户端都会有一个client ID,这个ID是唯一ID,如果与其他的客户端重复,将会被服务器踢下线。
  • 主题(topic):主题是应用消息的标签,发布以及订阅都是通过主题进行的。主题支持通配符,可以通过通配符实现同时向多个主题发布数据。
  • 订阅(Subscription):通过订阅主题,接受服务器的数据。可以理解为微信订阅公众号。
  • 发布(Public):通过主题讲信息发送到服务器。可以理解为微信公众号发推文。
  • 服务质量(QoS):服务质量是MQTT控制数据可靠性的一个特性。QoS有三个等级,当双方的QoS等级不一致时,以等级低的一方为准。
    • QoS 0:“最多一次”,尽操作环境所能提供的最大努力分发消息。只发送一次,数据可能会丢失或者因重发导致重复。
    • QoS 1:“至少一次”,保证消息可以到达,但是可能会重复。发送多次,当服务器回复后停止发送,可能会因网络延迟导致对端收到多次。
    • QoS 2:“仅一次”,保证消息只到达一次。确保只收到一次,分4步进行确认。
      1. 发布者发送消息到服务器: 发布者将消息发送到MQTT服务器。
      2. 服务器发送确认消息给发布者: 服务器收到消息后发送确认消息给发布者,告知消息已经收到。
      3. 服务器将消息发送给订阅者: 服务器将消息发送给所有订阅者。
      4. 订阅者发送确认消息给服务器: 订阅者收到消息后发送确认消息给服务器,告知消息已经收到。
  • 遗嘱消息(Will Message):在网络连接非正常关闭的情况下,由服务端发布的应用消息。
  • 消息保留(Retained Messages):发布者可以选择保留消息,这意味着 MQTT 服务器将保留最新的消息,并在订阅者订阅该主题时立即发送给它们。这对于传递状态信息或配置信息很有用。

MQTT报文

在这里插入图片描述

MQTT报文包含3部分

  1. 固定报头(Fixed Header):所有控制报文都包含,表示数据包类型及数据包的分组标识。
  2. 可变报头(Variable Header):部分控制报文包含,数据包类型决定可变报头是否存在。
  3. 有效载荷(Payload):部分控制报文包含,数据包类型决定可变报头是否存在。

固定报头

在这里插入图片描述
固定报头包含3部分

  • MQTT报文类型(MQTT Control Packet type)
  • MQTT报文类型标志位(Flags specific to each MQTT Control Packet type)
  • 剩余长度(Remaining Length)

MQTT报文类型可以参考👇表格

类型方向描述有效载荷可变报头报文标识符
Reserved0禁止保留不需要不需要
CONNECT1客户端到服务端客户端请求连接服务端需要不需要
CONNACK2服务端到客户端连接报文确认不需要不需要
PUBLISH3两个方向都允许发布消息可选需要(如果QoS>0)
PUBACK4两个方向都允许QoS 1消息发布收到确认不需要需要
PUBREC5两个方向都允许发布收到(保证交付第一步)不需要需要
PUBREL6两个方向都允许发布释放(保证交付第二步)不需要需要
PUBCOMP7两个方向都允许QoS 2消息发布完成(保证交互第三步)不需要需要
SUBSCRIBE8客户端到服务端客户端订阅请求需要需要
SUBACK9服务端到客户端订阅请求报文确认需要需要
UNSUBSCRIBE10客户端到服务端客户端取消订阅请求需要需要
UNSUBACK11服务端到客户端取消订阅报文确认需要需要
PINGREQ12客户端到服务端心跳请求不需要不需要
PINGRESP13服务端到客户端心跳响应不需要不需要
DISCONNECT14两个方向都允许断开连接通知不需要不需要
AUTH15两个方向都允许认证信息交换不需要不需要

MQTT报文类型标志位目前是保留位,当前只有MQTT 5.0 规范中PUBLISH用到。

  • Bit 3:DUP,表示当前 PUBLISH 报文是否是一个重传的报文。
  • Bit 2,1:QoS,表示当前 PUBLISH 报文使用的服务质量等级。
  • Bit 0:Retain,表示当前 PUBLISH 报文是否是一个保留消息。

剩余长度
固定头的第二字节用来保存变长头部和消息体的总大小的,但不是直接保存的。这一字节是可以扩展,其保存机制,前7位用于保存长度,后一部用做标识。当最后一位为 1时,表示长度不足,需要使用二个字节继续保存。

可变报头

某些 MQTT 控制报文包含一个可变报头部分。它在固定报头和有效载荷之间。可变报头的报文标识符(Packet Identifier)字段存在于在多个类型的报文里。
由于可变报头的内容根据报文类型的不同而不同,篇幅过长,具体可以参考👆MQTT协议源文档。

有效载荷

有效载荷是实现某种报文类型的核心,但是MQTT只有几种报文需要有效载荷。

  • CONNECT:包含客户端的ClientID、订阅的Topic、Message以及用户名和密码。
  • PUBLISH:包含客户端要发布的内容,当内容为空时则不存在。
  • SUBSCRIBE:包含一系列的要订阅的主题以及QoS。
  • SUBACK:包含服务器对于SUBSCRIBE所申请的主题及QoS进行确认和回复。
  • UNSUBSCRIBE:包含客户端要订阅的主题。
  • UNSUBACK:包含务器对于UNSUBSCRIBE所申请的主题及QoS进行确认和回复。

学习笔记,有问题欢迎指出
参考链接
https://mqtt.p2hp.com/

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

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

相关文章

HalconLen5-定位特征步步逼近

read_image(Image, C:/Users/86173/Desktop/test/2.png) get_image_size(Image, Width, Height)dev_close_window() dev_open_window(0, 0, Width, Height, black, WindowHandle)dev_display(Image)threshold(Image, Region, 128, 255) //阈值处理connection(Region, Connected…

人事管理软件全解析:高效团队管理的必备利器

本文为您详细介绍六款备受推崇的人力资源管理系统有:Zoho People、SAP SuccessFactors、Workday、Zenefits、BambooHR、TalentSoft。 一、Zoho People Zoho People 是一款全球领先的人事管理软件,以其全面的功能覆盖、出色的用户体验及高度的定制化能力…

02_Fixture定位,Caliper卡尺工具,几何学工具

Fixture定位工具 需求: 测量工件的尺寸 使用Caliper(卡尺)工具 这个时候需要借助Fixture工具 VisionPro中的图像空间 “” 图像的当前空间,即CogImage中的“SelectedSpaceName”表示的名字空间 “#” 像素空间,即坐标原点为图片左上角的坐标空间&am…

【模板自取】项目管理必会的思维分析工具之5W2H分析法

5W2H法是二战中美国陆军兵器修理部首创。简单、方便,易于理解、使用,广泛用于项目管理和思维分析等活动终,对于决策和执行性的活动措施也非常有帮助,也有助于弥补考虑问题的疏漏。产品管理、项目管理中,5W2H法也广泛应…

原子的内部结构

原子非常神奇,花时间思考它是非常有价值的。尽管传统的太阳系示意图存在致命的缺点,但我们还是可以局部应用于原子。 首先,原子与太阳系具有相似性一原子的中心质量大,外部质量小。我们用最简单的氢原子做分析,氢原子…

工作流JBPM系统数据库表介绍

文章目录 ☃️4.1 建表☃️4.2 数据库逻辑关系4.2.1 资源库与运行时的表4.2.2 历史数据表 ☃️4.3 表结构☃️4.4 流程操作与数表交互说明 ☃️4.1 建表 该系统自带18张表,用于支撑该系统的逻辑与流程业务; 建表语句如下: create database…

ROS实现无人驾驶控制算法(一)——pure pursuit

引言 对于导航系统来说,在规划好全局路径后,使机器人根据路径行驶这部分被称为轨迹跟踪。轨迹跟踪主要分为两类:基于几何追踪的方法和基于模型预测的方法。而pure pursuit算法就是最基本的基于几何的控制算法,因其鲁棒性高&#…

bonding原理分析和问题排查

bonding原理 发送端: 使用网卡bond3模式(广播模式BOND_MODE_BROADCAST)将报文从两个网卡同时发出,无需修改报文。 接收端: 根据发送节点时间的链路通断状态,接收端设置一条线路为活动线,另一条…

yolov7模型输出层预测方法解读

本文从代码的角度分析模型训练阶段输出层的预测包括以下几个方面: 标注数据(下文统称targets)的正样本分配策略,代码实现位于find_3_positive。候选框的生成,会介绍输出层的预测值、GT、grid、 anchor之间的联系损失函…

操作系统-一个学习能力的新高度

目录 一、目标二、计划三、完成情况四、提升改进(最少3点)五、意外之喜(最少2点)六、总结 一、目标 通过考试,当然这是眼前目标;通过对知识的学习,补上在计算机中那些透明的东西,从而让知识可以按照逻辑一层一层的构建知识大厦&a…

鸿蒙入门07-Blank组件

空白填充组件 在容器 主轴方向 上 空白填充组件具有自动填充空余部分的能力 注意 : 仅在父组件为 Row 或者 Column 的时候有效 注意 : 不能使用通用属性修饰 参数 参数名 参数类型 是否必填 默认值 参数描述 min number | string 否 …

就业班 第三阶段(nginx) 2401--4.17 day1 nginx1

负载均衡集群 1、集群是什么? 1 集群(cluster)技术是一种较新的技术,通过集群技术,可以在付出较低成本的情况下获得在性能、可靠性、灵活性方面的相对较高的收益,其任务调度则是集群系统中的核心技术。 …

【python】描述性统计计算偏斜度和峭度

文章目录 1.编写计算偏斜度和峭度的函数。并用自己编写的函数计算课本23页的习题1.5数据的偏斜度和峭度。2.从1.5数据中随机抽取2个容量为20的样本,分别计算它们的平均数和标准差3.请绘制给定数据的频率分布直方图,计算数据的均值、标准差、偏斜度和峭度…

Linux LVM 逻辑卷管理

Logical Volume Manager,逻辑卷管理 能够在保持现有数据不变的情况下动态调整磁盘容量,从而提高磁盘管理的灵活性/boot分区用于存放引导文件,不能基于LVM创建 三大概念: 物理卷PV基于硬盘或分区设备创建而来,生成N多…

抖音小店类目怎么选?新手开店这几个类目别碰!

大家好,我是电商笨笨熊 刚进入抖音小店,一定不要着急选品,而是先选择适合自己的类目。 类目决定抖店未来的发展方向,类目不对,努力白费! 今天我们就来聊聊新手做抖店该如何正确挑选合适的类目。 新手进入…

微信投票活动制作步骤是什么

随着社交媒体的不断发展,微信已成为人们生活中不可或缺的一部分。而微信投票活动,作为一种新颖、有趣的互动方式,正逐渐受到越来越多企业和个人的青睐。那么,如何制作一场成功的微信投票活动呢?今天,就让我…

JavaSE:继承 多态

继承 继承的本质 子类能够使用父类的方法和变量 使用场景:代码复用 在一个类中实现了一个很复杂的方法,给一个新类重新实现这个方法,我们直接继承即可 public class Student {public String sno;public void study() {System.out.printl…

多个微信如何自动化管理?

01 批量自动加好友 微信私域管理系统可以批量导入客户号码或微信号,设置多个号同步加好友任务。这一功能极大地减轻了手动添加好友的繁琐操作,避免因操作过多导致频繁而封号。 02 机器人自动回复 在系统上可以设置自动通过好友、通过好友后自动回复以…

物联网在工业中的应用是什么?——青创智通

工业物联网解决方案-工业IOT-青创智通 物联网在工业中的应用已经日益广泛,它为企业带来了前所未有的机会和挑战。物联网技术通过连接各种设备和系统,实现了数据的实时采集、分析和优化,从而提高了生产效率、降低了成本并提升了企业的竞争力。…

Nextjs使用recoil遇到的报错

Expectation Violation: Duplicate atom key “userInfo”. This is a FATAL ERROR in production. But it is safe to ignore this warning if it occurred because of hot module replacement. 可能在服务端和客户端都运行导致重复声明 可在 _app.tsx / _app.jsx 入口页 将r…