背景

经过几天的学习与实操,对于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. thymeleaf模板引擎简介

    一:thymeleaf 学习笔记---http://www.blogjava.net/bjwulin/articles/395185.html thymeleaf是一个支持html原型的自然引擎,它在 ...

  2. Python之字符

    关于字符的常用操作:(字符为不可变长度的类型,故不能“增”.“删”等改变长度的操作) 1.改:改变字符串中的某个值.但为浅改变: name = "Python3.5" print( ...

  3. 无法访问Eureka主页

    spring: application: name: 90foodmall-eureka server: port: 8000 eureka: client: #是否将自己注册到Eureka Serv ...

  4. 笔记-mongodb-用户及角色

    笔记-mongodb-用户及角色 1.      users 其实mongodb支持多种验证方式,本文只提及最简单也最常用的方式. 1.1.  Authentication Database When ...

  5. 常用FTP命令汇总

    FTP是File Transport Protocol的简称,其作用是使连接到服务器上的客户可以在服务器和客户机间传输文件.除WWW服务外,FTP也算是使用最广泛的一种服务了.在cmd中ftp命令很多 ...

  6. 【原】Web Polygraph 安装

    1.下载 # wget http://www.web-polygraph.org/downloads/srcs/polygraph-4.3.2-src.tgz 2.解压 # tar zxvf poly ...

  7. sshd免密登陆

    用途:默认情况下,当A主机(1.1.1.1)远程通过ssh命令登陆到B主机(2.2.2.2)上,需要输入B主机的密码.免密登陆的效果为,A通过ssh命令登录到B时,不需要输入密码就可以登录,便于管理. ...

  8. nacos集群配置

    一.    环境准备 Nacos 依赖 java环境来运行.如果您是从代码开始构建并运行Nacos,还需要为此配置 Maven环境,请确保是在以下版本环境中安装使用: 64 bit OS,支持 Lin ...

  9. 如何用python写个人专属群聊提醒小助手?

    前言 大家还记得教会父母玩微信是什么时候吗?父母学会后,我们的生活就发生了「质」的变化,父母也许会吐槽你的微信头像不好,要你换一个头像. 最近 pk哥 又被母后大人吐槽了,原因是亲戚微信群里某个亲戚生 ...

  10. 127、Java面向对象之对象的比较

    01.代码如下: package TIANPAN; class Book { private String title; private double price; public Book(Strin ...