MQTT V3.1协议规范


作者:

国际商业机器公司(IBM)

Eurotech

抽象


MQ遥测传输(MQTT)是一种基于轻量级代理的发布/订阅消息传递协议,旨在实现开放,简单,轻量和易于实现。这些特性使其非常适合在受限环境中使用,例如但不限于:


其中网络昂贵,具有低带宽或不可靠

当在具有有限处理器或内存资源的嵌入式设备上运行时

协议的特点包括:


发布/订阅消息模式,以提供一对多消息分发和解耦应用程序

与有效载荷的内容无关的消息传输

使用TCP / IP提供基本的网络连接

消息传递的三种服务质量:

“最多一次”,其中消息根据基础TCP / IP网络的最大努力传递。可能会发生消息丢失或复制。例如,该级别可以用于环境传感器数据,其中,如果单个读数丢失是没有关系的,因为下一个将在稍后公布。

“至少一次”,其中消息被确保到达,但可能发生重复。

“正好一次”,其中信息被确保准确到达一次。此级别可用于例如计费系统,其中重复或丢失的消息可能导致应用不正确的费用。

小的传输开销(固定长度报头只有2个字节),并且协议交换最小化以减少网络流量

使用最后遗嘱和遗嘱功能向客户通知异常断开连接的机制

版权声明


? 1999-2010 Eurotech,国际商业机器公司(IBM)。版权所有。


由Eurotech和国际商业机器公司(IBM)(统称为“作者”)授予在任何介质中复制和显示MQ Telemetry Transport规范(以下简称“规格”)的许可,无需任何费用或版税,以下是您对本规范或其中部分内容的所有副本:


作者网站之一的规范的链接或URL。

版权声明如规格中所示。

作者各自同意根据合理,无歧视的条款和条件为您实施本规范所需的各自专利授予免版税许可。规范是“按原样”提供的,作者不作任何明示或暗示的陈述或保证,包括但不限于适销性,特定用途适用性,非侵权或标题的保证;规格的内容适用于任何用途;或者,此类内容的实施不会侵犯任何第三方专利,版权,商标或其他权利。作者不对由于任何使用或分发规范而引起的任何直接,间接,特殊,偶发或继发性损害不承担任何责任。


作者的名称和商标不得以任何方式使用,包括与规范或其内容有关的广告或宣传,没有具体的,事先的书面许可。规范中的版权标题将始终与作者保持一致。


没有其他权利被暗示,禁止反言或其他。


目录


1.介绍

1.1。 变化

2.消息格式

2.1。 固定标题

2.2。 可变标题

2.3。 有效载荷

2.4。 消息标识符

2.5。 MQTT和UTF-8

3.命令消息

3.1。 连接

3.2。 CONNACK

3.3。 发布

3.4。 PUBACK

3.5。 PUBREC

3.6。 PUBREL

3.7。 PUBCOMP

3.8。 订阅

3.9。 SUBACK

3.10。 未订阅

3.11。 UNSUBACK

3.12。 PINGREQ

3.13。 PINGRESP

3.14。 断开

流动

4.1。 服务质量水平和流量

4.2。 消息传递重试

4.3。 消息排序

附录A


1.介绍


本规范分为三个主要部分:


所有分组类型共有的消息格式,

每个包类型的具体细节,

如何在客户端和服务器之间的数据包流。

有关如何使用主题通配符的信息在附录中提供。


1.1。变化


以下是MQTT V3和MQTT V3.1之间的更改:


现在可以使用CONNECT数据包发送用户名和密码

出于安全性问题,在CONNACK数据包上添加了新的返回码

澄清客户端未通知未授权的PUBLISH或SUBSCRIBE命令,并且正常MQTT流应该完成,即使尚未执行该命令。

MQTT中的字符串现在支持完整的UTF-8,而不仅仅是US-ASCII子集。

使用CONNECT数据包传递的协议版本号对此版本不变,保留为“3”。现有的MQTT V3服务器实现应该能够接受来自支持此修订版本的客户端的连接,只要它们正确地遵守“剩余长度”字段,因此忽略额外的安全信息。


2.消息格式


每个MQTT命令消息的消息头包含一个固定的头。 一些消息还需要可变标题和有效载荷。 消息头的每个部分的格式在以下部分中描述:


2.1。 固定标题


每个MQTT命令消息的消息头包含一个固定的头。 下表显示了固定报头格式。


bit76543210

byte 1Message TypeDUP flagQoS levelRETAIN

byte 2Remaining Length

Byte 1

包含消息类型和标志(DUP,QoS级别和RETAIN)字段。


Byte 2

(至少一个字节)包含剩余长度字段。


这些字段在以下部分中描述。所有数据值以大端顺序排列:高位字节在低位字节之前。 16位字作为最高有效字节(MSB)显示在线路上,后跟最低有效字节(LSB)。


消息类型


位置:字节1,位7-4。

表示为4位无符号值。此版本协议的枚举显示在下表中。


记忆        枚举            说明

保留        0               保留

CONNECT     1               客户端请求连接到服务器

CONNACK     2               连接确认

PUBLISH     3               发布消息

PUBACK      4               发布确认

PUBREC      5               发布已接收(保证交付第1部分)

PUBREL      6               发布发布(保证交付第2部分)

PUBCOMP     7               发布完成(保证交付第3部分)

SUBSCRIBE   8               客户端订阅请求

SUBACK      9               订阅确认

UNSUBSCRIBE 10             客户端取消订阅请求

UNSUBACK    11             取消订阅确认

PINGREQ     12             PING请求

PINGRESP    13             PING响应

DISCONNECT  14            客户端正在断开连接

保留        15            保留


Flags

字节1的剩余位包含字段DUP,QoS和RETAIN。位位置被编码以表示如下表所示的标志。


位        位置名称             描述

3           DUP                重复交货

2-1         QoS                服务质量

0          RETAIN             RETAIN标志


DUP

位置:字节1,位3。


当客户端或服务器尝试重新传递PUBLISH,PUBREL,SUBSCRIBE或UNSUBSCRIBE消息时,设置此标志。 这适用于QoS值大于零(0)的消息,并且需要确认。 当DUP位被置位时,可变标题包括消息ID。


接收方应该将该标志作为关于该消息先前是否已经被接收的提示。 它不应依赖于检测重复。


QoS

位置:字节1,位 2-1。


该标志指示用于传递PUBLISH消息的保证级别。 QoS级别如下表所示。


QoS值    位2    位1      描述

0         0     0        最多一次Fire and Forget <= 1

1         0     1        至少一次确认交付> = 1

2         1     0        正确一次Assured delivery = 1

3         1     1        保留



保留

位置:字节1,位0。


此标志仅用于发布消息。当客户端向服务器发送PUBLISH时,如果设置了保持标志(1),则服务器应该在已经将消息传递给当前订户之后保持该消息。


当在主题上建立新的订阅时,应该将关于该主题的最后保留的消息发送到设置了保留标志的订户。如果没有保留消息,则不发送任何内容


这在发布者以“异常报告”为基础发送消息时很有用,其中可能在消息之间有一段时间。这允许新订阅者立即接收具有保留的或最后已知好的值的数据。


当服务器作为在原始PUBLISH到达时已经存在的订阅的结果向客户端发送PUBLISH时,不应该设置保留标志,而不管原始发布的保留标志。这允许客户端区分正被接收的消息,因为它们被保留并且被接收“实况”。


保留的消息应该在服务器重新启动时保留。


如果服务器接收到具有零长度有效载荷和在同一主题上设置的保留标志的消息,则服务器可以删除保留的消息。


剩余长度


位置:字节2。


表示当前消息中剩余的字节数,包括变量标头和有效内容中的数据。


可变长度编码方案对长达127字节的消息使用单个字节。较长的消息处理如下。每个字节的七位对剩余长度数据进行编码,第八位表示表示中的任何后续字节。每个字节编码128个值和“连续位”。例如,64个十进制编码为单个字节,十进制值64,十六进制0x40。数字321十进制(= 65 + 2 * 128)被编码为两个字节,最低有效位。第一字节65 + 128 = 193.注意,顶部位被设置为指示至少一个后续字节。第二个字节为2。


协议将表示中的字节数限制为最多4个。这允许应用程序发送高达268 435 455(256 MB)的消息。这个数字在线上的表示是:0xFF,0xFF,0xFF,0x7F。


下表显示由增加的字节数表示的剩余长度值。


http://public.dhe.ibm.com/software/dw/webservices/ws-mqtt/mqtt-v3r1.html#msg-format


实在是不想去手动翻译了,于是找到下载了一个文档,居然是中文版的。去51CTO上查看下载吧