MQTT學習筆記四 MQTT報文結構

2021-09-17 07:25:23 字數 1162 閱讀 4350

mqtt是乙個二進位制的協議,採用的是命令和命令確認的方式。其中,topic name,client id,user name和password是utf-8的字串。有效載荷(payload)是二進位制,格式和內容根據應用本身來指定。

協議包含固定報頭,可變報頭和有效載荷三部分內容。其中,固定報頭是必須的。

包含兩部分。第一部分又分為報文型別和控制標誌。高位4個bit表示報文型別,比如是connect/publish等。低位4個bit大部分都作為預留,只有publish報文會用到。結構如下:

1)報文型別

比如connect,報文的第乙個位元組的高4bit就是0001,publish是0011

2)控制標誌

大部分控制標誌都是預留位,需要按照規則填寫值(大部分是0000)。其中,publish報文的控制標誌在mqtt3.1.1以上版本中使用,每乙個bit代表意義如下:

3)固定報頭

1)和2)佔了固定報頭的第乙個位元組,固定報頭的第二部分是剩餘長度。表示後面可變報頭和有效載荷的總長度。這部分占用位元組數為1~4,每個位元組的低7bit用來表示數量,第7bit用來表示後面是否還有長度位元組。幾個例子:

1)長度為64,0100 0000 只需要乙個位元組即可表示,所以剩餘長度為0x40

2)長度為321,1100 0001 0000 0010 需要2個位元組表示,所以剩餘長度為0xc1 0x02

某些需要傳遞額外資訊的報文才需要。其中pingreq,pingresp和disconnect沒有可變報頭。其他可變報頭格式和內容見後面文章。

需要傳遞具體的資訊時才需要payload。其中connack, puback,pubrec,pubrel,pubcomp,suback,unsuback,pingreq,pingresp,disconnect沒有payload。

MQTT報文協議

之前一篇文章講述了關於後台伺服器和裝置之間的通訊的部落格 鏈結 現在深入具體的協議報文以及一些 實現。根據topic區分裝置和版本 報文頭 區分報文是誰傳送的 資料區 校驗區 封裝資料後台 public static byte getdata2send serverprotocoltype type...

MQTT協議學習筆記

1 前沿 萬物聯網的時代即將到來,物聯網也由當初的概念開始進一步落實。隨著無線網路技術飛速發展,各種裝置都可以連線網路,實現遠端控制。例如智慧型家居最近非常火爆,智慧型插座 智慧型led燈 智慧型攝像頭等。在網際網路時代,http協議負責建立網路連線,而到了物聯網時代,由於智慧型硬體的差異,相比網際...

MQTT控制報文(連線)

1.connect 連線服務端 1.1 可變報文 協議名 協議級別 連線標誌 保持連線 1.1.1 協議名 內容固定,標識是mqtt協議 前2個位元組表示長度,後4個位元組ascii碼的mqtt 1.1.2 協議級別 8位的無符號值表示協議的修訂版本,對於3.1.1版協議,協議級別欄位的值是4 0x...