惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Apple Machine Learning Research
Apple Machine Learning Research
爱范儿
爱范儿
博客园_首页
博客园 - 【当耐特】
V
Visual Studio Blog
博客园 - 叶小钗
月光博客
月光博客
美团技术团队
J
Java Code Geeks
小众软件
小众软件
Y
Y Combinator Blog
博客园 - Franky
Martin Fowler
Martin Fowler
博客园 - 聂微东
Microsoft Azure Blog
Microsoft Azure Blog
IT之家
IT之家
MyScale Blog
MyScale Blog
人人都是产品经理
人人都是产品经理
Microsoft Security Blog
Microsoft Security Blog
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
阮一峰的网络日志
阮一峰的网络日志
酷 壳 – CoolShell
酷 壳 – CoolShell
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
云风的 BLOG
云风的 BLOG

人人都是产品经理

为什么你的产品找不到差异化?90%的失败都卡在第一步上(下) – 人人都是产品经理, 3年从30万到1300万用户、获2200万美元融资,这个AI教育产品用“抽卡”破解了获客难题 – 人人都是产品经理, 园区招商系统怎么做才能真正帮到去化?我加了这一个功能,推广链接转发400次阅读过万 – 人人都是产品经理, AI大事件:OpenAI发完网络安全模型又搞药物研发,小鹏汽车要抓”DeepSeek时刻” – 人人都是产品经理, 电商不是卖货,是一场更残酷的产品经理实战 – 人人都是产品经理, 没想到,活动营销又回来了! – 人人都是产品经理, 为何All-in海外KOC:一场关于AI时代窗口期的豪赌 – 人人都是产品经理, 重新理解企业的内部协作 – 人人都是产品经理, 苹果的 AI 战略到底是什么? – 人人都是产品经理, 医疗智能体·第2讲——合规护城河:等保、PIPL与HIPAA的架构实战 – 人人都是产品经理, 向量知识库五步法:从“答非所问”到“精准回复” – 人人都是产品经理, 鸿蒙PC三方库构建总指挥HPKBUILD(sha)库为例 – 人人都是产品经理, 何时该用LLM?AI产品经理的LLM设计指南 – 人人都是产品经理, 医疗信息领域的需求方、决策方、准入方以及关注点(二) – 人人都是产品经理, 即梦涨价:一场被误读的「傲慢」 – 人人都是产品经理, 面试AI PM必答题:Hermes和OpenClaw的区别,如何讲清楚业务价值 – 人人都是产品经理, AI的下一张船票:世界模型——AI产品经理必须理解的技术拐点 – 人人都是产品经理, 小红书做GEO,怎么让AI信你?记住这 3 个重要信息 – 人人都是产品经理, 5 家印度 AI 初创公司,看看印度 AI 再做什么 – 人人都是产品经理, AI项目跨团队协作:产品技术业务如何不打架 – 人人都是产品经理, Agentic Workflow(智能体工作流):让AI从”答案生成器”变成”数字员工” – 人人都是产品经理, lycium_plusplus 项目全景解读:OpenHarmony 三方库构建的“大管家” – 人人都是产品经理, 从爆单救火到前置履约:两套预采策略,把生鲜大促履约效率拉满 – 人人都是产品经理, 什么时候该补货?我用一轮数据做了一个决定 – 人人都是产品经理, 从“机械兜底”到“动态分流”:AI客服重复进线治理的4大底层逻辑 – 人人都是产品经理, 抖音拼效率,红书拼洞察 – 人人都是产品经理, 全民狂欢与退潮——为什么龙虾这波热潮冷却得如此之快? – 人人都是产品经理, Stripe押注!MPP重塑全球支付 – 人人都是产品经理, 小红书GEO:AI引用你的内容,不是因为你对,而是因为你看起来可信 – 人人都是产品经理, 前百度副总裁押注办公Agent,日韩付费爆发,Manus迎来强劲对手 – 人人都是产品经理,
物联网数据接入篇-应用层MQTT(6)
跃曰 · 2024-06-17 · via 人人都是产品经理

前几篇文章讲述的是TCP/IP 模型中的网络接口层、网络层、传输层、应用层部分协议,这里到了第四层应用层的 MQTT协议。都是物联网常用的应用层协议。CoAP 协议 OPC 放到之后写。

MQTT 协议

消息队列遥测传输,Message Queuing Telemetry Transport,MQTT 是ISO 标准下基于发布/订阅(Publish/Subscribe)范式的消息协议。它工作在TCP/IP协议族上,是为硬件性能低下的远程设备以及网络状况糟糕的情况下而设计的发布/订阅型消息协议。

MQTT最大优点在于,用极少的代码和有限的带宽,为连接远程设备提供实时可靠的消息服务。为什么,因为协议简单,开销就小;发布订阅模式,解耦了发布者和订阅者,他们不需要直接传递消息,有个中介帮忙,同样的数据,我就上传一份,再传出去一份,就想导游只说一遍,大家都带着蓝牙耳机,都能听到;持久会话,不会经常断开重连,这都耗电。

作为一种低开销、低带宽占用的即时通讯协议,使其在物联网、小型设备、移动应用等方面有较广泛的应用。

MQTT 的消息发布和订阅模式,像微博一样,有一个消息发布者,有一批订阅着,有个服务器。消息发布者把消息发送到服务器,订阅者订阅消息,就能收到消息。

HTTP 基于请求响应,像微信聊天,我和你加好友,建立连接,我发消息,你接受消息。必须要建立稳定可靠的连接。

物联网数据接入篇-应用层MQTT(6)

工作原理

发布者将消息发布到代理服务器,代理服务器根据订阅者的订阅情况将消息分发给相应的订阅者。

组成部分

主要包括发布者(Publisher)、订阅者(Subscriber)、代理服务器(Broker)。

发布者 Publisher:

使用MQTT的程序或设备。客户端通过网络连接到服务端。它可以发布应用消息给服务端。

服务端 Server:

一个程序或设备,作为发送消息的客户端和请求订阅的客户端之间的中介。服务端接受来自客户端的网络连接、接受客户端发布的应用消息、处理客户端的订阅和取消订阅请求、转发应用消息给符合条件的已订阅客户端。

订阅者 Subscriber:

订阅包含一个主题过滤器(Topic Filter)和一个最大的服务质量(QoS)等级。订阅与单个会话(Session)关联。会话可以包含多于一个的订阅。会话的每个订阅都有一个不同的主题过滤器。

Topic(主题):

Topic具有两层含义:其一,在发布消息时,主题会与消息相关联,以此向 服务端 表明这条消息要发送至哪个主题;其二,在订阅消息时,客户端需向 服务端 表明自己对哪个主题感兴趣,一旦有消息发送给这个主题,服务端 便会将该消息发给此主题的订阅者。主题支持通配符,而对于使用通配符的主题,我们将其称作 Topic Filter。

MQTT 控制报文

在MQTT协议中,一个MQTT数据包由:固定头(Fixed header)、可变头(Variable header)、消息体(payload)三部分构成。MQTT数据包结构如下:

物联网数据接入篇-应用层MQTT(6)
  • 消息类型:4位的无符号值。表示服务器到客户端的单向还是双向通信,发送消息还是订阅消息还是取消订阅消息。
  • 标识位 / DUP:Duplicate Flag,用于指示该 Publish 报文是否为重发报文。如果 DUP 标志被设置为 0,表示第一次请求发送这个 Publish 报文;如果 DUP 标志被设置为 1,表示这可能是一个早前报文请求的重发。客户端或服务器请求重发一个 Publish 报文时,必须将 DUP 标志设置为 1。
  • Qos:Quality of Service(服务质量)。它是用于消息可靠性传递的一个参数,具有 3 个取值,具体为:0:表示消息仅发送一次,不确保发送成功。1:意味着消息最少发送一次,保证发送成功,但由于可能会发送多次,所以接收方可能会收到重复消息。2:表明消息仅发送一次且保证成功,接收方不会接到重复消息。在发送消息时,可以对 QoS 进行指定,如果 QoS 大于 0,那么消息必然会被发送至 Broker。而在订阅主题时,同样也可以指定 QoS,如果 QoS 大于 0,那么 Broker 一定会将消息发送给订阅者,不会出现消息丢失的情况。
  • RET:Publish Retain Flag,发布保留标识。指示服务器是否要保留发布的消息。当RET标志位设置为1时,表示服务器要保留这次推送的信息。如果有新的订阅者出现,服务器会将保留的消息推送给它。如果没有新的订阅者,服务器会在推送至当前订阅者后释放该消息。如果RET标志位设置为0,则服务器不会保留发布的消息。
  • 剩余长度:Remaining Length,表示当前报文剩余部分的字节数,包括可变报头和负载的数据。剩余长度不包括用于编码剩余长度字段本身的字节数。
  • 可变头:位于固定头和负载之间。可变头的内容因数据包类型而异,通常包含与特定数据包类型相关的信息,例如数据包标识、主题名等。
  • 消息体:Payload,也叫有效载荷。CONNECT、SUBSCRIBE、SUBACK、UNSUBSCRIBE四种类型的消息 有消息体: CONNECT,消息体内容主要是,客户端的ClientID、订阅的Topic、Message以及用户名和密码。 SUBSCRIBE,消息体内容是一系列的要订阅的主题以及QoS。 SUBACK,消息体内容是服务器对于SUBSCRIBE所申请的主题及QoS进行确认和回复。 UNSUBSCRIBE,消息体内容是要取消订阅的主题。

太枯燥了,举个例子:物联网数据接入篇-应用层MQTT(6)

特点

  • 轻量级:占用资源少,适合资源受限的设备。
  • 可靠性高:提供不同等级的服务质量保证。MQTT 协议提供了 3 种消息服务质量等级,保证了在不同的网络环境下消息传递的可靠性。
  • 低带宽需求:MQTT 的最小报文仅为 2 个字节,比 HTTP 占用更少的网络开销。
  • 稳定连接:MQTT 与 HTTP 都能使用 TCP 连接,并实现稳定、可靠的网络连接。
  • 安全双工通信:MQTT 基于发布订阅模型,HTTP 基于请求响应,因此 MQTT 支持双工通信。依赖于发布订阅模式,MQTT 允许在设备和云之间进行双向消息通信。发布订阅模式的优点在于:发布者与订阅者不需要建立直接连接,也不需要同时在线,而是由消息服务器负责所有消息的路由和分发工作。

MQTT 可实时推送消息,但 HTTP 需要通过轮询获取数据更新。

MQTT 是有状态的,但是 HTTP 是无状态的。为了应对网络不稳定的情况,MQTT 提供了心跳保活(Keep Alive)机制。在客户端与服务端长时间无消息交互的情况下,Keep Alive 保持连接不被断开,若一旦断开,客户端可即时感知并立即重连。同时,MQTT 设计了遗愿消息,让服务端在发现客户端异常下线的情况下,帮助客户端发布一条遗愿消息到指定的 MQTT 主题。

MQTT 可从连接异常断开中恢复,HTTP 无法实现此目标。

灵活性:基于服务订阅模式,消息路由更为灵活。

MQTT 协议和 HTTP 的对比:

应用

物联网:各类物联网设备之间的通信。

移动应用消息推送。

远程监控系统。

智能家居。

工业自动化等领域。

后记

这个系列,物联网协议进行到了尾声,这篇写 MQTT,下面会写 CoAP、OPC,都是重头戏。

参考文献

15 张图, 把TCP/IP 讲得一清二楚!-腾讯云开发者社区-腾讯云

什么是OPC UA&它是如何工作的?_哔哩哔哩_bilibili

图解TCP/IP (第5版)

探索 OSI 会话层:建立和管理通信会话的关键_不同机器之间用户会话的建立与管理-CSDN博客

3、物联网的物理层协议 – 孤情剑客 – 博客园

网络工程师教程

【2024软考】《网络工程师》新版精讲视频-希赛网(零基础系统教程,建议收藏)!_哔哩哔哩_bilibili

Modbus通信协议详解-CSDN博客

MQTT协议_mqtt payload一定要字符串吗-CSDN博客

第一章 – MQTT介绍 · MQTT协议中文版

MQTT协议_mqtt payload一定要字符串吗-CSDN博客

物联网协议之COAP简介及Java实践-CSDN博客

如何使用CoAP的对称加密自主接入和DTLS自主接入_物联网平台(IoT)-阿里云帮助中心

DTU和RTU的区别_rtu和dtu的区别-CSDN博客

小米IoT文档与资源中心

5.1 IP 基础知识全家桶

network_protocol_structures.pdf

一文看懂Modbus协议-阿里云开发者社区

modbus_application_protocol_specification_v1.1b3.pdf

https://help.dtuip.com:8888/images/20191028084839667.pdf

一文看懂Modbus协议-阿里云开发者社区

Modbus 寄存器 | 人人都懂物联网

https://zh.wikipedia.org/wiki/Modbus

MQTT教學(一):認識MQTT – 超圖解系列圖書

https://www.51cto.com/article/670429.html

通讯协议介绍&CoAP 协议解析-CSDN博客

OPC 协议 | 开发者中心

https://www.youtube.com/watch?v=f5oPEVhZFug

本文由 @跃曰 原创发布于人人都是产品经理。未经作者许可,禁止转载。

题图来自Unsplash,基于CC0协议。

该文观点仅代表作者本人,人人都是产品经理平台仅提供信息存储空间服务。