原理簡介 訊息通訊的利器MQTT協議簡介及協議原理

2021-10-16 05:41:41 字數 4638 閱讀 5886

- 沒用過但是必須得知道系列 -

前言:相比於 xmpp, mqtt 的簡單輕量受到了不少工程師的喜愛,從物聯網到傳統的訊息服務,簡單可依賴的 mqtt 到底為何讓人如此著迷呢?

mqtt 協議-mqtt 協議簡介及協議原理

mqtt(message queuing telemetry transport,訊息佇列遙測傳輸協議),是一種基於發布/訂閱( publish/subscribe )模式的「輕量級」通訊協議,該協議構建於tcp/ip協議上,由ibm在2023年發布。mqtt最大優點在於,可以以極少的**和有限的頻寬,為連線遠端裝置提供實時可靠的訊息服務。作為一種低開銷、低頻寬占用的即時通訊協議,使其在物聯網、小型裝置、移動應用等方面有較廣泛的應用。

mqtt是乙個基於客戶端-伺服器的訊息發布/訂閱傳輸協議。mqtt協議是輕量、簡單、開放和易於實現的,這些特點使它適用範圍非常廣泛。在很多情況下,包括受限的環境中,如:機器與機器(m2m)通訊和物聯網(iot)。其在,通過衛星鏈路通訊感測器、偶爾撥號的醫療裝置、智慧型家居、及一些小型化裝置中已廣泛使用。

mqtt協議當前版本為,2023年發布的mqtt v3.1.1。除標準版外,還有乙個簡化版mqtt-sn,該協議主要針對嵌入式裝置,這些裝置一般工作於tcp/ip網路,如:zigbee。

mqtt協議執行在tcp/ip或其他網路協議,提供有序、無損、雙向連線。其特點包括:

使用的發布/訂閱訊息模式,它提供了一對多訊息分發,以實現與應用程式的解耦。

對負載內容遮蔽的訊息傳輸機制。

對傳輸訊息有三種服務質量(qos):

資料傳輸和協議交換的最小化(協議頭部只有2位元組),以減少網路流量

通知機制,異常中斷時通知傳輸雙方

2.1 mqtt協議實現方式

2.2 網路傳輸與應用訊息

mqtt會構建底層網路傳輸:它將建立客戶端到伺服器的連線,提供兩者之間的乙個有序的、無損的、基於位元組流的雙向傳輸。

當應用資料通過mqtt網路傳送時,mqtt會把與之相關的服務質量(qos)和主題名(topic)相關聯。

2.3 mqtt客戶端

乙個使用mqtt協議的應用程式或者裝置,它總是建立到伺服器的網路連線。客戶端可以:

2.4 mqtt伺服器

mqtt伺服器稱為「訊息**」(broker),可以是乙個應用程式或一台裝置。它是位於訊息發布者和訂閱者之間,它可以:

2.5 mqtt協議中的訂閱、主題、會話

訂閱(subscription)

訂閱包含主題篩選器(topic filter)和最大服務質量(qos)。訂閱會與乙個會話(session)關聯。乙個會話可以包含多個訂閱。每乙個會話中的每個訂閱都有乙個不同的主題篩選器。

會話(session)

每個客戶端與伺服器建立連線後就是乙個會話,客戶端和伺服器之間有狀態互動。會話存在於乙個網路之間,也可能在客戶端和伺服器之間跨越多個連續的網路連線。

主題名(topic name)

連線到乙個應用程式訊息的標籤,該標籤與伺服器的訂閱相匹配。伺服器會將訊息傳送給訂閱所匹配標籤的每個客戶端。

主題篩選器(topic filter)

乙個對主題名萬用字元篩選器,在訂閱表示式中使用,表示訂閱所匹配到的多個主題。

負載(payload)

訊息訂閱者所具體接收的內容

2.6 mqtt協議中的方法

mqtt協議中定義了一些方法(也被稱為動作), 來表示對確定資源所進行操作。這個資源可以代表預先存在的資料或動態生成資料,這取決於伺服器的實現。通常來說,資源指伺服器上的檔案或輸出。

connect,等待與伺服器建立連線

disconnect,等待mqtt客戶端完成所做的工作,並與伺服器斷開tcp/ip會話

subscribe,等待完成訂閱

unsubscribe,等待伺服器取消客戶端的乙個或多個topics訂閱

publishmqtt客戶端傳送訊息請求,傳送完成後返回應用程式執行緒

mqtt 資料報結構

3.1 mqtt固定頭

固定頭存在於所有mqtt資料報中,其結構如下:

bit765

4321

0byte 1

mqtt資料報型別

不同型別mqtt資料報的具體標識

byte 2…

剩餘長度

3.1.1 mqtt資料報型別

位置:byte 1, bits 7-4。

相於乙個4位的無符號值,型別如下:名稱值

流方向描述

reserved

0不可用

保留位connect

1客戶端到伺服器

客戶端請求連線到伺服器

connack

2伺服器到客戶端

連線確認

publish3雙向

發布訊息

puback4雙向

發布確認

pubrec5雙向

發布收到(保證第1部分到達)

pubrel6雙向

發布釋放(保證第2部分到達)

pubcomp7雙向

發布完成(保證第3部分到達)

subscribe

8客戶端到伺服器

客戶端請求訂閱

suback

9伺服器到客戶端

訂閱確認

unsubscribe

10客戶端到伺服器

請求取消訂閱

unsuback

11伺服器到客戶端

取消訂閱確認

pingreq

12客戶端到伺服器

ping請求

pingresp

13伺服器到客戶端

ping應答

disconnect

14客戶端到伺服器

中斷連線

reserved

15不可用

保留位 3.1.2 標識位

位置:byte 1, bits 3-0。

在不使用標識位的訊息型別中,標識位被作為保留位。如果收到無效的標誌時,接收端必須關閉網路連線:

資料報標識位

bit 3

bit 2

bit 1

bit 0

connect

保留位000

0connack

保留位000

0publish

mqtt 3.1.1使用

dup1

qos2

qos2

retain3

puback

保留位000

0pubrec

保留位000

0pubrel

保留位000

0pubcomp

保留位000

0subscribe

保留位000

0suback

保留位000

0unsubscribe

保留位000

0unsuback

保留位000

0pingreq

保留位000

0pingresp

保留位000

0disconnect

保留位000

0 retain:發布保留標識,表示伺服器要保留這次推送的資訊,如果有新的訂閱者出現,就把這訊息推送給它,如果設有那麼推送至當前訂閱者後釋放。

3.1.3 剩餘長度(remaining length)

位置:byte 1。

固定頭的第二位元組用來儲存變長頭部和訊息體的總大小的,但不是直接儲存的。這一位元組是可以擴充套件,其儲存機制,前7位用於儲存長度,後一部用做標識。當最後一位為 1時,表示長度不足,需要使用二個位元組繼續儲存。例如:計算出後面的大小為 0

mqtt資料報中包含乙個可變頭,它駐位於固定的頭和負載之間。可變頭的內容因資料報型別而不同,較常的應用是做為包的標識:

bit765

4321

0byte 1

包標籤符(msb)

byte 2…

包標籤符(lsb)

很多態別資料報中都包括乙個2位元組的資料報標識字段,這些型別的包有:publish (qos > 0)、puback、pubrec、pubrel、pubcomp、subscribe、suback、unsubscribe、unsuback

payload 訊息體位於 mqtt 資料報的第三部分,connect、subscribe、suback、unsubscribe四種型別的訊息 有訊息體:

更多請檢視

mqtt 3.1.1 規範  3.1.1 規範中文版 

MQTT協議 MQTT協議簡介及協議原理

mqtt message queuing telemetry transport,訊息佇列遙測傳輸協議 是一種基於發布 訂閱 publish subscribe 模式的 輕量級 通訊協議,該協議構建於tcp ip協議上,由ibm在1999年發布。mqtt最大優點在於,可以以極少的 和有限的頻寬,為連...

MQTT協議 MQTT協議簡介及協議原理

mqtt message queuing telemetry transport,訊息佇列遙測傳輸協議 是一種基於發布 訂閱 publish subscribe 模式的 輕量級 通訊協議,該協議構建於tcp ip協議上,由ibm在1999年發布。mqtt最大優點在於,可以以極少的 和有限的頻寬,為連...

MQTT協議 MQTT協議簡介及協議原理

mqtt message queuing telemetry transport,訊息佇列遙測傳輸協議 是一種基於發布 訂閱 publish subscribe 模式的 輕量級 通訊協議,該協議構建於tcp ip協議上,由ibm在1999年發布。mqtt最大優點在於,可以以極少的 和有限的頻寬,為連...