物聯網協議之:MQTT協議

簡介

MQTT協議(Message Queuing Telemetry Transport),遙信消息隊列傳輸,是IBM公司於1999年提出的,現在最新版本是3.1.1。MQTT是一個基於TCP的發佈訂閱協議,設計的初始目的是爲了極有限的內存設備和網絡帶寬很低的網絡不可靠的通信,非常適合物聯網通信。
在這裏插入圖片描述

工作原理:

在這裏插入圖片描述
如上圖所示,客戶端A連接到消息代理(message broker),消息代理返回確認消息。客戶B發佈消息溫度25度,客戶A訂閱‘溫度’,消息代理吧消息推給客戶A,客戶A發佈溫度20度,但客戶B沒有訂閱,消息代理不推送。消息B又發佈了溫度38度,客戶A就再次收到訂閱的消息38度。最後客戶端斷開連接。整個過程非常簡單清晰,容易理解。

MQTT消息的QOS

MQTT支持三種QOS等級:

QoS 0

“最多一次”,消息發佈完全依賴底層 TCP/IP網絡。分發的消息可能丟失或重複。例如,這個等級可用於環境傳感器數據,單次的數據丟失沒關係,因爲不久後還會有第二次發送。

QoS 1

“至少一次”,確保消息可以到達,但消息可能會重複。

QoS 2

“只有一次”,確保消息只到達一次。例如,這個等級可用在一個計費系統中,這裏如果消息重複或丟失會導致不正確的收費。

MQTT的消息類型

  1. CONNECT – 連接服務端:客戶端到服務端的網絡連接建立後, 客戶端發送給服務端的第一個報文必須是CONNECT報文
  2. CONNACK – 確認連接請求:服務端發送CONNACK報文響應從客戶端收到的CONNECT報文。服務端發送給客戶端的第一個報文必須是CONNACK。如果客戶端在合理的時間內沒有收到服務端的CONNACK報文,客戶端應該關閉網絡連接。合理的時間取決於應用的類型和通信基礎設施。
  3. PUBLISH – 發佈消息:PUBLISH控制報文是指從客戶端向服務端或者服務端向客戶端傳輸一個應用消息。
  4. PUBACK –發佈確認:PUBACK報文是對QoS 1等級的PUBLISH報文的響應。
  5. PUBREC – 發佈收到( QoS 2, 第一步):PUBREC報文是對QoS等級2的PUBLISH報文的響應。 它是QoS 2等級協議交換的第二個報文。
  6. PUBREL – 發佈釋放( QoS 2, 第二步):PUBREL報文是對PUBREC報文的響應。 它是QoS 2等級協議交換的第三個報文。
  7. PUBCOMP – 發佈完成( QoS 2, 第三步):PUBCOMP報文是對PUBREL報文的響應。 它是QoS 2等級協議交換的第四個也是最後一個報文。
  8. SUBSCRIBE - 訂閱主題:客戶端向服務端發送SUBSCRIBE報文用於創建一個或多個訂閱。每個訂閱註冊客戶端關心的一個或多個主題。 爲了將應用消息轉發給與那些訂閱匹配的主題, 服務端發送PUBLISH報文給客戶端。SUBSCRIBE報文也( 爲每個訂閱) 指定了最大的QoS等級, 服務端根據這個發送應用消息給客戶端。
  9. SUBACK – 訂閱確認:服務端發送SUBACK報文給客戶端, 用於確認它已收到並且正在處理SUBSCRIBE報文。
  10. UNSUBSCRIBE –取消訂閱:客戶端發送UNSUBSCRIBE報文給服務端, 用於取消訂閱主題。
  11. UNSUBACK – 取消訂閱確認:服務端發送UNSUBACK報文給客戶端用於確認收到UNSUBSCRIBE報文。
  12. PINGREQ – 心跳請求:客戶端發送PINGREQ報文給服務端的。 用於:1. 在沒有任何其它控制報文從客戶端發給服務的時,告知服務端客戶端還活着。2. 請求服務端發送 響應確認它還活着。3. 使用網絡以確認網絡連接沒有斷開。
  13. PINGRESP – 心跳響應:服務端發送PINGRESP報文響應客戶端的PINGREQ報文。 表示服務端還活着。
  14. DISCONNECT –斷開連接:DISCONNECT報文是客戶端發給服務端的最後一個控制報文。 表示客戶端正常斷開連接。

MQTT控制報文格式

在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章