【MQTT学习笔记四】MQTT报文结构

MQTT是一种基于发布/订阅模式的轻量级消息协议,适用于物联网和移动设备。它使用二进制格式,通过命令和确认进行通信。协议由固定报头、可变报头和有效载荷组成,其中固定报头包括报文类型和剩余长度字段。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 MQTT是一个二进制的协议,采用的是命令和命令确认的方式。其中,topic name,client id,user name和password是utf-8的字符串。有效载荷(payload)是二进制,格式和内容根据应用本身来指定。

  协议包含固定报头,可变报头和有效载荷三部分内容。其中,固定报头是必须的。

 

  固定报头

包含两部分。第一部分又分为报文类型和控制标志。高位4个bit表示报文类型,比如是CONNECT/PUBLISH等。低位4个bit大部分都作为预留,只有publish报文会用到。结构如下:

 

1)报文类型

比如CONNECT,报文的第一个字节的高4bit就是0001,PUBLISH是0011

 

 

2)控制标志

大部分控制标志都是预留位,需要按照规则填写值(大部分是0000)。其中,PUBLISH报文的控制标志在MQTT3.1.1以上版本中使用,每一个bit代表意义如下:

 

3)固定报头

1)和2)占了固定报头的第一个字节,固定报头的第二部分是剩余长度。表示后面可变报头和有效载荷的总长度。这部分占用字节数为1~4,每个字节的低7bit用来表示数量,第7bit用来表示后面是否还有长度字节。几个例子:

1)长度为64,0100 0000 只需要一个字节即可表示,所以剩余长度为0x40

2)长度为321,1100 0001 0000 0010 需要2个字节表示,所以剩余长度为0xc1 0x02

  可变报头

某些需要传递额外信息的报文才需要。其中PINGREQ,PINGRESP和DISCONNECT没有可变报头。其他可变报头格式和内容见后面文章。

有效载荷(payload)

需要传递具体的信息时才需要payload。其中CONNACK, PUBACK,PUBREC,PUBREL,PUBCOMP,SUBACK,UNSUBACK,PINGREQ,PINGRESP,DISCONNECT没有payload。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值