物聯網協議LWM2M MQTT與CoAP區別和聯系
一、MQTT
1. 概述:
MQTT(Message Queuing Telemetry Transport,消息隊列遙測傳輸)是IBM開發的一個即時通訊協議,有可能成為物聯網的重要組成部分。該協議支持所有平臺,幾乎可以把所有聯網物品和外部連接起來,被用來當做傳感器和制動器(比如通過Twitter讓房屋聯網)的通信協議。
2. 主要特征:
MQTT協議是為大量計算能力有限,且工作在低帶寬、不可靠的網絡的遠程傳感器和控制設備通訊而設計的協議,它具有以下主要的幾項特性:
- 使用發布/訂閱消息模式,提供一對多的消息發布,解除應用程序耦合;
- 對負載內容屏蔽的消息傳輸;
- 使用TCP/IP 提供網絡連接;
有三種消息發布服務質量:
- “至多一次”,消息發布完全依賴底層 TCP/IP 網絡。會發生消息丟失或重復。這一級別可用于如下情況,環境傳感器數據,丟失一次讀記錄無所謂,因為不久后還會有第二次發送。
- “至少一次”,確保消息到達,但消息重復可能會發生。
- “只有一次”,確保消息到達一次。這一級別可用于如下情況,在計費系統中,消息重復或丟失會導致不正確的結果。
小型傳輸,開銷很小(固定長度的頭部是 2 字節),協議交換最小化,以降低網絡流量。
二、CoAP
由于物聯網中的很多設備都是資源受限型的,即只有少量的內存空間和有限的計算能力,所以傳統的HTTP協議應用在物聯網上就顯得過于龐大而不適用。 IETF的CoRE工作組提出了一種基于REST架構的CoAP協議。CoAP是6LowPAN協議棧中的應用層協議。
三、Lightweight M2M
OMA是一家國際組織,最初定義了一套 OMA-DM的協議,用來遠程管理移動終端設備,比如手機開戶,版本升級,等等。OMA-DM有著非常廣泛的應用,很多運營生比如Verizon Wireless, Sprint都有自己的OMA-DM服務并要求手機/模塊入網的時候通過自定義的OMA-DM入網測試。因為物聯網的興起, OMA在傳統的OMA-DM協議基礎之上,提出了LWM2M協議。2013年底,OMA發布了LWM2M規范。
OMA Lightweight M2M 主要動機是定義一組輕量級的協議適用于各種物聯網設備,因為M2M設備通常是資源非常有限的嵌入式終端,無UI, 計算能力和網絡通信能力都有限。同時也因為物聯網終端的巨大數量,節約網絡資源變得很重要。
LWM2M 定義了三個邏輯實體:
- LWM2M Server 服務器
- LWM2M client 客戶端 負責執行服務器 的命令和上報執行結果
- LWM2M 引導服務器 Bootstrap server 負責 配置LWM2M客戶端.
在這三個邏輯實體之間有4個邏輯接口:
- Device Discovery and Registration:這個接口讓客戶端注冊到服務器并通知服務器客戶端所支持的能力(簡單說就是支持哪些資源Resource和對象Object
- Bootstrap:Bootstrap server通過這個接口來配置Clinet - 比如說LWM2M server的URL地址
- Device Management and Service Enablement:這個就是最主要的業務接口了。 LWM2M Server 發送指令給 Client 并受到回應.
- Information Reporting:這個接口是 LWM2M Client 來上報其資源信息的,比如傳感器溫度。上報方式可以是事件觸發,也可以是周期性的。
Lightweight M2M 協議棧:
LWM2M Objects: 每個對象對應客戶端的某個特定功能實體. LWM2M 規范定義了一下標準Objects,比如:
- urn:oma:lwm2m:oma:2; (LWM2M Server Object)
- urn:oma:lwm2m:oma:3; (LWM2M Access Control Object)
每個object下可以有很多resource. 比如Firmware object可以有Firmware版本號,size等resource。
Vendor可以自己定義object:
- LWM2M Protocol: 定義了一些邏輯操作,比如Read, Write, Execute, Create or Delete.
- CoAP: 是IETF 定義的Constrained Application Protocol 用來做LWM2M的傳輸層,下層可以是 UDP 或SMS .UDP 是必須支持的,SMS是可選的。CoAP有自己的消息頭,重傳機制等。
- DTLS: 是用來保證客戶端和服務器間的安全性的.
四、MQTT與CoAP比較
MQTT和CoAP都是非常有用的物聯網協議,但兩者有根本區別,兩個協議各有特點,選擇哪個才是正確的取決于你的應用程序。
- MQTT是多個客戶端通過一個中央代理傳遞消息的多對多協議。它通過讓客戶端發布消息、代理決定消息路由和復制來解耦生產者和消費者。雖然MQTT持久性有一些支持,但它是最好的實時通訊總線。
- CoAP基本上是一個在Client和Server之間傳遞狀態信息的單對單協議。雖然它支持觀察資源,但是CoAP最適合狀態轉移模型,而不是單純的基于事件。
- MQTT Clients與Broker之間保持TCP長連接,這個在NAT環境中也不會有問題。CoAP Clients與Server都要接收和發送UDP包。在NAT環境下使用CoAP,需要使用“隧道掘進”或者端口轉發(內網穿透),否則像LWM2M(輕量級M2M)一樣,首先初始化設備到‘頭端’( head-end )的連接.
- MQTT不支持帶有類型或者其它幫助Clients理解的標簽消息。MQTT消息可用于任意目的,但前提是所有的Clients必須知道消息格式。而CoAP則相反,它內置內容協商和發現支持,這樣允許設備彼此窺測以找到交換數據的方式。