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