[ARM入门]ESP8266 网络调试助手 十六进制连接到阿里云

MQTT协议说明

MQTT是应用层协议,是建立在TCP通讯层协议之上的协议,所以使用MQTT之前必须建立TCP连接.
 

  • MQTT服务质量等级 ( 0  1  2 )

服务质量等级说白了就是确认次数,这个字段表示应用消息分发的服务质量等级保证.

一般的云服务器只支持服务质量等级0和1,等级2需要反复确认,消耗资源较多,所以大多数云服务器都不支持.

  • TCP和UDP的关系

TCP是建立在可靠连接的基础之上的,而UDP则是不可靠的,但是TCP相比UDP而言,消耗资源较多,所以根据使用情况确定.

  • MQTT报文类型( C代表服务器 S代表客户端)

1.CONNECT报文(连接报文 1)

CONNECT报文分为两部分,固定报头和可变报头,
 

  • 固定报头

固定报头有两个字节,报文类型和剩余长度.

转换成十六进制

BYTE1  报文类型   10

BYTE2  剩余长度    ??

  • 可变报头

可变报头共有四部分组成:协议名

协议名  协议级别   连接标志   保活时间

1.协议名前两个字节代表长度,后面部分则代表连接类型.



转换成十六进制 协议名  00 04(长度)  4D 51 54 54(MQTT)
2.协议级别
根据使用的MQTT的版本,协议级别为LEVEL4

转换成十六进制 协议级别 04(长度)
3.连接标志

BYTE7 用户名  1

BYTE6 密码    1

BYTE5、4、3、2  遗嘱功能

BYTE1  清除恢复对话  1清除 0不清除、继续接收未接收的数据内容

BYTE0  保留标志位,没用  0  

转换成十六进制 连接标志 C2

4.保活时间

防止占用云服务器资源,BYTE1、2  任意写 基本都是100S

转换成十六进制 保活时间 00 64

报文后面跟客户端ID 用户名和密码
以阿里云为例,查看MQTT连接文档

客户端ID:D001|securemode=3,signmethod=hmacmd5|

转化成16进制如下:44 30 30 31 7C 73 65 63 75 72 65 6D 6F 64 65 3D 33 2C 73 69 67 6E 6D 65 74 68 6F 64 3D 68 6D 61 63 6D 64 35 7C

需添加两字节长度标识符  最终为  00 25 44 30 30 31 7C 73 65 63 75 72 65 6D 6F 64 65 3D 33 2C 73 69 67 6E 6D 65 74 68 6F 64 3D 68 6D 61 63 6D 64 35 7C

用户名:D001&i5drb0tO5li

转换为16进制如下: 44 30 30 31 26 69 35 64 72 62 30 74 4F 35 6C 69
需添加两字节长度标识符  最终为 00 10 44 30 30 31 26 69 35 64 72 62 30 74 4F 35 6C 69

密码:clientId  D001  deviceName  D001  productKey  i5drb0tO5li
密码需用signmethod的加密方式,本次使用为hmacmd5,在百度直接搜加密解密就行,加密密码在阿里云产品管理中.

hmacmd5加密结果:6eaf5eab8f45bdec03ee40cb439ed719

转换为16进制如下:36 65 61 66 35 65 61 62 38 66 34 35 62 64 65 63 30 33 65 65 34 30 63 62 34 33 39 65 64 37 31 39

需添加两字节长度标识符  最终为 00 20 36 65 61 66 35 65 61 62 38 66 34 35 62 64 65 63 30 33 65 65 34 30 63 62 34 33 39 65 64 37 31 39

计算数据剩余长度(可变+负载) ??以后的数据  128进位1

最终为101 转换成十六进制  0x65

最终CONNECT报文为:

10 65 00 04 4D 51 54 54 04 C2 00 64  00 25 44 30 30 31 7C 73 65 63 75 72 65 6D 6F 64 65 3D 33 2C 73 69 67 6E 6D 65 74 68 6F 64 3D 68 6D 61 63 6D 64 35 7C  00 10 44 30 30 31 26 69 35 64 72 62 30 74 4F 35 6C 69  00 20 36 65 61 66 35 65 61 62 38 66 34 35 62 64 65 63 30 33 65 65 34 30 63 62 34 33 39 65 64 37 31 39

总结: CONNECT报文由 10(报文类型)+65(有效长度)+00 04 4D 51 54(协议名)+04(协议级别)+C2(连接标志)+00 64(保活时间)+客户端+用户名+密码构成

2.CONNACK报文(2) 服务器应答客户端报文

CONNACK报文返回值如下所示,根据返回值判断连接是否成功或查找错误类型

成功连接应返回20(报文类型 ) 02(剩余字节) 00 00(看文档)

3.PINGREQ(心跳保活 12)、PINGRSP(PING命令回复 13)、DISONNECT(断开连接 14)

  • PINGREQ(心跳保活 12)

根据文档可知,PINGREQ报文为 C0 00,字节1为报文类型(12) C0,字节2为剩余长度,不需要剩余长度,所以为00,主要作用就是保活连接.

  • PINGRSP(PING命令回复 13)

PINGRSP报文是PINGREQ保活报文的回复报文,由服务器向客户端发送的.配对使用

根据文档可知,PINGREQ报文为D0 00,字节1为报文类型(13) D0,字节2为剩余长度,没有剩余长度,所以为00,主要作用就是回复连接状态.

  • DISONNECT(断开连接 14)

DISONNECT报文是用来与服务器断开连接的命令.

根据文档可知,DISONNECT报文为E0 00,字节1为报文类型(14) E0,字节2为剩余长度,没有剩余长度,所以为00,主要作用就是与服务器断开连接状态.
---------------------
作者:鸡蛋鸭蛋荷包蛋
链接:https://bbs.21ic.com/icview-3281580-1-1.html
来源:21ic.com
此文章已获得原创/原创奖标签,著作权归21ic所有,任何人未经允许禁止转载。

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值