> For the complete documentation index, see [llms.txt](https://mcxiaoke.gitbook.io/mqtt/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://mcxiaoke.gitbook.io/mqtt/03-controlpackets/0309-suback.md).

# 3.9 SUBACK – 订阅确认

服务端发送SUBACK报文给客户端，用于确认它已收到并且正在处理SUBSCRIBE报文。

SUBACK报文包含一个返回码清单，它们指定了SUBSCRIBE请求的每个订阅被授予的最大QoS等级。

## 3.9.1 固定报头

#### 图例 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  | 剩余长度           |       |       |       |       |       |       |       |

**剩余长度字段**

等于可变报头的长度加上有效载荷的长度。

## 3.9.2 可变报头

可变报头包含等待确认的SUBSCRIBE报文的报文标识符。[图例 3.25 – SUBACK报文可变报头](https://mcxiaoke.gitbook.io/mqtt/03-controlpackets/pages/-LvE6CZLYZWSa337cw8q#_图例_3.25_–) 描述了可变报头的格式。

#### 图例 3.25 – SUBACK报文可变报头

| **Bit** | **7**     | **6** | **5** | **4** | **3** | **2** | **1** | **0** |
| ------- | --------- | ----- | ----- | ----- | ----- | ----- | ----- | ----- |
| byte 1  | 报文标识符 MSB |       |       |       |       |       |       |       |
| byte 2  | 报文标识符 LSB |       |       |       |       |       |       |       |

## 3.9.3 有效载荷

有效载荷包含一个返回码清单。每个返回码对应等待确认的SUBSCRIBE报文中的一个主题过滤器。返回码的顺序**必须**和SUBSCRIBE报文中主题过滤器的顺序相同 \[MQTT-3.9.3-1]。

[图例 3.26 – SUBACK报文有效载荷格式](https://mcxiaoke.gitbook.io/mqtt/03-controlpackets/pages/-LvE6CZLYZWSa337cw8q#_Figure_3.26_-) 描述了有效载荷中单字节编码的返回码字段。

#### 图例 3.26 – SUBACK报文有效载荷格式

| **Bit** | **7** | **6** | **5** | **4** | **3** | **2** | **1** | **0** |
| ------- | ----- | ----- | ----- | ----- | ----- | ----- | ----- | ----- |
|         | 返回码   |       |       |       |       |       |       |       |
| byte 1  | X     | 0     | 0     | 0     | 0     | 0     | X     | X     |

允许的返回码值：

* 0x00 - 最大QoS 0
* 0x01 - 成功 – 最大QoS 1
* 0x02 - 成功 – 最大 QoS 2
* 0x80 - Failure  失败

0x00, 0x01, 0x02, 0x80之外的SUBACK返回码是保留的，**不能**使用\[MQTT-3.9.3-2]。

### 有效载荷非规范示例

> [图例 3.27 -有效载荷字节格式非规范示例](https://mcxiaoke.gitbook.io/mqtt/03-controlpackets/pages/-LvE6CZLYZWSa337cw8q#_Figure_3.27_-) 展示了在 [表格 3.6 -有效载荷非规范示例](https://mcxiaoke.gitbook.io/mqtt/03-controlpackets/pages/-LvE6CZLYZWSa337cw8q#_Table_3.5_-) 简要描述的SUBACK报文的有效载荷。

#### 表格 3.6 -有效载荷非规范示例

| Success - Maximum QoS 0 | 0   |
| ----------------------- | --- |
| Success - Maximum QoS 2 | 2   |
| Failure                 | 128 |

#### 图例 3.27 -有效载荷字节格式非规范示例

|        | **描述**                  | **7** | **6** | **5** | **4** | **3** | **2** | **1** | **0** |
| ------ | ----------------------- | ----- | ----- | ----- | ----- | ----- | ----- | ----- | ----- |
| byte 1 | Success - Maximum QoS 0 | 0     | 0     | 0     | 0     | 0     | 0     | 0     | 0     |
| byte 2 | Success - Maximum QoS 2 | 0     | 0     | 0     | 0     | 0     | 0     | 1     | 0     |
| byte 3 | Failure                 | 1     | 0     | 0     | 0     | 0     | 0     | 0     | 0     |

## 第三章目录 MQTT控制报文

* [3.0 Contents – MQTT控制报文](/mqtt/03-controlpackets.md)
* [3.1 CONNECT – 连接服务端](/mqtt/03-controlpackets/0301-connect.md)
* [3.2 CONNACK – 确认连接请求](/mqtt/03-controlpackets/0302-connack.md)
* [3.3 PUBLISH – 发布消息](/mqtt/03-controlpackets/0303-publish.md)
* [3.4 PUBACK –发布确认](/mqtt/03-controlpackets/0304-puback.md)
* [3.5 PUBREC – 发布收到（QoS 2，第一步）](/mqtt/03-controlpackets/0305-pubrec.md)
* [3.6 PUBREL – 发布释放（QoS 2，第二步）](/mqtt/03-controlpackets/0306-pubrel.md)
* [3.7 PUBCOMP – 发布完成（QoS 2，第三步）](/mqtt/03-controlpackets/0307-pubcomp.md)
* [3.8 SUBSCRIBE - 订阅主题](/mqtt/03-controlpackets/0308-subscribe.md)
* [3.9 SUBACK – 订阅确认](/mqtt/03-controlpackets/0309-suback.md)
* [3.10 UNSUBSCRIBE –取消订阅](/mqtt/03-controlpackets/0310-unsubscribe.md)
* [3.11 UNSUBACK – 取消订阅确认](/mqtt/03-controlpackets/0311-unsuback.md)
* [3.12 PINGREQ – 心跳请求](/mqtt/03-controlpackets/0312-pingreq.md)
* [3.13 PINGRESP – 心跳响应](/mqtt/03-controlpackets/0313-pingresp.md)
* [3.14 DISCONNECT –断开连接](/mqtt/03-controlpackets/0314-disconnect.md)

## 项目主页

* [MQTT协议中文版](https://github.com/mcxiaoke/mqtt)
