MQTT是一种基于发布/订阅模式的"轻量级"通讯协议。作为一种低开销、低带宽占用的即时通讯协议,使其在物联网、小型设备、移动应用等方面有较广泛的应用。
MQTT概述
MQTT协议,Message Queuing Telemetry Transport消息队列遥测传输协议,初始第一版由IBM在1999年发布。MQTT是一个客户端服务端架构的发布/订阅模式的消息传输协议,构建于TCP/IP等有序、可靠、双向连接的网络连接上。
MQTT的主要特点
发布订阅模式区别于传统的客户端-服务器模式,它使发送消息的发布者与接收消息的订阅者分离,发布者与订阅者不需要建立直接联系。

既可以让多个发布者向一个订阅者发布消息,也可以让多个订阅者同时接收一个发布者的消息,核心在于由MQTT Broker负责所有消息路由和分发的工作,用很小的传输消耗和协议数据交换,最大限度减少网络流量。
提供三种等级的服务质量:
Qos0: “最多一次”,尽操作环境所能提供的最大努力分发消息。消息可能会丢失

QoS1: “至少一次”,保证消息可以到达,但是可能会重复。

QoS2: “仅一次”,保证消息只到达一次。
数据表示
3.1单字节数据
字节中的位从0到7,第7位是最高有效位,第0位是最低有效位
3.2双字节整数
双字节整数数值是使用大端序(big-endian,高位字节在低位字节前面)的16位无符号整数
3.3 UTF-8编码字符串
MQTT控制报文中的文本字段编码为UTF-8格式的字符串
MQTT数据包结构
MQTT是基于TCP/IP的应用层协议
固定报头(Fixed header),存在于所有MQTT数据包中,表示数据包类型及数据包的分组类标识。
可变报头(Variable header),存在于部分MQTT数据包中,数据包类型决定了可变头是否存在及其具体内容。
有效载荷(Payload),存在于部分MQTT数据包中,表示客户端收到的具体内容。

1. 固定报头
每个MQTT控制包都包含一个固定报头
1.1 消息类型
1.2 标识位(bit0~3)
DUP1: 控制报文的重复分发标志
QoS2:PUBLISH报文的服务质量等级
RETAIN3: PUBLISH报文的保留标志
1.3 剩余长度
剩余长度是一个可变字节整数,表示当前控制报文中剩余的字节数,包括可变报头和有效载荷中的数据。
2. 可变报头
可变报头位于固定报头和有效载荷之间,可变报头的内容根据报文类型的不同而不同。通常都包括一个2字节的数据包标识字段,这些类型的包有:PUBLISH (QoS > 0)、PUBACK、PUBREC、PUBREL、PUBCOMP、SUBSCRIBE、SUBACK、UNSUBSCRIBE、UNSUBACK
3. 有效载荷
Payload有效载荷位于MQTT数据包的第三部分,CONNECT、SUBSCRIBE、SUBACK、UNSUBSCRIBE四种类型包含有效载荷。
CONNECT有效载荷内容主要是:客户端的ClientID、遗嘱主题、遗嘱Message以及用户名和密码。
SUBSCRIBE有效载荷内容是主题过滤器指明需要订阅的Topic以及QoS。
SUBACK有效载荷内容包含一个返回码清单,每个返回码对应等待确认的SUBSCRIBE报文中的一个主题过滤器。UNSUBSCRIBE有效载荷内容是客户端想要取消订阅的主题过滤器。
本文来源于互联网,e-works本着传播知识、有益学习和研究的目的进行的转载,为网友免费提供,并以尽力标明作者与出处,如有著作权人或出版方提出异议,本站将立即删除。如果您对文章转载有任何疑问请告之我们,以便我们及时纠正。联系方式:editor@e-works.net.cn tel:027-87592219/20/21。