当前位置: 首页 > ops >正文

mqtt数据包举例

MQTT 数据包由 固定报头(Fixed Header)可变报头(Variable Header) 和 有效载荷(Payload) 组成,以下通过常见的 PUBLISH(发布)报文和 CONNECT(连接)报文举例说明:

1. PUBLISH 报文(发布消息)

假设场景:向主题 test/topic 发送 QoS 1 的消息 hello

  • 固定报头
    • 第 1 字节:0x31(二进制 0011 0001
      • 高 4 位 0011:表示 PUBLISH 类型(编码值 3)。
      • 低 4 位 0001:表示 QoS 等级 1(第 3-4 位 01),无保留标志。
    • 第 2 字节:0x0D(剩余长度 13,计算:主题长度 2 + 主题名 6 + 报文标识符 2 + 载荷 5 = 15?哦不,重新算:主题长度 2(0x0006) + 主题名 test/topic 6 字节 + 报文标识符 2(0x0001) + 载荷 hello 5 字节 → 总计 2+6+2+5=15,但剩余长度编码是 0x0F?等等,前面例子有误,重新计算:
      固定报头 2 字节,可变报头部分:主题长度 2 + 主题 6 + 报文 ID 2 → 10 字节,载荷 5 → 总长度 2+10+5=17。剩余长度 17 用变长编码:17 < 128 → 0x11。所以固定报头第 2 字节是 0x11
      修正后:
      固定报头:0x31 0x11(第 1 字节 0011 0001,第 2 字节 0x11)。
  • 可变报头
    • 主题长度:0x00 0x06(表示主题名长度为 6 字节)。
    • 主题名:0x74 0x65 0x73 0x74 0x2F 0x74 0x6F 0x70test/topic 的 ASCII 码)。
    • 报文标识符:0x00 0x01(QoS ≥1 时必须有,用于消息确认)。
  • 有效载荷
    • 消息内容:0x68 0x65 0x6C 0x6C 0x6Fhello 的 ASCII 码)。

完整数据包:
0x31 0x11 0x00 0x06 0x74 0x65 0x73 0x74 0x2F 0x74 0x6F 0x70 0x00 0x01 0x68 0x65 0x6C 0x6C 0x6F

2. CONNECT 报文(客户端连接)

假设场景:客户端请求连接到 MQTT 服务器,使用清洁会话(Clean Session = 1),心跳时间 60 秒。

  • 固定报头
    • 第 1 字节:0x10(二进制 0001 0000),表示 CONNECT 类型(编码值 1)。
    • 第 2 字节:剩余长度,计算可变报头 + 载荷长度。
      • 协议名 MQTT 长度 4 + 协议版本 1 + 连接标志 1 + 心跳 2 → 总计 8 字节。
      • 剩余长度 8 编码为 0x08,固定报头为 0x10 0x08
  • 可变报头
    • 协议名:0x00 0x04 0x4D 0x51 0x54 0x54MQTT 的 ASCII 码,长度 4)。
    • 协议版本:0x04(MQTT 3.1.1 版本)。
    • 连接标志:0x02(二进制 0000 0010,表示清洁会话 1,无遗嘱消息,密码和用户名不使用)。
    • 心跳时间:0x00 0x3C(60 秒)。
  • 有效载荷(可选):
    • 客户端 ID:假设为 0x63 0x6C 0x69 0x65 0x6E 0x74 0x5F 0x31client_1 的 ASCII 码)。

完整数据包:
0x10 0x08 0x00 0x04 0x4D 0x51 0x54 0x54 0x04 0x02 0x00 0x3C 0x63 0x6C 0x69 0x65 0x6E 0x74 0x5F 0x31


通过以上示例可以看出,MQTT 数据包通过固定报头标识类型和基本属性,可变报头携带主题、标识符等上下文信息,载荷包含实际传输的数据。实际应用中,数据包结构会根据具体报文类型(如 SUBSCRIBEPINGREQ 等)灵活调整。

http://www.xdnf.cn/news/8699.html

相关文章:

  • 博客摘录「 游戏开发笔记(九)——技能系统」2025年5月25日
  • SAP重塑云ERP应用套件
  • AI数据治理破局的战略重构
  • 【MPC控制】番外篇:MPC 与 机器学习/深度学习 —— 双雄会的相似与不同
  • 计算机网络学习(六)——UDP
  • 远程办公时代macOS访问解决方案:兼顾效率提升与安全防护的实用架构指南
  • 如何利用AI工具提升工作效率?
  • 2021年认证杯SPSSPRO杯数学建模B题(第二阶段)依巴谷星表中的毕星团求解全过程文档及程序
  • Mysql高版本(8.0及以后)Linux安装
  • 删除链表的倒数第N个结点--LeetCode
  • MySQL的存储引擎
  • 什么是 Spring MVC 的异步请求处理?
  • 如何在uniapp H5中实现路由守卫
  • JVM规范之栈帧
  • 15.1 【基础项目】使用 HTML、CSS 和 TypeScript 构建的简单计数器应用
  • LLM之Agent:Mem0的简介、安装和使用方法、案例应用之详细攻略
  • C# Windows Forms应用程序-002
  • # 使用 Hugging Face Transformers 和 PyTorch 实现信息抽取
  • 数据结构第2章 (竟成)
  • 神经网络加上注意力机制,精度反而下降,为什么会这样呢?注意力机制的本质是什么?如何正确使用注意力机制?注意力机制 | 深度学习
  • 清山垃圾的3个问题
  • 6.4.1最小生成树
  • 第二章网络io
  • 对WireShark 中的EtherCAT抓包数据进行解析
  • C语言指针进阶:通过地址,直接修改变量的值
  • iOS App启动优化(冷启动、热启动)
  • 2025年渗透测试面试题总结-匿名[实习]安全工程师(安全厂商)(题目+回答)
  • 【HTML-12】HTML表格常用属性详解:从基础到高级应用
  • 显存不够?节约显存高效微调语言模型的五种方法及实验
  • 0基础 Git 代码操作