mqtt协议1- 简介和报文格式

news2024/11/16 12:34:45

文章目录

  • 1.mqtt协议1: 简介和报文格式
    • 1.1.MQTT概念
    • 1.2.数据
  • 2.控制报文格式
    • 2.1.MQTT数据包结构
    • 2.2.固定头
      • 2.2.1.控制报文类型
      • 2.2.2.标志FLag
      • 2.2.3.剩余长度
    • 2.3.可变头
    • 2.4.有效载荷Payload消息体
  • 安全
    • QoS(Quality of Service levels)
  • ref:

1.mqtt协议1: 简介和报文格式

  • Message Queing Telemetry Transport: 消息队列遥测传输协议
    • 基于发布/订阅模式的轻量级通讯协议, 基于于TCP/IP协议, IBM1999年发布
    • 特点: 轻量, 简单, 开放, 实时, 可靠
  • 服务器分发消息, 可发布, 不订阅
  • 客户端可发布, 订阅1

1.1.MQTT概念

  • 网络连接Network Connection:使用底层传输协议基础设施
    • 客户端用它连接服务端
    • 提供有序, 可靠, 双向字节流传输
  • 应用消息Application Message: MQTT协议通过网络传输应用数据
    • 应用消息通过MQTT传输, 有关联的服务质量QoS与主题Topic
  • 客户端Client: 使用MQTT的程序/设备, 总是通过网络连接到服务端
    • 发布消息->其他客户端
    • 订阅消息->以请求接受相关应用消息
    • 取消订阅, 移除请求
    • 从服务端断开连接
  • 服务端Server: 发送消息的客户端, 请求订阅的客户端之间的中介
    • 接受网络连接<-来自客户端
    • 接受消息<-客户端发布的应用消息
    • 转发消息->符合条件的已订阅客户端
    • 处理客户端的订阅, 取消订阅的请求
  • 订阅Subscription: 含一个主题过滤器Topic Filter, 一个最大的服务质量QoS等级
    • 订阅与单个会话关联, 可包含多于一个订阅
    • 会话的每个订阅有一个不同的主题过滤器
  • 主题名TopicName: 附加于应用消息的标签, 服务端已知且与订阅匹配. 服务端发送应用消息的副本给每个匹配的客户端订阅
  • 主题过滤器Topic Filter: 订阅中包含一个表达式, 表示相关的一个/多个主题, 可用通配符
  • 会话Session: 客户端&服务端之间状态交互. 一些绘画持续时长同网络连接, 另一些可在客户端和服务端的多个连续网络连接间扩展
  • 控制报文MQTT Control Packet: 通过网络连接发送的信息数据包
    • MQTT规定14种不同类型控制报文, PUBLISH用于传输应用消息

1.2.数据

  • 整数数值,16位, 大端序: 16位字: MSB,LSB

2.控制报文格式

2.1.MQTT数据包结构

  • 固定头: 所有, 表示数据包类型与数据包分组类标识
  • 可变头: 部分, 数据包类型决定可变头是否存在及其具体内容
  • 消息体: 部分, 表示客户端按收到的具体内容

2.2.固定头

  • 消息类型
  • 标识位/DUP: 不用标识位的消息类型中,DUP作为保留位; 收到无效标志时必须关闭网络连接
  • QoS服务质量等级: 0最多一次, 1至少一次, 2一次
  • RETAIN: 发布保留标识, 服务器要保留此次推送的信息, 若有新订阅者, 推送该消息, 若无则推送一次后释放
  • 剩余长度: 前七位保存长度, 末位标识=1长度不足需用第二个字节保存
Bit7,6,5,43,2,1,0
byte1MQTT控制报文类型指定控制报文类型的标志位
byte2剩余长度

2.2.1.控制报文类型

  • byte1[7-4]
名字报文流动方向描述
Reserved0禁止保留
CONNECT1Client->ServerClient请求连接Server
CONNACK2Server->Client连接报文确认
PUBLISH3<->发布消息
PUBACK4<->QoS1消息发布收到确认
PUBREC5<->发布收到(交付第1步)
PUBREL6<->发布释放(交付第2步)
PUBCOMP7<->QoS2消息发布完成(3步)
SUBSCRIBE8Client->Server客户端订阅请求
SUBACK9Server->Client订阅请求报文确认
UNSUBSCRIBE10Client->Server客户端取消请阅请求
UNSUBACK11Server->Client取消订阅报文确认
PINGREQ12Client->Server心跳请求
PINGRESP13Server->Client心跳响应
DISCONNECT14Client->Server客户端断开连接
Reserved15禁止保留

2.2.2.标志FLag

  • byte1[3-0]
  • 必须设置表格中列出的值, 若非法标志, 必须关闭网络连接
控制报文固定报头标志Bit3Bit2Bit1Bit0
CONNECTR0000
CONNACKR0000
PUBLISHMQTT3.1.1DUP 1 ^1 1QoS 2 ^2 2QoS 2 ^2 2RETAIN 3 ^3 3
PUBACKR0000
PUBRECR0000
PUBRELR0010
PUBCOMPR0000
SUBSCRIBER0010
SUBACKR0000
UNSUBSCRIBER0010
UNSUBACKR0000
PINGREQR0000
PINGRESPR0000
DISCONNECTR0000
  • DUP 1 ^1 1 =控制报文的重复分发标志
  • QoS 2 ^2 2 =PUBLISH报文的服务质量等级
  • RETAIN 3 ^3 3 =PUBLISH报文的保留标志

2.2.3.剩余长度

  • byte2开始, 当前报文剩余部分字节数, 包括可变报头, 负载数据
  • 不包括用于编码剩余长度字段本身的字节数
  • 变长度编码, 对<128值用单字节编码
  • 剩余长度最大4字节

128值: 低7位有效位编码数据, 最高位标志位, 指示是否有更多字节, 每字节可编码128值和1延续位

  • 1个字节时,从0(0x00)到127(0x7f)
  • 2个字节时,从128(0x80,0x01)到16383(0Xff,0x7f)
  • 3个字节时,从16384(0x80,0x80,0x01)到2097151(0xFF,0xFF,0x7F)
  • 4个字节时,从2097152(0x80,0x80,0x80,0x01)到268435455(0xFF,0xFF,0xFF,0x7F)

2.3.可变头

  • 固定报头和负载之间
  • 内容因数据包类型而异, 一般作为包标识
  • 报文标识符Packet Identifier
    • 报文PUBLISH(QoS>0), PUBACK, PUBREC, PUBREL, PUBCOMP, SUBSCRIBE, SUBACK, UNSUBSCRIBE, UNSUBACK包含
    • 两字节: byte1:MSB, byte2:LSB
    • SUBSCRIBE, UNSUBSCRIBE, PUBLISH(QoS>0)必须包含非0:16位报文标识符
      • 客户端每次发送一个新的该报文时必须分配一个当前未使用的报文标识符

      • 若CLient要重发这个特殊控制报文, 随后重发报文时必须用相同标识符

      • CLient处理完该报文对应的确认后, 该标识符释放可重用

      • QoS1:PUBLISH对应PUBACK

      • QoS2:PUBLISH对应PUBCOMP, SUBSCRIBE/UNSUBSCRIBE对应SUBACK/UNSUBACK

      • 发送QOS0的PUBLISH报文时, 相同条件也适用于服务端;

      • QoS0的PUBLISH报文不能含报文标识符

      • PUBACK, PUBREC, PUBREL报文必须包含与最初发送PUBLISH报文相同的标识符

      • SUBACK,UNSUBACK必须包含对应SUBSCRIBE, UNSUBSCRIBE报文使用的标识符

      • CLient和Server彼此独立地分配报文标识符, 使用相同报文标识符可实现并发消息交换

        控制报文报文标识符字段
        CONNECTN
        CONNACKN
        PUBLISHY若QoS>0
        PUBACKY
        PUBRECY
        PUBRELY
        PUBCOMPY
        SUBSCRIBEY
        SUBACKY
        UNSUBSCRIBEY
        UNSUBACKY
        PINGREQN
        PINGRESPN
        DISCONNECTN

2.4.有效载荷Payload消息体

  • 四种类型
  • CONNECT: 客户端ClientID, 订阅Topic, Message, 用户名, 密码
  • SUBSCRIBE: 一系列要订阅的主题及QoS
  • SUBACK: 对SUBSCRIBE所申请主题及QoS进行确认,回复
  • UNSUBSCRIBE: 要订阅的主题
控制报文有效载荷
CONNECTY
CONNACKN
PUBLISH可选
PUBACKN
PUBRECN
PUBRELN
PUBCOMPN
SUBSCRIBEY
SUBACKY
UNSUBSCRIBEY
UNSUBACKN
PINGREQN
PINGRESPN
DISCONNECTN

安全

QoS(Quality of Service levels)

  • 服务质量是MQTT重要特性
  • QoS 0: 最多一次, 会发生消息丢失/重复, 消息发布依赖底层TCP/IP网络
  • QoS 1: 至少一次
  • QoS 2: 保证一次

ref:

  • MQTT协议,终于有人讲清楚了
  • MQTT协议中文版

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

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

相关文章

c语言机试练习

1.打印日期 给出年分m和一年中的第n天&#xff0c;算出第n天是几月几号。 输入描述&#xff1a; 输入包括两个整数y(1<y<3000)&#xff0c;n(1<n<366)。 输出描述&#xff1a; 可能有多组测试数据&#xff0c;对于每组数据&#xff0c; 按 yyyy-mm-dd的格式将输入中…

51单片机入门 - 驱动多位数码管

我使用的是普中51单片机开发板A2套件&#xff08;2022&#xff09;&#xff0c;驱动数码管可能需要参考电路原理图。开发环境的搭建教程在本专栏的 51单片机开发环境搭建 - VS Code 从编写到烧录 有过介绍。 关于我的软硬件环境信息&#xff1a; Windows 10STC89C52RCSDCC &am…

HTML 基础【快速掌握知识点】

目录 一、什么是HTML&#xff1f; 二、HTML的发展史 三、HTML5的优势 四、HTML基本结构 五、DOCTYPE声明 六、title标签 七、meta标签 八、标题标签 九、段落标签 十、换行标签 十一、水平线标签 十二、字体样式标签 十三、特殊符号 十四、图像标签 十五、链接标…

JavaScript 进阶--charater3

文章目录前言一、编程思想1.1 面向过程介绍1.2 面向对象编程 (oop)对比二、构造函数三、原型3.1原型3.2 constructor 属性3.3 对象原型3.4 原型继承3.5 原型链总结前言 &#x1f191;学习目标 理解面向对象思想&#xff0c;掌握函数原型对象运用面向对象封装继承特点&#xf…

腾讯开源的 hel 提供了加载远程模块的能力,谈谈它的实现原理

腾讯开源的 hel&#xff0c;提供了一种运行时引入远程模块的能力&#xff0c;模块部署在 CDN&#xff0c;远程模块发布后&#xff0c;不需要重新构建发布&#xff0c;就能生效。 个人觉得它的实现原理非常的不错&#xff0c;因此分享给大家。 远程模块可以作为微模块&#xf…

Jenkins利用docker部署vue项目

Jenkins利用docker部署vue项目一、环境准备1、安装docker2、安装nodejs3、安装cnpm与配置淘宝镜像4、jenkins安装nodejs插件二、jenkins以vue项目1、全局参数配置2、源码配置3、构建环境4、构建三、构建项目四、访问一、环境准备 本次jenkins与部署vue项目在同一台机器&#x…

RocketMQ5.0.0的Broker主从同步机制

目录 一、主从同步工作原理 1. 主从配置 2. 启动HA 二、主从同步实现机制 1. 从Broker发送连接事件 2. 主Broker接收连接事件 3. 从Broker反馈复制进度 4. ReadSocketService线程读取从Broker复制进度 5. WriteSocketService传输同步消息 6. GroupTransferService线程…

【每日一题Day127】LC1238循环码排列 | 格雷码构造 位运算

格雷码 看到题目就想到了格雷码 然后就疯狂搜索格雷码 手动构造了一波格雷码 看了题解 emmm 有点亏 理论基础 n 位格雷码序列 是一个由 2n 个整数组成的序列&#xff0c;其中&#xff1a; 每个整数都在范围 [0, 2n - 1] 内&#xff08;含 0 和 2n - 1&#xff09;第一个整数是…

深度学习之“制作自定义数据”--torch.utils.data.DataLoader重写构造方法。

深度学习之“制作自定义数据”–torch.utils.data.DataLoader重写构造方法。 前言&#xff1a; ​ 本文讲述重写torch.utils.data.DataLoader类的构造方法&#xff0c;对自定义图片制作类似MNIST数据集格式&#xff08;image, label&#xff09;&#xff0c;用于自己的Pytorc…

大数据Hadoop教程-学习笔记04【数据仓库基础与Apache Hive入门】

视频教程&#xff1a;哔哩哔哩网站&#xff1a;黑马大数据Hadoop入门视频教程 总时长&#xff1a;14:22:04教程资源: https://pan.baidu.com/s/1WYgyI3KgbzKzFD639lA-_g 提取码: 6666【P001-P017】大数据Hadoop教程-学习笔记01【大数据导论与Linux基础】【17p】【P018-P037】大…

Spring boot开启定时任务的三种方式(内含源代码+sql文件)

Spring boot开启定时任务的三种方式&#xff08;内含源代码sql文件&#xff09; 源代码sql文件下载链接地址&#xff1a;https://download.csdn.net/download/weixin_46411355/87486580 目录Spring boot开启定时任务的三种方式&#xff08;内含源代码sql文件&#xff09;源代码…

【无人机】回波状态网络(ESN)在固定翼无人机非线性控制中的应用(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

前端常见手写面试题集锦

实现迭代器生成函数 我们说迭代器对象全凭迭代器生成函数帮我们生成。在ES6中&#xff0c;实现一个迭代器生成函数并不是什么难事儿&#xff0c;因为ES6早帮我们考虑好了全套的解决方案&#xff0c;内置了贴心的 生成器 &#xff08;Generator&#xff09;供我们使用&#xff…

java面试题-IO流

基础IO1.如何从数据传输方式理解IO流&#xff1f;IO流根据处理数据的类型可以分为字节流和字符流。字节流字节流以字节&#xff08;8位&#xff09;为单位读写数据。字节流主要用于读写二进制文件&#xff0c;如图片、音频、视频等。Java中的InputStream和OutputStream就是字节…

写论文不用构建语料库!只需要福昕PDF阅读器高级搜索

写论文不用构建语料库&#xff01;只需要福昕PDF阅读器高级搜索 文章目录写论文不用构建语料库&#xff01;只需要福昕PDF阅读器高级搜索前言&#xff1a;“福昕语料库”使用前的准备&#xff1a;调用“语料库”&#xff1a;前言&#xff1a; 最近论文阅读可以借助NewBing的总…

【算法与数据结构(C语言)】栈和队列

文章目录 目录 前言 一、栈 1.栈的概念及结构 2.栈的实现 入栈 出栈 获取栈顶元素 获取栈中有效元素个数 检测栈是否为空&#xff0c;如果为空返回非零结果&#xff0c;如果不为空返回0 销毁栈 二、队列 1.队列的概念及结构 2.队列的实现 初始化队列 队尾入队列 队头出队列 获…

报表开发难上手?这里有一份 Fastreport 最新中文用户指南,请查收

Fast Reports,Inc.成立于1998年&#xff0c;多年来一直致力于开发快速报表软件&#xff0c;包括应用程序、库和插件。FastReport的报表生成器&#xff08;VCL平台和.NET平台&#xff09;、跨平台的多语言脚本引擎FastScript、桌面OLAP FastCube&#xff0c;如今都受到世界各地开…

Typecho COS插件实现网站静态资源存储到COS,降低本地存储负载

Typecho 简介Typecho 是一个简单、强大的轻量级开源博客平台&#xff0c;用于建立个人独立博客。它具有高效的性能&#xff0c;支持多种文件格式&#xff0c;并具有对设备的响应式适配功能。Typecho 相对于其他 CMS 还有一些特殊优势&#xff1a;包括可扩展性、不同数据库之间的…

IDA 实战--(2)熟悉工具

布局介绍 软件启动后会 有几个选项&#xff0c;一般直接选择Go 即可 之后的工作台布局如下 开始分析 分析的第一个&#xff0c;将PE 文件拖入工作区 刚开始接触&#xff0c;我们先保持默认选项&#xff0c;其它选项后面会详细讲解&#xff0c;点击OK 后&#xff0c;等待分析…

软件项目管理知识回顾---软件项目质量和资源管理

软件项目质量和资源管理 5.0质量管理 5.1质量管理模型 1.模型 boehm模型&#xff1a;可移植性&#xff0c;可使用性&#xff0c;可维护性McCall模型ISO体系认证5.2质量成本 1.含义&#xff1a;由于产品第一次不正常运行而产生的附加费用 预防成本和缺陷成本5.3质量管理 1.过程 …