18WWWXXXX日本_色综合中文一一免费的日本网站_久久亚洲日韩精品一区二区三区_午夜精品久久久久久毛片_色综合久久久无码网中文_国产超碰av一区二区_精品久久久久久亚洲中文字幕_亚洲影院丰满少妇中文字幕无码_久久久91精品国产一区二区_老头把我添高潮了a片

recruit

—— 人力資源 ——

【MQTT】MQTT協(xié)議解析(MQTT數(shù)據(jù)包結(jié)構(gòu))

發(fā)布時間:2024-01-16瀏覽次數(shù):

MQTT協(xié)議解析(MQTT數(shù)據(jù)包結(jié)構(gòu))

來源:簡書    作者:Dg_fc58    時間:2019.07.27

圖片.png

協(xié)議就是通信雙方的一個約定,即,表示第1位傳輸?shù)氖裁?、?位傳輸?shù)氖裁础?。在MQTT協(xié)議中,一個MQTT數(shù)據(jù)包由:固定頭(Fixed header)、 可變頭(Variable header)、 消息體(payload)三部分構(gòu)成。

MQTT 數(shù)據(jù)包結(jié)構(gòu)

固定頭(Fixed header),存在于所有MQTT數(shù)據(jù)包中,表示數(shù)據(jù)包類型及數(shù)據(jù)包的分組類標(biāo)識
可變頭(Variable header),存在于部分MQTT數(shù)據(jù)包中,數(shù)據(jù)包類型決定了可變頭是否存在及其具體內(nèi)容
消息體(Payload),存在于部分MQTT數(shù)據(jù)包中,表示客戶端收到的具體內(nèi)容

1 MQTT固定頭
固定頭存在于所有MQTT數(shù)據(jù)包中,其結(jié)構(gòu)如下:

Bit 7   6   5   4   3   2   1   0
byte 1  MQTT數(shù)據(jù)包類型   不同類型MQTT數(shù)據(jù)包的具體標(biāo)識
byte 2… 剩余長度

1.1 MQTT數(shù)據(jù)包類型
位置:byte 1, bits 7-4。

相于一個4位的無符號值,類型如下:

名稱  值   流方向 描述
Reserved    0   不可用 保留位
CONNECT 1   客戶端到服務(wù)器 客戶端請求連接到服務(wù)器
CONNACK 2   服務(wù)器到客戶端 連接確認(rèn)
PUBLISH 3   雙向  發(fā)布消息
PUBACK  4   雙向  發(fā)布確認(rèn)
PUBREC  5   雙向  發(fā)布收到(保證第1部分到達(dá))
PUBREL  6   雙賂  發(fā)布釋放(保證第2部分到達(dá))
PUBCOMP 7   雙向  發(fā)布完成(保證第3部分到達(dá))
SUBSCRIBE   8   客戶端到服務(wù)器 客戶端請求訂閱
SUBACK  9   服務(wù)器到客戶端 訂閱確認(rèn)
UNSUBSCRIBE 10  客戶端到服務(wù)器 請求取消訂閱
UNSUBACK    11  服務(wù)器到客戶端 取消訂閱確認(rèn)
PINGREQ 12  客戶端到服務(wù)器 PING請求
PINGRESP    13  服務(wù)器到客戶端 PING應(yīng)答
DISCONNECT  14  客戶端到服務(wù)器 中斷連接
Reserved    15  不可用 保留位

1.2 標(biāo)識位
位置:byte 1, bits 3-0。

在不使用標(biāo)識位的消息類型中,標(biāo)識位被做為保留位。如果收到無效的標(biāo)志時,接收端必須關(guān)閉網(wǎng)絡(luò)連接:

數(shù)據(jù)包 標(biāo)識位 Bit 3   Bit 2   Bit 1   Bit 0
CONNECT 保留位 0   0   0   0
CONNACK 保留位 0   0   0   0
PUBLISH MQTT 3.1.1使用    DUP1    QoS2    QoS2    RETAIN3
PUBACK  保留位 0   0   0   0
PUBREC  保留位 0   0   0   0
PUBREL  保留位 0   0   0   0
PUBCOMP 保留位 0   0   0   0
SUBSCRIBE   保留位 0   0   0   0
SUBACK  保留位 0   0   0   0
UNSUBSCRIBE 保留位 0   0   0   0
UNSUBACK    保留位 0   0   0   0
PINGREQ 保留位 0   0   0   0
PINGRESP    保留位 0   0   0   0
DISCONNECT  保留位 0   0   0   0
DUP:發(fā)布消息的副本。用來在保證消息的可靠傳輸,如果設(shè)置為 1,則在下面的變長中增加MessageId,并且需要回復(fù)確認(rèn),以保證消息傳輸完成,但不能用于檢測消息重復(fù)發(fā)送。
QoS:發(fā)布消息的服務(wù)質(zhì)量,即:保證消息傳遞的次數(shù)
00:最多一次,即:<=1
01:至少一次,即:>=1
10:一次,即:=1
11:預(yù)留
RETAIN: 發(fā)布保留標(biāo)識,表示服務(wù)器要保留這次推送的信息,如果有新的訂閱者出現(xiàn),就把這消息推送給它,如果設(shè)有那么推送至當(dāng)前訂閱者后釋放。

1.3 剩余長度(Remaining Length)
位置:byte 1。

固定頭的第二字節(jié)用來保存變長頭部和消息體的總大小的,但不是直接保存的。這一字節(jié)是可以擴展,其保存機制,前7位用于保存長度,后一部用做標(biāo)識。當(dāng)最后一位為 1時,表示長度不足,需要使用二個字節(jié)繼續(xù)保存。 例如:計算出后面的大小為0

2 MQTT可變頭
MQTT數(shù)據(jù)包中包含一個可變頭,它駐位于固定的頭和負(fù)載之間??勺冾^的內(nèi)容因數(shù)據(jù)包類型而不同,較常的應(yīng)用是做為包的標(biāo)識:

Bit 7   6   5   4   3   2   1   0
byte 1  包標(biāo)簽符(MSB)
byte 2… 包標(biāo)簽符(LSB)
很多類型數(shù)據(jù)包中都包括一個2字節(jié)的數(shù)據(jù)包標(biāo)識字段,這些類型的包有:PUBLISH (QoS > 0)、PUBACK、PUBREC、PUBREL、PUBCOMP、SUBSCRIBE、SUBACK、UNSUBSCRIBE、UNSUBACK

3 Payload消息體
Payload消息體位MQTT數(shù)據(jù)包的第三部分,CONNECT、SUBSCRIBE、SUBACK、UNSUBSCRIBE四種類型的消息 有消息體:

CONNECT,消息體內(nèi)容主要是:客戶端的ClientID、訂閱的Topic、Message以及用戶名和密碼。
SUBSCRIBE,消息體內(nèi)容是一系列的要訂閱的主題以及QoS。
SUBACK,消息體內(nèi)容是服務(wù)器對于SUBSCRIBE所申請的主題及QoS進(jìn)行確認(rèn)和回復(fù)。
UNSUBSCRIBE,消息體內(nèi)容是要訂閱的主題。



作者:Dg_fc58
鏈接:https://www.jianshu.com/p/016858839e24
來源:簡書
著作權(quán)歸作者所有。