一、MQTT

1、概述:

MQTT(Message Queuing Telemetry Transport,消息隊列遙測傳輸)是IBM開發的一個即時通訊協議,有可能成為物聯網的重要組成部分。該協議支持所有平台,幾乎可以把所有聯網物品和外部連接起來,被用來當做傳感器和制動器(比如通過Twitter讓房屋聯網)的通信協議。

2、主要特征:

MQTT協議是為大量計算能力有限,且工作在低帶寬、不可靠的網絡的遠程傳感器和控制設備通訊而設計的協議,它具有以下主要的幾項特性:

使用發布/訂閱消息模式,提供一對多的消息發布,解除應用程序耦合;

對負載內容屏蔽的消息傳輸;

使用TCP/IP 提供網絡連接;

有三種消息發布服務質量:

“至多一次”,消息發布完全依賴底層 TCP/IP 網絡。會發生消息丟失或重復。這一級別可用於如下情況,環境傳感器數據,丟失一次讀記錄無所謂,因為不久后還會有第二次發送。

“至少一次”,確保消息到達,但消息重復可能會發生。

“只有一次”,確保消息到達一次。這一級別可用於如下情況,在計費系統中,消息重復或丟失會導致不正確的結果。

小型傳輸,開銷很小(固定長度的頭部是 2 字節),協議交換最小化,以降低網絡流量;

3、網絡資源

官方網站

http://public.dhe.ibm.com/software/dw/webservices/ws-mqtt/mqtt-v3r1.html

中文翻譯

https://www.gitbook.com/book/mcxiaoke/mqtt-cn

代理軟件

Mosquitto —— 這是最早在生產環境中可用的消息代理之一,以 C 語言編寫,提供輕量級多種配置與高性能。

Mosca —— 以 Node.js 編寫,可嵌入 Node 應用或以獨立可執行文件的形式運行。由於配置簡單並具有可擴展性,它也是我們最喜歡的消息代理,具有高性能的優點。

RSMB —— IBM 對 MQTT 協議的實現,也是最不常用的選項之一,不過它是一個用C語言編寫的成熟系統。

HiveMQ —— HiveMQ 是一種相對較新的消息代理,面向企業環境,在博客上有很多關於 MQTT 不錯的信息。

二、CoAP

由於物聯網中的很多設備都是資源受限型的,即只有少量的內存空間和有限的計算能力,所以傳統的HTTP協議應用在物聯網上就顯得過於龐大而不適用。 IETF的CoRE工作組提出了一種基於REST架構的CoAP協議。CoAP是6LowPAN協議棧中的應用層協議。

1、網絡資源

官網:https://en.wikipedia.org/wiki/Constrained_Application_Protocol

三、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都是非常有用的物聯網協議,但兩者有根本區別,兩個協議各有特點,選擇哪個才是正確的取決於你的應用程序。

1、MQTT是多個客戶端通過一個中央代理傳遞消息的多對多協議。它通過讓客戶端發布消息、代理決定消息路由和復制來解耦生產者和消費者。雖然MQTT持久性有一些支持,但它是最好的實時通訊總線。

2、CoAP基本上是一個在Client和Server之間傳遞狀態信息的單對單協議。雖然它支持觀察資源,但是CoAP最適合狀態轉移模型,而不是單純的基於事件。

3、MQTT Clients與Broker之間保持TCP長連接,這個在NAT環境中也不會有問題。CoAP Clients與Server都要接收和發送UDP包。在NAT環境下使用CoAP,需要使用“隧道掘進”或者端口轉發(內網穿透),否則像LWM2M(輕量級M2M)一樣,首先初始化設備到‘頭端’( head-end )的連接.

4、MQTT不支持帶有類型或者其它幫助Clients理解的標簽消息。MQTT消息可用於任意目的,但前提是所有的Clients必須知道消息格式。而CoAP則相反,它內置內容協商和發現支持,這樣允許設備彼此窺測以找到交換數據的方式。

  • 原文鏈接:http://kuaibao.qq.com/s/20180112G0RSMB00?refer=cp_1026