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

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

文章目录

  • 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.1DUP1^11QoS2^22QoS2^22RETAIN3^33
PUBACKR0000
PUBRECR0000
PUBRELR0010
PUBCOMPR0000
SUBSCRIBER0010
SUBACKR0000
UNSUBSCRIBER0010
UNSUBACKR0000
PINGREQR0000
PINGRESPR0000
DISCONNECTR0000
  • DUP1^11 =控制报文的重复分发标志
  • QoS2^22 =PUBLISH报文的服务质量等级
  • RETAIN3^33 =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协议中文版

相关文章:

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

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

前端用动画快速实现骨架屏效果

一、动画的语法 1.定义动画 keyframes 自定义动画名称 {// 开始from {transform: scale(1);}// 结束to {transform: scale(1.5);} }// 或者还可以使用百分比定义keyframes 动画名称 {// 开始0% {transform: scale(1);}// 结束100% {transform: scale(1.5);} } 2.调用 anima…...

Python入门(未完待续。。。)

认识python 解释型&#xff08;写完直接运行&#xff09;、面向对象的高级编程语言&#xff1b;开源免费、支持交互式、可跨平台移植的脚本语言&#xff1b;优点&#xff1a;开源、易于维护、可移植、简单优雅、功能强大、可扩展、可移植&#xff1b;缺点&#xff1a;解释型→运…...

注解配置SpringMVC

使用配置类和注解代替web.xml和Spring和SpringMVC配置文件的功能。创建初始化类&#xff0c;代替web.xmlSpring3.2引入了一个便利的WebApplicationInitializer基础实现&#xff0c;名为AbstractAnnotationConfigDispatcherServletInitializer&#xff0c;当我们的类扩展了Abstr…...

多项新规重磅发布,微信视频号近期需要关注这几点

随着功能的完善和内容生态的丰富&#xff0c;视频号逐渐放慢产品更新频率&#xff0c;将重点放到商家准入标准、创作者扶持计划上来&#xff0c;本期我们将更侧重解读平台新规&#xff0c;帮助大家了解行业动向&#xff0c;把握最新趋势。01 视频号小店结算规则修订 取消48小时…...

Java调用第三方http接口的方式

1. 概述 在实际开发过程中&#xff0c;我们经常需要调用对方提供的接口或测试自己写的接口是否合适。很多项目都会封装规定好本身项目的接口规范&#xff0c;所以大多数需要去调用对方提供的接口或第三方接口&#xff08;短信、天气等&#xff09;。 在Java项目中调用第三方接…...

【跟我一起读《视觉惯性SLAM理论与源码解析》】第五章第六章 对极几何图优化库的使用

极平面&#xff0c;极点&#xff0c;极线的概念对极几何&#xff0c;对极约束的概念&#xff0c;通过叉积以及点积的性质推导单应矩阵以及基础矩阵光束平差法BA是LSAM中常用的非线性优化方法一个图由若干个顶点以及这些顶点连接的边构成&#xff0c;顶点通常是待优化的变量例如…...

从没想过开源 API 工具的 Mock 功能,这么好用

很多时候&#xff0c;接口尚未开发完成&#xff0c;在系统交互双方定义好接口之后&#xff0c;我们可以提前进行开发和测试&#xff0c;并不依赖上游系统的开发实现。 通过使用Mock模拟数据接口&#xff0c;我们即可在只开发了UI的情况下&#xff0c;无须服务端的开发就可以进行…...

智慧教室--智能管控系统

智慧教室系统是一款基于AIOT数字化平台的智能教育解决方案&#xff0c;该系统实现了全面数字化、自动化管理和智能化控制&#xff0c;可大大提高教学效率和质量&#xff0c;为学生带来更加优质的教育体验。智能管控是智慧教室系统的核心功能之一。通过物联网技术&#xff0c;将…...

React的useLayoutEffect和useEffect执行时机有什么不同

我们先看下 React 官方文档对这两个 hook 的介绍&#xff0c;建立个整体认识 useEffect(create, deps): 该 Hook 接收一个包含命令式、且可能有副作用代码的函数。在函数组件主体内&#xff08;这里指在 React 渲染阶段&#xff09;改变 DOM、添加订阅、设置定时器、记录日志以…...

C语言中#include<...>和#include“...“的区别

C语言文章更新目录 C语言学习资源汇总&#xff0c;史上最全面总结&#xff0c;没有之一 C/C学习资源&#xff08;百度云盘链接&#xff09; 计算机二级资料&#xff08;过级专用&#xff09; C语言学习路线&#xff08;从入门到实战&#xff09; 编写C语言程序的7个步骤和编程…...

ubuntu本地访问nas

需求 本地磁盘空间太小&#xff0c;本地网络里有个nas&#xff0c;希望将nas作为数据盘挂载到本地使用。 方法1 基于sftp访问nas 首先nas设置时要打开sftp访问功能。 然后用ubuntu桌面访问服务器的功能登录sftp&#xff0c;类似如下指令 sftp://user192.168.0.100 ubuntu下…...

第一章:网络参考模型

一、专业术语 ISO---&#xff08;International Organization for Standardization&#xff09;国际标准化组织 OSI---&#xff08;Open System Interconnection Reference Model&#xff09;开放式系统互联通信参考模型 IEEE---(Institute of Electrical and Electronics Engi…...

extends in typescript

困惑 初学 ts 时&#xff0c;extends 让我很困惑&#xff1a;有时它代表 扩大 &#xff0c;有时代表 缩小 。举几个例子说明&#xff1a; 例1&#xff1a; class Animal {} class Dog extends Animal {}这是 js 本身就有的 class 继承语法&#xff0c;很熟悉了。 Dog 是 An…...

如何找回回收站删除的文件

回收站作为删除文件后的临时存放点&#xff0c;只要我们是右键删除或者按delete删除的文件都会存放到这里&#xff0c;所以我们每次清理电脑后&#xff0c;都会清空回收站&#xff0c;这样可以让电脑保持流畅运行。但删除这个操作是很容易出错&#xff0c;很容易把某些重要的文…...

Git系列——Git部署及应用

下面从如下几个方面介绍下其部署及应用&#xff1a;Git服务器搭建Git客户端搭建Git常用命令Git服务器搭建Linux服务器搭建(Centos7.5):一、安装配置SSH&#xff08;参考XXX)二、检查OS是否自带Git1、git-version //查询版本2、rpm -qa git //查询git详细信息3、yum -y remove x…...

Java多线程(二)--线程相关内容

1.创建线程的几种方式继承 Thread 类&#xff1b;public class MyThread extends Thread { Override public void run() {System.out.println(Thread.currentThread().getName() " run()方法正在执行..."); }实现 Runnable 接口&#xff1b;public class MyRunnable…...

CF1692E Binary Deque 题解

CF1692E Binary Deque 题解题目链接字面描述题面翻译题目描述输入格式输出格式样例 #1样例输入 #1样例输出 #1提示思路代码实现题目 链接 https://www.luogu.com.cn/problem/CF1692E 字面描述 题面翻译 有多组数据。 每组数据给出 nnn 个数&#xff0c;每个数为 000 或 1…...

rust方法和关联函数

Rust方法 在大多数面向对象的语言中都存在方法&#xff0c;方法一般和类关联在一起。在Rust中也是类似的&#xff0c;方法和对象总是一起出现。Rust的方法和结构体&#xff0c;枚举&#xff0c;特征一起使用。 定义方法 Rust使用关键字impl来定义方法&#xff0c;例如&#…...

深度学习如何训练出好的模型

深度学习在近年来得到了广泛的应用&#xff0c;从图像识别、语音识别到自然语言处理等领域都有了卓越的表现。但是&#xff0c;要训练出一个高效准确的深度学习模型并不容易。不仅需要有高质量的数据、合适的模型和足够的计算资源&#xff0c;还需要根据任务和数据的特点进行合…...

[2025CVPR]DeepVideo-R1:基于难度感知回归GRPO的视频强化微调框架详解

突破视频大语言模型推理瓶颈,在多个视频基准上实现SOTA性能 一、核心问题与创新亮点 1.1 GRPO在视频任务中的两大挑战 ​安全措施依赖问题​ GRPO使用min和clip函数限制策略更新幅度,导致: 梯度抑制:当新旧策略差异过大时梯度消失收敛困难:策略无法充分优化# 传统GRPO的梯…...

FastAPI 教程:从入门到实践

FastAPI 是一个现代、快速&#xff08;高性能&#xff09;的 Web 框架&#xff0c;用于构建 API&#xff0c;支持 Python 3.6。它基于标准 Python 类型提示&#xff0c;易于学习且功能强大。以下是一个完整的 FastAPI 入门教程&#xff0c;涵盖从环境搭建到创建并运行一个简单的…...

大语言模型如何处理长文本?常用文本分割技术详解

为什么需要文本分割? 引言:为什么需要文本分割?一、基础文本分割方法1. 按段落分割(Paragraph Splitting)2. 按句子分割(Sentence Splitting)二、高级文本分割策略3. 重叠分割(Sliding Window)4. 递归分割(Recursive Splitting)三、生产级工具推荐5. 使用LangChain的…...

2025 后端自学UNIAPP【项目实战:旅游项目】6、我的收藏页面

代码框架视图 1、先添加一个获取收藏景点的列表请求 【在文件my_api.js文件中添加】 // 引入公共的请求封装 import http from ./my_http.js// 登录接口&#xff08;适配服务端返回 Token&#xff09; export const login async (code, avatar) > {const res await http…...

TRS收益互换:跨境资本流动的金融创新工具与系统化解决方案

一、TRS收益互换的本质与业务逻辑 &#xff08;一&#xff09;概念解析 TRS&#xff08;Total Return Swap&#xff09;收益互换是一种金融衍生工具&#xff0c;指交易双方约定在未来一定期限内&#xff0c;基于特定资产或指数的表现进行现金流交换的协议。其核心特征包括&am…...

Maven 概述、安装、配置、仓库、私服详解

目录 1、Maven 概述 1.1 Maven 的定义 1.2 Maven 解决的问题 1.3 Maven 的核心特性与优势 2、Maven 安装 2.1 下载 Maven 2.2 安装配置 Maven 2.3 测试安装 2.4 修改 Maven 本地仓库的默认路径 3、Maven 配置 3.1 配置本地仓库 3.2 配置 JDK 3.3 IDEA 配置本地 Ma…...

MySQL 知识小结(一)

一、my.cnf配置详解 我们知道安装MySQL有两种方式来安装咱们的MySQL数据库&#xff0c;分别是二进制安装编译数据库或者使用三方yum来进行安装,第三方yum的安装相对于二进制压缩包的安装更快捷&#xff0c;但是文件存放起来数据比较冗余&#xff0c;用二进制能够更好管理咱们M…...

宇树科技,改名了!

提到国内具身智能和机器人领域的代表企业&#xff0c;那宇树科技&#xff08;Unitree&#xff09;必须名列其榜。 最近&#xff0c;宇树科技的一项新变动消息在业界引发了不少关注和讨论&#xff0c;即&#xff1a; 宇树向其合作伙伴发布了一封公司名称变更函称&#xff0c;因…...

嵌入式常见 CPU 架构

架构类型架构厂商芯片厂商典型芯片特点与应用场景PICRISC (8/16 位)MicrochipMicrochipPIC16F877A、PIC18F4550简化指令集&#xff0c;单周期执行&#xff1b;低功耗、CIP 独立外设&#xff1b;用于家电、小电机控制、安防面板等嵌入式场景8051CISC (8 位)Intel&#xff08;原始…...

通过MicroSip配置自己的freeswitch服务器进行调试记录

之前用docker安装的freeswitch的&#xff0c;启动是正常的&#xff0c; 但用下面的Microsip连接不上 主要原因有可能一下几个 1、通过下面命令可以看 [rootlocalhost default]# docker exec -it freeswitch fs_cli -x "sofia status profile internal"Name …...