前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >MQTT Packet详解【05】:DISCONNECT断开连接报文

MQTT Packet详解【05】:DISCONNECT断开连接报文

作者头像
Hello工控
发布于 2025-05-12 04:35:09
发布于 2025-05-12 04:35:09
980
举报
文章被收录于专栏:Hello工控Hello工控

现在,我们将介绍在断开连接时使用的控制报文:DISCONNECT

MQTT 5.0 Packet Explained 05: DISCONNECT
MQTT 5.0 Packet Explained 05: DISCONNECT

MQTT 中,客户端和服务器都可以在断开网络连接之前向对方发送 DISCONNECT 报文以表明断开连接的原因。客户端发送的 DISCONNECT 报文还可以影响断开连接后服务器的行为,例如是否发送遗留(Will)消息,或者是否更新会话过期间隔。

Sample DISCONNECT Packet

Disconnect样例报文

我们使用 MQTTX CLI 与指定的 Client ID 连接到公共 MQTT 服务器,并设置 --reconnect-period 为 0 以禁用自动重连:

然后在另一个终端中运行相同的命令以使用相同的 Client ID 创建客户端连接。

在我们发起第二次连接后,Wireshark 将捕获公共 MQTT 服务器返回给第一次连接的 DISCONNECT 包:

这四个十六进制字节对应以下包内容:

我们接下来详细介绍DISCONNECT 包结构。

DISCONNECT Packet Structural

DISCONNECT包结构

Fixed Header固定头

Packet Type 字段的值位于固定报头的第一字节的高 4 位,其值为 14(0b1110),低 4 位均为 0,表示这是一个 DISCONNECT 包。

Variable Header 变量头

DISCONNECT 包的可变头部按顺序包含以下字段:

  • Reason Code原因代码: 一个单字节值,用于向另一端指示断开连接的原因。下面的表格列出了 DISCONNECT 包中常见的 Reason Code。如需完整列表,请参阅 MQTT 5.0 Reason Code 快速参考指南。
  • Properties属性:以下列出了 DISCONNECT 报文的所有可用属性。

与其他之前介绍的包不同,DISCONNECT 包中的 Reason Codes 和 Properties 可以被客户端和服务器使用的范围不同。例如,Session Expiry Interval 属性只能在客户端发送的 DISCONNECT 包中使用,因此我们已经在上面的列表中列出了它们可用的范围。

Payload 载荷

没有Payload。

图片
图片

Conclusion

结论

客户端和服务器都可以发送 DISCONNECT 包以表示它们准备好断开与网络的连接。包中的 Reason Code 可以向接收方指示连接关闭的原因。当 MQTT 连接意外断开时,我们可以首先检查是否接收到 DISCONNECT 包以及包中 Reason Code 的值。

虽然在 DISCONNECT 包中,客户端和服务器可以使用的 Reason Codes 和 Properties 有所不同,但我们不需要刻意记住它们。它们通常与相应的机制和行为相关。例如,Will Message 只会由服务器发布,因此当有正常断开连接的愿望但对方仍然需要发布 Will Message 时使用的 Reason Code 0x04 ,只会由客户端使用

参考链接:

  1. https://www.ids-sax2.com/understanding-mqtt-5-0-disconnect-messages-a-comprehensive-guide/
  2. https://www.emqx.com/en/blog/mqtt-5-0-control-packets-05-disconnect
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2025-05-11,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Hello工控 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Sample DISCONNECT Packet
  • Disconnect样例报文
    • Variable Header 变量头
    • Payload 载荷
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档