CONNACK
Last updated
Last updated
Acknowledge connection request
CONNACK
报文是服务端发送以响应从客户端收到的CONNECT
报文的报文。==从服务端发送到客户端的第一个报文必须
是CONNACK
报文== [MQTT-3.2.0-1]。
如果客户端在合理的时间内没有收到服务端的CONNACK
报文,客户端应该
关闭网络连接。“合理” 的时间取决于应用的类型和通信基础设施。
Variable header
固定报头的格式如所示。
位 Bit76543210byte 1MQTT报文类型 (2) MQTT Control Packet Type (2)保留位 Reserved00100000byte 2...剩余长度 (2) Remaining Length (2)00000010
剩余长度字段
表示可变报头的长度。对于CONNACK
报文来说,它等于2。
Variable header
可变报头的格式如 所示。
描述Description76543210连接确认标志 Connect Acknowledge Flags保留位 ReservedSP1byte 10010000X连接返回码 Connect Return codebyte 2XXXXXXXX
Connect Acknowledge Flags
第1个字节是“连接确认标志”,位7-1是保留位并必须
设置为0。 第0 (SP1)位是会话存在位的标志。
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]。
Connect Return code
位置:可变报头的第2个字节。
表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]。
Payload
CONNACK
报文中没有有效负载。
连接返回码字段使用单字节无符号值,其值在 中列出。如果服务端收到一个合法的CONNECT
报文,但服务端出于某些原因无法处理它,则服务端应该尝试从表中挑选一个合适的非零返回码来组成CONNACK
报文发送。==如果服务端发送了一个包含非零返回码的CONNACK
报文,那么它必须
关闭网络连接== [MQTT-3.2.2-5].。