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

MQTT控制包格式

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

总体结构

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

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

1. 固定报头

格式

报头格式

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

    NameVauleDirection of flowDescription
    Reserved0禁用保留
    CONNECT1C2S1客户端请求连接
    CONNACK2S2C2服务器连接应答
    PUBLISH3C2S/S2C发布消息
    PUCACK4C2S/S2C发布应答
    PUBREC5C2S/S2C发布接受(保证交付的第一部分)
    PUBREL6C2S/S2C发布(保证交付的第二部分)
    PUBCOMP7C2S/S2C发布完成(保证交付的第三部分)
    SUBSCRIBE8C2S客户端请求订阅
    SUBACK9S2C服务器订阅应答
    UNSUBSCRIBE10C2S客户端请求取消订阅
    UNSUBACK11S2C服务器取消订阅应答
    PINGREQ12C2S客户端请求PING
    PINGRESP13S2C服务器回应PING
    DISCONNECT14C2S客户端请求断开连接
    Reserverd15禁用保留
  • 标志位
    位于byte1的bit[3:0]
    每个控制包类型对应的标志位必须如下表所示,否则接收方必须关闭网络连接

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

    • 字节长度可变,每一个字节代表一个数位(Digits),第n个数位的权值为128^n(相当于128进制数)
    • 单个字节的bit[6:0]表示值,取值范围0~127,bit 7用来指示是否还有更高数位
    DigitsFromTo
    10(0x00)127(0x7F)
    2128=0x1+1x128(0x80,0x01)16383=127x1+127x128(0xFF,0x7F)
    316384=(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
    发布保持标志 ↩︎

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值