1 概述
MQTT(Message Queuing Telemetry Transport,消息队列遥测传输协议),是一种基于发布/订阅(publish/subscribe)模式的"轻量级"通讯协议,该协议构建于TCP/IP协议上,由IBM在1999年发布。MQTT最大优点在于,可以以极少的代码和有限的带宽,为连接远程设备提供实时可靠的消息服务。作为一种低开销、低带宽占用的即时通讯协议,使其在物联网、小型设备、移动应用等方面有较广泛的应用。
MQTT是一个基于客户端-服务器的消息发布/订阅传输协议。MQTT协议是轻量、简单、开放和易于实现的,这些特点使它适用范围非常广泛。在很多情况下,包括受限的环境中,如:机器与机器(M2M)通信和物联网(IoT)。其在,通过卫星链路通信传感器、偶尔拨号的医疗设备、智能家居、及一些小型化设备中已广泛使用。
注:由于业务用上了MQTT作为设备通讯协议内容,此篇文章为总结几篇mqtt报文解析的好文再加上mqtt官方文档出的,故此为整理备忘文。
2 控制报文格式
MQTT控制报文由三部分组成:固定头(Fixed header)+可变头(Variable header)+有效载荷(Payload)
| Fixed header | 固定头部,MQTT协议分很多种类型,如连接,发布,订阅,心跳等。其中固定头是必须的,所有类型的MQTT协议中,都必须包含固定头 |
| Variable header | 可变头部,可变头部不是可选的意思,而是指这部分在有些协议类型中存在,在有些协议中不存在 |
| Payload | 消息载体,就是消息内容。与可变头一样,在有些协议类型中有消息内容,有些协议类型中没有消息内容 |
2.2 固定报头(Fixed header)
| Bit |
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
| byte 1 |
MQTT Control Packet type MQTT控制报文类型 |
Flags specific to each MQTT Control Packet type 用于指定的控制报文类型标志位 |
||||||
| byte 2… |
Remaining Length 剩余长度 |
|||||||
2.2.1 MQTT控制报文类型(MQTT Control Packet type)
第一个字节的7-4位,一共4位,可表示16个数字,除0 禁止使用以外,剩余15个数字各表示一个控制报文类型,如图所示:
| Name 名称 |
Value 值 |
Direction of flow 报文流动方向 |
Description 描述 |
| Reserved |
0 |
禁止 |
Reserved (预留) |
| CONNECT |
1 |
客户端到服务器 |
Client request to connect to Server 客户端连接到服务器 |
| CONNACK |
2 |
Server to Client |
Connect acknowledgment 连接确认 |
| PUBLISH |
3 |
Client to Server or Server to Client |
Publish message 发布消息 |
| PUBACK |
4 |
Client to Server or Server to Client |
Publish acknowledgment 发布确认(QoS 1) |
| P |

本文详细介绍了MQTT协议的控制报文结构,包括固定头、可变头和有效载荷三个部分。固定头包含了报文类型、标志位和剩余长度,其中报文类型定义了15种不同的控制报文,如CONNECT、PUBLISH、SUBSCRIBE等,标志位如DUP、QoS和RETAIN用于服务质量控制。可变头则根据报文类型包含不同信息,如包标识符。有效载荷则根据报文类型可选,如PUBLISH报文中的应用程序消息。
最低0.47元/天 解锁文章
3651





