| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 系统运维 -> 浅浅的 使用网络调试助手和Mosquitto 分析MQTT协议数据包内容 -> 正文阅读 |
|
[系统运维]浅浅的 使用网络调试助手和Mosquitto 分析MQTT协议数据包内容 |
使用网络调试助手和Mosquitto 分析MQTT协议数据包内容参考:MQTT通讯协议分析(一): connect连接数据包_Aston_黄的博客-CSDN博客_mqtt查看连接数 MQTT Version 3.1.1 (runoob.com) https://www.runoob.com/manual/mqtt/protocol/MQTT-3.1.1-CN.html#pf22 零、涉及到的主要的数据包:1、连接: 第一个订阅的设备ID:123456789 用户信息:“admin” “password” 第二个发布的设备ID:223456789 用户信息:“admin” “password” 2、订阅: 82 09 00 01 00 04 74 65 73 74 00 3、发布: 31 15 00 06 74 65 73 74 2F 61 68 65 6C 6C 6F 5F 65 73 70 38 32 36 36 31 13 00 04 74 65 73 74 68 65 6C 6C 6F 5F 65 73 70 38 32 36 36 4、心跳: 一、环境搭建1、MQTT server 2、windows下面安装了一个网络调试助手: 二、connect数据包打开网络调试助手,输入mqtt所在的服务器ip地址,端口号1883,连接后就可以看到Mosquitto的打印信息:
这里表示已经有一台设备连接到了socket,然后通过下面的数据包和mqtt服务器建立链接。
根据数据包的内容逐个字节进行分析:————10 表示是 connect连接数据包, 如后续断开连接disconnect为 0x20 ————26 剩余长度,计算方式 len = 2*16 + 6 = 38 38对应16禁止的26 ————00 04 4d 51 54 54 04 connect数据对应为: ————c2 连接状态,C2对应的二进制为:1100 0010 User Name Flag :使用用户名登陆
Will Flag : 遗嘱,表示如果连接请求被接收, 遗嘱消息(Will Message)必须被存储再服务端,之后网络连接关闭时,服务器必须发布这个遗嘱消息。 除非服务器端收到disconnect报文时删除了这个遗嘱消息,遗嘱消息发布条件, 包括但不限于:
CleanSession : 清除会话,客户端和服务端必须丢弃之前的任何会话并开始一个新的会话。 会话仅持续和网络连接同样长的时间。 与这个会话关联的状态数据不能被任何之后的会话重用。 Reserved : 保留。 ————00 3c : 表示KeepAlive 保持心跳间隔, time = 3*16 + 12 = 60(秒), 与上图 保持连接 60秒 吻合 ————31 32 33 34 35 36 37 38 39 ————00 05 ————61 64 6d 69 6e ————00 08 ————70 61 73 73 73 77 6f 72 64 三、心跳包心跳包的数据内容为:
四、订阅Subscribe订阅test的消息的具体报文如下,
根据上面的数据包内容解析: ————00 01 00 : 报文标识符MSB 01 : 报文标识符LSB, (报文标识符由16位组成, 因此这里我们报文标识符位1) 00 04 74 65 73 74 00 00 : 之后主题过滤器(Topic Filter)长度MSB 04 : 主题过滤器(Topic Filter)长度 LSB ,与我们设置的"test"长度 符号 74 65 73 74 : 对应的就是主题过滤器"test" 00 : QoS = 0, 若设置的是“至少一次”, 则为01, 若设置"刚好一次",则为02
五、发布Publish订阅一个test通知的具体数据内容:
这里原因不明,由于订阅的服务名称是test,但是协议要求在后面添加字符’\a’,添加后变成test\a和原来的test名称不符,订阅端就会接收不到消息,所以将\a去掉改为:
根据上面的数据包内容进行解析: ————00 06 00 :Topic name 长度MSB 06 :Topic name 长度LSB ,因此 len = 6,与我们设置的"test/a" 长度吻合 ————订阅名 74 65 73 74 2f 61 74 65 73 74 2f 61 : 对应的就是Topic name -> “test/a” ————消息内容 68 65 6c 6c 6f 5f 65 73 70 38 32 36 36 68 65 6c 6c 6f 5f 65 73 70 38 32 36 36 : 对应的就是消息内容 -> “hello_esp8266”
|
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/15 9:37:46- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |