MQTT報文格式


MQTT報文結構

  控制報文由三部分組成:

  1、Fixed header 固定報頭,所有報文都包含

  2、Variable header 可變報頭,部分報文包含

  3、Body 有效載荷,部分報文包含

固定報頭

  報頭長度:2 ~ 5 Bytes

  1、報文類型:由第一個字節4-7 表示;共16個類型,但是保留第0個,第15個類型不用:

    

  2、標志位,標志報文類型的特定標志,第一個字節的0-3:

    

  3、剩余長度,從第二個字節開始,最少一個字節,最長四個字節。表示當前報文剩余部分(可變報頭+負載數據)的字節數。不包括用於編碼Remaining Length字段本身的字節數。

    它使用一個變長度編碼方案,對小於128的值,它使用單字節編碼。

    大值處理:低7位有效位用於編碼數據,最高有效位用於指示是否有更多的字節。

    因此每個字節可以編碼128個數值和一個延續位(continuation bit)。

    剩余長度字段的大小:

    

    非負整數x使用變長編碼方案算法:

do
    encodedByte = x%128; x = x /128; if (x > 0 ){ encodedByte = encodedByte|128; //延續標志位置1 }else{ encodedByte = encodedByte; } fill_fix_header_remain_len(encodeByte); while(x>0) 

    剩余長度字段的解碼算法:

multiplier = 1
value = 0
do encodedByte = 'next byte from stream' value += (encodedByte AND 127) * multiplier multiplier *= 128 if (multiplier > 128*128*128) throw Error(Malformed Remaining Length) while ((encodedByte AND 128) != 0)//判斷下一個字節的最高位是否為1,不等於1就表示是最后一個長度字節,value的值就是剩余長度的值

可變報頭

    在固定報頭和body之間,內容根據報文類型不同而不同。可變報頭的標識符字段存在於在多個類型的報文里。?

    報文標識符類型:

    

    很多控制報文的可變報頭部分,包含一個兩字節的報文標識符字段。比如:PUBLISH(QoS > 0時), PUBACK,PUBREC,PUBREL,

    PUBCOMP,SUBSCRIBE, SUBACK,UNSUBSCIBE,UNSUBACK。

    SUBSCRIBE,UNSUBSCRIBE 和 PUBLISH(QoS大於0)控制報文必須包含一個非零的16位報文標識符。

有效載荷

    對於PUBLISH來說就是消息內容了。

    需要有效載荷的控制報文:CONNECT、SUBSCRIBE、SUBACK、UNSUBSCRIBE。 PUBLISH是可選。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM