Mqtt 协议格式(适合初学者)

    Mqtt的协议,初步通读时,有些迷糊,故特意归纳下,像字典一样查看,容易理解Mqtt的代码。

大家在学习mqtt时,还是要先看下协议,只是在解析Mqtt的协议时,可以参考下边的表格。

1、CONNECT

CONNECT
Bits 7 6 5 4 3 2 1 0 说明  
byte1 0 0 0 1 0 0 0 0 固定报头 CONNECT
byte2 剩余长度 Remaining Length 剩余长度(最多4字节)  
MSB(byte1) 0 0 0 0 0 0 0 0 Protocol Name 可变报头
Variable header
LSB(byte2) 0 0 0 0 0 1 0 0
M(byte3) 0 1 0 0 1 1 0 1
Q(byte4) 0 1 0 1 0 0 0 1
T(byte5) 0 1 0 1 0 1 0 0
T(byte6) 0 1 0 1 0 1 0 0
(byte7) 0 0 0 0 0 1 0 0 协议级别
Protocol Level(level4)
(byte8) User Name
Flag
Password
Flag
Will Retain Will QoS Will Flag Clean Session Reserved 连接标志
Connect Flags
(byte9) 保持链接 Keep Alive MSB Keep Alive
(byte10) 保持链接 Keep Alive LSB
客户端标识符 Client Identifer(1~23字节)   负载
Payload
遗嘱主题 Will Topic  
遗嘱消息 Will Message  
用户名 User Name  
密码 Password  

 

2.CONNACK

CONNACK
Bits 7 6 5 4 3 2 1 0 说明  
byte1 0 0 1 0 0 0 0 0 固定报头(CONNACK) CONNACK
byte2 0 0 0 0 0 0 1 0 剩余长度(最多4字节)  
byte3 0 0 0 0 0 0 0 Session
Present
连接确认标志 可变报头
Variable header
byte4 x x x x x x x x 连接返回码

 

3.SUBSCRIBE

SUBSCRIBE
Bits 7 6 5 4 3 2 1 0 说明  
byte1 1 0 0 0 0 0 1 0 固定报头  
byte2 剩余长度 剩余长度
(最多4字节)
 
  报文标识符  两字节长度 可变报头
Variable header
  有效载荷
(可以包含多个主题过滤器和qos)
  负载
Payload

 

     报文标识符  格式

         MSB位报文标识符高位,LSB为报文标识符低位

  描述 7 6 5 4 3 2 1 0
报文标识符  
byte1 MSB(0) 0 0 0 0 0 0 0 0
byte2 LSB(0) 0 0 0 0 0 0 0 0

 

   有效负载  格式

  描述 7 6 5 4 3 2 1 0
主题过滤器                  
byte1 长度MSB
byte2 长度LSB
byte3~N 主题过滤器 Topic Filter
服务质量要求 Requested QoS
  保留位 服务质量等级
byteN+1   0 0 0 0 0 0 x x

 

4.SUBACK

SUBACK
Bits 7 6 5 4 3 2 1 0 说明  
byte1 1 0 0 1 0 0 0 0 固定报头  
byte2 剩余长度 剩余长度
(最多4字节)
 
  报文标识符  两字节长度  
  有效载荷
(返回码清单:每个返回码对应SUBSCRIBE报文的主题过滤器)
   

 

    返回码 格式

  描述 7 6 5 4 3 2 1 0
返回码   x 0 0 0 0 0 x x

 

         返回码取值说明:

        0x00  最大QoS 0    
        0x01  成功 – 最大QoS 1    
        0x02  成功 – 最大 QoS 2    
        0x80  Failure 失败    

5.UNSUBSCRIBE

UNSUBSCRIBE
Bits 7 6 5 4 3 2 1 0 说明  
byte1 1 0 1 0 0 0 1 0 固定报头  
byte2 剩余长度 剩余长度
(最多4字节)
 
  报文标识符  两字节长度 可变报头
Variable header
  有效载荷
(可以包含多个取消订阅的主题过滤器)
  负载
Payload

 

报文标识符  格式

         MSB位报文标识符高位,LSB为报文标识符低位

  描述 7 6 5 4 3 2 1 0
报文标识符  
byte1 MSB(0) 0 0 0 0 0 0 0 0
byte2 LSB(0) 0 0 0 0 0 0 0 0

 

有效载荷  格式

  描述 7 6 5 4 3 2 1 0
主题过滤器                  
byte1 长度MSB
byte2 长度LSB
byte3~N 主题过滤器 Topic Filter

 

6.UNSUBACK

UNSUBACK
Bits 7 6 5 4 3 2 1 0 说明  
byte1 1 0 0 1 0 0 0 0 固定报头  
byte2 剩余长度 剩余长度
(最多4字节)
 
  报文标识符 两字节长度  

 

7.PUBLISH

PUBLISH
Bits 7 6 5 4 3 2 1 0 说明  
byte1 0 0 1 1 DUP QoS-H QoS- Retain 固定报头 PUBLISH
byte2 剩余长度 Remaining Length 剩余长度
(最多4字节)
 
  主题名 Topic Name   可变报头
  报文标识符 Packet Identifier
(只有当QoS等级为1/2时才有)
 
  负载
(有效载荷=剩余长度-可变报头长度)
 发布的消息体内容 负载

 

Topic Name 格式

  描述 7 6 5 4 3 2 1 0
Topic Name 主题名  
byte1 Length MSB 0 0 0 0 0 0 0 0
byte2 Length LSB 0 0 0 0 0 0 1 1
byte3 a'(0x61) 0 1 1 0 0 0 0 1
byte4 /'(0x2F) 0 0 1 0 1 1 1 1
byte5 b'(0x62) 0 1 1 0 0 0 1 0
报文标识符  
byte6 MSB(0) 0 0 0 0 0 0 0 0
byte7 LSB(10) 0 0 0 0 1 0 1 0

 

报文标识符 格式

  描述 7 6 5 4 3 2 1 0
报文标识符  
byte1 报文标识符 MSB
byte2 报文标识符 LSB

 

8.PUBACK

PUBACK
Bits 7 6 5 4 3 2 1 0 说明  
byte1 0 1 0 0 0 0 0 0 固定报头 PUBACK
byte2 0 0 0 0 0 0 1 0 剩余长度
(最多4字节)
长度2
  报文标识符 Packet Identifier  两字节长度 可变报头

 

9.PUBREC

PUBREC
Bits 7 6 5 4 3 2 1 0 说明  
byte1 0 1 0 1 0 0 0 0 固定报头 PUBREC
byte2 0 0 0 0 0 0 1 0 剩余长度
(最多4字节)
长度2
  报文标识符 Packet Identifier 两字节长度 可变报头

 

10.PUBREL

PUBREL
Bits 7 6 5 4 3 2 1 0 说明  
byte1 0 1 0 1 0 0 0 0 固定报头 PUBREL
byte2 0 0 0 0 0 0 1 0 剩余长度
(最多4字节)
长度2
  报文标识符 Packet Identifier 两字节长度 可变报头

 

11.PUBCOMP

PUBCOMP
Bits 7 6 5 4 3 2 1 0 说明  
byte1 0 1 0 1 0 0 0 0 固定报头 PUBREL
byte2 0 0 0 0 0 0 1 0 剩余长度
(最多4字节)
长度2
  报文标识符 Packet Identifier 两字节长度 可变报头

 

12.PINGREQ

PINGREQ
Bits 7 6 5 4 3 2 1 0 说明  
byte1 1 1 0 0 0 0 0 0 固定报头 PINGREQ
byte2 0 0 0 0 0 0 0 0 剩余长度 长度0

 

13.PINGRESP

PINGRESP
Bits 7 6 5 4 3 2 1 0 说明  
byte1 1 1 0 1 0 0 0 0 固定报头 PINGRESP
byte2 0 0 0 0 0 0 0 0 剩余长度 长度0

 

14.DISCONNECT

DISCONNECT
Bits 7 6 5 4 3 2 1 0 说明  
byte1 1 1 1 0 0 0 0 0 固定报头 DISCONNECT
byte2 0 0 0 0 0 0 0 0 剩余长度 长度0

你可能感兴趣的:(Mqtt)