Skip to content

Commit

Permalink
convert mqtt-cn docx to markdown, fix bad format
Browse files Browse the repository at this point in the history
  • Loading branch information
mcxiaoke committed Feb 3, 2016
1 parent 7668681 commit cb54a61
Show file tree
Hide file tree
Showing 24 changed files with 2,602 additions and 0 deletions.
12 changes: 12 additions & 0 deletions mqtt/00-Contents.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
# 目录

- [前言](00-Preface.md)
- [目录](00-Contents.md)
- [第一章 - 介绍](01-Introcution.md)
- [第二章 – MQTT控制报文格式](02-ControlPacketFormat.md)
- [第三章 – MQTT控制报文](03-ControlPackets.md)
- [第四章 – 操作行为](04-OperationalBehavior.md)
- [第五章 – 安全](05-Security.md)
- [第六章 – 使用WebSocket](06-WebSocket.md)
- [第七章 – 一致性目标](07-Conformance.md)
- [附录B - 强制性规范声明](08-AppendixB.md)
113 changes: 113 additions & 0 deletions mqtt/00-Preface.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,113 @@
# MQTT协议3.1.1中文版

* [OASIS标准](https://www.oasis-open.org/committees/mqtt/) 2014年10月29日

## 规范链接

### 当前版本:

<http:https://docs.oasis-open.org/mqtt/mqtt/v3.1.1/os/mqtt-v3.1.1-os.doc> (Authoritative)

<http:https://docs.oasis-open.org/mqtt/mqtt/v3.1.1/os/mqtt-v3.1.1-os.html>

<http:https://docs.oasis-open.org/mqtt/mqtt/v3.1.1/os/mqtt-v3.1.1-os.pdf>

### 以前的版本:

<http:https://docs.oasis-open.org/mqtt/mqtt/v3.1.1/cos01/mqtt-v3.1.1-cos01.doc> (Authoritative)

<http:https://docs.oasis-open.org/mqtt/mqtt/v3.1.1/cos01/mqtt-v3.1.1-cos01.html>

<http:https://docs.oasis-open.org/mqtt/mqtt/v3.1.1/cos01/mqtt-v3.1.1-cos01.pdf>

### 最新版本:

<http:https://docs.oasis-open.org/mqtt/mqtt/v3.1.1/mqtt-v3.1.1.doc> (Authoritative)

<http:https://docs.oasis-open.org/mqtt/mqtt/v3.1.1/mqtt-v3.1.1.html>

<http:https://docs.oasis-open.org/mqtt/mqtt/v3.1.1/mqtt-v3.1.1.pdf>

### 技术委员会:

[结构化信息标准促进组织MQTT技术委员会](https://www.oasis-open.org/committees/mqtt/)

#### 主席:

拉斐尔·J·科恩 (<[email protected]>), 个人

理查德·J·科彭 (<[email protected]>), [IBM](http:https://www.ibm.com/)

#### 编辑:

安德鲁·班克斯 (<[email protected]>), [IBM](http:https://www.ibm.com/)

拉胡尔·吉普塔 (<[email protected]>), [IBM](http:https://www.ibm.com/)

### 相关文档:

#### 本规范与此有关:

- MQTT和NIST网络安全框架1.0版。 编辑是杰夫·布朗和路易·菲利普·拉穆勒。最新版本: <http:https://docs.oasis-open.org/mqtt/mqtt-nist-cybersecurity/v1.0/mqtt-nist-cybersecurity-v1.0.html>.

#### 摘要

MQTT是一个客户端服务端架构的发布/订阅模式的消息传输协议。它的设计思想是轻巧、开放、简单、规范,因此易于实现。这些特点使得它对很多场景来说都是很好的选择,包括受限的环境如机器与机器的通信(M2M)以及物联网环境(IoT),这些场景要求很小的代码封装或者网络带宽非常昂贵。

本协议运行在TCP/IP,或其它提供了有序、可靠、双向连接的网络连接上。它有以下特点:

- 使用发布/订阅消息模式,提供了一对多的消息分发和应用之间的解耦。
- 消息传输不需要知道负载内容。
- 提供三种等级的服务质量:.

- “最多一次”,尽操作环境所能提供的最大努力分发消息。消息可能会丢失。例如,这个等级可用于环境传感器数据,单次的数据丢失没关系,因为不久之后会再次发送。
- “至少一次”,保证消息可以到达,但是可能会重复。
- “仅一次”,保证消息只到达一次。例如,这个等级可用在一个计费系统中,这里如果消息重复或丢失会导致不正确的收费。
- 很小的传输消耗和协议数据交换,最大限度减少网络流量
- 异常连接断开发生时,能通知到相关各方。

### 状态

本文档最后由OASIS成员在上面标示的日期最终修订或批准。批准的级别也在上面列出了。如果要查看本文档最新的修订版请检查上面的 *最新版本* 位置。技术委员会产生的其它修订版和其它技术文档都列在这里:<https://www.oasis-open.org/committees/tc_home.php?wg_abbrev=mqtt#technical>

技术委员会成员对本规范的评论应该发送到技术委员会的邮件列表。其他人应该发送评论到技术委员会的公共评论列表,方法是点击技术委员会网站的 [发送评论](https://www.oasis-open.org/committees/comments/index.php?wg_abbrev=mqtt) 按钮,网页地址是 <https://www.oasis-open.org/committees/mqtt/>

关于实现本规范必不可少的任何专利是否已公开,以及其它的专利许可条款相关的信息,请参考技术委员会网站的知识产权部分((<https://www.oasis-open.org/committees/mqtt/ipr.php>)。

### 引用格式:

引用此规范时应该使用下面的引文格式:

**\[mqtt-v3.1.1\]**

*MQTT Version 3.1.1*. Edited by Andrew Banks and Rahul Gupta*.* 29 October 2014. OASIS Standard. <http:https://docs.oasis-open.org/mqtt/mqtt/v3.1.1/os/mqtt-v3.1.1-os.html>. Latest version: <http:https://docs.oasis-open.org/mqtt/mqtt/v3.1.1/mqtt-v3.1.1.html>.

### 文档链接

- [MQTT协议3.1.1中文翻译项目](https://github.com/mcxiaoke/mqtt)

- [MQTT协议3.1.1中文版PDF](https://github.com/mcxiaoke/mqtt/blob/master/protocol/MQTT-3.1.1-CN.pdf)

### 修订记录

| **版 本** | **日 期** | **发布说明** |
|-----------|------------|------------------------------------------|
| 1.0.0 | 2015-07-30 | 翻译全部文本,完成初步审校,公开发布第一版 |
| 1.0.1 | 2015-10-22 | 修订几处笔误,增补几处未翻译的文本 |

### 关于译者

- [GitHub](https://github.com/mcxiaoke)
- [Blog](http:https://blog.mcxiaoke.com/)
- [Email](mailto:[email protected])

## 目录

- [第一章 - 介绍](01-Introcution.md)
- [第二章 – MQTT控制报文格式](02-ControlPacketFormat.md)
- [第三章 – MQTT控制报文](03-ControlPackets.md)
- [第四章 – 操作行为](04-OperationalBehavior.md)
- [第五章 – 安全](05-Security.md)
- [第六章 – 使用WebSocket](06-WebSocket.md)
- [第七章 – 一致性目标](07-Conformance.md)
- [附录B - 强制性规范声明](08-AppendixB.md)
135 changes: 135 additions & 0 deletions mqtt/01-Introduction.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,135 @@
# 第一章 概述

## 1.1 MQTT协议的组织结构

本规范分为七个章节:

- [第一章 - 介绍](01-Introcution.md)
- [第二章 – MQTT控制报文格式](02-ControlPacketFormat.md)
- [第三章 – MQTT控制报文](03-ControlPackets.md)
- [第四章 – 操作行为](04-OperationalBehavior.md)
- [第五章 – 安全](05-Security.md)
- [第六章 – 使用WebSocket](06-WebSocket.md)
- [第七章 – 一致性目标](07-Conformance.md)
- [附录B - 强制性规范声明](08-AppendixB.md)

## 1.2 术语
本规范中用到的关键字 **必须** MUST,**不能** MUST NOT,**要求** REQUIRED,**将会** SHALL,**不会** SHALL NOT,**应该** SHOULD,**不应该** SHOULD NOT,**推荐** RECOMMENDED,**可以** MAY,**可选** OPTIONAL 都是按照 IETF RFC 2119 [\[RFC2119\]](#anchor-RFC2119) 中的描述解释。

**网络连接(Network Connection):**

MQTT使用的底层传输协议基础设施。

- 客户端使用它连接服务端。

- 它提供有序的、可靠的、双向字节流传输。

例子见4.2节。

**应用消息(Application Message):**
MQTT协议通过网络传输应用数据。应用消息通过MQTT传输时,它们有关联的服务质量(QoS)和主题(Topic)。

**客户端(Client):**

使用MQTT的程序或设备。客户端总是通过网络连接到服务端。它可以

- 发布应用消息给其它相关的客户端。.

- 订阅以请求接受相关的应用消息

- 取消订阅以移除接受应用消息的请求。

- 从服务端断开连接。

**服务端(Server):**
一个程序或设备,作为发送消息的客户端和请求订阅的客户端之间的中介。服务端

- 接受来自客户端的网络连接

- 接受客户端发布的应用消息

- 处理客户端的订阅和取消订阅请求。

- 转发应用消息给符合条件的客户端订阅。

**订阅(Subscription):**
订阅包含一个主题过滤器(Topic Filter)和一个最大的服务质量(QoS)等级。订阅与单个会话(Session)关联。会话可以包含多于一个的订阅。会话的每个订阅都有一个不同的主题过滤器。

**主题名(Topic Name):**
**附加在应用消息上的一个标签,服务端已知且与订阅匹配。服务端发送应用消息的一个副本给每一个匹配的客户端订阅。

**主题过滤器(Topic Filter:):**
订阅中包含的一个表达式,用于表示相关的一个或多个主题。主题过滤器可以使用通配符。

**会话(Session):**
**客户端和服务端之间的状态交互。一些会话持续时长与网络连接一样,另一些可以在客户端和服务端的多个连续网络连接间扩展。

**控制报文(MQTT Control Packet):**
通过网络连接发送的信息数据包。MQTT规范定义了十四种不同类型的控制报文,其中一个(PUBLISH报文)用于传输应用消息。

## 1.5 数据表示

### 1.5.1 二进制位

字节中的位从0到7。第7位是最高有效位,第0位是最低有效位。

### 1.5.2 整数数值

整数数值是16位,使用大端序(big-endian,高位字节在低位字节前面)。这意味着一个16位的字在网络上表示为最高有效字节(MSB),后面跟着最低有效字节(LSB)。

### 1.5.3 UTF-8编码字符串

后面会描述的控制报文中的文本字段编码为UTF-8格式的字符串。UTF-8 \[[RFC3629](#RFC3629)\] 是一个高效的Unicode字符编码格式,为了支持基于文本的通信,它对ASCII字符的编码做了优化。

每一个字符串都有一个两字节的长度字段作为前缀,它给出这个字符串UTF-8编码的字节数,它们在[图例 1.1 UTF-8编码字符串的结构](#_Figure_1.1_Structure) 中描述。因此可以传送的UTF-8编码的字符串大小有一个限制,不能超过 65535字节。

除非另有说明,所有的UTF-8编码字符串的长度都必须在0到65535字节这个范围内。

##### 图例 1.1 UTF-8编码字符串的结构

| **二进制位** | 7-0 |
|--------------|----------------------------|
| byte 1 | 字符串长度的最高有效字节(MSB) |
| byte 2 | 字符串长度的最低有效字节(LSB) |
| byte 3 …. | 如果长度大于0,这里是UTF-8编码的字符数据。 |

UTF-8编码字符串中的字符数据**必须**是按照Unicode规范 \[[Unicode](#Unicode)\] 定义的和在RFC3629 \[[RFC3629](#RFC3629)\] 中重申的有效的UTF-8格式。特别需要指出的是,这些数据**不能**包含字符码在U+D800和U+DFFF之间的数据。如果服务端或客户端收到了一个包含无效UTF-8字符的控制报文,它**必须**关闭网络连接  \[MQTT-1.5.3-1\]

UTF-8编码的字符串**不能**包含空字符U+0000。如果客户端或服务端收到了一个包含U+0000的控制报文,它**必须**关闭网络连接 \[MQTT-1.5.3-2\]

数据中**不应该**包含下面这些Unicode代码点的编码。如果一个接收者(服务端或客户端)收到了包含下列任意字符的控制报文,它**可以**关闭网络连接:

- U+0001和U+001F之间的控制字符
- U+007F和U+009F之间的控制字符
- Unicode规范定义的非字符代码点(例如U+0FFFF)
- Unicode规范定义的保留字符(例如U+0FFFF)

UTF-8编码序列0XEF 0xBB 0xBF总是被解释为U+FEFF(零宽度非换行空白字符),无论它出现在字符串的什么位置,报文接收者都不能跳过或者剥离它  \[MQTT-1.5.3-3\]

#### 非规范示例

> 例如,字符串 A𪛔 是一个拉丁字母A后面跟着一个代码点U+2A6D4(它表示一个中日韩统一表意文字扩展B中的字符),这个字符串编码如下:
##### 图例 1.2 UTF-8编码字符串非规范示例

| **Bit** | **7** | **6** | **5** | **4** | **3** | **2** | **1** | **0** |
|---------|-----------------------|-------|-------|-------|-------|-------|-------|-------|
| byte 1 | 字符串长度 MSB (0x00) |
| | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| byte 2 | 字符串长度 LSB (0x05) |
| | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 1 |
| byte 3 | ‘A’ (0x41) |
| | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 1 |
| byte 4 | (0xF0) |
| | 1 | 1 | 1 | 1 | 0 | 0 | 0 | 0 |
| byte 5 | (0xAA) |
| | 1 | 0 | 1 | 0 | 1 | 0 | 1 | 0 |
| byte 6 | (0x9B) |
| | 1 | 0 | 0 | 1 | 1 | 0 | 1 | 1 |
| byte 7 | (0x94) |
| | 1 | 0 | 0 | 1 | 0 | 1 | 0 | 0 |

### 1.6 编辑约定

本规范用黄色高亮的文本标识一致性声明,每个一致性声明都分配了一个这种格式的引用:\[MQTT-x.x.x-y\]

0 comments on commit cb54a61

Please sign in to comment.