物聯(lián)網(wǎng)曾被認為是繼計算機、互聯(lián)網(wǎng)之后,信息技術(shù)行業(yè)的第三次浪潮。隨著基礎(chǔ)通訊設(shè)施的不斷完善,尤其是 5G 的出現(xià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)一的標準,比較常見的有MQTT、CoAP、DDS、XMPP 等,在這其中,MQTT(消息隊列遙測傳輸協(xié)議)應(yīng)該是應(yīng)用最廣泛的標準之一。目前,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,消息隊列遙測傳輸)進行了描述:
MQTT 是一種基于客戶端服務(wù)端架構(gòu)的發(fā)布/訂閱模式的消息傳輸協(xié)議。它的設(shè)計思想是輕巧、開放、簡單、規(guī)范,易于實現(xiàn)。這些特點使得它對很多場景來說都是很好的選擇,特別是對于受限的環(huán)境如機器與機器的通信(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)點在于,可以以極少的代碼和有限的帶寬,為連接遠程設(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ò)的遠程傳感器和控制設(shè)備之間的通訊而設(shè)計的協(xié)議,它具有以下主要的幾項特性:
①、使用發(fā)布/訂閱消息模式,提供一對多的消息發(fā)布,解除應(yīng)用程序耦合。
②、基于 TCP/IP 提供網(wǎng)絡(luò)連接。主流的 MQTT 是基于 TCP 連接進行數(shù)據(jù)推送的,但是同樣也有基于 UDP 的版本,叫做 MQTT-SN。
③、支持 QoS 服務(wù)質(zhì)量等級。根據(jù)消息的重要性不同設(shè)置不同的服務(wù)質(zhì)量等級。
④、小型傳輸,開銷很小,協(xié)議交換最小化,以降低網(wǎng)絡(luò)流量。這就是為什么在介紹里說它非常適合"在物聯(lián)網(wǎng)領(lǐng)域,傳感器與服務(wù)器的通信,信息的收集",要知道嵌入式設(shè)備的運算能力和帶寬都相對薄弱,使用這種協(xié)議來傳遞消息再適合不過了,在手機移動應(yīng)用方面,MQTT 是一種不錯的 Android 消息推送方案。
⑤、使用 will 遺囑機制來通知客戶端異常斷線。
⑥、基于主題發(fā)布/訂閱消息,對負載內(nèi)容屏蔽的消息傳輸。
⑦、支持心跳機制。
3、MQTT 歷史
MQTT 協(xié)議最初版本是在 1999 年建立的,該協(xié)議的發(fā)明人是的 Andy Stanford-Clark 和 Arlen Nipper。
MQTT 最初是用于石油管道的傳感器與衛(wèi)星之間數(shù)據(jù)傳輸。他們當時正在開發(fā)一個利用衛(wèi)星通訊監(jiān)控輸油管道的項目,為了實現(xiàn)這個項目要求,他們需要開發(fā)一種用于嵌入式設(shè)備的通訊協(xié)議,這種通訊協(xié)議必須滿足以下條件:
易于實現(xiàn),服務(wù)器必須要實現(xiàn)成千上萬個客戶端的接入
數(shù)據(jù)傳輸?shù)姆?wù)質(zhì)量可控,根據(jù)數(shù)據(jù)的重要性和特性,設(shè)置不同等級的服務(wù)質(zhì)量
占用帶寬小,單次數(shù)據(jù)量小,但不能出錯
必須能夠適應(yīng)高延遲、掉線、斷網(wǎng)等網(wǎng)絡(luò)通信不可靠的風險
設(shè)備連接狀態(tài)可知,云端與設(shè)備端保持長連接
通過以上幾個條件可知:
MQTT 服務(wù)器可以連接大量的遠程傳感器和控制設(shè)備,與遠程客戶端保持長連接,具有一定的實時性。
云端向設(shè)備端發(fā)送消息,設(shè)備端可以在最短的時間內(nèi)接收到并作出回應(yīng)。
MQTT 更適合需要實時控制的場合,尤其適合執(zhí)行器。
云端與客戶端需要保持長連接,要能夠獲取到設(shè)備的連接狀態(tài),就需要時不時地發(fā)送心跳包,這就不會省電,所以,MQTT 并不適合低功耗場合。
可以看出,MQTT 從誕生之初就是專為低帶寬、高延遲或不可靠的網(wǎng)絡(luò)而設(shè)計的。雖然歷經(jīng)幾十年的更新和變化,以上這些特點仍然是 MQTT 協(xié)議的核心特點。但是與最初不同的是,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)典的版本,目前仍然是主流版本,能夠滿足大部分實際需求。
MQTT5 是在 MQTT3.1.1 的基礎(chǔ)上進行了升級,因此 MQTT5 是完全兼容 MQTT3.1.1 的。而 MQTT5 是 在 MQTT3.1.1 的基礎(chǔ)上添加了更多的功能、補充完善 MQTT 協(xié)議。
5、MQTT 協(xié)議
MQTT 是一種基于客戶端-服務(wù)端架構(gòu)(C/S)的消息傳輸協(xié)議,所以在 MQTT 協(xié)議通信中,有兩個最為重要的角色,它們便是服務(wù)端和客戶端。
1)服務(wù)端
MQTT 服務(wù)端通常是一臺服務(wù)器(broker),它是 MQTT 信息傳輸?shù)臉屑~,負責將 MQTT 客戶端發(fā)送來的信息傳遞給 MQTT 客戶端;MQTT 服務(wù)端還負責管理 MQTT 客戶端,以確保客戶端之間的通訊順暢,保證 MQTT 信息得以正確接收和準確投遞。
2)客戶端
MQTT 客戶端可以向服務(wù)端發(fā)布信息,也可以從服務(wù)端收取信息;我們把客戶端發(fā)送信息的行為稱為“發(fā)布”信息。而客戶端要想從服務(wù)端收取信息,則首先要向服務(wù)端“訂閱”信息。“訂閱”信息這一操作很像我們在使用微信時“關(guān)注”了某個公眾號,當公眾號的作者發(fā)布新的文章時,微信官方會向關(guān)注了該公眾號的所有用戶發(fā)送信息,告訴他們有新文章更新了,以便用戶查看。
3)MQTT 主題
上面我們講到了,客戶端想要從服務(wù)器獲取信息,首先需要訂閱信息,那客戶端如何訂閱信息呢?這里我們要引入“主題(Topic)”的概念,“主題”在 MQTT 通信中是一個非常重要的概念,客戶端發(fā)布信息以及訂閱信息都是圍繞“主題”來進行的,并且 MQTT 服務(wù)端在管理 MQTT 信息時,也是使用“主題”來控制的。
客戶端發(fā)布消息時需要為消息指定一個“主題”,表示將消息發(fā)布到該主題;而對于訂閱消息的客戶端來說,可通過訂閱“主題”來訂閱消息,這樣當其它客戶端或自己(當前客戶端)向該主題發(fā)布消息時,MQTT 服務(wù)端就會將該主題的信息發(fā)送給該主題的訂閱者(客戶端)。
服務(wù)端如何通過“主題”來控制客戶端之間的信息通訊,看下圖實例:
在以上圖示中一共有三個 MQTT 客戶端,它們分別是開發(fā)板、手機和電腦。MQTT 服務(wù)端在管理 MQTT通信時使用了“主題”來對信息進行管理。
比如上圖所示,假設(shè)我們需要利用手機和電腦獲取開發(fā)板在運行過程中 SoC 芯片的溫度,那么首先電腦和手機這兩個客戶端需要向 MQTT 服務(wù)器訂閱主題“芯片溫度”;接下來,當開發(fā)板客戶端向服務(wù)端的“芯片溫度”主題發(fā)布信息(假設(shè)信息的內(nèi)容就是當前的溫度值)后,服務(wù)端就會首先檢查都有哪些客戶端訂閱了“芯片溫度”這一主題的信息,而當它發(fā)現(xiàn)訂閱了該主題的客戶端有一個手機和一個電腦,于是服務(wù)端就會將剛剛收到的“芯片溫度”信息轉(zhuǎn)發(fā)給訂閱了該主題的手機和電腦客戶端。
通過以上的這種實例,手機和電腦便可以獲取到開發(fā)板運行時 SoC 芯片的溫度值。
以上實例中,開發(fā)板是“芯片溫度”主題的發(fā)布者,而手機和電腦則是該主題的訂閱者。
值得注意的是,MQTT 客戶端在通信時,角色往往不是單一的,一個客戶端既可以作為信息發(fā)布者也可以同時作為信息訂閱者。如下圖所示:
上圖中的所有客戶端都是圍繞“LED 控制”這一主題進行通信。此時,對于“LED 控制”這一主題來說,手機和電腦客戶端成為了 MQTT 信息的發(fā)布者而開發(fā)板則成為了 MQTT 信息的訂閱者(接收者)。
所以由此可知,針對不同的主題,MQTT 客戶端可以切換自己的角色,它們可能對主題 A 來說是信息發(fā)布者,但是對于主題 B 就成了信息訂閱者,所以一個 MQTT 客戶端它的角色并不是固定的,所以大家一定要理解“主題”這個概念。
4)MQTT 發(fā)布/訂閱特性
從以上實例我們可以看到,MQTT 通信的核心樞紐是 MQTT 服務(wù)端,它負責將 MQTT 客戶端發(fā)送來的信息傳遞給 MQTT 客戶端,還負責管理 MQTT 客戶端,以確保客戶端之間的通訊順暢,保證 MQTT 信息得以正確接收和準確投遞。
正是因為有了服務(wù)端對 MQTT 信息的接收、儲存、處理和發(fā)送,客戶端在發(fā)布和訂閱信息時,可以相互獨立、且在空間上可以分離、時間上可以異步,這就是 MQTT 發(fā)布/訂閱的特性:客戶端相互獨立、空間上可分離、時間上可異步,具體介紹如下:
客戶端相互獨立:MQTT 客戶端是一個個獨立的個體,它們無需了解彼此的存在,依然可以實現(xiàn)信息交流。
空間上分離:空間上分離相對容易理解,MQTT 客戶端以及 MQTT 服務(wù)端它們在通信時是處于同一個通信網(wǎng)絡(luò)中的,這個網(wǎng)絡(luò)可以是互聯(lián)網(wǎng)或者局域網(wǎng);只要客戶端聯(lián)網(wǎng),無論他們遠在天邊還是近在眼前,都可以實現(xiàn)彼此間的通訊交流;其實網(wǎng)絡(luò)通信本就是如此,所以并不是 MQTT 通信所特有的。
時間上可異步:MQTT 客戶端在發(fā)送和接收信息時無需同步。這一特點對物聯(lián)網(wǎng)設(shè)備尤為重要,前面我們也介紹了,MQTT 從誕生之初就是專為低帶寬、高延遲或不可靠的網(wǎng)絡(luò)而設(shè)計的,高延遲和不可靠網(wǎng)絡(luò)必然就會導致時間上的異步;物聯(lián)網(wǎng)設(shè)備在運行過程中發(fā)生意外掉線是非常正常的情況。
6、總結(jié)
向大家介紹了 MQTT 通信的基本原理,在 MQTT 通信中,1 個服務(wù)端、多個客戶端之間圍繞“主題”進行了通信,所以重要在于大家需要理解各個客戶端的相互關(guān)系以及服務(wù)端在其中所起的作用,并且理解“主題”這個概念以及 MQTT 發(fā)布/訂閱模式的特性,后面向大家介紹具體的通信過程時,要迅速的反應(yīng)過來。
注意:對于 MQTT 發(fā)布/訂閱模式的特性,我們總結(jié)的幾個特點中都有一個“可”字。這個“可”字意味著客戶端彼此之間可以獨立,空間可以分離,時間可以異步。在我們實際應(yīng)用中,客戶端之間的關(guān)系既可以獨立也可以相互依存。在空間上,既可以相距甚遠,也可以彼此相鄰。在時間上,既可以異步也可以同步。這個“可”字所體現(xiàn)的是 MQTT 通訊的靈活性。
審核編輯:劉清
-
傳感器
+關(guān)注
關(guān)注
2551文章
51156瀏覽量
754075 -
物聯(lián)網(wǎng)
+關(guān)注
關(guān)注
2909文章
44694瀏覽量
373913 -
狀態(tài)機
+關(guān)注
關(guān)注
2文章
492瀏覽量
27552 -
MQTT協(xié)議
+關(guān)注
關(guān)注
0文章
97瀏覽量
5414 -
TCP通信
+關(guān)注
關(guān)注
0文章
146瀏覽量
4224
原文標題:一文讀懂物聯(lián)網(wǎng)中的大拿-MQTT協(xié)議
文章出處:【微信號:嵌入式情報局,微信公眾號:嵌入式情報局】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論