开发者社区> chszs> 正文

MQTT基础——Part 1. 认识MQTT

简介: 版权声明:本文为博主chszs的原创文章,未经博主允许不得转载。 https://blog.csdn.net/chszs/article/details/51635870 MQTT基础——Part 1. 认识MQTT 作者:chszs,未经博主允许不得转载。
+关注继续查看
版权声明:本文为博主chszs的原创文章,未经博主允许不得转载。 https://blog.csdn.net/chszs/article/details/51635870

MQTT基础——Part 1. 认识MQTT

作者:chszs,未经博主允许不得转载。经许可的转载需注明作者和博客主页:http://blog.csdn.net/chszs

本文是《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协议简介
MQTT协议简介
55 0
MQTT协议简介2
MQTT协议简介
24 0
Paho MQTT 客户端接入阿里云物联网平台(1)| 学习笔记
快速学习 Paho MQTT 客户端接入阿里云物联网平台(1)
113 0
Paho MQTT 客户端接入阿里云物联网平台(4)| 学习笔记
快速学习 Paho MQTT 客户端接入阿里云物联网平台(4)
244 0
Paho MQTT 客户端接入阿里云物联网平台(3)| 学习笔记
快速学习 Paho MQTT 客户端接入阿里云物联网平台(3)
257 0
Paho MQTT 客户端接入阿里云物联网平台(2)| 学习笔记
快速学习 Paho MQTT 客户端接入阿里云物联网平台(2)
370 0
EMQ
MQTT X v1.8.3 正式发布
MQTT X 1.8.3版本优化了MQTT 5.0 Clean Start的使用方式,为会话过期间隔添加默认值;同时也改进了MQTT X CLI的默认输出显示。
85 0
EMQ
NanoMQ Newsletter 2022-07|v0.10:多路桥接、HTTP 发布 MQTT 消息 API、NanoSDK 支持 MQTT 5.0
v0.10.0已于8月初正式发布,此版本主要增强了桥接功能,新增了发布消息的HTTP API,同时还为NanoSDK增加了MQTT 5.0支持。
174 0
EMQ
MQTT X Newsletter 2022-06 | v1.8.0 发布,新增 MQTT CLI 和 MQTT WebSocket 工具
本月,MQTT X 发布了最新的 1.8.0 版本,新增了 MQTT CLI 和 MQTT WebSocket 客户端工具,支持在终端命令行或桌面浏览器上快速完成对 MQTT 的连接测试。
152 0
simps/mqtt v1.1.1 版本发布,支持 MQTT5 中的大部分 Property
在 MQTT 5.0 协议中增加了很多属性。
110 0
+关注
chszs
文章
问答
视频
文章排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载