MQTT協議(一) 協議介紹與控制報文格式

2022-07-26 18:30:19 字數 1491 閱讀 7194

mqtt協議可以理解為乙個類似於kakfa或者rocketmq這種中介軟體的形式。它主要功能就是可以實現發布和訂閱。

不同的客戶端去跟客戶端連線,然後就可以訂閱一些主題(topic),有些客戶端如果發布了這些主題,這些訂閱的都能收到。

實用場景舉例: 

比如乙個樓中的人都想在手機上每天收到自己樓內的溫度,

樓內住戶的手機作為客戶端(client),連線到服務端(mqttbroker),然後訂閱(subscribe)溫度這個主題,

測量溫度裝置作為乙個客戶端(client),在連線到服務端後推送(publish)溫度主題(topic)到伺服器,

服務端收到訊息後,再傳送推送報文給這些訂閱的客戶端,也就是樓內人的手機,就實現溫度推送這個功能了。

這些連線、發布、訂閱、斷開等等操作,都需要特定的報文來實現(這也是協議存在的意義,定規矩)

mqtt規範定義了十四種不同型別的控制報文,來實現上訴各個功能。

主要分三個部分:固定頭(fixed header)+可變頭(variable header)+有效載荷(payload)

1.固定頭

固定頭第乙個位元組byte(乙個位元組由8位二進位制數組成)的前4位值對應不同報文型別,具體值對應如下:

後4個位元組用於指定控制報文型別的標誌位,目前就publish用到了,這四個位元組分別對應:

2.可變報文頭

某些mqtt控制報文包含乙個可變報頭部分。它在固定報頭和負載之間。可變報頭的內容根據報文型別的不同而不同。可變報頭的報文識別符號(packet identifier)字段存在於在多個型別的報文裡。

這個報文識別符號用來唯一標識一條報文,可以理解為報文的id。

這東西在重發和答覆的時候都會用到,如果你是重發報文,那這個識別符號要跟之前的報文一樣,如果你要答覆某個報文,那答覆報文裡的識別符號要跟你答覆的那個報文一樣。在答覆完成後,這個id就可以被釋放重新用了。

很多控制報文的可變報頭部分包含乙個兩位元組的報文識別符號字段。這些報文是publish(qos > 0時), puback,pubrec,pubrel,pubcomp,subscribe, suback,unsubscribe,unsuback。

qos 1的publish對應的是puback,qos 2的publish對應的是pubcomp,與subscribe或unsubscribe對應的分別是suback或unsuback。

記憶的訣竅就是,凡是需要答覆的和答覆報文,都必須有報文識別符號。

3.有效載荷

這個就是通常理解的報文體了,業務資料就是在這裡頭。

不是所有的報文都需要有效載荷的。

ICMP控制報文協議

icmp經常被認為是ip層的乙個組成部分。它傳遞差錯以及其他需要注意的資訊。icmp報文通常被ip層或更高層 協議 tcp或udp 使用。一些icmp報文把差錯報文返回給 使用者程序。icmp報文是在ip資料報內部被傳輸的,它封 裝在ip資料報內。icmp報文的格式如圖所示。所有報文的前4個位元組都...

Mqtt協議基本介紹

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

mqtt介紹 協議解析

物聯網 internet of things,iot 最近 率越來越高。雖然http是網頁的事實標準,不過機器之間 machine to machine,m2m 的大規模溝通需要不同的模式 之前的請求 回答 request response 模式不再合適,取而代之的是發布 訂閱 publish su...