CONNECT - xyfancy/qcloud-iot-sdk-embedded-c GitHub Wiki
CONNECT-Connection Request
CONNECT类型的MQTT控制包用于客户端向服务器请求连接。
- 客户端向服务器发送的一个包必须为CONNECT类型
- 一次网络连接中,如果服务器接受到第二个CONNECT类型的MQTT控制包,将会当做Protocol Error(协议错误)并关闭网络连接。
CONNECT类型MQTT控制包结构
CONNECT类型的MQTT控制包包括固定头部,可变头部和消息体。结构如图所示。
固定头部
0x01,0x00 + Remaining Length。
Value(Remaining Length) = Variable Byte Integer(NumOfByte(Variable Header)+NumOfByte(Payload))。
可变头部
Protocol Name + Protocol Version(ProTocol Level in v3.1.1) + Connect Flags + Keep Alive + Properties(Property length + Property)
- Protocol Name:0x00,0x00,0x4D,0x51,0x54,0x54。后4个字节是MQTT的UTF-8编码
- Protocol Version(ProTocol Level in v3.1.1):0x05(0x04 in v3.1.1)。
- Connect Flags: xxxxxxx0,最后一位为0,其余位从高到低依次如下:
- User Name Flag:1表示Payload中包括User Name字段,0表示不包含。
- Password Flag:1表示Payload中包括Password字段,0表示不包含。其中User Name Flag为0时,该项必为0。
- Will Retain:1表示服务器发布时把Will Message当做retained message,0表示当做non-retained message。其中Will Flag为0时,该项必为0。
- Will QoS:表明Will Message的服务质量,0x00-0x02。其中Will Flag为0时,该项必为0。
- Will Flag:1表示包含Will Message(Will Properties+Will Topic+Will Payload),0表示不包含Will Message。
- Clean Start(Clean Session in v3.1.1):1表示开启一次新的会话,0表示从已有会话中恢复。
- Keep Alive: Two Byte Integer,时间单位为秒,客户端与服务器信息沟通的最大时间间隔。
- Properties(v5.0中加入):
- Property Length:Value(Property Length) = Variable Byte Integer(NumOfByte(Property))。
- Property:可能包含多个
- Session Expiry Interval:会话到期间隔,用于控制客户端和服务器连接的时长,0表示无限制。
- Receive Maximum:接收最大值,用来限制服务器发布QoS 1和QoS 2的消息的长度以便客户端方便处理,缺省为65535。
- Maximum Packet Size:控制包最大尺寸,用来限制服务器端发送的控制包大小,主要是判断固定头部的Remaining Length。
- Topic Alias Maximum:主题别名最大值,用来限制服务器发送的主题别名的大小。
- Request Response Information:请求回复消息,0表示服务器不需要包含回复消息,1表示服务器可以包含回复消息,但取决于服务器。
- Request Problem Information:请求问题消息,0表示服务器可以在CONNACK和DISCONNECT控制包中回复出现的问题,1表示服务器可以在任何包中回复。
- User Property:用户属性,由用户自己定义。
- Authentication Method:验证方法,表明需要进行验证,在收到CONNACK包之前,客户端不能发送除AUTH和DISCONNECT之外的任何类型控制包。
- Authentication Data:验证数据,与验证方法相对应。
消息体
Client Identifier + Will Message(Will Properties + Will Topic + Will Payload) + User Name + Password
- Client Identifier(Client ID):UTF-8编码字符串,1~23字节(0字节服务器可做特殊处理),为
0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ
的任意组合。 - Will Properties(v5.0中加入):
- Property Length:Value(Property Length) = Variable Byte Integer(NumOfByte(Property))。
- Property:可能包含多个
- Will Delay Interval:遗嘱消息延时间隔,用于推迟Will Message(遗嘱消息)的发布。
- Payload Format Indicator:消息体格式指示,1表示Will Message的编码为UTF-8。
- Message Expiry Interval:消息到期间隔。
- Content Type:内容类型,此处用来表明Will Message的内容。
- Response Topic:回复主题,用作回复消息的主题名。
- Correlation Data: 相关数据。
- User Property:用户属性,由用户自己定义。
- Will Topic
- Will Payload:用作遗嘱消息的消息体,在v3.1.1中叫做Will Message,表示形式为Binary Data,即开始两个字节表示字节个数,后面接着相应个数的字节。
- User Name:用户名,可用作服务器验证。
- Password:Binary Data。