MQTT 协议学习: 总结 与 各种定义的速查表
背景
经过几天的学习与实操,对于MQTT(主要针对 v3.1.1版本)的学习告一段落,为了方便日后的查阅
章节整理
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 协议学习: 总结 与 各种定义的速查表的更多相关文章
- MQTT 协议学习:004-MQTT建立通信与 CONNECT 、CONNACK 报文
背景 上一讲 MQTT 协议学习:通信报文的构成介绍了在MQTT通信中,各报文的通信流程:从本讲开始,我们开始介绍实际中使用的报文,以及它们的组成. CONNECT - 连接请求 报文 客户端到服务端 ...
- MQTT 协议学习:000-有关概念入门
背景 从本章开始,在没有特殊说明的情况下,文章中的MQTT版本均为 3.1.1. MQTT 协议是物联网中常见的协议之一,"轻量级物联网消息推送协议",MQTT同HTTP属于第七层 ...
- MQTT 协议学习:002- 通信报文的构成
背景 之前工作中参与有关协议调试的时候,发现对于协议帧的解析是比较重要的. 参考:<MQTT协议 -- 消息报文格式>.<基于STM32实现MQTT>.<MQTT协议从服 ...
- MQTT 协议学习:001-搭建MQTT通信环境,并抓包测试
背景 目的:了解MQTT 通信的有关概念与流程:方便推算某些数据与文档描述是否一致. 为了能够在保证学习质量的前提下,降低配置环境的门槛,我们将服务器搭建在windwos中,实行内网间的MQTT协议访 ...
- MQTT协议学习笔记
1.前沿 万物联网的时代即将到来,物联网也由当初的概念开始进一步落实.随着无线网络技术飞速发展,各种设备都可以连接网络,实现远程控制.例如智能家居最近非常火爆,智能插座.智能LED灯.智能摄像头等.在 ...
- MQTT协议学习总结
一.MQTT介绍 MQTT(Message Queuing Telemetry Transport,消息队列遥测传输协议),是一种基于发布/订阅(publish/subscribe)模式的“轻量级”通 ...
- MQTT协议学习研究 & Mosquitto简要教程(安装和使用)
若初次接触MQTT协议,可先理解以下概念: [MQTT协议特点]——相比于RESTful架构的物联网系统,MQTT协议借助消息推送功能,可以更好地实现远程控制. [MQTT协议角色]——在RESTfu ...
- MQTT协议学习及实践(Linux服务端,Android客户端的例子)
前言 MQTT(Message Queuing Telemetry Transport),是一个物联网传输协议,它被设计用于轻量级的发布/订阅式消息传输,旨在为低带宽和不稳定的网络环境中的物联网设备提 ...
- MQTT 协议学习: QoS等级 与 会话
背景 QoS 等级 与 通信的流程有关,直接影响了整个通信.而且篇幅比较长,所以我觉得应该单独拎出来讲一下. 概念 QoS 代表了 服务质量等级. 设置上,由2 位 的二进制控制,且值不允许为 3(0 ...
随机推荐
- 获取 AppStore 中 应用 的 IPA 包文件(Mac OS 13+)
在 Mac OS 12.7 之前,可以通过 iTunes 直接下载 App Store 中应用的 IPA 包,可以提取其他应用的资源图片,查看信息等操作.之后 苹果 公司禁用了这一功能,不能直接通过 ...
- stm32CubeMx lwip + freeRTOS
MCU: STM32F429IGT6 工具:STM32CubeMx 版本号 5.0.0 Keil uVersion5 目的:使用LWIP 实现简单的网络连通 一 简介 LWIP(Light Wei ...
- [经验] 如何在虚拟机上安装 CentOS
环境配置 虚拟机 vmware 15.5 Pro 操作系统 CentOS-7-x86_64-DVD-1908.iso 第一步: 在虚拟机上打开操作系统的镜像文件并配置硬件信息 这里的操作就是一本道 ...
- [阿里移动推荐算法]比赛_快速入门_4_19_update_仅供参考,思维不要受局限
[这里只讲快速入门——即破题,正负样本不平衡.特征数量等问题就自己多看论文或者其他资料吧~~如果还有数据挖掘相关基础知识不了解的,建议看看<数据挖掘导论>] [以下是理解错误案例]:错误的 ...
- UIScrollView的API
@property(nonatomic, weak) id<UIScrollViewDelegate> delegate; 滚动视图对象的委托. @property(nonatomic) ...
- VS误删sln项目文件怎么办
以项目名为Test为例 打开Test/Test目录下的 Test.vcxproj 文件,试着运行一下,退出后提示保存sln文件,选择一个目录即可.
- PAT A1091 Acute Stroke
对于坐标平面的bfs模板题~ #include<bits/stdc++.h> using namespace std; ; ][][]={false}; ][][]; int n,m,l, ...
- Caffe2 的基本数据结构(Basics of Caffe2 - Workspaces, Operators, and Nets)[4]
这篇文章主要介绍Caffe2的基本数据结构: Workspaces Operators Nets 在开始之前最好先阅读以下Intro Turorial 首先,导入caffe2.其中core和works ...
- day11 作业
# 1.编写装饰器,为多个函数加上认证的功能(用户的账号密码来源于文件), # 要求登录成功一次,后续的函数都无需再输入用户名和密码 # FLAG = False # def login(func): ...
- 【原】Linux中常见服务介绍
1.SSH介绍 简单说,SSH(Secure Shell Protocol)是一种网络协议,用于计算机之间的加密登录.在默认状态下SSH服务提供俩个服务功能,一个是提供类似telnet远程联机服务器的 ...