diff --git a/.gitignore b/.gitignore index e69de29..65fc8d4 100644 --- a/.gitignore +++ b/.gitignore @@ -0,0 +1 @@ +wiki/ diff --git a/README.md b/README.md index 88846e8..657b20f 100644 --- a/README.md +++ b/README.md @@ -1,57 +1,58 @@ -# MQTT协议中文版 - -by [mcxiaoke](https://github.com/mcxiaoke) - -**最新版本: v1.0.3 2016.02.06** - -## 文档地址 - -- [MQTT协议中文版](https://mcxiaoke.gitbooks.io/mqtt-cn/content/) -- [PDF和ePub下载](https://www.gitbook.com/book/mcxiaoke/mqtt-cn/details) -- [中文翻译项目](https://github.com/mcxiaoke/mqtt) - -## 概述 - -MQTT是一个客户端服务端架构的发布/订阅模式的消息传输协议。它的设计思想是轻巧、开放、简单、规范,易于实现。这些特点使得它对很多场景来说都是很好的选择,特别是对于受限的环境如机器与机器的通信(M2M)以及物联网环境(IoT)。 - -## 说明 - ->MQTT英文原版协议提供了Word格式和HTML格式,我翻译的时候用的Word文档,之前一直提供的是Word文档转换的HTML和PDF共浏览和下载,最近花时间整理了Markdown版本,可以更方便的分章节在线浏览了,转换为Markdown后部分表格的格式不太对,会逐步用图片代替。 - -## 目录 - -**发现任何翻译问题或格式问题欢迎提PR帮忙完善。** - -- [说明](README.md) -- [前言](mqtt/00-Preface.md) -- [目录](mqtt/00-Contents.md) -- [第一章 - MQTT介绍](mqtt/01-Introduction.md) -- [第二章 – MQTT控制报文格式](mqtt/02-ControlPacketFormat.md) -- [第三章 – MQTT控制报文](mqtt/03-ControlPackets.md) - - [3.1 CONNECT – 连接服务端](mqtt/0301-CONNECT.md) - - [3.2 CONNACK – 确认连接请求](mqtt/0302-CONNACK.md) - - [3.3 PUBLISH – 发布消息](mqtt/0303-PUBLISH.md) - - [3.4 PUBACK –发布确认](mqtt/0304-PUBACK.md) - - [3.5 PUBREC – 发布收到(QoS 2,第一步)](mqtt/0305-PUBREC.md) - - [3.6 PUBREL – 发布释放(QoS 2,第二步)](mqtt/0306-PUBREL.md) - - [3.7 PUBCOMP – 发布完成(QoS 2,第三步)](mqtt/0307-PUBCOMP.md) - - [3.8 SUBSCRIBE - 订阅主题](mqtt/0308-SUBSCRIBE.md) - - [3.9 SUBACK – 订阅确认](mqtt/0309-SUBACK.md) - - [3.10 UNSUBSCRIBE –取消订阅](mqtt/0310-UNSUBSCRIBE.md) - - [3.11 UNSUBACK – 取消订阅确认](mqtt/0311-UNSUBACK.md) - - [3.12 PINGREQ – 心跳请求](mqtt/0312-PINGREQ.md) - - [3.13 PINGRESP – 心跳响应](mqtt/0313-PINGRESP.md) - - [3.14 DISCONNECT –断开连接](mqtt/0314-DISCONNECT.md) -- [第四章 – 操作行为](mqtt/04-OperationalBehavior.md) -- [第五章 – 安全](mqtt/05-Security.md) -- [第六章 – 使用WebSocket](mqtt/06-WebSocket.md) -- [第七章 – 一致性目标](mqtt/07-Conformance.md) +# MQTT协议中文版 + +by [mcxiaoke](https://github.com/mcxiaoke) + +**最新版本: v1.0.6 2021.07.07** + + + +## 文档地址 + +- [MQTT Monitor](https://github.com/mcxiaoke/mqtt-monitor/) +- [MQTT项目文档](https://blog.mcxiaoke.com/mqtt/) +- [GitBook阅读](https://mcxiaoke.gitbook.io/mqtt/) +- [Wiki文档地址](https://github.com/mcxiaoke/mqtt/wiki) +- [PDF和ePub下载](https://www.gitbook.com/book/mcxiaoke/mqtt-cn/details) +- [中文翻译项目](https://github.com/mcxiaoke/mqtt) + +## 概述 + +MQTT是一个客户端服务端架构的发布/订阅模式的消息传输协议。它的设计思想是轻巧、开放、简单、规范,易于实现。这些特点使得它对很多场景来说都是很好的选择,特别是对于受限的环境如机器与机器的通信(M2M)以及物联网环境(IoT)。 + +## 目录 + +**发现任何翻译问题或格式问题欢迎提PR帮忙完善。** + +- [说明](README.md) +- [前言](mqtt/00-Preface.md) +- [目录](mqtt/00-Contents.md) +- [第一章 - MQTT介绍](mqtt/01-Introduction.md) +- [第二章 – MQTT控制报文格式](mqtt/02-ControlPacketFormat.md) +- [第三章 – MQTT控制报文](mqtt/03-ControlPackets.md) + - [3.1 CONNECT – 连接服务端](mqtt/0301-CONNECT.md) + - [3.2 CONNACK – 确认连接请求](mqtt/0302-CONNACK.md) + - [3.3 PUBLISH – 发布消息](mqtt/0303-PUBLISH.md) + - [3.4 PUBACK –发布确认](mqtt/0304-PUBACK.md) + - [3.5 PUBREC – 发布收到(QoS 2,第一步)](mqtt/0305-PUBREC.md) + - [3.6 PUBREL – 发布释放(QoS 2,第二步)](mqtt/0306-PUBREL.md) + - [3.7 PUBCOMP – 发布完成(QoS 2,第三步)](mqtt/0307-PUBCOMP.md) + - [3.8 SUBSCRIBE - 订阅主题](mqtt/0308-SUBSCRIBE.md) + - [3.9 SUBACK – 订阅确认](mqtt/0309-SUBACK.md) + - [3.10 UNSUBSCRIBE –取消订阅](mqtt/0310-UNSUBSCRIBE.md) + - [3.11 UNSUBACK – 取消订阅确认](mqtt/0311-UNSUBACK.md) + - [3.12 PINGREQ – 心跳请求](mqtt/0312-PINGREQ.md) + - [3.13 PINGRESP – 心跳响应](mqtt/0313-PINGRESP.md) + - [3.14 DISCONNECT –断开连接](mqtt/0314-DISCONNECT.md) +- [第四章 – 操作行为](mqtt/04-OperationalBehavior.md) +- [第五章 – 安全](mqtt/05-Security.md) +- [第六章 – 使用WebSocket](mqtt/06-WebSocket.md) +- [第七章 – 一致性目标](mqtt/07-Conformance.md) - [附录B - 强制性规范声明](mqtt/08-AppendixB.md) ------- - -## 旧版文档 - +------ + +## 旧版文档 + >已过期,建议使用GitBook版本 >最新版本: v1.0.1 2015.10.22 @@ -60,35 +61,33 @@ MQTT是一个客户端服务端架构的发布/订阅模式的消息传输协议 中文版 HTML | [MQTT 3.1.1 中文版](http://mcxiaoke.github.io/mqtt/protocol/MQTT-3.1.1-CN.html) 中文版 PDF | [MQTT 3.1.1 中文版](http://mcxiaoke.github.io/mqtt/protocol/MQTT-3.1.1-CN.pdf) 英文版 HTML | [MQTT Version 3.1.1](http://docs.oasis-open.org/mqtt/mqtt/v3.1.1/mqtt-v3.1.1.html) -英文版 PDF | [MQTT Version 3.1.1](http://docs.oasis-open.org/mqtt/mqtt/v3.1.1/mqtt-v3.1.1.pdf) - - -## 许可协议 - -- [署名-非商业性使用-相同方式共享 4.0 国际](https://creativecommons.org/licenses/by-nc-sa/4.0/legalcode) - ------- - -## 联系方式 - -* Blog: -* Github: -* Email: [github@mcxiaoke.com](mailto:github#mcxiaoke.com) - -## 开源项目 - -* Rx文档中文翻译: -* MQTT协议中文版: -* Awesome-Kotlin: -* Kotlin-Koi: -* Next公共组件库: -* PackerNg极速打包: -* Gradle渠道打包: -* EventBus实现xBus: -* 蘑菇饭App: -* 饭否客户端: -* Volley镜像: - ------- - - +英文版 PDF | [MQTT Version 3.1.1](http://docs.oasis-open.org/mqtt/mqtt/v3.1.1/mqtt-v3.1.1.pdf) + + +## 许可协议 + +- [署名-非商业性使用-相同方式共享 4.0 国际](https://creativecommons.org/licenses/by-nc-sa/4.0/legalcode) + +------ + +## 联系方式 + +* Blog: +* Github: +* Email: [github@mcxiaoke.com](mailto:github#mcxiaoke.com) + +## 开源项目 + +* MQTT WebClient: +* Rx文档中文翻译: +* MQTT协议中文版: +* Awesome-Kotlin: +* Kotlin-Koi: +* Next公共组件库: +* PackerNg极速打包: +* Gradle渠道打包: +* EventBus实现xBus: + +------ + + diff --git a/_config.yml b/_config.yml new file mode 100644 index 0000000..c741881 --- /dev/null +++ b/_config.yml @@ -0,0 +1 @@ +theme: jekyll-theme-slate \ No newline at end of file diff --git a/index.html b/index.html index d074548..da5723a 100644 --- a/index.html +++ b/index.html @@ -1,26 +1,466 @@ - - + + - - - - -MQTT协议3.1.1中文版 + + + - + +

MQTT协议中文版

+ +

by mcxiaoke

+ +

最新版本: v1.0.5 2019.10.30

+ +

文档地址

+ + + +

概述

+ +

MQTT是一个客户端服务端架构的发布/订阅模式的消息传输协议。它的设计思想是轻巧、开放、简单、规范,易于实现。这些特点使得它对很多场景来说都是很好的选择,特别是对于受限的环境如机器与机器的通信(M2M)以及物联网环境(IoT)。

+ +

说明

+ +
+

MQTT英文原版协议提供了Word格式和HTML格式,我翻译的时候用的Word文档,之前一直提供的是Word文档转换的HTML和PDF供浏览和下载,最近花时间整理了Markdown版本,可以更方便的分章节在线浏览了,转换为Markdown后部分表格的格式不太对,会逐步用图片代替。

+
+ +

目录

+ +

发现任何翻译问题或格式问题欢迎提PR帮忙完善。

+ + + +
+ +

旧版文档

+ +
+

已过期,建议使用GitBook版本 +最新版本: v1.0.1 2015.10.22

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
文档连接
中文版 HTMLMQTT 3.1.1 中文版
中文版 PDFMQTT 3.1.1 中文版
英文版 HTMLMQTT Version 3.1.1
英文版 PDFMQTT Version 3.1.1
+ +

许可协议

+ + + +
+ +

联系方式

+ + + +

开源项目

+ + + +
+ + + + - \ No newline at end of file + + diff --git a/mqtt/02-ControlPacketFormat.md b/mqtt/02-ControlPacketFormat.md index 8ca8071..30d135d 100644 --- a/mqtt/02-ControlPacketFormat.md +++ b/mqtt/02-ControlPacketFormat.md @@ -19,10 +19,20 @@ MQTT控制报文由三部分组成,按照 [图例 2.1 –MQTT控制报文的 ##### 图例 2.1 –MQTT控制报文的结构 -| Fixed header | 固定报头,所有控制报文都包含 | -|-----------------|---------------------------| -| Variable header | 可变报头,部分控制报文包含 | -| Payload | 有效载荷,部分控制报文包含 | + +   +     + + + + + + + + + + +
Fixed header固定报头,所有控制报文都包含
Variable header可变报头,部分控制报文包含
Payload有效载荷,部分控制报文包含
## 2.2 固定报头 Fixed header @@ -30,10 +40,28 @@ MQTT控制报文由三部分组成,按照 [图例 2.1 –MQTT控制报文的 ##### 图例 2.2 -固定报头的格式 -| **Bit** | **7** - **0** | -|---------|-------| -| byte 1 | MQTT控制报文的类型 | 用于指定控制报文类型的标志位 | -| byte 2… | 剩余长度 | + +   +     + + + + + + + + + + + + + + + + + + +
Bit76543210
byte 1MQTT控制报文的类型用于指定控制报文类型的标志位
byte 2...剩余长度
### 2.2.1 MQTT控制报文的类型 MQTT Control Packet type @@ -139,6 +167,7 @@ PUBLISH控制报文中的DUP, QoS和RETAIN标志的描述见 3.3.1节。 endif 'output' encodedByte while ( X > 0 ) + ``` >MOD是模运算,DIV是整数除法,OR是位操作或(C语言中分别是%,/,|) @@ -152,11 +181,11 @@ while ( X > 0 ) multiplier = 1 value = 0 do - encodedByte = 'next byte from stream' - value += (encodedByte AND 127) * multiplier - multiplier *= 128 - if (multiplier > 128*128*128) - throw Error(Malformed Remaining Length) + encodedByte = 'next byte from stream' + value += (encodedByte AND 127) * multiplier + if (multiplier > 128*128*128) + throw Error(Malformed Remaining Length) + multiplier *= 128 while ((encodedByte AND 128) != 0) ``` @@ -177,7 +206,7 @@ while ((encodedByte AND 128) != 0) | byte 1 | 报文标识符 MSB | | byte 2 | 报文标识符 LSB | -很多控制报文的可变报头部分包含一个两字节的报文标识符字段。这些报文是PUBLISH(QoS > 0时), PUBACK,PUBREC,PUBREL,PUBCOMP,SUBSCRIBE, SUBACK,UNSUBSCIBE,UNSUBACK。 +很多控制报文的可变报头部分包含一个两字节的报文标识符字段。这些报文是PUBLISH(QoS > 0时), PUBACK,PUBREC,PUBREL,PUBCOMP,SUBSCRIBE, SUBACK,UNSUBSCRIBE,UNSUBACK。 SUBSCRIBE,UNSUBSCRIBE和PUBLISH(QoS大于0)控制报文**必须**包含一个非零的16位报文标识符(Packet Identifier)\[MQTT-2.3.1-1\]。客户端每次发送一个新的这些类型的报文时都**必须**分配一个当前未使用的报文标识符 \[MQTT-2.3.1-2\]。如果一个客户端要重发这个特殊的控制报文,在随后重发那个报文时,它**必须**使用相同的标识符。当客户端处理完这个报文对应的确认后,这个报文标识符就释放可重用。QoS 1的PUBLISH对应的是PUBACK,QoS 2的PUBLISH对应的是PUBCOMP,与SUBSCRIBE或UNSUBSCRIBE对应的分别是SUBACK或UNSUBACK \[MQTT-2.3.1-3\]。发送一个QoS 0的PUBLISH报文时,相同的条件也适用于服务端 \[MQTT-2.3.1-4\]。 diff --git a/mqtt/0301-CONNECT.md b/mqtt/0301-CONNECT.md index 81c6af3..0257542 100644 --- a/mqtt/0301-CONNECT.md +++ b/mqtt/0301-CONNECT.md @@ -10,11 +10,39 @@ ##### 图例 3.1 –CONNECT报文的固定报头 -| **Bit** | **7** | **6** | **5** | **4** | **3** | **2** | **1** | **0** | -|---------|------------------|-----------------|-------|-------|-------|-------|-------|-------| -| byte 1 | MQTT报文类型 (1)[7-4] | Reserved 保留位 | -| | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | -| byte 2… | 剩余长度值 | + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Bit76543210
byte 1MQTT报文类型 (1)Reserved 保留位
00010000
byte 2...剩余长度
**剩余长度字段** @@ -254,7 +282,7 @@ CONNECT报文的有效载荷(payload)包含一个或多个以长度为前缀 ##### 图例 3.7 - 密码字节 | **Bit** | **7** - **0** | -|-----------|---------------------|- +|-----------|---------------------| | byte 1 | 数据长度 MSB | | byte 2 | 数据长度 LSB | | byte 3 …. | 如果长度大于0,这里就是数据部分 | diff --git a/mqtt/0302-CONNACK.md b/mqtt/0302-CONNACK.md index 109d8bd..7e60695 100644 --- a/mqtt/0302-CONNACK.md +++ b/mqtt/0302-CONNACK.md @@ -11,12 +11,50 @@ ##### 图例 3.8 – CONNACK 报文固定报头 -| **Bit** | **7** | **6** | **5** | **4** | **3** | **2** | **1** | **0** | -|---------|----------------------|-----------------|-------|-------|-------|-------|-------|-------| -| byte 1 | MQTT控制报文类型 (2)(7-4) | Reserved 保留位 | -| | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | -| byte 2 | 剩余长度 (2) | -| | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Bit76543210
byte 1MQTT报文类型 (2)Reserved 保留位
00100000
byte 2...剩余长度 (2)
00000010
**剩余长度字段** @@ -28,12 +66,52 @@ ##### 图例 3.9 –CONNACK报文可变报头 -| | **描述** | **7** | **6** | **5** | **4** | **3** | **2** | **1** | **0** | -|--------------|-----------------|----------------|-------|-------|-------|-------|-------|-------|-------| -| 连接确认标志 | Reserved 保留位 | SP1 | -| byte 1 | | 0 | 0 | 0 | 0 | 0 | 0 | 0 | X | -| 连接返回码 | -| byte 2 | | X | X | X | X | X | X | X | X | + + + +       + + + + + + + + + + + + + + + +       + + + + + + + + + + + +       + + + + + + + + + + + + + +
描述76543210
连接确认标志Reserved 保留位SP1
byte 10000000X
连接返回码
byte 2XXXXXXXX
#### 连接确认标志 Connect Acknowledge Flags diff --git a/mqtt/0303-PUBLISH.md b/mqtt/0303-PUBLISH.md index 0af865f..f6efebd 100644 --- a/mqtt/0303-PUBLISH.md +++ b/mqtt/0303-PUBLISH.md @@ -8,11 +8,42 @@ PUBLISH控制报文是指从客户端向服务端或者服务端向客户端传 ##### 图例 3.10 – PUBLISH报文固定报头 -| **Bit** | **7** | **6** | **5** | **4** | **3** | **2** | **1** | **0** | -|---------|----------------------|-------|---------|--------|-------|-------|-------|-------| -| byte 1 | MQTT控制报文类型 (3) | DUP | QoS等级 | RETAIN | -| | 0 | 0 | 1 | 1 | X | X | X | X | -| byte 2 | 剩余长度 | + + + + + + + + + + + + + + + + + + + + + + + + + + +       + + + + + + + + +
Bit76543210
byte 1 MQTT控制报文类型 (3)DUPQoS-HQoS-RETAIN
0011XXXX
byte 2...剩余长度
#### 重发标志 DUP diff --git a/mqtt/0304-PUBACK.md b/mqtt/0304-PUBACK.md index 47f9d57..8d41dc1 100644 --- a/mqtt/0304-PUBACK.md +++ b/mqtt/0304-PUBACK.md @@ -6,12 +6,50 @@ PUBACK报文是对QoS 1等级的PUBLISH报文的响应。 ##### 图例 3.12 - PUBACK报文固定报头 -| **Bit** | **7** | **6** | **5** | **4** | **3** | **2** | **1** | **0** | -|---------|----------------------|--------|-------|-------|-------|-------|-------|-------| -| byte 1 | MQTT控制报文类型 (4) | 保留位 | -| | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | -| byte 2 | 剩余长度(2) | -| | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Bit76543210
byte 1MQTT报文类型 (4)保留位
01000000
byte 2...剩余长度
00000010
**剩余长度字段** @@ -23,10 +61,27 @@ PUBACK报文是对QoS 1等级的PUBLISH报文的响应。 ##### 图例 3.13 – PUBACK报文可变报头 -| **Bit** | **7** | **6** | **5** | **4** | **3** | **2** | **1** | **0** | -|---------|----------------|-------|-------|-------|-------|-------|-------|-------| -| byte 1 | 报文标识符 MSB | -| byte 2 | 报文标识符 LSB | + + + + + + + + + + + + + + + + + + + + +
Bit76543210
byte 1报文标识符 MSB
byte 2报文标识符 LSB
### 3.4.3 有效载荷 diff --git a/mqtt/0305-PUBREC.md b/mqtt/0305-PUBREC.md index 2913ff3..b6d6bdc 100644 --- a/mqtt/0305-PUBREC.md +++ b/mqtt/0305-PUBREC.md @@ -6,12 +6,50 @@ PUBREC报文是对QoS等级2的PUBLISH报文的响应。它是QoS 2等级协议 ##### 图例 3.14 – PUBREC报文固定报头 -| **Bit** | **7** | **6** | **5** | **4** | **3** | **2** | **1** | **0** | -|---------|-----------------------|--------|-------|-------|-------|-------|-------|-------| -| byte 1 | MQTT控制报文类型e (5) | 保留位 | -| | 0 | 1 | 0 | 1 | 0 | 0 | 0 | 0 | -| byte 2 | 剩余长度 (2) | -| | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Bit76543210
byte 1MQTT控制报文类型 (5)保留位
01010000
byte 2剩余长度 (2)
00000010
**剩余长度字段** @@ -23,10 +61,27 @@ PUBREC报文是对QoS等级2的PUBLISH报文的响应。它是QoS 2等级协议 ##### 图例 3.15 – PUBREC报文可变报头 -| **Bit** | **7** | **6** | | **5** | **4** | **3** | **2** | **1** | **0** | -|---------|-------|----------------|-----|-------|-------|-------|-------|-------|-------| -| byte 1 | | 报文标识符 MSB | -| byte 2 | | 报文标识符 LSB | + + + + + + + + + + + + + + + + + + + + +
Bit76543210
byte 1报文标识符 MSB
byte 2报文标识符 LSB
### 3.5.3 有效载荷 diff --git a/mqtt/0306-PUBREL.md b/mqtt/0306-PUBREL.md index 06910d6..d543cc3 100644 --- a/mqtt/0306-PUBREL.md +++ b/mqtt/0306-PUBREL.md @@ -6,12 +6,50 @@ PUBREL报文是对PUBREC报文的响应。它是QoS 2等级协议交换的第三 ##### 图例 3.16 – PUBREL报文固定报头 -| **Bit** | **7** | **6** | **5** | **4** | **3** | **2** | **1** | **0** | -|---------|----------------------|--------|-------|-------|-------|-------|-------|-------| -| byte 1 | MQTT控制报文类型 (6) | 保留位 | -| | 0 | 1 | 1 | 0 | 0 | 0 | 1 | 0 | -| byte 2 | 剩余长度 (2) | -| | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Bit76543210
byte 1MQTT控制报文类型 (6)保留位
11000010
byte 2剩余长度 (2)
00000010
PUBREL控制报文固定报头的第3,2,1,0位是保留位,**必须**被设置为0,0,1,0。服务端**必须**将其它的任何值都当做是不合法的并关闭网络连接 \[MQTT-3.6.1-1\]。 @@ -25,10 +63,27 @@ PUBREL控制报文固定报头的第3,2,1,0位是保留位,**必须**被设置 ##### 图例 3.17 – PUBREL报文可变报头 -| **Bit** | **7** | **6** | **5** | **4** | **3** | **2** | **1** | **0** | -|---------|----------------|-------|-------|-------|-------|-------|-------|-------| -| byte 1 | 报文标识符 MSB | -| byte 2 | 报文标识符 LSB | + + + + + + + + + + + + + + + + + + + + +
Bit76543210
byte 1报文标识符 MSB
byte 2报文标识符 LSB
### 3.6.3 有效载荷 diff --git a/mqtt/0307-PUBCOMP.md b/mqtt/0307-PUBCOMP.md index f58b410..4272cee 100644 --- a/mqtt/0307-PUBCOMP.md +++ b/mqtt/0307-PUBCOMP.md @@ -6,12 +6,50 @@ PUBCOMP报文是对PUBREL报文的响应。它是QoS 2等级协议交换的第 ##### 图例 3.18 – PUBCOMP报文固定报头 -| **Bit** | **7** | **6** | **5** | **4** | **3** | **2** | **1** | **0** | -|---------|----------------------|--------|-------|-------|-------|-------|-------|-------| -| byte 1 | MQTT控制报文类型 (7) | 保留位 | -| | 0 | 1 | 1 | 1 | 0 | 0 | 0 | 0 | -| byte 2 | 剩余长度 (2) | -| | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Bit76543210
byte 1MQTT控制报文类型 (7)保留位
01110000
byte 2剩余长度 (2)
00000010
**剩余长度字段** @@ -23,10 +61,27 @@ PUBCOMP报文是对PUBREL报文的响应。它是QoS 2等级协议交换的第 ##### 图例 3.19 – PUBCOMP报文可变报头 -| **Bit** | **7** | **6** | **5** | **4** | **3** | **2** | **1** | **0** | -|---------|----------------|-------|-------|-------|-------|-------|-------|-------| -| byte 1 | 报文标识符 MSB | -| byte 2 | 报文标识符 LSB | + + + + + + + + + + + + + + + + + + + + +
Bit76543210
byte 1报文标识符 MSB
byte 2报文标识符 LSB
### 3.7.3 有效载荷 diff --git a/mqtt/0308-SUBSCRIBE.md b/mqtt/0308-SUBSCRIBE.md index 3810fca..1ece39d 100644 --- a/mqtt/0308-SUBSCRIBE.md +++ b/mqtt/0308-SUBSCRIBE.md @@ -5,12 +5,39 @@ ### 3.8.1 固定报头 ##### 图例 3.20 – SUBSCRIBE报文固定报头 - -| **Bit** | **7** | **6** | **5** | **4** | **3** | **2** | **1** | **0** | -|---------|----------------------|--------|-------|-------|-------|-------|-------|-------| -| byte 1 | MQTT控制报文类型 (8) | 保留位 | -| | 1 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | -| byte 2 | 剩余长度 | + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Bit76543210
byte 1MQTT控制报文类型 (8)保留位
10000010
byte 2剩余长度
SUBSCRIBE控制报固定报头的第3,2,1,0位是保留位,**必须**分别设置为0,0,1,0。服务端**必须**将其它的任何值都当做是不合法的并关闭网络连接 \[MQTT-3.8.1-1\]。 @@ -20,7 +47,7 @@ SUBSCRIBE控制报固定报头的第3,2,1,0位是保留位,**必须**分别设 ### 3.8.2可变报头 -可变报头包含客户端标识符。2.3.1提供了有关报文标识符的更多信息。 +可变报头包含报文标识符。2.3.1提供了有关报文标识符的更多信息。 #### 可变报头非规范示例 @@ -54,6 +81,54 @@ SUBSCRIBE报文的有效载荷**必须**包含至少一对主题过滤器 和 Qo | | 保留位 | 服务质量等级 | | byte N+1 | 0 | 0 | 0 | 0 | 0 | 0 | X | X | + + + + + + + + + + + + + + + + + + + + + + + + +     + + + + + + + + + + + + + + + + + + + + + +
描述76543210
主题过滤器
byte 1长度 MSB
byte 2长度 LSB
byte 3..N主题过滤器(Topic Filter)
服务质量要求(Requested QoS)
保留位服务质量等级
byte N+1000000XX
+ 当前版本的协议没有用到服务质量要求(Requested QoS)字节的高六位。如果有效载荷中的任何位是非零值,或者QoS不等于0,1或2,服务端**必须**认为SUBSCRIBE报文是不合法的并关闭网络连接 \[MQTT-3-8.3-4\]。 #### 有效载荷非规范示例 diff --git a/mqtt/0309-SUBACK.md b/mqtt/0309-SUBACK.md index 931201c..4d5486f 100644 --- a/mqtt/0309-SUBACK.md +++ b/mqtt/0309-SUBACK.md @@ -8,12 +8,40 @@ SUBACK报文包含一个返回码清单,它们指定了SUBSCRIBE请求的每 ##### 图例 3.24 – SUBACK报文固定报头 -| **Bit** | **7** | **6** | **5** | **4** | **3** | **2** | **1** | **0** | -|---------|----------------------|--------|-------|-------|-------|-------|-------|-------| -| byte 1 | MQTT控制报文类型 (9) | 保留位 | -| | 1 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | -| byte 2 | 剩余长度 | - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Bit76543210
byte 1MQTT控制报文类型 (9)保留位
10010000
byte 2剩余长度
+ **剩余长度字段** 等于可变报头的长度加上有效载荷的长度。 @@ -24,11 +52,28 @@ SUBACK报文包含一个返回码清单,它们指定了SUBSCRIBE请求的每 ##### 图例 3.25 – SUBACK报文可变报头 -| **Bit** | **7** | **6** | **5** | **4** | **3** | **2** | **1** | **0** | -|---------|----------------|-------|-------|-------|-------|-------|-------|-------| -| byte 1 | 报文标识符 MSB | -| byte 2 | 报文标识符 LSB | - + + + + + + + + + + + + + + + + + + + + +
Bit76543210
byte 1报文标识符 MSB
byte 2报文标识符 LSB
+ ### 3.9.3 有效载荷 有效载荷包含一个返回码清单。每个返回码对应等待确认的SUBSCRIBE报文中的一个主题过滤器。返回码的顺序**必须**和SUBSCRIBE报文中主题过滤器的顺序相同 \[MQTT-3.9.3-1\]。 @@ -37,11 +82,35 @@ SUBACK报文包含一个返回码清单,它们指定了SUBSCRIBE请求的每 ##### 图例 3.26 – SUBACK报文有效载荷格式 -| **Bit** | **7** | **6** | **5** | **4** | **3** | **2** | **1** | **0** | -|---------|--------|-------|-------|-------|-------|-------|-------|-------| -| | 返回码 | -| byte 1 | X | 0 | 0 | 0 | 0 | 0 | X | X | - + + + + + + + + + + + + + + + + + + +       + + + + + +       +       + +
Bit76543210
返回码
byte 1X00000XX
+ 允许的返回码值: - 0x00 - 最大QoS 0 diff --git a/mqtt/0310-UNSUBSCRIBE.md b/mqtt/0310-UNSUBSCRIBE.md index fd8f0dc..74eb7ba 100644 --- a/mqtt/0310-UNSUBSCRIBE.md +++ b/mqtt/0310-UNSUBSCRIBE.md @@ -6,11 +6,39 @@ ##### 图例 3.28 – UNSUBSCRIBE报文固定报头 -| **Bit** | **7** | **6** | **5** | **4** | **3** | **2** | **1** | **0** | -|---------|-----------------------|--------|-------|-------|-------|-------|-------|-------| -| byte 1 | MQTT控制报文类型 (10) | 保留位 | -| | 1 | 0 | 1 | 0 | 0 | 0 | 1 | 0 | -| byte 2 | 剩余长度 | + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Bit76543210
byte 1MQTT控制报文类型 (10)保留位
10100010
byte 2剩余长度
UNSUBSCRIBE报文固定报头的第3,2,1,0位是保留位且**必须**分别设置为0,0,1,0。服务端**必须**认为任何其它的值都是不合法的并关闭网络连接 \[MQTT-3.10.1-1\]。 @@ -24,10 +52,27 @@ UNSUBSCRIBE报文固定报头的第3,2,1,0位是保留位且**必须**分别设 ##### 图例 3.29 – UNSUBSCRIBE报文可变报头 -| **Bit** | **7** | **6** | **5** | **4** | **3** | **2** | **1** | **0** | -|---------|----------------|-------|-------|-------|-------|-------|-------|-------| -| byte 1 | 报文标识符 MSB | -| byte 2 | 报文标识符 LSB | + + + + + + + + + + + + + + + + + + + + +
Bit76543210
byte 1报文标识符 MSB
byte 2报文标识符 LSB
### 3.10.3 有效载荷 @@ -72,7 +117,7 @@ UNSUBSCRIBE报文提供的主题过滤器(无论是否包含通配符)**必 - 它**必须**完成分发任何已经开始往客户端发送的QoS 1和QoS 2的消息 \[MQTT-3.10.4-3\]。 - 它**可以**继续发送任何现存的准备分发给客户端的缓存消息。 -服务端**必须**发送UNSUBACK报文响应客户端的UNSUBSCRIBE请求。UNSUBACK报文**必须**包含和UNSUBSCRIBE报文相同的报文标识符 \[MQTT-3.10.4-4\]。即使没有删除任何主题订阅,服务端也**必须**发送一个SUBACK响应 \[MQTT-3.10.4-5\]。 +服务端**必须**发送UNSUBACK报文响应客户端的UNSUBSCRIBE请求。UNSUBACK报文**必须**包含和UNSUBSCRIBE报文相同的报文标识符 \[MQTT-3.10.4-4\]。即使没有删除任何主题订阅,服务端也**必须**发送一个UNSUBACK响应 \[MQTT-3.10.4-5\]。 如果服务端收到包含多个主题过滤器的UNSUBSCRIBE报文,它**必须**如同收到了一系列的多个UNSUBSCRIBE报文一样处理那个报文,除了将它们的响应合并到一个单独的UNSUBACK报文外。 \[MQTT-3.10.4-6\]。 diff --git a/mqtt/0311-UNSUBACK.md b/mqtt/0311-UNSUBACK.md index ed993d6..c2ce180 100644 --- a/mqtt/0311-UNSUBACK.md +++ b/mqtt/0311-UNSUBACK.md @@ -5,13 +5,50 @@ ### 3.11.1 固定报头 ##### 图例 3.31 – UNSUBACK报文固定报头 - -| **Bit** | **7** | **6** | **5** | **4** | **3** | **2** | **1** | **0** | -|---------|-----------------------|--------|-------|-------|-------|-------|-------|-------| -| byte 1 | MQTT控制报文类型 (11) | 保留位 | -| | 1 | 0 | 1 | 1 | 0 | 0 | 0 | 0 | -| byte 2 | 剩余长度 (2) | -| | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Bit76543210
byte 1MQTT控制报文类型 (11)保留位
10110000
byte 2剩余长度 (2)
00000010
**剩余长度字段** @@ -28,6 +65,28 @@ | byte 1 | 报文标识符 MSB | | byte 2 | 报文标识符 LSB | + + + + + + + + + + + + + + + + + + + + +
Bit76543210
byte 1报文标识符 MSB
byte 2报文标识符 LSB
+ ### 3.11.3 有效载荷 UNSUBACK报文没有有效载荷。 diff --git a/mqtt/0312-PINGREQ.md b/mqtt/0312-PINGREQ.md index d1f9556..5f73156 100644 --- a/mqtt/0312-PINGREQ.md +++ b/mqtt/0312-PINGREQ.md @@ -11,14 +11,51 @@ ### 3.12.1 固定报头 ##### 图例 3.33 – PINGREQ报文固定报头 - -| **Bit** | **7** | **6** | **5** | **4** | **3** | **2** | **1** | **0** | -|---------|-----------------------|--------|-------|-------|-------|-------|-------|-------| -| byte 1 | MQTT控制报文类型 (12) | 保留位 | -| | 1 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | -| byte 2 | 剩余长度 (0) | -| | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Bit76543210
byte 1MQTT控制报文类型 (12)保留位
11000000
byte 2剩余长度 (0)
00000000
+ ### 3.12.2 可变报头 PINGREQ报文没有可变报头。 diff --git a/mqtt/0313-PINGRESP.md b/mqtt/0313-PINGRESP.md index 4e07c9f..7e6c86d 100644 --- a/mqtt/0313-PINGRESP.md +++ b/mqtt/0313-PINGRESP.md @@ -8,12 +8,50 @@ ##### 图例 3.34 – PINGRESP报文固定报头 -| **Bit** | **7** | **6** | **5** | **4** | **3** | **2** | **1** | **0** | -|---------|-----------------------|--------|-------|-------|-------|-------|-------|-------| -| byte 1 | MQTT控制报文类型 (13) | 保留位 | -| | 1 | 1 | 0 | 1 | 0 | 0 | 0 | 0 | -| byte 2 | 剩余长度 (0) | -| | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Bit76543210
byte 1MQTT控制报文类型 (13)保留位
11010000
byte 2剩余长度 (0)
00000000
### 3.13.2 可变报头 diff --git a/mqtt/0314-DISCONNECT.md b/mqtt/0314-DISCONNECT.md index 4a74ce5..9e0532b 100644 --- a/mqtt/0314-DISCONNECT.md +++ b/mqtt/0314-DISCONNECT.md @@ -6,12 +6,50 @@ DISCONNECT报文是客户端发给服务端的最后一个控制报文。表示 ##### 图例 3.35 – DISCONNECT报文固定报头 -| **Bit** | **7** | **6** | **5** | **4** | **3** | **2** | **1** | **0** | -|---------|-----------------------|--------|-------|-------|-------|-------|-------|-------| -| byte 1 | MQTT控制报文类型 (14) | 保留位 | -| | 1 | 1 | 1 | 0 | 0 | 0 | 0 | 0 | -| byte 2 | 剩余长度 (0) | -| | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Bit76543210
byte 1MQTT控制报文类型 (14)保留位
11100000
byte 2剩余长度 (0)
00000000
服务端**必须**验证所有的保留位都被设置为0,如果它们不为0**必须**断开连接 \[MQTT-3.14.1-1\]。