物联网曾被认为是继计算机、互联网之后,信息技术行业的第三次浪潮。随着基础通讯设施的不断完善,尤其是 5G 的出现,进一步降低了万物互联的门槛和成本。物联网本身也是 AI 和区块链应用很好的落地场景之一,各大云服务商也在纷纷上架物联网平台和服务。

物联网通讯是物联网的一个核心内容,目前物联网的通讯协议并没有一个统一的标准,比较常见的有MQTT、CoAP、DDS、XMPP 等,在这其中,MQTT(消息队列遥测传输协议)应该是应用最广泛的标准之一。目前,MQTT 已逐渐成为 IoT 领域最热门的协议,也是国内外各大物联网平台最主流的传输协议,阿里云 IoT 物联网平台很多设备都是通过 MQTT 接入。

1、MQTT 简介

《MQTT 协议规范中文版》一书中对 MQTT(Message Queuing Telemetry Transport,消息队列遥测传输)进行了描述:

MQTT 是一种基于客户端服务端架构的发布/订阅模式的消息传输协议。它的设计思想是轻巧、开放、 简单、规范,易于实现。这些特点使得它对很多场景来说都是很好的选择,特别是对于受限的环境如机器与机器的通信(M2M)以及物联网环境(IoT)。----MQTT 协议中文版

与 HTTP 协议一样,MQTT 协议也是应用层协议,工作在 TCP/IP 四层模型中的最上层(应用层),构建于 TCP/IP协议上。MQTT 最大优点在于,可以以极少的代码和有限的带宽,为连接远程设备提供实时可靠的消息服务。作为一种低开销、低带宽占用的即时通讯协议,使其在物联网、小型设备、移动应用等方面有较广泛的应用。

如今,MQTT 成为了最受欢迎的物联网协议,已广泛应用于车联网、智能家居、即时聊天应用和工业互联网等领域。目前通过 MQTT 协议连接的设备已经过亿,这些都得益于 MQTT 协议为设备提供了稳定、可靠、易用的通信基础。

2、MQTT 的主要特性

MQTT 协议是为工作在低带宽、不可靠网络的远程传感器和控制设备之间的通讯而设计的协议,它具 有以下主要的几项特性:

①、使用发布/订阅消息模式,提供一对多的消息发布,解除应用程序耦合。

②、基于 TCP/IP 提供网络连接。主流的 MQTT 是基于 TCP 连接进行数据推送的,但是同样也有基于 UDP 的版本,叫做 MQTT-SN。

③、支持 QoS 服务质量等级。根据消息的重要性不同设置不同的服务质量等级。

④、小型传输,开销很小,协议交换最小化,以降低网络流量。这就是为什么在介绍里说它非常适合"在物联网领域,传感器与服务器的通信,信息的收集",要知道嵌入式设备的运算能力和带宽都相对薄弱,使用这种协议来传递消息再适合不过了,在手机移动应用方面,MQTT 是一种不错的 Android 消息推送方案。

⑤、使用 will 遗嘱机制来通知客户端异常断线。

⑥、基于主题发布/订阅消息,对负载内容屏蔽的消息传输。

⑦、支持心跳机制。

3、MQTT 历史

MQTT 协议最初版本是在 1999 年建立的,该协议的发明人是的 Andy Stanford-Clark 和 Arlen Nipper。

MQTT 最初是用于石油管道的传感器与卫星之间数据传输。他们当时正在开发一个利用卫星通讯监控 输油管道的项目,为了实现这个项目要求,他们需要开发一种用于嵌入式设备的通讯协议,这种通讯协议必须满足以下条件:

⚫ 易于实现,服务器必须要实现成千上万个客户端的接入

⚫ 数据传输的服务质量可控,根据数据的重要性和特性,设置不同等级的服务质量

⚫ 占用带宽小,单次数据量小,但不能出错

⚫ 必须能够适应高延迟、掉线、断网等网络通信不可靠的风险

⚫ 设备连接状态可知,云端与设备端保持长连接

通过以上几个条件可知:

⚫ MQTT 服务器可以连接大量的远程传感器和控制设备,与远程客户端保持长连接,具有一定的实 时性。

⚫ 云端向设备端发送消息,设备端可以在最短的时间内接收到并作出回应。

⚫ MQTT 更适合需要实时控制的场合,尤其适合执行器。

⚫ 云端与客户端需要保持长连接,要能够获取到设备的连接状态,就需要时不时地发送心跳包,这就不会省电,所以,MQTT 并不适合低功耗场合。

可以看出,MQTT 从诞生之初就是专为低带宽、高延迟或不可靠的网络而设计的。虽然历经几十年的更新和变化,以上这些特点仍然是 MQTT 协议的核心特点。但是与最初不同的是,MQTT 协议已经从嵌入式系统应用拓展到开放的物联网(IoT)领域。

4、MQTT 版本

目前 MQTT 主流版本有两个,分别是 MQTT3.1.1 和 MQTT5。MQTT3.1.1 是在 2014 年 10 月发布的,而 MQTT5 是在 2019 年 3 月发布的。虽然 MQTT3.1.1 与 MQTT5 在时间相差了将近五年,但是 MQTT3.1.1作为一个经典的版本,目前仍然是主流版本,能够满足大部分实际需求。

MQTT5 是在 MQTT3.1.1 的基础上进行了升级,因此 MQTT5 是完全兼容 MQTT3.1.1 的。而 MQTT5 是 在 MQTT3.1.1 的基础上添加了更多的功能、补充完善 MQTT 协议。

5、MQTT 协议

MQTT 是一种基于客户端-服务端架构(C/S)的消息传输协议,所以在 MQTT 协议通信中,有两个最为重要的角色,它们便是服务端和客户端。

1)服务端

MQTT 服务端通常是一台服务器(broker),它是 MQTT 信息传输的枢纽,负责将 MQTT 客户端发送来的信息传递给 MQTT 客户端;MQTT 服务端还负责管理 MQTT 客户端,以确保客户端之间的通讯顺畅,保证 MQTT 信息得以正确接收和准确投递。

2)客户端

MQTT 客户端可以向服务端发布信息,也可以从服务端收取信息;我们把客户端发送信息的行为称为 “发布”信息。而客户端要想从服务端收取信息,则首先要向服务端“订阅”信息。“订阅”信息这一操作 很像我们在使用微信时“关注”了某个公众号,当公众号的作者发布新的文章时,微信官方会向关注了该公众号的所有用户发送信息,告诉他们有新文章更新了,以便用户查看。

3)MQTT 主题

上面我们讲到了,客户端想要从服务器获取信息,首先需要订阅信息,那客户端如何订阅信息呢?这里我们要引入“主题(Topic)”的概念,“主题”在 MQTT 通信中是一个非常重要的概念,客户端发布信息以及订阅信息都是围绕“主题”来进行的,并且 MQTT 服务端在管理 MQTT 信息时,也是使用“主题”来控制的。

客户端发布消息时需要为消息指定一个“主题”,表示将消息发布到该主题;而对于订阅消息的客户端 来说,可通过订阅“主题”来订阅消息,这样当其它客户端或自己(当前客户端)向该主题发布消息时,MQTT 服务端就会将该主题的信息发送给该主题的订阅者(客户端)。

服务端如何通过“主题”来控制客户端之间的信息通讯,看下图实例:

在以上图示中一共有三个 MQTT 客户端,它们分别是开发板、手机和电脑。MQTT 服务端在管理 MQTT通信时使用了“主题”来对信息进行管理。

比如上图所示,假设我们需要利用手机和电脑获取开发板在运行过程中 SoC 芯片的温度,那么首先电脑和手机这两个客户端需要向 MQTT 服务器订阅主题“芯片温度”;接下来,当开发板客户端向服务端的“芯片温度”主题发布信息(假设信息的内容就是当前的温度值)后,服务端就会首先检查都有哪些客户端订阅了“芯片温度”这一主题的信息,而当它发现订阅了该主题的客户端有一个手机和一个电脑,于是服务端就会将刚刚收到的“芯片温度”信息转发给订阅了该主题的手机和电脑客户端。

通过以上的这种实例,手机和电脑便可以获取到开发板运行时 SoC 芯片的温度值。

以上实例中,开发板是“芯片温度”主题的发布者,而手机和电脑则是该主题的订阅者。

值得注意的是,MQTT 客户端在通信时,角色往往不是单一的,一个客户端既可以作为信息发布者也 可以同时作为信息订阅者。如下图所示:

上图中的所有客户端都是围绕“LED 控制”这一主题进行通信。此时,对于“LED 控制”这一主题来 说,手机和电脑客户端成为了 MQTT 信息的发布者而开发板则成为了 MQTT 信息的订阅者(接收者)。

所以由此可知,针对不同的主题,MQTT 客户端可以切换自己的角色,它们可能对主题 A 来说是信息发布者,但是对于主题 B 就成了信息订阅者,所以一个 MQTT 客户端它的角色并不是固定的,所以大家一定要理解“主题”这个概念。

4)MQTT 发布/订阅特性

从以上实例我们可以看到,MQTT 通信的核心枢纽是 MQTT 服务端,它负责将 MQTT 客户端发送来的信息传递给 MQTT 客户端,还负责管理 MQTT 客户端,以确保客户端之间的通讯顺畅,保证 MQTT 信息得以正确接收和准确投递。

正是因为有了服务端对 MQTT 信息的接收、储存、处理和发送,客户端在发布和订阅信息时,可以相 互独立、且在空间上可以分离、时间上可以异步,这就是 MQTT 发布/订阅的特性:客户端相互独立、空间上可分离、时间上可异步,具体介绍如下:

⚫ 客户端相互独立:MQTT 客户端是一个个独立的个体,它们无需了解彼此的存在,依然可以实现信息交流。

⚫ 空间上分离:空间上分离相对容易理解,MQTT 客户端以及 MQTT 服务端它们在通信时是处于同一个通信网络中的,这个网络可以是互联网或者局域网;只要客户端联网,无论他们远在天边还是近在眼前,都可以实现彼此间的通讯交流;其实网络通信本就是如此,所以并不是 MQTT 通信所特有的。

⚫ 时间上可异步:MQTT 客户端在发送和接收信息时无需同步。这一特点对物联网设备尤为重要,前面我们也介绍了,MQTT 从诞生之初就是专为低带宽、高延迟或不可靠的网络而设计的,高延迟和不可靠网络必然就会导致时间上的异步;物联网设备在运行过程中发生意外掉线是非常正常的情况

6、总结

向大家介绍了 MQTT 通信的基本原理,在 MQTT 通信中,1 个服务端、多个客户端之间围绕“主题”进行了通信,所以重要在于大家需要理解各个客户端的相互关系以及服务端在其中所起的作用,并且理解“主题”这个概念以及 MQTT 发布/订阅模式的特性,后面向大家介绍具体的通信过程时,要迅速的反应过来。

注意:对于 MQTT 发布/订阅模式的特性,我们总结的几个特点中都有一个“可”字。这 个“可”字意味着客户端彼此之间可以独立,空间可以分离,时间可以异步。在我们实际应用中,客户端之间的关系既可以独立也可以相互依存。在空间上,既可以相距甚远,也可以彼此相邻。在时间上,既可以异步也可以同步。这个“可”字所体现的是 MQTT 通讯的灵活性。

物联网MQTT简单介绍相关推荐

  1. 多比物联MQTT-BOX102 物联网MQTT网关介绍

    多比物联MQTT-BOX102采集各种工控设备(PLC.采集器.仪器仪表和传感器)的数据,并通过MQTT物联网协议或者其它应用协议(如HTTP/MySQL/SQL Server/Oracle等)经由4 ...

  2. 中国移动WMMP物联网协议简单介绍

    这段时间一直在实现中国移动WMMP物联网协议,现在将该协议简单总结一下. 该协议主要是M2M平台通过GPRS网络或者短信远程管理M2M终端,包括分配终端序列号,采集终端配置信息, 配置终端参数, 软件 ...

  3. 物联网终端电池使用简单介绍

    大部分物联网终端都是用电池供电,休眠态电流在uA级别,尽最大可能延长电池的使用时间,本篇文章简单介绍下物联网终端电池的选用. 终端电池一般分为两种:可充电式锂电池以及不可充电电池. 关于可充电锂离子电 ...

  4. 一文读懂物联网 MQTT 协议之基础特性篇

    一.前言 上个月有个读者问我物联网 MQTT 协议实战相关的问题,我说后面会搞,没想到不知不觉一个月了,太忙了,再怎么忙答应的事情还是要给读者一个交代,所以就有了此文. 二.MQTT 协议概要 2.1 ...

  5. 物联网基础知识介绍及常见的几种无线通讯方式和应用

    物联网基础知识介绍 一.物联网定义 二.物联网的特征 三.常用的无线通信方式比较 四.常用的无线通信应用开发 五.物联网体系结构 更多内容... 一.物联网定义 物联网(Internet of Thi ...

  6. 一文读懂物联网 MQTT 协议之实战篇

    一.前言 上一篇我们介绍了 MQTT 协议格式以及相关的特性:一文读懂物联网 MQTT 协议之基础特性篇,这一篇我们就来实战一番,理论得与实践结合,方能吃透 MQTT. 我的那个读者还提到了讲一下 M ...

  7. 物联网mqtt前端怎么开发_物联网世界中的前端开发

    物联网mqtt前端怎么开发 It's IoT Week at SitePoint! All week we're publishing articles focused on the intersec ...

  8. 【EMQX 5.0】1.1 MQTT协议介绍

    1.1  MQTT协议介绍         随着 5G 时代的来临,万物物联的伟大构想正在成为现实.联网的物联网设备在 2018 年已经达到了 70 亿, 在未来两年,仅智能水电气表就将超过10 亿. ...

  9. 1.MQTT协议介绍

    所写博客来自网课视频.本网站或其他网站,只属于资料整理.用于个人学习,如有侵权行为可联系删除. 1.MQTT协议介绍 1.1 MQTT简介 MQTT(Message Queuing Telemetry ...

  10. 向中国电信nb下发命令_中国电信物联网平台使用介绍

    概述 随着物联网的快速发展,三大运营商也部署了NB-IOT的网络,从目前的情况看,中国电信的NB网络是部署的最好的,中国移动和联通的都有不少盲点.三大运营商都发行了自己的物联网SIM卡,计费也比较便宜 ...

最新文章

  1. c语言无限循环while(1)和for(;;)的区别
  2. Java Web 技术栈
  3. “暧昧”的吉本,“疗伤”的芭娜娜
  4. 进击吧! Blazor !第五期 安全
  5. tinycore php,tinycore中文支持
  6. java单例枚举_Java增强枚举的用例
  7. 【Flink】Flink yarn 下报错ClassNotFoundException: org.apache.hadoop.yarn.api.ApplicationConstants$Environ
  8. python爬视频网站数据_python爬虫基础应用----爬取无反爬视频网站
  9. Linux网络服务之DNS(2)
  10. A股开盘:深证区块链50指数涨0.93%,苏宁易购涨停
  11. 有向图的强连通分量--Tarjan算法---代码分析
  12. c++cout不使用科学计数法打印数字
  13. chrome 历史版本和chrome webDriver历史版本
  14. 计算机 未保存,电脑突然关机wps没保存怎么办
  15. Visual Studio 2019专业版密匙
  16. OpenCV情绪识别(Python实现,超简单)
  17. 解决使用 Bluetooth Audio Receiver 蓝牙传音卡顿问题
  18. Netty内置处理器整理
  19. 教师资格证上传照片时显示内部服务器错误怎么解决
  20. 华为防火墙配置策略路由实现多个ISP出接口的智能选路

热门文章

  1. shopxp商城系统对接个人支付宝免签h5支付
  2. java 之DelayQueue实际运用示例
  3. php 磁盘配额,samba服务器安装+磁盘配额笔记
  4. 使用github构建自己网站
  5. Hadoop之仿写搜索引擎
  6. vue的echarts的折线图、柱状图、折线图的使用
  7. 原来String、StringBuffer、StringBuilder底层是这么回事
  8. 【光斑PSF处理】激光光斑数据处理含matlab源码-含文档【0102期】
  9. QCY T3 蓝牙耳机连接电脑 声音断续卡顿
  10. PS学习总结三:修图必备的高阶操作