CONNACK

3.0 CONTENT – 目录

3.2 CONNACK - 确认连接请求 Acknowledge connection request

CONNACK报文是服务端发送以响应从客户端收到的CONNECT报文的报文。==从服务端发送到客户端的第一个报文必须CONNACK报文== [MQTT-3.2.0-1]

如果客户端在合理的时间内没有收到服务端的CONNACK报文,客户端应该关闭网络连接。“合理” 的时间取决于应用的类型和通信基础设施。

3.2.1 固定报头 Variable header

固定报头的格式如图例3.8–CONNACK报文固定报头所示。

图3.8-CONNACK报文固定报头

位 Bit76543210byte 1MQTT报文类型 (2) MQTT Control Packet Type (2)保留位 Reserved00100000byte 2...剩余长度 (2) Remaining Length (2)00000010

剩余长度字段

表示可变报头的长度。对于CONNACK报文来说,它等于2。

3.2.2 可变报头 Variable header

可变报头的格式如 图例 3.9 –CONNACK报文可变报头 所示。

图例3.9-CONNACK报文可变报头

描述Description76543210连接确认标志 Connect Acknowledge Flags保留位 ReservedSP1byte 10010000X连接返回码 Connect Return codebyte 2XXXXXXXX

3.2.2.1 连接确认标志 Connect Acknowledge Flags

第1个字节是“连接确认标志”,位7-1是保留位并必须设置为0。 第0 (SP1)位是会话存在位的标志。

3.2.2.2 会话存在 Session Present

位置:连接确认标志的第0位。

==如果服务端收到清理会话标志为1的连接,除了将CONNACK报文中的返回码设置为0之外,还必须CONNACK报文中的会话存在位设置为0== [MQTT-3.2.2-1]

==如果服务端收到清理会话位为0的连接,会话存在位的值就取决于服务端是否已经保存了客户端标识符所对应客户端的会话状态。如果服务端已经保存了会话状态,它必须CONNACK报文中的会话存在位设置为1== [MQTT-3.2.2-2]。==如果服务端保存会话状态,它必须CONNACK报文中的会话存在位设置为0,同时还需要将CONNACK报文中的返回码设置为0== [MQTT-3.2.2-3]

会话存在标志让服务端和客户端能够就是否已经存储了会话状态达成共识。

一旦会话的初始化设置完成,已经保存会话状态的客户端将期望服务端维持其存储的会话状态。如果客户端从服务端收到的会话存在的值与预期不符,则客户端可以选择继续这个会话或者断开连接。通过先断开连接,再将清理会话位设置为1进行连接,然后再断开连接的方式,客户端可以丢弃客户端和服务端上的会话状态。

==如果服务端发送了一个包含非零返回码的CONNACK报文,它必须将会话存在标志设置为0== [MQTT-3.2.2-4]

3.2.2.3 连接返回码 Connect Return code

位置:可变报头的第2个字节。

连接返回码字段使用单字节无符号值,其值在 表格 3.1 –连接返回码的值 中列出。如果服务端收到一个合法的CONNECT报文,但服务端出于某些原因无法处理它,则服务端应该尝试从表中挑选一个合适的非零返回码来组成CONNACK报文发送。==如果服务端发送了一个包含非零返回码的CONNACK报文,那么它必须关闭网络连接== [MQTT-3.2.2-5].。

表3.1-连接返回码的值

值 Value

返回代码响应 Return Code Response

描述 Description

0

0x00 接受连接 0x00 Connection Accepted

服务端接受连接请求 Connection accepted

1

0x01 拒绝连接,非法协议版本 0x01 Connection Refused, unacceptable protocol version

服务器不支持客户端请求的MQTT协议版本 The Server does not support the level of the MQTT protocol requested by the Client

2

0x02 拒绝连接,非法客户端标识符 0x02 Connection Refused, identifier rejected

客户端标识符是正确的UTF-8格式,但服务器不允许接入 The Client identifier is correct UTF-8 but not allowed by the Server

3

0x03 拒绝连接,服务器不可用 0x03 Connection Refused, Server unavailable

网络连接已完成但MQTT服务不可用 The Network Connection has been made but the MQTT service is unavailable

4

0x04 拒绝连接,用户名或密码不正确 0x04 Connection Refused, bad user name or password

用户名或密码中的数据格式不正确 The data in the user name or password is malformed

5

0x05 拒绝连接,未经授权 0x05 Connection Refused, not authorized

该客户端无权连接 The Client is not authorized to connect

6-255

将来使用的保留位 Reserved for future use

==如果表3.1-连接返回码的值中列出的返回代码值均不可用,则服务端必须关闭网络连接,并且不需要发送CONNACK报文== [MQTT-3.2.2-6]

3.2.3 有效负载 Payload

CONNACK报文中没有有效负载。

Last updated