MQTT(Message Queuing Telemetry Transport,消息隊列遙測傳輸)是ISO標準下基于發布/訂閱方式的輕量級消息協議,其通常應用于物聯網、智能家居等設備和應用程序之間的通信。
MQTT協議由發布者/訂閱者,消息代理Broker兩部分組成,如圖1所示,發布者負責消息推送至Broker,Broker將消息推送至匹配的訂閱者。發布者(Publisher):設備通過主題將消息發送給訂閱者。訂閱者(Subscriber):作為終端設備,訂閱者通過主題從發布者處接收消息。消息代理(Broker):服務器作為中央樞紐,負責發布者和訂閱者之間的組織級通信。
MQTT有兩個主要版本:v3 和 v5。這兩個版本原理基本相同,但它們之間存在一些關鍵的差異,下面將從以下幾個方面來介紹它們之間的區別。
01
協議格式
MQTT v5 新增了一個 Property字段,這個字段使MQTT v5 可以支持更多的新特性。而在MQTT v3 中,MQTT沒有任何可以拓展的地方,限制了MQTT拓展功能的可能性。
02
主題別名
主題是MQTT中的核心概念,它用于標識消息的內容和意圖。在MQTT v3 中,主題只是一個簡單的字符串,其結構是由一系列以斜杠分隔的單詞組成的。例如,一個 MQTT v3 主題可以是 sensors/temperature/room1,其中sensors是頂級主題,temperature是其子主題,room1是子主題下的一個特定設備。
然而,在 MQTT v5 中,主題的結構得到了擴展,新增了一些更高級的功能。具體來說,MQTT v5 引入了一個名為主題別名的新概念,它允許客戶端將主題字符串映射到預定義的主題 ID,從而減少網絡流量和消息大小。主題別名由客戶端和服務端各自維護,且生命周期和作用范圍僅限于當前連接。
針對某個主題,首次發布時設置別名,之后就可以使用主題別名發布。這使得客戶端能夠在發送消息時只發送主題ID,而不必每次都發送完整的主題字符串。這對于 IoT 設備和網絡帶寬有限的環境來說非常有用。
03
訂閱操作
MQTT v5 引入了一種名為共享訂閱的新訂閱類型??梢酝ㄟ^其他標志和過濾功能,來實現更靈活的訂閱。如下圖所示,共享訂閱允許多個客戶端共享一個訂閱,并按照一定規則進行分配。這種訂閱類型對于訂閱高負載主題非常有用,因為它可以平衡訂閱請求,減輕單個客戶端的負載壓力。
另外MQTT v5 增加了訂閱選項的概念,可以指定訂閱選項,例如QoS等級、Retain As Publish、Retain Handling、消息的生命周期等,來對訂閱行為進行更加精細地控制。
04
遺囑消息
遺囑消息是MQTT為那些可能出現意外斷線的設備提供的將遺囑優雅地發送給第三方的能力。在 CONNECT 報文的 Payload 中,部分字段發生了變化,其中Will Message(遺囑消息)變成了Will Payload(遺囑載荷)。
Will Properties(遺囑屬性)是MQTT v5新增的一個字段,不同類型的報文有著不同的屬性,例如CONNECT報文有最大報文長度、會話過期間隔等屬性,SUBSCRIBE報文則有訂閱標識符等屬性。而且MQTT v5較v3相比,遺囑消息的內容變得更加靈活,可以包含任何主題和任何消息內容。
05
錯誤處理
MQTT v5支持更加詳細的錯誤處理機制,可以通過錯誤碼和錯誤原因來定位和解決問題。同時,MQTT v5還引入了一個新的控制報文——Disconnect報文,可以幫助客戶端和服務器更好地處理錯誤情況。
06
流量控制
MQTT v5 在 v3 版本基礎上引入了一些新的機制用于流量控制,為了更好地控制消息的傳輸和處理,避免因為消息傳輸速度過快導致的網絡擁塞和負載過高。
最大報文大小限制(Maximum Packet Size):MQTT v5 允許客戶端和服務端在握手時協商最大報文大小。如下圖所示,這個最大報文大小限制可以用于控制客戶端和服務端之間傳輸的最大消息大小,防止因為傳輸的消息過大導致網絡擁塞和負載過高。
消息隊列(Message Queue):當服務端發送的消息超出了客戶端處理的速度時,服務端可以將消息存儲到消息隊列中,等待客戶端處理。MQTT v5 定義了消息隊列的隊列大小和超時時間,以控制消息隊列的大小和生命周期。
07
性能效率
MQTT v5 相對于 MQTT v3 來說,可以更好地處理大規模的數據傳輸,提高了通信的效率和性能。例如MQTT v5 支持批量發布(Batch Publish)和預?。∕essage Prefetch)等功能,可以大大減少MQTT通信時的開銷。
★
總之,相比于MQTT v3,MQTT v5 具有更多的新功能和安全性。但是,需要注意的是,MQTT v5 增加了很多新的功能和概念,因此在使用MQTT v5時,需要對MQTT協議的新特性進行深入的了解,以便可以更好地使用這個新協議來構建可靠的應用程序。
-
通信
+關注
關注
18文章
6072瀏覽量
136442 -
物聯網
+關注
關注
2914文章
44945瀏覽量
377140 -
MQTT
+關注
關注
5文章
654瀏覽量
22703
發布評論請先 登錄
相關推薦
百問MQTT協議分析 - MQTT簡述及協議報文格式組成
MQTT.fx 連接Onenet 多協議接入平臺 MQTT協議(舊版)詳解
![<b class='flag-5'>MQTT</b>.fx 連接Onenet 多<b class='flag-5'>協議</b>接入平臺 <b class='flag-5'>MQTT</b><b class='flag-5'>協議</b>(舊版)詳解](https://file1.elecfans.com//web2/M00/08/BF/wKgZomb6UR6AY2ePAAE0cbj8leM307.jpg)
![](https://file1.elecfans.com/web2/M00/08/DA/wKgaombzxA2ALfJdAAIp_yznRnY058.jpg)
物聯網行業中MQTT通信協議詳解以及使用
![物聯網行業中<b class='flag-5'>MQTT</b>通信<b class='flag-5'>協議</b>詳解以及使用](https://file1.elecfans.com//web2/M00/07/21/wKgZombtO6KARHDwAACjTo72E04008.jpg)
MQTT協議網關的工作原理及功能特性
![<b class='flag-5'>MQTT</b><b class='flag-5'>協議</b>網關的工作原理及功能特性](https://file1.elecfans.com//web2/M00/07/B1/wKgaombqlp6ARrPnAADgy2-cZI8853.jpg)
鋇錸技術Modbus轉MQTT網關:橋接Modbus協議與MQTT協議
![鋇錸技術Modbus轉<b class='flag-5'>MQTT</b>網關:橋接Modbus<b class='flag-5'>協議</b>與<b class='flag-5'>MQTT</b><b class='flag-5'>協議</b>](https://file1.elecfans.com/web2/M00/00/50/wKgaomaoovKAU7d4AASPlzrTdN0275.png)
基于MQTT協議云平臺的Modbus轉MQTT網關
![基于<b class='flag-5'>MQTT</b><b class='flag-5'>協議</b>云平臺的Modbus轉<b class='flag-5'>MQTT</b>網關](https://file1.elecfans.com/web2/M00/00/11/wKgaomanYQ6ARFCfAAAaWpcP9_Y947.png)
鋇錸協議網關輕松實現Modbus轉MQTT協議
![鋇錸<b class='flag-5'>協議</b>網關輕松實現Modbus轉<b class='flag-5'>MQTT</b><b class='flag-5'>協議</b>](https://file1.elecfans.com/web2/M00/FB/53/wKgZomaQpE2ABnbqAAAPbeO5m9E490.png)
SolidWorks教育版本好用嗎?
![SolidWorks教育<b class='flag-5'>版本</b><b class='flag-5'>好用</b>嗎?](https://file1.elecfans.com//web2/M00/E4/46/wKgaomY8huuARQOwAABKUKRP3o8124.jpg)
mqtt協議和tcp協議區別
MQTT和Modbus的物聯網網關協議的區別分析
![<b class='flag-5'>MQTT</b>和Modbus的物聯網網關<b class='flag-5'>協議</b>的區別分析](https://file1.elecfans.com/web2/M00/C4/D2/wKgZomX4AFKASRhwAAjPIFFEmT8549.png)
評論