物联网--MQTT协议(十)讲:构建PUBACK报文

MQTT协议系列文章:

物联网--MQTT协议(一):MQTT协议简介

物联网--MQTT协议(二):MQTT协议组成介绍

物联网--MQTT协议(三):MQTT协议服务等级介绍

物联网--MQTT协议(四):构建CONNECT报文

物联网--MQTT协议(五):构建CONNACK、DISCONNECT报文

物联网--MQTT协议(六):构建PINGREQ、PINGRESP报文

物联网--MQTT协议(七):构建SUBSCRIBE、SUBACK报文

物联网--MQTT协议(八):构建UNSUBSCRIBE、UNSUBACK报文

物联网--MQTT协议(九):构建PUBLISH报文

MQTT协议共14个报文,前面给大家讲解了怎么构建 CONNECT、CONNACK、DISCONNECT、PINGREQ、PINGRESP、SUBSCRIBE、SUBACK、UNSUBSCRIBE、UNSUBACK、PUBLISH报文,今天继续给大家讲解构建 PUBACK (发布收到)报文

一、准备工作

1.阿里云创建设备

已在阿里云上创建了一个设备,设备三元组为:

  {
     'ProductKey': 'a1GOQO9ZBek',
     'DeviceName': '191106',
     'DeviceSecret': 'wWo0xItypjQzrJQFlLpiITBjOGJhSLWE'
  }

2.网络调试助手的使用

MQTT协议的所有报文均是16进制表示,故需要进制转换,进制转换工具可以直接使用网络调试助手,即可转换为16进制,并得到转换数据的大小,操作如下:

  • 输入需要转换的数据时,结束的地方不能多有空格,否则转换过后的数据也会包含空格,导致出错

  • 发送完成一次数据之后记得复位计数(右下角),且把按十六进制发送的√取消掉再进行下一次数据转换,否则会数据累加,导致出错

二、PUBACK (发布收到)报文

PUBACK 报文是对 QoS 1 等级的 PUBLISH 报文的响应,即只有当PUBLISH发布QoS 1 等级的消息时,服务器才会发出对应的响应报文

1.固定报头

根据MQTT协议手册说明,MQTT协议的 PUBACK 报文的固定报头数据如下:

MQTT协议的 PUBACK 报文的固定报头为:40 02

2.可变报头

根据MQTT协议手册说明,MQTT协议的 PUBACK 报文的可变报头如下:

MQTT协议的 PUBACK 报文的可变报头为包含等待确认的 PUBLISH 报文的报文标识符,PUBLISH 报文的报文标识符即类似我们的身份证一样,如其名字一样,起到标识的作用,我们可以自定义PUBLISH 报文的报文标识符

2.有效载荷

根据MQTT协议手册说明,PUBACK 报文没有有效载荷

四、测试报文

1.构建QoS 1的PUBLISH 报文

PUBACK 报文是对 QoS 1 等级的 PUBLISH 报文的响应,故需要构造一个QoS 1 等级的 PUBLISH 报文,有构造QoS 0的PUBLISH 报文基础,在构建好的报文基础上,做简单修改即可得到QoS 1的PUBLISH 报文

物联网--MQTT协议(九):构建PUBLISH报文 中构建的QoS 0的PUBLISH 报文为:30 8F 01 00 31 2F 73 79 73 2F 61 31 47 4F 51 4F 39 5A 42 65 6B 2F 31 39 31 31 30 36 2F 74 68 69 6E 67 2F 65 76 65 6E 74 2F 70 72 6F 70 65 72 74 79 2F 70 6F 73 74 7B 22 6D 65 68 6F 64 22 3A 22 74 68 69 6E 67 2E 73 65 72 76 69 63 65 2E 70 72 6F 70 65 72 74 79 2E 73 65 74 22 2C 22 69 64 22 3A 22 38 35 31 35 37 36 38 37 22 2C 22 70 61 72 61 6D 73 22 3A 7B 22 6E 75 6D 22 3A 39 39 7D 2C 22 76 65 72 73 69 6F 6E 22 3A 22 31 2E 30 2E 30 22 7D

根据MQTT协议手册,从QoS 0的PUBLISH 报文变更为QoS 1的PUBLISH 报文只需更改三个地方

  • QoS 1的PUBLISH 报文固定报头为 32,将QoS 0的PUBLISH 报文中的首字节30改为32

  • QoS 1的PUBLISH 报文相比QoS 0的PUBLISH 报文在主题名之后增加了报文标识符,报文标识符占2个字节,假定该条报文的报文标识符为 00 01(注意:虽然可变报头添加了2个字节的报文标识符,但可变报头的长度不用更改,即此处报文标识符不计算入可变报头的字段大小)

  • 重新计算剩余长度,由于添加了2个字节的报文标识符,故QoS 1的PUBLISH 报文相比QoS 0的PUBLISH 报文剩余长度多了2个字节,所以剩余长度由由8F 01变为91 01

通过上面三步,得到QoS 1的PUBLISH 报文:32 91 01 00 31 2F 73 79 73 2F 61 31 47 4F 51 4F 39 5A 42 65 6B 2F 31 39 31 31 30 36 2F 74 68 69 6E 67 2F 65 76 65 6E 74 2F 70 72 6F 70 65 72 74 79 2F 70 6F 73 74 00 01 7B 22 6D 65 68 6F 64 22 3A 22 74 68 69 6E 67 2E 73 65 72 76 69 63 65 2E 70 72 6F 70 65 72 74 79 2E 73 65 74 22 2C 22 69 64 22 3A 22 38 35 31 35 37 36 38 37 22 2C 22 70 61 72 61 6D 73 22 3A 7B 22 6E 75 6D 22 3A 39 39 7D 2C 22 76 65 72 73 69 6F 6E 22 3A 22 31 2E 30 2E 30 22 7D

2.测试PUBACK报文

使用网络调试助手,发送CONNECT报文,再发送构建的QoS 1的PUBLISH 报文

网络调试助手接收到的服务器响应报文:40 02 00 01 ,其中40 02为PUBACK 报文的固定报头,00 01为QoS 1的PUBLISH 报文的报文标识符

到本节为止,分别介绍了构造CONNECT、CONNACK、DISCONNECT、PINGREQ、PINGRESP、SUBSCRIBE、SUBACK、UNSUBSCRIBE、UNSUBACK、PUBLISH、 PUBACK共11个报文

剩下的PUBREC(发布收到,QoS 2支持)、PUBREL(发布释放,QoS 2支持)、PUBCOMP(发布完成,QoS 2支持)共3个报文由于阿里云不支持,故不再做介绍,有兴趣可以用其他支持的服务器做测试,相信看完这11个报文的构建过程,对MQTT报文构建的步骤操作也是行云流水了

本系列MQTT协议解析、报文构造到这就结束了,由于知识量有限,若有错误的地方恳请大家指正,共同进步

(0)

相关推荐

  • 用了那么久MQTT,这些知识点你了解吗

    来这里,还可以学习HAL库的使用哦 哈喽,小伙伴们,今天来聊一聊什么是MQTT协议,以及常用的几个术语是什么意思,有图有真相哦,欢迎阅读 1. 什么是MQTT   MQTT(MQ Telemetry ...

  • 当下流行的物联网协议MQTT简介

    概述 MQTT是IBM开发的一个即时通讯协议,有可能成为物联网的重要组成部分.该协议支持所有平台,几乎可以把所有联网物品和外部连接起来,被用来当做传感器和制动器之间通信的桥梁. MQTT协议是为大量计 ...

  • mqtt协议 学习笔记

    文章目录 1. MQTT协议介绍 2. MQTT协议特性 3. MQTT协议的通信模型 3. MQTT的主题 4. MQTT协议的连接与会话 5. MQTT 报文格式 5.1 报文类型汇总 i. 连接 ...

  • MQTT QOS & Retained Message

    项目终于基本完成了,记录一下,由于客户端误设置了发布保留消息,导致服务器每次上线都会收到客户端最后一条消息,先去解读并改了QOS的设置,并没有用,然后才发现有Retained Message的设置,直 ...

  • 物联网网关协议选择:HTTP VS MQTT

    在物联网的世界里面,典型的网络架构如下,首先是终端的设备或者传感器采集到信号或者信息,对于不能上internet或者intranet网的设备,传感器先把探测到的信息发送到网关,然后网关把信息发送给服务 ...

  • 怎么做一个清醒的现代人?——《西方现代思想四十讲》发刊词

    海洋里的鱼是最熟悉自己的,但是可能只有海洋学家,才是真正明白鱼的生活. 2020年2月,新冠病毒肆虐,23日这一天,刘擎老师的<西方现代思想四十讲>在得到上线. 一年后我才有机缘听到,有的 ...

  • 民法上的抗辩权十讲|合集

    民法上的抗辩权十讲|合集 抗辩权是民事权利的一种形态,学说上普遍将其作为与请求权.形成权和支配权相并列的一种民事权利,认为抗辩权制度是相对于请求权制度而存在的一项重要民事法律制度.对于法律人而言,抗辩 ...

  • 燕山草堂六爻第十讲《揭开易经占卜神秘面纱》

    张连田 中国易学泰斗廖墨香弟子 迁安市闲云环境艺术设计有限公司董事长 河北省迁安市人民政府地方志办公室史学专家 中国社科院先秦史学会北易国学研究中心副秘书长 中国战略型人才库建筑环境咨询培训讲师项目入 ...

  • 《论语》第十讲“为政”之终结篇

    各位朋友大家好,第十讲来了. 如果每次都想及时听到宝利老师的更新,就点击题目下面"语道文心"四个蓝色字关注,或者长按文章最下面的二维码关注即可.以往各期可以点公开众账号主页中右上角 ...

  • 第二十讲:我爱子路

    <论语>虽然是高一要求的必读书,也是考试范围,但更是最重要的传统经典之一.大家听一听讲解,除了方便理解和背诵,还可以积累文言文的知识,提升语文素养,可谓一举三得.以往各期可以点击文章下方链 ...

  • 第三十讲:你是“士”吗?

    <论语>是高一要求的必读书,也是考试范围,更是最重要的传统经典之一.大家听一听讲解,除了方便理解和背诵,还可以积累文言文的知识,提升语文素养,可谓一举三得.以往各期可以点击文章下方链接直接 ...

  • 四十讲:我的兄弟遍天下

    <论语>是高一要求的必读书,也是考试范围,更是最重要的传统经典之一.大家听一听讲解,除了方便理解和背诵,还可以积累文言文的知识,作文素材,提升语文素养,可谓一举四得.以往各期可以点击文章下 ...

  • 五十讲:学问大的人不懂战争

    <论语>是高一要求的必读书,也是考试范围,更是最重要的传统经典之一.大家听一听讲解,除了方便理解和背诵,还可以积累文言文的知识,作文素材,提升语文素养,可谓一举四得.以往各期可以点击文章下 ...