MQTT VS CoAP

**

物聯網通信協議

**
通信協議可以被認爲是一種語言,即兩臺或兩臺以上的設備可以相互交流。同時無規矩不成方圓,通信協議也遵循一組規則,兩臺設備會將有意義的信息傳遞給對方。在分佈式系統中通信協議極爲重要,相同的協議不同的部分在多個位置獨立運行。系統在運行進程時可能是多樣化的,因此在系統中需要保證一組通用的指令來通信。
IoT 之所以可以掀起熱潮,信息物理融合系統(Cyber-Physical Systems,簡稱CPS)功不可沒。物理設備連接到互聯網和傳遞數據及接收數據的概念基於 IoT 解決方案的真正地實現。與此同時,這也增加了現有的通信協議及互聯網的複雜性。
IoT 的發展歷程中帶來了很多可能性,但其中唯一可行的是機器與機器(M2M)通過互聯網實現實時有效連接。一臺設備被連接到互聯網僅被認爲是人際互動間的產物,而不是一個順其自然的結果。因此,協議與互聯網之間的通信總是在不可靠與緩慢的基礎上發展。

**

MQTT協議

**
MQTT(Message Queuing Telemetry Transport,消息隊列遙測傳輸)最早是IBM開發的一個即時通訊協議,MQTT協議是爲大量計算能力有限且工作在低帶寬、不可靠網絡的遠程傳感器和控制設備通訊而設計的一種協議。

MQTT協議的優勢是可以支持所有平臺,它幾乎可以把所有的聯網物品和互聯網連接起來。

它具有以下主要的幾項特性:
1、使用發佈/訂閱消息模式,提供一對多的消息發佈和應用程序之間的解耦;
2、消息傳輸不需要知道負載內容;
3、使用 TCP/IP 提供網絡連接;
4、有三種消息發佈的服務質量:
QoS 0:“最多一次”,消息發佈完全依賴底層 TCP/IP 網絡。分發的消息可能丟失或重複。例如,這個等級可用於環境傳感器數據,單次的數據丟失沒關係,因爲不久後還會有第二次發送。
QoS 1:“至少一次”,確保消息可以到達,但消息可能會重複。
QoS 2:“只有一次”,確保消息只到達一次。例如,這個等級可用在一個計費系統中,這裏如果消息重複或丟失會導致不正確的收費。
5、小型傳輸,開銷很小(固定長度的頭部是 2 字節),協議交換最小化,以降低網絡流量;
6、使用 Last Will 和 Testament 特性通知有關各方客戶端異常中斷的機制;
在MQTT協議中,一個MQTT數據包由:固定頭(Fixed header)、 可變頭(Variable header)、 消息體(payload)三部分構成。MQTT的傳輸格式非常精小,最小的數據包只有2個bit,且無應用消息頭。
下圖是MQTT爲可靠傳遞消息的三種消息發佈服務質量
在這裏插入圖片描述
發佈/訂閱模型允許MQTT客戶端以一對一、一對多、多對一、多對多方式進行通訊。
下圖是MQTT的發佈/訂閱消息模式
在這裏插入圖片描述
發佈/訂閱消息模式:
如同用手機去看股票一樣。
看股票的人,按照自己的自選股進行訂閱消息,主站只把相關消息發給訂閱了的人。每一個股票的信息更新之後就會發給主站。
這樣應該大家可以理解發布/訂閱消息模式,只不過在通信過程中,發佈者也可以是訂閱者。
MQTT幀結構
在這裏插入圖片描述
**

CoAP協議

**
CoAP是受限制的應用協議(Constrained Application Protocol)的代名詞。由於目前物聯網中的很多設備都是資源受限型的,所以只有少量的內存空間和有限的計算能力,傳統的HTTP協議在物聯網應用中就會顯得過於龐大而不適用。因此,IETF的CoRE工作組提出了一種基於REST架構、傳輸層爲UDP、網絡層爲6LowPAN(面向低功耗無線局域網的IPv6)的CoAP協議。

CoAP採用與HTTP協議相同的請求響應工作模式。CoAP協議共有4中不同的消息類型。
CON——需要被確認的請求,如果CON請求被髮送,那麼對方必須做出響應。
NON——不需要被確認的請求,如果NON請求被髮送,那麼對方不必做出迴應。
ACK——應答消息,接受到CON消息的響應。
RST——復位消息,當接收者接受到的消息包含一個錯誤,接受者解析消息或者不再關心發送者發送的內容,那麼復位消息將會被髮送。

CoAP消息格式使用簡單的二進制格式,最小爲4個字節。

一個消息=固定長度的頭部header + 可選個數的option + 負載payload。Payload的長度根據數據報長度來計算。
主要是一對一的協議
舉個例子:
比如某個設備需要從服務器端查詢當前溫度信息。

請求消息(CON): GET /temperature , 請求內容會被包在CON消息裏面
響應消息 (ACK): 2.05 Content “22.5 C” ,響應內容會被放在ACK消息裏面
在這裏插入圖片描述

CoAP幀結構
在這裏插入圖片描述
**

CoAP與MQTT的區別

**
MQTT
MQTT(Message Queuing Telemetry Transport,消息隊列遙測傳輸)是IBM開發的一個即時通訊協議,有可能成爲物聯網的重要組成部分。該協議支持所有平臺,幾乎可以把所有聯網物品和外部連接起來,被用來當做傳感器和致動器(比如通過Twitter讓房屋聯網)的通信協議
CoAP
CoAP是受限制的應用協議(Constrained Application Protocol)的代名詞。在最近幾年的時間中,專家們預測會有更多的設備相互連接,而這些設備的數量將遠超人類的數量。在這種大背景下,物聯網和M2M技術應運而生。雖然對人而言,連接入互聯網顯得方便容易,但是對於那些微型設備而言接入互聯網非常困難。在當前由PC機組成的世界,信息交換是通過TCP和應用層協議HTTP實現的。但是對於小型設備而言,實現TCP和HTTP協議顯然是一個過分的要求。爲了讓小設備可以接入互聯網,CoAP協議被設計出來。CoAP是一種應用層協議,它運行於UDP協議之上而不是像HTTP那樣運行於TCP之上。CoAP協議非常的小巧,最小的數據包僅爲4字節。

MQTT和CoAP都是行之有效的物聯網協議,但兩者還是有很大區別的,比如MQTT協議是基於TCP,而CoAP協議是基於UDP。從應用方向來分析,主要區別有以下幾點:

1、MQTT協議不支持帶有類型或者其它幫助Clients理解的標籤信息,也就是說所有MQTT Clients必須要知道消息格式。而CoAP協議則相反,因爲CoAP內置發現支持和內容協商,這樣便能允許設備相互窺測以找到數據交換的方式。

2、MQTT是長連接而CoAP是無連接。MQTT Clients與Broker之間保持TCP長連接,這種情形在NAT環境中也不會產生問題。如果在NAT環境下使用CoAP的話,那就需要採取一些NAT穿透性手段。

3、MQTT是多個客戶端通過中央代理進行消息傳遞的多對多協議。它主要通過讓客戶端發佈消息、代理決定消息路由和複製來解耦消費者和生產者。MQTT就是相當於消息傳遞的實時通訊總線。CoAP基本上就是一個在Server和Client之間傳遞狀態信息的單對單協議。

**

總結:

**
從當前物聯網應用發展趨勢來分析,MQTT協議具有一定的優勢。因爲目前國內外主要的雲計算服務商,比如阿里雲、AWS、百度雲、Azure以及騰訊雲都一概支持MQTT協議。還有一個原因就是MQTT協議比CoAP成熟的要早,所以MQTT具有一定的先發優勢。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章