物聯網之MQTT3.1.1和MQTT5協議 (6) PUBREC 報文

前言

PUBREC報文是對QoS等級2的PUBLISH報文的響應。它是QoS 2等級協議交換的第二個報文。真正能實現QoS2等級消息而且沒有性能問題的Broker或mqtt server的很少。

PUBREC – 發佈收到(QoS 2,第一步)

固定報頭

在這裏插入圖片描述

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

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

可變報頭

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

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

在這裏插入圖片描述

PUBREC原因碼(MQTT 5)

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

在這裏插入圖片描述

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

PUBREC屬性(MQTT 5)

屬性長度

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

原因字符串

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

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

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

用戶屬性

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

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

PUBREC載荷

PUBREC報文沒有有效載荷。

PUBREC行爲

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

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