mqtt协议详解_阿里云物联网平台使用心得(18)MQTT协议详解CONNACK报文
题目大家好,超子又和大家见面了,超子我能力有限,水平不高,有什么错误的地方,欢迎板砖。超子今天给大家介绍一下CONNACK报文。CONNACK报文上图中可知,CONNACK 报文是单向的S->C,只能由阿里云发给我们, 图中有个错误,CONNACK 报文只包含固定报头和可变包头,没有负载,这个要注意一下。CONNACK 报文用于回复CONNECT报文,提示我们CONNECT报文是否正确。CO
题目
大家好,超子又和大家见面了,超子我能力有限,水平不高,有什么错误的地方,欢迎板砖。超子今天给大家介绍一下CONNACK报文。
CONNACK报文
上图中可知,CONNACK 报文是单向的S->C,只能由阿里云发给我们, 图中有个错误,CONNACK 报文只包含固定报头和可变包头,没有负载,这个要注意一下。CONNACK 报文用于回复CONNECT报文,提示我们CONNECT报文是否正确。CONNACK 报文固定报头,占用2个字节,分别是0x20 0x02,可变报头,也是占用2个字节,包括连接确认标志和返回码,如下图
CONNACK 报文可变报头
可变报头byte1字节中只有Bit0有具体作用, Bit1~ Bit7全部是0。CONNECT报文连接阿里云的时候,我们将清理会话功能设置为1,表示将以前连接会话全部清理,我们可以认为这个Bit0是服务器对此功能设置的回复确认,所以服务器应该回复0表示放弃了以前的会话,假如服务器回了一个1,表示没有放弃,那么我们和服务器之间没有对应上,你可以选择断开连接,再次重连,如果你认为这种情况没有影响,可以继续保持连接。
可变报头byte2用于提示我们CONNECT报文是否正确,不同的取值代表的意义不同,看下图
CONNACK 报文中的返回码
0x00表示正确。0x01~0x05表示不同的错误。回想一下上篇文章,超子用网络调试助手做实验的时候,服务器回复的是20 02 00 00最后1个字节是0x00,说明我们的CONNECT正确了,服务器接受了我们的连接。
更多推荐


所有评论(0)