MQTT 協議學習: 總結 與 各種定義的速查表


title: protocol-app-mqtt-summary
date: 2020-02-09 23:16:51
categories:
tags:

  • mqtt
  • protocol
  • manual

背景

經過幾天的學習與實操,對於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 保留


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM