MQTT V3.1 协议说明书(译)

原文地址: http://public.dhe.ibm.com/software/dw/webservices/ws-mqtt/mqtt-v3r1.html

概念

MQTT 是一个轻量级的基于代理的发布/订阅消息协议, 它被设计成开放,小巧,轻量级并容易实现. 这些特性让它更适用于一些受限环境,例如(并不局限与这些环境):
- 网络昂贵环境,低宽带或者不可靠环境
- 运行在嵌入式设备中受限于处理器和内存资源的情况

协议特性

  • 发布订阅消息模式提供了一对多消息分发,并将应用程序解耦
  • 消息传输内容负荷不可知性
  • 消息传递提供三种服务质量
    • ”最多一次”, 这样的消息发送依赖于TCP/IP最大程度的投递, 消息丢失和重复总会发生的。 这种模式可以适用于,例如:环境传感器,它不在乎单个数据读取丢失,至少他可以很快的在下次发布读取到新的一个.
  • “至少一次”, 消息保证送达,但会发生重复
  • “恰好一次”, 消息确保送达一次. 这种模式适用于财务系统,重复或者消息的丢失都将导致错误的费用发生.
  • 小的传输头部(固定长度的头部就仅占2个字节)和协议交互最小化减少了网络流量
  • 使用Last will 和Testament特性,可以将感兴趣的部分内容通知给异常断开的客户端

内容目录

1. 介绍

这篇概要说明分为三个主要章结
- 所有包类型通用消息格式
- 每种包类型的详细内容
- 如何在客户端和服务进行消息报通信

1.1 变更

下面介绍MQTT V3和MQTTV3.1的变化

  • 新版本中,用户名和密码可以被发送在一个”CONNECT” 包中
  • 针对安全问题增加了新的返回编码在”CONNACK”包中
  • 阐明客户端不会被通知无认证的PUSHLISH和SUBSCRIBE命令 和 正常MQTT流应该完成尽管这些命令尚未执行
  • 增加字符串UTF-8的支持,而不是只局限于US-ASCII子集

协议版本号通过”CONNECT”包传输, 在这个版本没有改变并且 remain区还是”3” . 现有MQTT V3服务器实现应该能够接受来自客户机的连接,支持这一修改,只要正确地尊重“Remaining Length”字段, 因此就会忽略额外的安全信息。

2. 协议格式

每一个MQTT命令消息都包含一个固定的消息头部. 有些消息也具有一个变长的头部和一个payload负载. 消息头部每个部分先描述如下章节:

2.1 固定长度头部

每一个MQTT命令消息都包含一个固定的消息头部. 下面表格展示固定消息头部格式.

image

Byte 1

包含 MessageType, DUP flag, Qos level, RETAIN四个区域

Byte 2

(至少一个字节)包含”Remaining Length”字段. 字段描述将放到下面章节.有数据值都是高位优先顺序.

Message Type

* 位置: * byte1, bits 7-4
一个4bit的无符号值. 协议版本枚举如下.

标记符枚举值描述
Reserved0预留
CONNECT1客户端请求连接server
CONNACK2连接确认
PUBLISH3发布消息
PUBACK4发布确认
PUBREC5发布接受
PUBREL6Publish 发布
PUBCOMP7Publish完成
SUBSCRIBE8客户端订阅请求
SUBACK9订阅确认
UNSUBSCRIBE10取消订阅
UNSUBACK11取消订阅响应
PINGREQ12ping请求
PINGRESP13ping响应
DISCONNECT14客户端断开连接
Reserved15预留
Flags

byte 1区还有DUP, Qos, RETAIN. 使用bit的位置来介绍flags,如下表格

Bit position Name Description
—|—|—
3 | UDP | 重复投递
2-1|Qos | 服务质量
0 |RETAIN| 预留标示

DUP

Position : byte 1, bit 3
当client或者服务器试图再次发送一个“PUBLISH” ,“PUBREL” “SUBSCRIBE”,“UNSUBSCRIBE”的消息时候DUP就会设值. 这适用于Qos值大于0的消息,并且确认是需要的情况. 当DUP被设置后,可变头部就包含一个Message ID.

消息接受者应该把这个标志作为一个提示,用于判断是否可能是先前收到的消息。而不应该依赖检测重复

Qos

* Position:* byte 1, bits 2-1
这个标志代表 投递一个“PUBLISH”消息的一个级别.

QoS valuebit 2bit 1Description
000最多一次 ; 投递一次就放弃 ; <=1
101至少一次; 需要确认投递 >=1
210恰好一次; 确认投递 ;=1
311预留
RETAIN

Position: byte 1, bit 0
//TODO

https://mcxiaoke.gitbooks.io/mqtt-cn/content/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值