物聯網之MQTT3.1.1和MQTT5協議 (7) PUBREL報文

前言

PUBREL報文是對PUBREC報文的響應。它是QoS 2等級協議交換的第三個報文。

PUBREL – 發佈釋放(QoS 2,第二步)

PUBREL固定報頭

在這裏插入圖片描述

PUBREL固定報頭的第3,2,1,0位是保留位,必須被設置爲0,0,1,0。服務端必須將其它的任何值都當做是不合法的並關閉網絡連接。

剩餘長度字段
表示可變報頭的長度,用變長字節整數編碼。

MQTT3.1.1中PUBREL報文這個值等於2.即值爲000000010

可變報頭

PUBREL報文的可變報頭按順序包含以下字段:所確認的PUBREC報文標識符,PUBREL原因碼,屬性(Properties)。

MQTT 3.1.1沒有原因碼和屬性相關的字段

在這裏插入圖片描述

PUBREL原因碼(MQTT 5)

可變報頭第3字節是PUBREL原因碼。如果剩餘長度爲2,則表示使用原因碼0x00 (成功)。

PUBREL原因碼

在這裏插入圖片描述

客戶端或服務端發送PUBREL報文時必須設置其中一種PUBREL原因碼。當原因碼爲0x00(成功)且沒有屬性(Properties)時,原因碼和屬性長度可以被省略。在這種情況下,PUBREL剩餘長度爲2。

PUBREL屬性(MQTT 5)

屬性長度

PUBREL報文可變報頭中的屬性長度被編碼爲變長字節整數。如果剩餘長度小於4,則表示沒有屬性長度字段。

原因字符串

31 (0x1F)Byte,原因字符串(Reason String)標識符。

跟隨其後的是UTF-8編碼的字符串,表示此次響應相關的原因。此原因字符串(Reason String)是爲診斷而設計的可讀字符串,不應該被接收端所解析。

發送端使用此值向接收端提供附加信息。如果加上原因字符串之後的PUBREL報文長度超出了接收端指定的最大報文長度(Maximum Packet Size),則發送端不能發送此原因字符串。包含多個原因字符串將造成協議錯誤(Protocol Error)。

用戶屬性

38 (0x26)Byte,用戶屬性(User Property)標識符。

跟隨其後的是UTF-8字符串對。此屬性可用於提供包括診斷信息或關於PUBREL的信息。如果加上用戶屬性之後的PUBREL報文長度超出了接收端指定的最大報文長度(Maximum Packet Size),則發送端不能發送此屬性 。用戶屬性(User Property)允許出現多次,以表示多個名字/值對,且相同的名字可以多次出現。

PUBREL載荷

PUBREL報文沒有有效載荷。

PUBREL行爲

在之後的博文關於“操作行爲”的內容會提到

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