MQTT协议-CONNECT报文介绍

MQTT协议-CONNECT报文介绍

参考MQTT协议中文笔记:https://mcxiaoke.gitbooks.io/mqtt-cn/content/mqtt/01-Introduction.html

Connect报文主要用于客户端连接服务器的,未涉及具体数据的传输,可以使用网络调试助手来连接阿里云平台,用十六进制格式发送这一串报文,来连接平台上的一个设备,使其显示在线

阿里云平台名词解释

在这里插入图片描述

CONNECT控制报文

报文由固定报头+可变报头+有效载荷组成,这个格式适合MQTT的大部分协议

在这里插入图片描述

在单片机中要发送CONNECT报文,需要转为十六进制再发送,下面是假设要发送的数据

在这里插入图片描述

固定报头

固定报头一般由两个字节组成,byte1和byte2

byte1的高4位为MQTT报文类型,低4位为用于指定控制报文类型的标志位

byte2为剩余长度,暂时不知

在这里插入图片描述

在这里插入图片描述

报文类型

在这里插入图片描述

可变报头

可变报头由协议名(Procotol Name)+协议级别(Procotol Level)+连接标志(Connect Flags)+保持连接(keep Alive)四个部分组成

1、协议名

已经固定好是MQTT,byte1和byte2表示协议名长度,为4个字节

在这里插入图片描述

2、协议级别

也已经固定好,十六进制为04

在这里插入图片描述

3、连接标志

占一个字节,只有最低位固定为0,其他位不固定,像用户名称User Name和密码Password这些一般都要的,所以可预设为1,则二进制可表示如下,转为十六进制是C2
在这里插入图片描述

4、保持连接

占两个字节,假如设置为100秒,则十六进制为00 64

在这里插入图片描述

可变报头的字符组合起来,则就为 00 04 4D 51 54 54 04 C2 00 64 ,共十个字节,基本固定

有效载荷

有效载荷由客户端标识符(Client Identifier)+用户名(User Name)+密码(Password)组成

在这里插入图片描述

设备名称和ProductKey可以在云平台的设备里获得,如

在这里插入图片描述

将设备名和ProductKey直接代入,可得

客户端ID:

在这里插入图片描述

用户名:

在这里插入图片描述

密码:

在这里插入图片描述

密码需要经过哈希加密,在线加密平台:http://encode.chahuo.com/

粘贴密码字符串后,点击HmacSHA1加密,需要输入密钥,该密钥可在云平台设备的三元组信息里获得

在这里插入图片描述

客户端ID进行发送要转为十六进制,需要在头部加上数据的长度,因为官方规定用户名必须是UTF-8编码字符串,而UTF-8编码规定:每一个字符串都有一个两字节的长度字段作为前缀,因此客户端ID头部加上的是 00 27,而不是单单的27

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

将客户端ID、用户名和密码组合在一起,就得到了如下的数据,这是有效载荷的部分

在这里插入图片描述

将固定报头、可变报头和有效载荷组合在一起

在这里插入图片描述

整理过后就还有固定报头的剩余长度没有数据

在这里插入图片描述

剩余长度有复杂的规定,会出文章单独介绍,但这里可以简单的认为是该位置后面有多少个字节长度,经过计算,后面共有112个字节,转为十六进制是70,因此剩余长度可以填70,这样,Connect报文就组装好了,可通过此报文与阿里云平台连接

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_46251230/article/details/129392102