首页 > 其他分享 >物联网协议学习 - MQTT协议3.1.1

物联网协议学习 - MQTT协议3.1.1

时间:2023-11-19 17:04:03浏览次数:33  
标签:协议 订阅 主题 信息 MQTT 3.1 服务端 客户端

MQTT是什么

MQTT是一个客户端服务端架构的发布/订阅模式的消息传输协议。轻巧、开放、简单、规范,易于实现。

MQTT是一种消息传递协议,即它是为传输消息而设计的,并使用发布和订阅模型。该模型使得向0个、1个或多个客户端发送消息成为可能。一个有用的类比是电视或广播。电视播音员使用特定的频道播放电视节目,观众调到该频道观看广播。广播员和观众之间没有直接的联系。在MQTT中,发布者发布关于主题的消息,订阅者必须订阅该主题查看消息。


MQTT的特点

  • 易于实现
  • 数据传输的服务质量可控
  • 占用带宽小
  • 传输数据内容不可预知
  • 设备连接状态可知

不难看出,MQTT专为低带宽、高延迟或不可靠的网络而设计的。


MQTT的版本

MQTT主流版本有两个,分别是MQTT3.1.1和MQTT5。MQTT3.1.1是在2014年10月发布的,而MQTT5是在2019年3月发布的。

MQTT3.1.1仍然主流版本。MQTT5是完全兼容MQTT3.1.1的。

物联网协议学习 - MQTT协议3.1.1_MQTT


MQTT基本原理

MQTT服务端

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

MQTT客户端

MQTT客户端可以向服务端发布信息,也可以从服务端收取信息。我们把客户端发送信息的行为称为“发布”信息。而客户端要想从服务端收取信息,则首先要向服务端“订阅”信息。“订阅”信息这一操作很像我们在视频网站订阅某一部电视剧。当这部电视剧上新后,视频网站会向订阅了该剧的用户发送信息,告诉他们有新剧上线了。


MQTT主题

刚刚在讲解MQTT客户端订阅信息时,使用了用户在视频网站订阅电视剧这个例子。在MQTT通讯中,客户端所订阅的是一个个“主题”。MQTT服务端在管理MQTT信息通讯时,就是使用“主题”来控制的

为了便于更好理解服务端是如何通过主题来控制客户端之间的信息通讯,来看看下图实例:

物联网协议学习 - MQTT协议3.1.1_mqtt_02

在以上图示中一共有三个MQTT客户端。它们分别是汽车,手机和电脑。MQTT服务端在管理MQTT通讯时使用了“主题”来对信息进行管理的。比如上图所示,假设我们需要利用手机和电脑获取汽车的速度,那么我们首先要利用电脑和手机向MQTT服务器订阅主题“汽车速度”。接下来,当汽车客户端向服务端的“汽车速度”主题发布信息后服务端就会首检查以下都有哪些客户端订阅了“汽车速度”这一主题的信息。当它发现订阅了该主题的客户端有一个手机和一个电脑,于是服务端就会然后将刚刚收到的“汽车速度”信息转发给订阅了该主题的手机和电脑客户端

在以上实例中,汽车是“汽车速度”主题的发布者,而手机和电脑则是该主题的订阅者。

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

物联网协议学习 - MQTT协议3.1.1_物联网_03

上图中的所有客户端都是围绕“空调温度”这一主题进行通讯的。对于“空调温度”这一主题,手机和电脑客户端成为了MQTT信息的发布者而汽车则成为了MQTT信息的订阅者(接收者)。

可以看到,针对不同的主题,MQTT客户端可以切换自己的角色。它们可能对主题A来说是信息发布者,但是对于主题B就成了信息订阅者


MQTT发布/订阅 特性

从以上实例我们可以看到,MQTT通讯的核心枢纽是MQTT服务端有了服务端对MQTT信息的接收、储存、处理和发送,客户端在发布和订阅信息时,可以相互独立,且在空间上可以分离,时间上可以异步

所说的相互独立、空间和时间分离具体指的是什么呢?

  • 相互可独立MQTT客户端是一个个独立的个体。它们无需了解彼此的存在,仍可实现信息交流。
  • 比如以上实例中汽车客户端在发布“汽车速度”信息时,汽车客户端本身可以完全不知道有多少个MQTT客户端也订阅了“汽车速度”这一主题。而订阅了“汽车速度”主题的手机和电脑客户端也完全不知道彼此的存在。大家只要订阅了“汽车速度”主题,MQTT服务端就会在每次收到新信息时,将信息发送给订阅了“汽车速度”主题的客户端。
  • 空间可分离MQTT客户端在通讯必要条件是连接到了同一个MQTT通讯网络。这个网络可以是互联网或者局域网只要客户端联网,无论他们远在天边还是近在眼前,都可以实现彼此间的通讯交流
  • 时间可异步MQTT客户端在发送和接收信息时无需同步有时物联网设备会发生意外离线的情况。使用以上实例二的场景来作为示例。当汽车在行驶过程中,可能会突然进入隧道,这时汽车可能会断开与MQTT服务端的连接。假设在此时手机客户端向汽车客户端所订阅的“空调温度”主题发布了信息,而汽车恰恰不在线。这时,MQTT服务端可以将“空调温度”主题的新信息保存,待汽车再次上线后,服务端再将“空调温度”信息推送给汽车。【就是说你客户端在主题发布了信息的时候不在线,再次上线的时候还是会推送信息的。】

相互可独立

空间可分离

时间可异步

以上几点概括了MQTT通讯时客户端的相互关系以及服务端在其中所起的作用。讲到这里请注意以上总结的几个特点中都有一个“可”字。这个“可”字意味着客户端彼此之间可以独立,空间可以分离,时间可以异步。在实际应用中,客户端之间的关系既可以独立也可以相互依存。在空间上,既可以相距甚远,也可以彼此相邻。在时间上,既可以异步也可以同步。这个“可”字所体现的是MQTT通讯的灵活性。

留意MQTT通讯的三个特点,彼此可独立,空间可分离、时间可异步


学习网址:

MQTT是什么:http://www.taichi-maker.com/homepage/esp8266-nodemcu-iot/iot-tuttorial/mqtt-tutorial/what-is-mqtt/

MQTT基本原理:http://www.taichi-maker.com/homepage/esp8266-nodemcu-iot/iot-tuttorial/mqtt-tutorial/2-mqtt-basics/

学习目录:http://www.taichi-maker.com/homepage/esp8266-nodemcu-iot/iot-tuttorial/mqtt-tutorial/



标签:协议,订阅,主题,信息,MQTT,3.1,服务端,客户端
From: https://blog.51cto.com/youyeye/8474028

相关文章

  • IP数据报 ipv4 协议
    1.IP数据报 2.Offset计算  3.路由转发表举例  4.XXXXX  ShoelessCai.com值得你的关注!! ......
  • 香山杯决赛2023.11.19
    香山杯决赛附件如下。https://files.cnblogs.com/files/blogs/798207/xsb2023_final.tar.gz?t=1700382211&download=true2023.11.19广东中山回家了两天,见了高中同学,晚上还去中大玩一下,明天回青岛。孤胆英雄,归途远征。以一敌百,天下无双。ezgame攻击有栈溢出漏洞,直接打游......
  • 网络协议地图
    https://support.huawei.com/hedex/hdx.do?docid=EDOC1000105967&id=ZH-CN_CONCEPT_0000001501534705https://support.huawei.com/hedex/hdx.do?docid=EDOC1000105967&id=ZH-CN_CONCEPT_0000001501534705......
  • misc 2023.11.13-11.19
    1.a.将其拖入010中,发现有一串二进制b.我们考虑是不是什么解密,将二进制转换为16进制再转为asciic.得到flag{koekj3s} 2.a.暴力破解,解压文件b.解密之后发现一个奇怪的玩意,经过资料搜索,这是brainfuck代码c.使用解密工具: 3.a.用wireshark打开文件,过滤出HTTP数据包......
  • 2023.11.18 日记
    今天noip打烂了。具体的都在文章里写过了。父亲几年来一直在备考,CSP-S2的那天他刚好考完。最近他轻松了很多。我们家也轻松了好多。所以最近都是他接送我。几个月前他听说我精神状态不佳,他说,要保持一个很严格的生物钟。这正是我所希冀的。他一直保持着很好的生活习惯,他讨......
  • 2023.11.18——每日总结
    学习所花时间(包括上课):9h代码量(行):0行博客量(篇):1篇今天,上午学习,下午学习;我了解到的知识点:1.mybatis明日计划:学习......
  • paho-mqtt api
     ......
  • crypto 2023.11.13-11.19
    1.a.直接用python跑。b.得到flag,此flag为16进制,需要转换为字符串。c.得到flag 2.a.直接爆破猜解:b.得到flag 3.a.直接暴力猜解b.得到flag 4.a.直接使用工具解码b.得到flag 5.a.用python工具解密b.得到10进制的flag,将其转换为16进制,再转换为字符串......
  • 2023.11.18 鲜花
    第一篇鲜花。因为一般想写鲜花的时候都写不了鲜花,在脑子删删补补完了之后已经懒得写了。然后接下来是有针对性的内容。您发个鲜花,我是认真看完了,我真的感动了,我写不出啥话,「最感人的一集」可能听起来有贬义,但我第二条评论很明显都澄清了啊,这纯纯的正面评价啊。我平时说话冲,是这......
  • 2023.11.18 NOIP 游记
    2023.11.18NOIP游记Day-1一大早吃完饭就出发了。路上在摆,想放松一下,只求正常发挥。还是有点紧张,夹杂九分伤心。毕竟已经觉得自己要退了。午饭自助,但是随便吃了两口。心情挺沉重的。一想到是我最后一次比赛了,还是很,,,下午去听了个会,颁奖仪式没听,感觉没啥意思,学长讲话略微听......