背景

经过几天的学习与实操,对于MQTT(主要针对 v3.1.1版本)的学习告一段落,为了方便日后的查阅

本文链接:《MQTT 协议学习: 总结 与 各种定义的速查表》

章节整理

MQTT 协议学习:000-有关概念入门 : 学习新东西最重要的步骤,我觉得就是明确有关的概念。

MQTT 协议学习:001-搭建MQTT通信环境,并抓包测试 : 明确概念以后,实操一遍,对于学习可以有一个初步的了解。

MQTT 协议学习:002- 通信报文的构成 : 从本章开始,开始慢慢引入 构成 通信协议 的有关组成。

MQTT 协议学习:003-MQTT通信流程介绍 : 在图表中,介绍了 通信的流程。

MQTT 协议学习:004-MQTT建立通信与 CONNECT 、CONNACK 报文: 通信流程中的第一个流程便是建立连接,在连接有关的报文中,拥有对应的设置。

MQTT 协议学习: QoS等级 与 会话:QoS 等级是 通信中流程 一个比较重要的设置,这个设置决定了 通信的一些流程。

MQTT 协议学习:Retained(保留消息) 与 LWT(最后遗嘱): 保留消息 与 遗嘱 在 应用中比较常一起使用。

MQTT 协议学习:005-发布消息 与 对应报文 (PUBLISH、PUBACK、PUBREC、PUBREL): 介绍了如何 发布消息,与其对应的就是 订阅主题 以 接收 消息。

MQTT 协议学习:006-订阅主题 与 对应报文(SUBSCRIBE、SUBACK、UNSUBSCRIBE、UNSUBACK): 介绍了如何订阅一个主题。

MQTT 协议学习:007-Keep Alive 连接保活 与 对应报文(PINGREQ、PINGRESP) : 保活机制是如何实现的。

MQTT 协议学习:008-在STM32上移植MQTT : STM32 移植 MQTT 的难点在于 对于通信接口的初始化等处理,由于有关的开发板还没到手,本人放弃了纸上谈兵。

arm linux 移植 MQTT (paho、mosquitto)arm linux移植 的文章在本人的博客中经常出现,讲述了如何在 Linux 平台下 搭建 MQTT 通信。

MQTT v5 (MQTT 5.0) 新特性介绍: 作为新版本的有关介绍,此后暂无 有关的 报文介绍

速查表

这里整理了一些速查表,可以翻阅以快速定位在开发中出现的有关问题。

固定头部

协议类型

Byte1的 Bit[7-4]: MQTT Control Packet type,协议类型。总共可以表示16种协议类型,其中0000和1111是保留字段。

报文类型 Bit[7-4]值 数据方向 描述
保留 0000 禁用 保留
CONNECT 0001 Client ---> Server 客户端连接到服务器
CONNACK 0010 Server ---> Client 连接确认
PUBLISH 0011 Client <--> Server 发布消息
PUBACK 0100 Client <--> Server 发不确认
PUBREC 0101 Client <--> Server 消息已接收(QoS2第一阶段)
PUBREL 0110 Client <--> Server 消息释放(QoS2第二阶段)
PUBCOMP 0111 Client <--> Server 发布结束(QoS2第三阶段)
SUBSCRIBE 1000 Client ---> Server 客户端订阅请求
SUBACK 1001 Server ---> Client 服务端订阅确认
UNSUBACRIBE 1010 Client ---> Server 客户端取消订阅
UNSUBACK 1011 Server ---> Client 服务端取消订阅确认
PINGREQ 1100 Client ---> Server 客户端发送心跳
PINGRESP 1101 Server ---> Client 服务端回复心跳
DISCONNECT 1110 Client ---> Server 客户端断开连接请求
保留 1111 禁用 保留

报文类型标志位

Byte1的 Bit[3-0]: Flags specific to each MQTT Control Packet type,字节位用作某些报文类型的标志位。
实际上只有少数报文类型有控制位,如下表。

报文类型 固定头标记 Bit 3 Bit 2 Bit 1 Bit 0
CONNECT 保留 0 0 0 0
CONNACK 保留 0 0 0 0
PUBLISH Used in MQTT 3.1.1 DUP QoS QoS RETAIN
PUBACK 保留 0 0 0 0
PUBREC 保留 0 0 0 0
PUBREL 保留 0 0 1 0
PUBCOMP 保留 0 0 0 0
SUBSCRIBE 保留 0 0 1 0
SUBACK 保留 0 0 0 0
UNSUBACRIBE 保留 0 0 1 0
UNSUBACK 保留 0 0 0 0
PINGREQ 保留 0 0 0 0
PINGRESP 保留 0 0 0 0
DISCONNECT 保留 0 0 0 0

可变头

需要报文标识符的控制报文在 下表 - 包含报文标识符的控制报文 Control Packets that contain a Packet Identifier 中列出。

需要报文标识符的控制报文在 下表 - 包含报文标识符的控制报文 Control Packets that contain a Packet Identifier`中列出。

控制报文 报文标识符字段
PUBLISH YES(QoS > 0)
PUBACK YES
PUBREC YES
PUBREL YES
PUBCOMP YES
SUBSCRIBE YES
SUBACK YES
UNSUBSCRIBE YES
UNSUBACK YES

Payload消息体

下表 - 包含有效载荷的控制报文 Control Packets that contain a Payload列出了需要有效载荷的控制报文。

并非所有的报文类型需要包含Payload。

控制报文 是否包含Payload
CONNECT 需要
CONNACK 不需要
PUBLISH 可选
PUBACK 不需要
PUBREC 不需要
PUBREL 不需要
PUBCOMP 不需要
SUBSCRIBE 需要
SUBACK 需要
UNSUBSCRIBE 需要
UNSUBACK 不需要
PINGREQ 不需要
PINGRESP 不需要
DISCONNECT 不需要

CONNACK 连接返回码的值

返回码响应 描述
0 0x00连接已接受 连接已被服务端接受
1 0x01连接已拒绝,不支持的协议版本 服务端不支持客户端请求的MQTT协议级别
2 0x02连接已拒绝,不合格的客户端标识符 Client ID 编码无误,但服务端拒绝(有可能Client ID零长且清理会话标志为0)
3 0x03连接已拒绝,服务端不可用 网络连接已建立,但MQTT服务不可用
4 0x04连接已拒绝,无效的用户名或密码 用户名或密码的数据格式无效
5 0x05连接已拒绝,未授权 客户端未被授权连接到此服务器
6-255 保留

MQTT 协议学习: 总结 与 各种定义的速查表的更多相关文章

  1. MQTT 协议学习:004-MQTT建立通信与 CONNECT 、CONNACK 报文

    背景 上一讲 MQTT 协议学习:通信报文的构成介绍了在MQTT通信中,各报文的通信流程:从本讲开始,我们开始介绍实际中使用的报文,以及它们的组成. CONNECT - 连接请求 报文 客户端到服务端 ...

  2. MQTT 协议学习:000-有关概念入门

    背景 从本章开始,在没有特殊说明的情况下,文章中的MQTT版本均为 3.1.1. MQTT 协议是物联网中常见的协议之一,"轻量级物联网消息推送协议",MQTT同HTTP属于第七层 ...

  3. MQTT 协议学习:002- 通信报文的构成

    背景 之前工作中参与有关协议调试的时候,发现对于协议帧的解析是比较重要的. 参考:<MQTT协议 -- 消息报文格式>.<基于STM32实现MQTT>.<MQTT协议从服 ...

  4. MQTT 协议学习:001-搭建MQTT通信环境,并抓包测试

    背景 目的:了解MQTT 通信的有关概念与流程:方便推算某些数据与文档描述是否一致. 为了能够在保证学习质量的前提下,降低配置环境的门槛,我们将服务器搭建在windwos中,实行内网间的MQTT协议访 ...

  5. MQTT协议学习笔记

    1.前沿 万物联网的时代即将到来,物联网也由当初的概念开始进一步落实.随着无线网络技术飞速发展,各种设备都可以连接网络,实现远程控制.例如智能家居最近非常火爆,智能插座.智能LED灯.智能摄像头等.在 ...

  6. MQTT协议学习总结

    一.MQTT介绍 MQTT(Message Queuing Telemetry Transport,消息队列遥测传输协议),是一种基于发布/订阅(publish/subscribe)模式的“轻量级”通 ...

  7. MQTT协议学习研究 & Mosquitto简要教程(安装和使用)

    若初次接触MQTT协议,可先理解以下概念: [MQTT协议特点]——相比于RESTful架构的物联网系统,MQTT协议借助消息推送功能,可以更好地实现远程控制. [MQTT协议角色]——在RESTfu ...

  8. MQTT协议学习及实践(Linux服务端,Android客户端的例子)

    前言 MQTT(Message Queuing Telemetry Transport),是一个物联网传输协议,它被设计用于轻量级的发布/订阅式消息传输,旨在为低带宽和不稳定的网络环境中的物联网设备提 ...

  9. MQTT 协议学习: QoS等级 与 会话

    背景 QoS 等级 与 通信的流程有关,直接影响了整个通信.而且篇幅比较长,所以我觉得应该单独拎出来讲一下. 概念 QoS 代表了 服务质量等级. 设置上,由2 位 的二进制控制,且值不允许为 3(0 ...

随机推荐

  1. iOS 开发之 生产者与消费者模式及其实现

    概念: 在工作中,大家可能会碰到这样一种情况:某个模块负责产生数据,这些数据由另一个模块来负责处理(此处的模块是广义的,可以是类.函数.线程.进程等).产生数据的模块,就形象地称为生产者:而处理数据的 ...

  2. Android的界面组件使用之ImageButton和ImageView,ImageSwitcher和GridView

    (一)ImageButton和ImageView ImageButton与Button的功能完全相同,只是ImageButton上显示的是图像,并且每个ImageButton组件都必须指定一个id,以 ...

  3. ajax相同url和参数,将不会重复发起请求

    IE浏览器下使用GET发送请求时,如果两次请求的地址和参数相同,在不刷新页面的情况下,浏览器会缓存第一次请求的内容,服务端更新后浏览器仍然显示第一次的内容. 解决办法: 一. GET请求URL后加随机 ...

  4. 简单描述MySQL常用引擎的特点及MySQL的逻辑架构

    目录 表的分类数据库引擎? 首先得说说mysql的逻辑架构,它整体分为3层: 常用引擎: 补充知识点: 表的分类数据库引擎? 引擎是什么? 引擎就是一个系统最核心的部分,比如汽车的发动机,人的心脏 数 ...

  5. MFC TreeControl简单应用

    目录 1. TreeControl添加节点 2. TreeControl菜单 3. TreeControl修改节点 4. TreeControl查找节点 5. TreeControl折叠展开节点 6. ...

  6. W - Prime Time 素数判断+前缀和

    W - Prime Time 题意:用公式n*n+n+41,判断素数的百分比 #include<iostream> #include<algorithm> #include&l ...

  7. springboot 跨域

    参考: https://blog.csdn.net/qq779446849/article/details/53102925 https://blog.csdn.net/wo541075754/art ...

  8. Python环境搭建-4 pip的安装和使用

    pip的安装和使用 我们都知道python有很多的第三方库或者说是模块.这些库针对不同的应用,发挥不同的作用.我们在实际的项目中肯定会用到这些模块.那如何将这些模块导入到自己的项目中呢? Python ...

  9. nacos作为配置中心兼容xml配置文件

    最近公司想要用配置中心,因为公司用的有传统的spring项目,有springboot项目,为了兼容都能够采用配置中心,做了一些尝试,经过比较还是倾向于使用nacos,传统dubbo采用spring方式 ...

  10. 01 MATLAB基本概念

    基本概念 整数类型 相同整数类型相乘还是整数 整数与浮点数相乘是这种整数类型 不同整数类型不能相乘,除非强制类型转换 整数与整数相乘: >> x = uint32(120); >&g ...