MQTT 3 1protocol Specific中文版.pdf
文本预览下载声明
1.Abstract/概览(MQTT V3.1 )
MQ遥测传输(MQTT )是轻量级的、基于代理的发布/订阅消息传输协议,此协议的设计开放、简单、
轻量、易于实现。这些特点使得此协议非常适用于受限环境。例如,但不仅限于此:
网络代价昂贵,带宽低、不可靠。
在嵌入设备中运行,处理器和内存资源有限。
该协议的特点包括 :
使用发布/订阅消息模式,提供一对多的消息分发 ,解除了应用程序之间的耦合。
对负载内容屏蔽的消息传输。
使用TCP/IP提供基础的网络连接。
有三种消息传递服务质量:
“At most once” “至多一次” ,消息发布完全依赖于底层的TCP/IP网络 ,会发生消息丢失或重复。
这一级别可用于如下情况,如环境传感器数据,这种情况下,丢失一次读记录无所谓,因为第二个
数据的发布紧跟其后。
At lease once “至少一次” ,确保消息到达,但可能发生消息重复。
Exactly once “只有一次” ,确保消息只到达一次。这一级别可用于如下情况,如计费系统中,消
息重复或丢失会导致不正确的收费问题。
小型传输,开销很小(固定长度的头部是2字节),协议交换最小化,以降低网络流量。
提供一种机制,使得客户端异常中断时,能够使用 LastWill 和 Testament 特性通知有关各方。
2. Message format/消息格式
每个MQTT命令消息的消息头都包含一个固定的报头。有些消息需要一个可变的报头和一个payload。
下面将描述消息头的格式。
2.1. Fixed header/固定报头
每个MQTT命令消息的消息头都包含一个固定的报头。下表显示了固定的报头格式 :
Byte 1
包含Message Type (消息类型 )和Flags (DUP ,QoS级别,RETAIN )字段
Byte 2
(至少一个字节)包含Remaining Length (剩余长度)字段。
这些字段将会在以下各部分说明。所有数据值都是按照bigi-endian顺序 :高端字节跟在低端字节之前。
一个16位的字按照如下顺序:最高有效位(MSB )在前 ,最低有效位(LSB )在后。
2.1.1. Byte 1
. Message Type 消息类型
位置:byte 1 ,bits 7-4
表现为一个4-bit的无符号值,这个版本协议的枚举值如下表所示:
0-保留;
1-连接请求:客户端请求连接到服务器;
2-连接确认;
3-发布消息;
4-发布确认;
5-发布信息收到 (确保分发的第1部分);
6-发布信息分发 (确保分发的第2部分);
7-发布完成 (确保分发的第3部分);
8-客户端订阅请求;
9-订阅确认;
10-客户端取消订阅请求;
11-取消订阅确认;
12-ping请求;
13-ping响应 ;
14-客户端正在断开连接 ;
15-保留;
. FLAGS (DUP、QoS、Retain )
byte1剩余的bits包含如下的字段:DUP ,QoS及RETAIN ,bit位置如下表所示
DUP
位置:byte 1 ,bit 3
当client或者server试图重发 “PUBLISH”、 “PUBREL”、 “SUBSCRIBE”或 “UNSUBSCRIBE”
消息时,这个flag会被设置。这个flag适用于QoS值大于零(0 ),且需要确认的消息。当DUP位被设置时 ,
可变头部包含一个消息ID。
消息接收者应将这个Flag视作为一个提示,那就是这个消息此前可能已经被接收过。但是检测消息是
否重复时不应该依赖此flag。
QoS
位置:byte 1 ,bits 2-1 ;
此flag标明了发布消息的交付质量等级。QoS级别如下表所示:
RETAIN
位置:byte 1 ,bit 0
这个标识只会用于 “PUBLISH”消息。当客户端发布一个消息到服务器端时,如果Retain flag被设为
1 ,则服务器在将消息分发给当前的订阅者后应该保留这条消息 (类似state类型的发布)。
当一个新的订阅者订阅某一个主题,如果Retain flag被设置 ,则此主题最后保留的消息会被发送给此
订阅者。如果没有任何保留的消息,则不会发送。
这对于发布者基于“report by
显示全部