0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

一文讀懂物聯(lián)網(wǎng)中的MQTT協(xié)議

嵌入式情報局 ? 來源:嵌入式情報局 ? 2023-10-17 09:40 ? 次閱讀

物聯(lián)網(wǎng)曾被認(rèn)為是繼計(jì)算機(jī)、互聯(lián)網(wǎng)之后,信息技術(shù)行業(yè)的第三次浪潮。隨著基礎(chǔ)通訊設(shè)施的不斷完善,尤其是 5G 的出現(xiàn),進(jìn)一步降低了萬物互聯(lián)的門檻和成本。物聯(lián)網(wǎng)本身也是 AI區(qū)塊鏈應(yīng)用很好的落地場景之一,各大云服務(wù)商也在紛紛上架物聯(lián)網(wǎng)平臺和服務(wù)。

物聯(lián)網(wǎng)通訊是物聯(lián)網(wǎng)的一個核心內(nèi)容,目前物聯(lián)網(wǎng)的通訊協(xié)議并沒有一個統(tǒng)一的標(biāo)準(zhǔn),比較常見的有MQTT、CoAP、DDS、XMPP 等,在這其中,MQTT(消息隊(duì)列遙測傳輸協(xié)議)應(yīng)該是應(yīng)用最廣泛的標(biāo)準(zhǔn)之一。目前,MQTT 已逐漸成為 IoT 領(lǐng)域最熱門的協(xié)議,也是國內(nèi)外各大物聯(lián)網(wǎng)平臺最主流的傳輸協(xié)議,阿里云 IoT 物聯(lián)網(wǎng)平臺很多設(shè)備都是通過 MQTT 接入。

1、MQTT 簡介

《MQTT 協(xié)議規(guī)范中文版》一書中對 MQTT(Message Queuing Telemetry Transport,消息隊(duì)列遙測傳輸)進(jìn)行了描述:

MQTT 是一種基于客戶端服務(wù)端架構(gòu)的發(fā)布/訂閱模式的消息傳輸協(xié)議。它的設(shè)計(jì)思想是輕巧、開放、簡單、規(guī)范,易于實(shí)現(xiàn)。這些特點(diǎn)使得它對很多場景來說都是很好的選擇,特別是對于受限的環(huán)境如機(jī)器與機(jī)器的通信M2M)以及物聯(lián)網(wǎng)環(huán)境(IoT)。----MQTT 協(xié)議中文版

與HTTP 協(xié)議一樣,MQTT 協(xié)議也是應(yīng)用層協(xié)議,工作在 TCP/IP 四層模型中的最上層(應(yīng)用層),構(gòu)建于 TCP/IP協(xié)議上。MQTT 最大優(yōu)點(diǎn)在于,可以以極少的代碼和有限的帶寬,為連接遠(yuǎn)程設(shè)備提供實(shí)時可靠的消息服務(wù)。作為一種低開銷、低帶寬占用的即時通訊協(xié)議,使其在物聯(lián)網(wǎng)、小型設(shè)備、移動應(yīng)用等方面有較廣泛的應(yīng)用。

如今,MQTT 成為了最受歡迎的物聯(lián)網(wǎng)協(xié)議,已廣泛應(yīng)用于車聯(lián)網(wǎng)、智能家居、即時聊天應(yīng)用和工業(yè)互聯(lián)網(wǎng)等領(lǐng)域。目前通過 MQTT 協(xié)議連接的設(shè)備已經(jīng)過億,這些都得益于 MQTT 協(xié)議為設(shè)備提供了穩(wěn)定、可靠、易用的通信基礎(chǔ)。

2、MQTT 的主要特性

MQTT 協(xié)議是為工作在低帶寬、不可靠網(wǎng)絡(luò)的遠(yuǎn)程傳感器和控制設(shè)備之間的通訊而設(shè)計(jì)的協(xié)議,它具有以下主要的幾項(xiàng)特性:

①、使用發(fā)布/訂閱消息模式,提供一對多的消息發(fā)布,解除應(yīng)用程序耦合。

②、基于 TCP/IP 提供網(wǎng)絡(luò)連接。主流的 MQTT 是基于 TCP 連接進(jìn)行數(shù)據(jù)推送的,但是同樣也有基于 UDP 的版本,叫做 MQTT-SN。

③、支持 QoS 服務(wù)質(zhì)量等級。根據(jù)消息的重要性不同設(shè)置不同的服務(wù)質(zhì)量等級。

④、小型傳輸,開銷很小,協(xié)議交換最小化,以降低網(wǎng)絡(luò)流量。這就是為什么在介紹里說它非常適合"在物聯(lián)網(wǎng)領(lǐng)域,傳感器與服務(wù)器的通信,信息的收集",要知道嵌入式設(shè)備的運(yùn)算能力和帶寬都相對薄弱,使用這種協(xié)議來傳遞消息再適合不過了,在手機(jī)移動應(yīng)用方面,MQTT 是一種不錯的 Android 消息推送方案。

⑤、使用 will 遺囑機(jī)制來通知客戶端異常斷線。

⑥、基于主題發(fā)布/訂閱消息,對負(fù)載內(nèi)容屏蔽的消息傳輸。

⑦、支持心跳機(jī)制。

3、MQTT 歷史

MQTT 協(xié)議最初版本是在 1999 年建立的,該協(xié)議的發(fā)明人是的 Andy Stanford-Clark 和 Arlen Nipper。

MQTT 最初是用于石油管道的傳感器與衛(wèi)星之間數(shù)據(jù)傳輸。他們當(dāng)時正在開發(fā)一個利用衛(wèi)星通訊監(jiān)控輸油管道的項(xiàng)目,為了實(shí)現(xiàn)這個項(xiàng)目要求,他們需要開發(fā)一種用于嵌入式設(shè)備的通訊協(xié)議,這種通訊協(xié)議必須滿足以下條件:

易于實(shí)現(xiàn),服務(wù)器必須要實(shí)現(xiàn)成千上萬個客戶端的接入

數(shù)據(jù)傳輸?shù)姆?wù)質(zhì)量可控,根據(jù)數(shù)據(jù)的重要性和特性,設(shè)置不同等級的服務(wù)質(zhì)量

占用帶寬小,單次數(shù)據(jù)量小,但不能出錯

必須能夠適應(yīng)高延遲、掉線、斷網(wǎng)等網(wǎng)絡(luò)通信不可靠的風(fēng)險

設(shè)備連接狀態(tài)可知,云端與設(shè)備端保持長連接

通過以上幾個條件可知:

MQTT 服務(wù)器可以連接大量的遠(yuǎn)程傳感器和控制設(shè)備,與遠(yuǎn)程客戶端保持長連接,具有一定的實(shí)時性。

云端向設(shè)備端發(fā)送消息,設(shè)備端可以在最短的時間內(nèi)接收到并作出回應(yīng)。

MQTT 更適合需要實(shí)時控制的場合,尤其適合執(zhí)行器。

云端與客戶端需要保持長連接,要能夠獲取到設(shè)備的連接狀態(tài),就需要時不時地發(fā)送心跳包,這就不會省電,所以,MQTT 并不適合低功耗場合。

可以看出,MQTT 從誕生之初就是專為低帶寬、高延遲或不可靠的網(wǎng)絡(luò)而設(shè)計(jì)的。雖然歷經(jīng)幾十年的更新和變化,以上這些特點(diǎn)仍然是 MQTT 協(xié)議的核心特點(diǎn)。但是與最初不同的是,MQTT 協(xié)議已經(jīng)從嵌入式系統(tǒng)應(yīng)用拓展到開放的物聯(lián)網(wǎng)(IoT)領(lǐng)域。

4、MQTT 版本

目前 MQTT 主流版本有兩個,分別是 MQTT3.1.1 和 MQTT5。MQTT3.1.1 是在 2014 年 10 月發(fā)布的,而 MQTT5 是在 2019 年 3 月發(fā)布的。雖然 MQTT3.1.1 與 MQTT5 在時間相差了將近五年,但是 MQTT3.1.1作為一個經(jīng)典的版本,目前仍然是主流版本,能夠滿足大部分實(shí)際需求。

MQTT5 是在 MQTT3.1.1 的基礎(chǔ)上進(jìn)行了升級,因此 MQTT5 是完全兼容 MQTT3.1.1 的。而 MQTT5 是 在 MQTT3.1.1 的基礎(chǔ)上添加了更多的功能、補(bǔ)充完善 MQTT 協(xié)議。

2dd63b88-6c31-11ee-939d-92fbcf53809c.png

5、MQTT 協(xié)議

MQTT 是一種基于客戶端-服務(wù)端架構(gòu)(C/S)的消息傳輸協(xié)議,所以在 MQTT 協(xié)議通信中,有兩個最為重要的角色,它們便是服務(wù)端和客戶端。

1)服務(wù)端

MQTT 服務(wù)端通常是一臺服務(wù)器(broker),它是 MQTT 信息傳輸?shù)臉屑~,負(fù)責(zé)將 MQTT 客戶端發(fā)送來的信息傳遞給 MQTT 客戶端;MQTT 服務(wù)端還負(fù)責(zé)管理 MQTT 客戶端,以確保客戶端之間的通訊順暢,保證 MQTT 信息得以正確接收和準(zhǔn)確投遞。

2)客戶端

MQTT 客戶端可以向服務(wù)端發(fā)布信息,也可以從服務(wù)端收取信息;我們把客戶端發(fā)送信息的行為稱為“發(fā)布”信息。而客戶端要想從服務(wù)端收取信息,則首先要向服務(wù)端“訂閱”信息?!坝嗛啞毙畔⑦@一操作很像我們在使用微信時“關(guān)注”了某個公眾號,當(dāng)公眾號的作者發(fā)布新的文章時,微信官方會向關(guān)注了該公眾號的所有用戶發(fā)送信息,告訴他們有新文章更新了,以便用戶查看。

3)MQTT 主題

上面我們講到了,客戶端想要從服務(wù)器獲取信息,首先需要訂閱信息,那客戶端如何訂閱信息呢?這里我們要引入“主題(Topic)”的概念,“主題”在 MQTT 通信中是一個非常重要的概念,客戶端發(fā)布信息以及訂閱信息都是圍繞“主題”來進(jìn)行的,并且 MQTT 服務(wù)端在管理 MQTT 信息時,也是使用“主題”來控制的。

客戶端發(fā)布消息時需要為消息指定一個“主題”,表示將消息發(fā)布到該主題;而對于訂閱消息的客戶端來說,可通過訂閱“主題”來訂閱消息,這樣當(dāng)其它客戶端或自己(當(dāng)前客戶端)向該主題發(fā)布消息時,MQTT 服務(wù)端就會將該主題的信息發(fā)送給該主題的訂閱者(客戶端)。

服務(wù)端如何通過“主題”來控制客戶端之間的信息通訊,看下圖實(shí)例:

2dde33ce-6c31-11ee-939d-92fbcf53809c.png

在以上圖示中一共有三個 MQTT 客戶端,它們分別是開發(fā)板、手機(jī)和電腦。MQTT 服務(wù)端在管理 MQTT通信時使用了“主題”來對信息進(jìn)行管理。

比如上圖所示,假設(shè)我們需要利用手機(jī)和電腦獲取開發(fā)板在運(yùn)行過程中 SoC 芯片的溫度,那么首先電腦和手機(jī)這兩個客戶端需要向 MQTT 服務(wù)器訂閱主題“芯片溫度”;接下來,當(dāng)開發(fā)板客戶端向服務(wù)端的“芯片溫度”主題發(fā)布信息(假設(shè)信息的內(nèi)容就是當(dāng)前的溫度值)后,服務(wù)端就會首先檢查都有哪些客戶端訂閱了“芯片溫度”這一主題的信息,而當(dāng)它發(fā)現(xiàn)訂閱了該主題的客戶端有一個手機(jī)和一個電腦,于是服務(wù)端就會將剛剛收到的“芯片溫度”信息轉(zhuǎn)發(fā)給訂閱了該主題的手機(jī)和電腦客戶端。

通過以上的這種實(shí)例,手機(jī)和電腦便可以獲取到開發(fā)板運(yùn)行時 SoC 芯片的溫度值。

以上實(shí)例中,開發(fā)板是“芯片溫度”主題的發(fā)布者,而手機(jī)和電腦則是該主題的訂閱者。

值得注意的是,MQTT 客戶端在通信時,角色往往不是單一的,一個客戶端既可以作為信息發(fā)布者也可以同時作為信息訂閱者。如下圖所示:

2de264e4-6c31-11ee-939d-92fbcf53809c.png

上圖中的所有客戶端都是圍繞“LED 控制”這一主題進(jìn)行通信。此時,對于“LED 控制”這一主題來說,手機(jī)和電腦客戶端成為了 MQTT 信息的發(fā)布者而開發(fā)板則成為了 MQTT 信息的訂閱者(接收者)。

所以由此可知,針對不同的主題,MQTT 客戶端可以切換自己的角色,它們可能對主題 A 來說是信息發(fā)布者,但是對于主題 B 就成了信息訂閱者,所以一個 MQTT 客戶端它的角色并不是固定的,所以大家一定要理解“主題”這個概念。

4)MQTT 發(fā)布/訂閱特性

從以上實(shí)例我們可以看到,MQTT 通信的核心樞紐是 MQTT 服務(wù)端,它負(fù)責(zé)將 MQTT 客戶端發(fā)送來的信息傳遞給 MQTT 客戶端,還負(fù)責(zé)管理 MQTT 客戶端,以確??蛻舳酥g的通訊順暢,保證 MQTT 信息得以正確接收和準(zhǔn)確投遞。

正是因?yàn)橛辛朔?wù)端對 MQTT 信息的接收、儲存、處理和發(fā)送,客戶端在發(fā)布和訂閱信息時,可以相互獨(dú)立、且在空間上可以分離、時間上可以異步,這就是 MQTT 發(fā)布/訂閱的特性:客戶端相互獨(dú)立、空間上可分離、時間上可異步,具體介紹如下:

客戶端相互獨(dú)立:MQTT 客戶端是一個個獨(dú)立的個體,它們無需了解彼此的存在,依然可以實(shí)現(xiàn)信息交流。

空間上分離:空間上分離相對容易理解,MQTT 客戶端以及 MQTT 服務(wù)端它們在通信時是處于同一個通信網(wǎng)絡(luò)中的,這個網(wǎng)絡(luò)可以是互聯(lián)網(wǎng)或者局域網(wǎng);只要客戶端聯(lián)網(wǎng),無論他們遠(yuǎn)在天邊還是近在眼前,都可以實(shí)現(xiàn)彼此間的通訊交流;其實(shí)網(wǎng)絡(luò)通信本就是如此,所以并不是 MQTT 通信所特有的。

時間上可異步:MQTT 客戶端在發(fā)送和接收信息時無需同步。這一特點(diǎn)對物聯(lián)網(wǎng)設(shè)備尤為重要,前面我們也介紹了,MQTT 從誕生之初就是專為低帶寬、高延遲或不可靠的網(wǎng)絡(luò)而設(shè)計(jì)的,高延遲和不可靠網(wǎng)絡(luò)必然就會導(dǎo)致時間上的異步;物聯(lián)網(wǎng)設(shè)備在運(yùn)行過程中發(fā)生意外掉線是非常正常的情況。

6、總結(jié)

向大家介紹了 MQTT 通信的基本原理,在 MQTT 通信中,1 個服務(wù)端、多個客戶端之間圍繞“主題”進(jìn)行了通信,所以重要在于大家需要理解各個客戶端的相互關(guān)系以及服務(wù)端在其中所起的作用,并且理解“主題”這個概念以及 MQTT 發(fā)布/訂閱模式的特性,后面向大家介紹具體的通信過程時,要迅速的反應(yīng)過來。

注意:對于 MQTT 發(fā)布/訂閱模式的特性,我們總結(jié)的幾個特點(diǎn)中都有一個“可”字。這個“可”字意味著客戶端彼此之間可以獨(dú)立,空間可以分離,時間可以異步。在我們實(shí)際應(yīng)用中,客戶端之間的關(guān)系既可以獨(dú)立也可以相互依存。在空間上,既可以相距甚遠(yuǎn),也可以彼此相鄰。在時間上,既可以異步也可以同步。這個“可”字所體現(xiàn)的是 MQTT 通訊的靈活性。






審核編輯:劉清

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 傳感器
    +關(guān)注

    關(guān)注

    2541

    文章

    49961

    瀏覽量

    747503
  • 物聯(lián)網(wǎng)
    +關(guān)注

    關(guān)注

    2894

    文章

    43313

    瀏覽量

    366431
  • 狀態(tài)機(jī)
    +關(guān)注

    關(guān)注

    2

    文章

    489

    瀏覽量

    27394
  • MQTT協(xié)議
    +關(guān)注

    關(guān)注

    0

    文章

    93

    瀏覽量

    5308
  • TCP通信
    +關(guān)注

    關(guān)注

    0

    文章

    146

    瀏覽量

    4184

原文標(biāo)題:一文讀懂物聯(lián)網(wǎng)中的大拿-MQTT協(xié)議

文章出處:【微信號:嵌入式情報局,微信公眾號:嵌入式情報局】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    聯(lián)網(wǎng)傳輸協(xié)議MQTT到底是個什么?

    MQTT是什么?MQTT聯(lián)網(wǎng)傳輸協(xié)議,它被設(shè)計(jì)用于輕量級的發(fā)布/訂閱式消息傳輸,旨在為低
    發(fā)表于 01-08 11:27

    工業(yè)無線MQTT聯(lián)網(wǎng)網(wǎng)關(guān)

    。通博聯(lián)的工業(yè)聯(lián)網(wǎng)網(wǎng)關(guān)中有款采用 MQTT聯(lián)網(wǎng)
    發(fā)表于 02-07 14:00

    萌新闖關(guān)之聯(lián)網(wǎng)MQTT協(xié)議梳理

    目前大家的進(jìn)度已經(jīng)推進(jìn)到使用聯(lián)網(wǎng)協(xié)議進(jìn)行控制終端設(shè)備了,先頭部隊(duì)已經(jīng)完整的移植了MQTT協(xié)議到我們的開發(fā)板上了,既然應(yīng)用端已經(jīng)實(shí)現(xiàn),作為作
    發(fā)表于 11-27 00:23

    讀懂什么是NEC協(xié)議

    讀懂什么是NEC協(xié)議?
    發(fā)表于 10-15 09:22

    聯(lián)網(wǎng)的基石-MQTT協(xié)議初識

    1、聯(lián)網(wǎng)的基石-mqtt協(xié)議初識隨著 5G 時代的來臨,萬互聯(lián)的偉大構(gòu)想正在成為現(xiàn)實(shí)。聯(lián)網(wǎng)
    發(fā)表于 09-08 16:03

    如何采用mqtt協(xié)議實(shí)現(xiàn)聯(lián)網(wǎng)模塊消息推送?

    如何采用mqtt協(xié)議實(shí)現(xiàn)聯(lián)網(wǎng)模塊消息推送
    發(fā)表于 11-03 06:55

    教你快速讀懂MQTT網(wǎng)關(guān)

    MQTT種發(fā)布(publish)/訂閱(subscribe)協(xié)議,MQTT協(xié)議采用發(fā)布/訂閱模式,所有的
    發(fā)表于 03-24 16:09 ?1708次閱讀

    聯(lián)網(wǎng)傳輸協(xié)議MQTT的優(yōu)勢

    聯(lián)網(wǎng)傳輸協(xié)議為什么首選MQTT?
    的頭像 發(fā)表于 01-09 14:46 ?3974次閱讀

    聯(lián)網(wǎng)傳輸協(xié)議MQTT的優(yōu)勢有哪些

    MQTT聯(lián)網(wǎng)傳輸協(xié)議,它被設(shè)計(jì)用于輕量級的發(fā)布/訂閱式消息傳輸,旨在為低帶寬和不穩(wěn)定的網(wǎng)絡(luò)環(huán)境
    發(fā)表于 11-26 14:23 ?2909次閱讀

    聯(lián)網(wǎng)協(xié)議MQTT

    的,這些特點(diǎn)使它適用范圍非常廣泛。在很多情況下,包括受限的環(huán)境,作為種低開銷、低帶寬占用的即時通訊協(xié)議,使其在聯(lián)網(wǎng)、小型設(shè)備、移動應(yīng)用
    的頭像 發(fā)表于 11-22 09:53 ?1374次閱讀
    <b class='flag-5'>物</b><b class='flag-5'>聯(lián)網(wǎng)</b><b class='flag-5'>協(xié)議</b><b class='flag-5'>MQTT</b>

    聯(lián)網(wǎng)應(yīng)用,為什么MQTT干掉了HTTP?

    HTTP作為當(dāng)下使用最為廣泛的協(xié)議,但隨著聯(lián)網(wǎng)行業(yè)的發(fā)展,MQTT在過去的幾年也受到了大量
    的頭像 發(fā)表于 04-27 09:33 ?608次閱讀
    <b class='flag-5'>物</b><b class='flag-5'>聯(lián)網(wǎng)</b>應(yīng)用<b class='flag-5'>中</b>,為什么<b class='flag-5'>MQTT</b>干掉了HTTP?

    智聯(lián)聯(lián)分享之聯(lián)網(wǎng)協(xié)議MQTT簡述,MQTT協(xié)議特點(diǎn)

    )基于客戶端/服務(wù)器的信息發(fā)布/訂閱的聯(lián)網(wǎng)常用傳輸協(xié)議。1999年由開發(fā)商IBM發(fā)布,MQTT協(xié)議是輕量、簡單、開放和易于實(shí)現(xiàn)的,這些特點(diǎn)
    的頭像 發(fā)表于 03-28 18:10 ?1155次閱讀
    智聯(lián)<b class='flag-5'>物</b>聯(lián)分享之<b class='flag-5'>物</b><b class='flag-5'>聯(lián)網(wǎng)</b><b class='flag-5'>協(xié)議</b><b class='flag-5'>MQTT</b>簡述,<b class='flag-5'>MQTT</b><b class='flag-5'>協(xié)議</b>特點(diǎn)

    聯(lián)網(wǎng)MQTT協(xié)議概述

    MQTT協(xié)議已經(jīng)成了聯(lián)網(wǎng)通信中的個熱詞,今天我們起來學(xué)習(xí)
    的頭像 發(fā)表于 11-25 14:09 ?1162次閱讀

    了解聯(lián)網(wǎng)通信協(xié)議MQTT如何助力無線模塊廣泛連接

    引言:隨著聯(lián)網(wǎng)技術(shù)的飛速發(fā)展,無線模塊在連接各種智能設(shè)備、實(shí)現(xiàn)數(shù)據(jù)交互扮演著至關(guān)重要的角色。為了有效滿 足聯(lián)網(wǎng)通信的多樣化需求,
    的頭像 發(fā)表于 06-07 16:10 ?717次閱讀
    <b class='flag-5'>一</b><b class='flag-5'>文</b>了解<b class='flag-5'>物</b><b class='flag-5'>聯(lián)網(wǎng)通信協(xié)議</b>之<b class='flag-5'>MQTT</b>如何助力無線模塊廣泛連接

    MQTT網(wǎng)關(guān):聯(lián)網(wǎng)的關(guān)鍵橋梁

    MQTT網(wǎng)關(guān):聯(lián)網(wǎng)的關(guān)鍵橋梁 在聯(lián)網(wǎng)(IoT)的廣闊世界
    的頭像 發(fā)表于 08-22 14:15 ?190次閱讀
    <b class='flag-5'>MQTT</b>網(wǎng)關(guān):<b class='flag-5'>物</b><b class='flag-5'>聯(lián)網(wǎng)</b><b class='flag-5'>中</b>的關(guān)鍵橋梁