阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

MQTT基础——Part 1. 认识MQTT

448次阅读
没有评论

共计 2612 个字符,预计需要花费 7 分钟才能阅读完成。

本文是《MQTT 基础》系列文章的第一部分,这个系列会详述 MQTT 协议的方方面面,包括 MQTT 协议的核心功能和概念,以及协议的一些基本信息和背景。

我不仅会探讨 MQTT 协议本身,还会介绍 MQTT 的安全或客户端库。因此,如果你对 MQTT 感兴趣,那么请订阅我的博客。

MQTT 是一个开放协议,我会介绍 MQTT 的基本概念(发布 / 订阅、客户端 / 经纪人)和基本功能(连接、发布 / 订阅)。随后,你需要逐一了解 MQTT 的特性,比如服务质量 QoS、消息的保存、持续的会话、最后遗嘱以及 SYS 主题。MQTT 安全没有放入《MQTT 基础》这个系列,因为它非常重要,所以单独阐述。
使用 Last Will 和 Testament 特性通知有关各个客户端异常中断的机制。

一、介绍 MQTT

MQTT 是一个支持客户端 - 服务器的发布 / 订阅消息传输的标准通信协议。MQTT 是轻量级的、开放的、简单的、在设计上是易于实现的。这些特性使得 MQTT 非常适合于许多场景,包括受限的环境,比如 M2M 的通信和物联网 IoT 通信,只需一点点计算资源和一点网络带宽就可以实现。

引用官方 MQTT3.1.1 规范的描述:
MQTT 规范中的摘要说的很好,描述了 MQTT 是怎么一回事。它是轻量级的、二进制的通信协议,在传输数据方面优于 HTTP 协议,因为它有最小的数据包开销。另一个重要的方面是,MQTT 极其容易在客户端实现。这完全满足资源受限的设备的需求。事实上,这也是 MQTT 发明的目标之一。

二、MQTT 的历史

MQTT 是 IBM 公司的安迪·斯坦福·克拉克和 Arcom 公司的阿伦·尼珀于 1999 年创建的协议,其目标是创建一个支持低电量、低带宽消耗的通信协议,主要用于通过卫星通信连接石油管道。他们指定了以下的目标:

1)简单、易实现
2)提供了数据交付 QoS
3)轻量级、高效的带宽利用
4)数据不可知
5)连续的会话感知

这些目标到目前仍然是 MQTT 的核心,但是 MQTT 的焦点已经从专有的嵌入式系统转移到了物联网 IoT。另一个比较困惑的是 MQTT 术语的缩写,原先是 Message Queuing Telemetry Transport,消息队列遥测传输,现在则没有缩写的说法,MQTT 就是 MQTT。其次,MQTT 不是消息队列相关的协议,也不是消息队列的解决方案,尽管它在某些场景下也需要消息队列,但一定要认清这一点。IBM 在内部使用 MQTT 很久,在 2010 年终于对外免费开放,任何人都可以实现它、使用它。

三、OASIS 标准和 MQTT 当前版本

MQTT 大约发布 3 年后,IBM 宣布 MQTT 应该被 OASIS 标准化,就像 AMQP、SAML、DocBook 标准化那样。整个标准化历时约 1 年,在 2014 年 10 月 29 日 MQTT 正式成为 OASIS 的官方标准,发布了最新的 MQTT 协议标准 3.1.1 版。MQTT 从 3.1 版到 3.1.1 版只是小版本的迭代,变化极小。总的来说,MQTT 3.1.1 是对 3.1 规范进行了改善,澄清了模糊之处,并尽可能使之向后兼容。而且一些最需要的新功能也包含进这个版本,所以 3.1.1 版不仅是维护版本。

四、MQTT 3.1 和 3.1.1 版的区别

在 3.1.1 版中,主要的改变有 6 个:

1)Session Present Flag

如果客户端使用持久会话进行连接(这意味着客户端不使用干净的会话),那么在 CONNACK 消息会引入一个额外的标志,以指示该 Broker 代理已经有了与客户端早先的会话信息(比如客户端订阅信息、队列消息活其他信息)。这是一个重要的新功能,它可以实现更高效的通信。现在,客户端得到反馈,如果 Broker 经纪人已经有了客户端的订阅,如果标志设置为 false,那么客户端只需订阅新主题。

2)失败订阅的附加错误码

在 MQTT 3.1.1 之前,客户端要查询自己的订阅是否被 Broker 经纪人批准,这是不可能的。这种情况在采用细粒度权限的 MQTT 主题管理时就可能出现。在 3.1.1 版新规范中,在 MQTT SUBACK 消息中新增了一个错误码 0x80,让​​客户端知道自己的订阅是否被禁止。

3)匿名 MQTT 客户端

如果使用场景需要临时的或匿名的 MQTT 客户端,在 3.1.1 版得到支持,可以设置 MQTT 客户端标识符为零字节长度。那么 MQTT 的 Broker 会自动分配给客户端一个临时的随机标识符。这一个特性非常有用,尤其是当客户端只需做发布、不需要订阅的情况,此时客户端无需做基于客户端 ID 的授权。

4)即时发布或不等待响应的突发 MQTT 消息

3.1.1 版为 MQTT 客户端设计了一个非常有趣的新功能,那就是客户端可以直接发送 MQTT PUBLISH 消息而无需等待 Broker 的 CONNACK 响应。这非常适用于微型、受限的 MQTT 客户端做连接 CONNECT、发布 PUBLISH、断开 DISCONNECT,而不需要处理来自 Broker 的响应的情况。这也适用于只关心尽可能发送数据而不维持长时间 TCP 连接的处于突发模式的客户端。当然,成熟的 Broker 在检查客户端是否被允许发布到这些主题之前,是不会发布消息的。

5)客户端 ID 可以很长

在 MQTT 3.1 版,每个客户 ID 不能超过 23 字节,这一点非常不方便,并能导致许多麻烦,例如客户端标识符要使用 UUID 的场景。在 3.1.1 版,Broker 可以使用 65535 字节的客户端 ID。

6)其他低级别的更改

  • 在 CONNECT 的 Header 报头中,协议名从 MQIsdp 改为 MQTT。这节省了两字节的开销,并使得协议名称更易读。
  • 所有的字符串编码现在统一为 UTF-8。
  • 协议级字节从 3 字节增加到 4 字节。
  • 在 WebSockets 上的 MQTT 通信(MQTT over WebSockets)现在终于确定。在 IANA 的标识符是 mqtt。

注:IANA(The Internet Assigned Numbers Authority,互联网数字分配机构)是负责协调一些使 Internet 正常运作的机构。由于 Internet 已经成为一个全球范围的不受集权控制的网络,为了使网络在全球范围内协调一致,有对互联网一些关键的部分达成技术共识的需要,这就是 IANA 的任务。
推荐使用 MQTT 3.1.1。

MQTT 基础——Part 2. 发布 / 订阅模式  http://www.linuxidc.com/Linux/2016-10/136404.htm

本文永久更新链接地址 :http://www.linuxidc.com/Linux/2016-10/136408.htm

正文完
星哥玩云-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2022-01-21发表,共计2612字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中

星哥玩云

星哥玩云
星哥玩云
分享互联网知识
用户数
4
文章数
19356
评论数
4
阅读量
8319972
文章搜索
热门文章
星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

星哥带你玩飞牛 NAS-6:抖音视频同步工具,视频下载自动下载保存 前言 各位玩 NAS 的朋友好,我是星哥!...
星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

星哥带你玩飞牛 NAS-3:安装飞牛 NAS 后的很有必要的操作 前言 如果你已经有了飞牛 NAS 系统,之前...
星哥带你玩飞牛NAS-7:手把手教你免费内网穿透-Cloudflare tunnel

星哥带你玩飞牛NAS-7:手把手教你免费内网穿透-Cloudflare tunnel

星哥带你玩飞牛 NAS-7:手把手教你免费内网穿透 -Cloudflare tunnel 前言 大家好,我是星...
星哥带你玩飞牛NAS-2:飞牛配置RAID磁盘阵列

星哥带你玩飞牛NAS-2:飞牛配置RAID磁盘阵列

星哥带你玩飞牛 NAS-2:飞牛配置 RAID 磁盘阵列 前言 大家好,我是星哥之前星哥写了《星哥带你玩飞牛 ...
星哥带你玩飞牛NAS-1:安装飞牛NAS

星哥带你玩飞牛NAS-1:安装飞牛NAS

星哥带你玩飞牛 NAS-1:安装飞牛 NAS 前言 在家庭和小型工作室场景中,NAS(Network Atta...
阿里云CDN
阿里云CDN-提高用户访问的响应速度和成功率
随机文章
星哥带你玩飞牛 NAS-10:备份微信聊天记录、数据到你的NAS中!

星哥带你玩飞牛 NAS-10:备份微信聊天记录、数据到你的NAS中!

星哥带你玩飞牛 NAS-10:备份微信聊天记录、数据到你的 NAS 中! 大家对「数据安全感」的需求越来越高 ...
把小米云笔记搬回家:飞牛 NAS 一键部署,小米云笔记自动同步到本地

把小米云笔记搬回家:飞牛 NAS 一键部署,小米云笔记自动同步到本地

把小米云笔记搬回家:飞牛 NAS 一键部署,小米云笔记自动同步到本地 大家好,我是星哥,今天教大家在飞牛 NA...
星哥带你玩飞牛NAS-14:解锁公网自由!Lucky功能工具安装使用保姆级教程

星哥带你玩飞牛NAS-14:解锁公网自由!Lucky功能工具安装使用保姆级教程

星哥带你玩飞牛 NAS-14:解锁公网自由!Lucky 功能工具安装使用保姆级教程 作为 NAS 玩家,咱们最...
浏览器自动化工具!开源 AI 浏览器助手让你效率翻倍

浏览器自动化工具!开源 AI 浏览器助手让你效率翻倍

浏览器自动化工具!开源 AI 浏览器助手让你效率翻倍 前言 在 AI 自动化快速发展的当下,浏览器早已不再只是...
星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

星哥带你玩飞牛 NAS-3:安装飞牛 NAS 后的很有必要的操作 前言 如果你已经有了飞牛 NAS 系统,之前...

免费图片视频管理工具让灵感库告别混乱

一言一句话
-「
手气不错
免费获得大模型的Api-Key的方法:英伟达提供GLM-4.7、Minimax M2.1模型和GitHub的AI大模型API申请

免费获得大模型的Api-Key的方法:英伟达提供GLM-4.7、Minimax M2.1模型和GitHub的AI大模型API申请

  免费获得大模型的 Api-Key 的方法:英伟达提供 GLM-4.7、Minimax M2.1 ...
飞牛NAS升级到最新版,有线无法获取IP、无线网络莫名打开的BUG问题

飞牛NAS升级到最新版,有线无法获取IP、无线网络莫名打开的BUG问题

  飞牛 NAS 升级到最新版,有线无法获取 IP、无线网络莫名打开的 BUG 问题 星哥的飞牛 N...
150元打造低成本NAS小钢炮,捡一块3865U工控板

150元打造低成本NAS小钢炮,捡一块3865U工控板

150 元打造低成本 NAS 小钢炮,捡一块 3865U 工控板 一块二手的熊猫 B3 工控板 3865U,搭...
开发者福利:免费 .frii.site 子域名,一分钟申请即用

开发者福利:免费 .frii.site 子域名,一分钟申请即用

  开发者福利:免费 .frii.site 子域名,一分钟申请即用 前言 在学习 Web 开发、部署...
仅2MB大小!开源硬件监控工具:Win11 无缝适配,CPU、GPU、网速全维度掌控

仅2MB大小!开源硬件监控工具:Win11 无缝适配,CPU、GPU、网速全维度掌控

还在忍受动辄数百兆的“全家桶”监控软件?后台偷占资源、界面杂乱冗余,想查个 CPU 温度都要层层点选? 今天给...