【MQTT】学习笔记2.控制包格式

MQTT控制包格式

本文主要介绍控制包的组成框架和格式,而每种控制包的细节内容将在后文学习

总体结构

MQTT协议通过以定义的方式交换一系列MQTT控制包来工作
至多有三个部分,至少有一个部分,它们的相对顺序固定

英文名称 中文名称 介绍
Fixed header 固定报头 所有数据包
Variable header 可变报头 部分数据包
Payload 有效负载 部分数据包

1. 固定报头

格式

报头格式

  • 控制包类型
    位于byte1的bit[4:7]

    Name Vaule Direction of flow Description
    Reserved 0 禁用 保留
    CONNECT 1 C2S1 客户端请求连接
    CONNACK 2 S2C2 服务器连接应答
    PUBLISH 3 C2S/S2C 发布消息
    PUCACK 4 C2S/S2C 发布应答
    PUBREC 5 C2S/S2C 发布接受(保证交付的第一部分)
    PUBREL 6 C2S/S2C 发布(保证交付的第二部分)
    PUBCOMP 7 C2S/S2C 发布完成(保证交付的第三部分)
    SUBSCRIBE 8 C2S 客户端请求订阅
    SUBACK 9 S2C 服务器订阅应答
    UNSUBSCRIBE 10 C2S 客户端请求取消订阅
    UNSUBACK 11 S2C 服务器取消订阅应答
    PINGREQ 12 C2S 客户端请求PING
    PINGRESP 13 S2C 服务器回应PING
    DISCONNECT 14 C2S 客户端请求断开连接
    Reserverd 15 禁用 保留
  • 标志位
    位于byte1的bit[3:0]
    每个控制包类型对应的标志位必须如下表所示,否则接收方必须关闭网络连接

    控制包 可变头标志 Bit 3 Bit 2 Bit 1 Bit 0
    CONNECT 保留 0 0 0 0
    CONNACK 保留 0 0 0 0
    PUBLISH 在3.1.1中使用 DUP3 QoS4 QoS4 RETAIN5
    PUCACK 保留 0 0 0 0
    PUBREC 保留 0 0 0 0
    PUBREL 保留 0 0 1 0
    PUBCOMP 保留 0 0 0 0
    SUBSCRIBE 保留 0 0 1 0
    SUBACK 保留 0 0 0 0
    UNSUBSCRIBE 保留 0 0 1 0
    UNSUBACK 保留 0 0 0 0
    PINGREQ 保留 0 0 0 0
    PINGRESP 保留 0 0 0 0
    DISCONNECT 保留 0 0 0 0
  • 剩余长度
    剩余长度=可变报头长度+有效载荷长度(单位为Byte)
    采用变长编码

    • 字节长度可变,每一个字节代表一个数位(Digits),第n个数位的权值为128^n(相当于128进制数)
    • 单个字节的bit[6:0]表示值,取值范围0~127,bit 7用来指示是否还有更高数位
    Digits From To
    1 0(0x00) 127(0x7F)
    2 128=0x1+1x128(0x80,0x01) 16383=127x1+127x128(0xFF,0x7F)
    3 16384=(0x1)+(0x128)+(1x128^2) (0x80, 0x80, 0x01) 2097151=(127x1)+(127x128)+(127x128^2) (0xFF, 0xFF, 0x7F)

2. 可变报头

部分控制包需要2 byte的控制包标识符(Packet Identifier)作为可变报头

控制包 标识符
CONNECT
CONNACK
PUBLISH (QoS>0时)有
PUCACK
PUBREC
PUBREL
PUBCOMP
SUBSCRIBE
SUBACK
UNSUBSCRIBE
UNSUBACK
PINGREQ
PINGRESP
DISCONNECT

3. 有效载荷

一些控制包的最后一个部分是有效载荷如下表
对于PUBLISH控制包,有效载荷就是应用消息

控制包 有效载荷
CONNECT 需要
CONNACK
PUBLISH 可选
PUCACK
PUBREC
PUBREL
PUBCOMP
SUBSCRIBE 需要
SUBACK 需要
UNSUBSCRIBE 需要
UNSUBACK
PINGREQ
PINGRESP
DISCONNECT

  1. Client to Server ↩︎

  2. Server to Client ↩︎

  3. Duplicate delivery of a PUBLISH Control Packet
    重复交付发布控制包 ↩︎

  4. PUBLISH Quality of Service
    发布服务质量 ↩︎ ↩︎

  5. PUBLISH Retain flag
    发布保持标志 ↩︎

你可能感兴趣的:(通信)