您的位置:首頁>科技>正文

想入行物聯網XMPP、MQTT、CoAP等物聯網協定不可不知

有關物聯網協議, 現在主要有XMPP、MQTT、CoAP、RESTful HTTP這四種, 想瞭解物聯網、進入這行業的必須瞭解一下, 全解且看下文吧。

國外有關四大協定比較

協定一:物聯網協定XMPP

XMPP是一種基於標準通用標記語言的子集XML的協定, 它繼承了在XML環境中靈活的發展性。 因此, 基於XMPP的應用具有超強的可擴展性。 經過 擴展以後的XMPP可以通過發送擴展的資訊來處理使用者的需求, 以及在XMPP的頂端建立如內容發佈系統和基於位址的服務等應用程 序。 而且, XMPP包含了針對伺服器端的軟體協定, 使之能與另一個進行通話, 這使得開發者更容易建立客戶應用程式或給一個配好系統添加功能。

基本網路結構

XMPP中定義了三個角色, 用戶端, 伺服器, 閘道。 通信能夠在這三者的任意兩個之間雙向發生。 伺服器同時承擔了用戶端資訊記錄, 連接管理和資訊的路由功能。 閘道承擔著與異構即時通信系統的互聯互通,

異構系統可以包括SMS(短信), MSN, ICQ等。 基本的網路形式是單用戶端通過TCP/IP連接到單伺服器, 然後在之上傳輸XML。

功能

傳輸的是與即時通訊相關的指令。 在以前這些命令要麼用2進制的形式發送(比如QQ), 要麼用純文字指令加空格加參數加分行符號的方式發送(比如MSN)。 而XMPP傳輸的即時通訊指令的邏輯與以往相仿, 只是協議的形式變成了XML格式的純文字。

優點

XMPP協定是自由、開放、公開的, 並且易於瞭解。 而且在用戶端、伺服器、組件、源碼庫等方面, 都已經各自有多種實現。

缺點

隨著通常超過70%的XMPP協議的伺服器的資料流程量的存在和近60%的被重複轉發, XMPP協議目前擁有一個大型架空中存在的資料提供給多個收件人。

協議二:物聯網協議MQTT

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

MQTT簡介

MQTT是基於二進位消息的發佈/訂閱程式設計模式的消息協定, 最早由IBM提出的, 如今已經成為OASIS規範。 由於規範很簡單, 非常適合需要低功耗和網路頻寬有限的IoT場景, 比如:

·遙感資料

·汽車

·智慧家居

·智慧城市

·醫療醫護

由於物聯網的環境是非常特別的, 所以MQTT遵循以下設計原則:

1.精簡, 不添加可有可無的功能。

2.發佈/訂閱(Pub/Sub)模式, 方便消息在感測器之間傳遞。

3.允許使用者動態創建主題, 零運維成本。

4.把傳輸量降到最低以提高傳輸效率。

5.把低頻寬、高延遲、不穩定的網路等因素考慮在內。

6.支援連續的會話控制。

7.理解用戶端計算能力可能很低。

8.提供服務品質管制。

9.假設資料不可知, 不強求傳輸資料的類型與格式, 保持靈活性。

運用MQTT協定, 設備可以很方便地連接到物聯網雲服務, 管理設備並處理資料, 最後應用到各種業務場景, 如下圖所示:

發佈/訂閱模式

與請求/回答這種同步模式不同, 發佈/訂閱模式解耦了發佈消息的客戶(發佈者)與訂閱消息的客戶(訂閱者)之間的關係, 這意味著發佈者和訂閱者之間並不需要直接建立聯繫。 打個比方, 你打電話給朋友, 一直要等到朋友接電話了才能夠開始交流, 是一個典型的同步請求/回答的場景;而給一個好友郵寄清單發電子郵件就不一樣, 你發好電子郵件該幹嘛幹嘛, 好友們到有空了去查看郵件就是了, 是一個典型的非同步發佈/訂閱的場景。

熟悉程式設計的同學一定非常熟悉這種設計模式了, 因為它帶來了這些好處:

·發佈者與訂閱者不必瞭解彼此, 只要認識同一個消息代理即可。

·發佈者和訂閱者不需要交互,發佈者無需等待訂閱者確認而導致鎖定。

·發佈者和訂閱者不需要同時線上,可以自由選擇時間來消費消息。

主題

MQTT是通過主題對消息進行分類的,本質上就是一個UTF-8的字串,不過可以通過反斜線表示多個層級關係。主題並不需要創建,直接使用就是了。

主題還可以通過萬用字元進行過濾。其中,+可以過濾一個層級,而#只能出現在主題最後表示過濾任意級別的層級。

舉個例子:

·building-b/floor-5:代表B樓5層的設備。

·+/floor-5:代表任何一個樓的5層的設備。

·building-b/#:代表B樓所有的設備。

注意,MQTT允許使用萬用字元訂閱主題,但是並不允許使用萬用字元廣播。

服務品質

為了滿足不同的場景,MQTT支援三種不同級別的服務品質(Quality of Service,QoS)為不同場景提供消息可靠性:

·級別0:盡力而為。消息發送者會想盡辦法發送消息,但是遇到意外並不會重試。

·級別1:至少一次。消息接收者如果沒有知會或者知會本身丟失,消息發送者會再次發送以保證消息接收者至少會收到一次,當然可能造成重複消息。

·級別2:恰好一次。保證這種語義肯定會減少併發或者增加延時,不過丟失或者重複消息是不可接受的時候,級別2是最合適的。

服務品質是個老話題了。級別2所提供的不重不丟很多情況下是最理想的,不過往返多次的確認一定對併發和延遲帶來影響。級別1提供的至少一次語義在日誌處理這種場景下是完全OK的,所以像Kafka這類的系統利用這一特點減少確認從而大大提高了併發。級別0適合雞肋資料場景,食之無味棄之可惜,就這麼著吧。

消息類型

MQTT擁有14種不同的消息類型:

1.CONNECT:用戶端連接到MQTT代理

2.CONNACK:連接確認

3.PUBLISH:新發佈消息

4.PUBACK:新發佈消息確認,是QoS 1給PUBLISH消息的回復

5.PUBREC:QoS 2消息流的第一部分,表示消息發佈已記錄

6.PUBREL:QoS 2消息流的第二部分,表示消息發佈已釋放

7.PUBCOMP:QoS 2消息流的第三部分,表示消息發佈完成

8.SUBSCRIBE:用戶端訂閱某個主題

9.SUBACK:對於SUBSCRIBE消息的確認

10. UNSUBSCRIBE:用戶端終止訂閱的消息

11. UNSUBACK:對於UNSUBSCRIBE消息的確認

12. PINGREQ:心跳

13. PINGRESP:確認心跳

14. DISCONNECT:用戶端終止連接前優雅地通知MQTT代理

從現有的移動端(Android)消息推送方案中,也可以看出MQTT協定和XMPP協定的優缺點

方案1、 使用GCM服務(Google Cloud Messaging)

簡介:Google推出的雲消息服務,即第二代的G2DM。

優點:Google提供的服務、原生、簡單,無需實現和部署服務端。

缺點:Android版本限制(必須大於2.2版本),該服務在國內不夠穩定、需要使用者綁定Google帳號,受限於Google。

方案2、 使用XMPP協議(Openfire + Spark + Smack)

簡介:基於XML協議的通訊協定,前身是Jabber,目前已由IETF國際標準組織完成了標準化工作。

優點:協議成熟、強大、可擴展性強、目前主要應用於許多聊天系統中,且已有開源的Java版的開發實例androidpn。

缺點:協定較複雜、冗餘(基於XML)、費流量、費電,部署硬體成本高。

方案3、 使用MQTT協議

簡介:羽量級的、基於代理的“發佈/訂閱”模式的消息傳輸協定。

優點:協議簡潔、小巧、可擴展性強、省流量、省電,目前已經應用到企業領域,且已有C++版的服務端元件rsmb。

缺點:不夠成熟、實現較複雜、服務端元件rsmb不開源,部署硬體成本較高。

方案4、 使用HTTP輪循方式

簡介:定時向HTTP服務端介面(Web Service API)獲取最新消息。

優點:實現簡單、可控性強,部署硬體成本低。

缺點:即時性差。

協議三:物聯網協定CoAP

CoAP是受限制的應用協定(Constrained Application Protocol)的代名詞。在最近幾年的時間中,專家們預測會有更多的設備相互連接,而這些設備的數量將遠超人類的數量。在這種大背景下,物聯網和 M2M技術應運而生。雖然對人而言,連接入互聯網顯得方便容易,但是對於那些微型設備而言接入互聯網非常困難。在當前由PC機組成的世界,資訊交換是通過 TCP和應用層協議HTTP實現的。但是對於小型設備而言,實現TCP和HTTP協議顯然是一個過分的要求。為了讓小設備可以接入互聯網,CoAP協議被 設計出來。CoAP是一種應用層協議,它運行於UDP協議之上而不是像HTTP那樣運行於TCP之上。CoAP協定非常的小巧,最小的資料包僅為4位元組。

由於物聯網中的很多設備都是資源受限型的,即只有少量的記憶體空間和有限的計算能力,所以傳統的HTTP協議應用在物聯網上就顯得過於龐大而不適用。 IETF的CoRE工作組提出了一種基於REST架構的CoAP協議。CoAP是6LowPAN協定棧中的應用層協定。該文在詳細介紹了CoAP協定的內容、特點和交互模型後,在uIPv6 START KIT無線網路開發套件上,使用Contiki嵌入式作業系統,不僅在流覽器端實現了CoAP協議而且用自己編寫的用戶端程式實現了CoAP協定,增加了和資料庫之間的交互功能,從而實現了在Web介面上不僅可以查看即時資料,還可以查看歷史資料的功能。

CoAP應用

由於無線物聯網中的設備很多都是資源受限型的,這些設備只有少量的記憶體空間和有限的計算能力。為此,IETF(Intemet Engineering Task Force)的CoRE(Constrained RESTful Environment)工作組為受限節點制定相關的REST(Representational State Transfer)形式的應用層協議。這就是CoRE工作組正在制訂的CoAP(Constrained Application Protocol)協議。

協議四:物聯網協議RESTful HTTP

REST 指的是一組架構約束條件和原則。滿足這些約束條件和原則的應用程式或設計就是 RESTful。

Web 應用程式最重要的 REST 原則是,用戶端和伺服器之間的交互在請求之間是無狀態的。從用戶端到伺服器的每個請求都必須包含理解請求所必需的資訊。如果伺服器在請求之間的任何時間點 重啟,用戶端不會得到通知。此外,無狀態請求可以由任何可用伺服器回答,這十分適合雲計算之類的環境。用戶端可以緩存資料以改進性能。

RESTful的關鍵是定義可表示流程元素/資源的物件。在REST中,每一個物件都是通過URL來表示的,物件使用者負責將狀態資訊打包進每一條消息內,以便物件的處理總是無狀態的。

RESTful的第二大問題是組合管理及流程綁定。企業對正規的(基於SOAP)SOA最大的反對聲之一便是,這種等級的發現和綁定靈活性不足以適應複雜性。

協議:其他

MQTT協定是IBM公司主推的協定,現有的情況下,MQTT比起XMPP和RESTful比較有優勢。如果我們對上面的結果進行一次PK,我想最 後的結果就是MQTT vs CoAP。HTTP對於嵌入式設備來說太重了,也不靈活,XMPP就更不用說了,與MQTT還有一比的便是CoAP——一個還在草稿階段的協議。

只要認識同一個消息代理即可。

·發佈者和訂閱者不需要交互,發佈者無需等待訂閱者確認而導致鎖定。

·發佈者和訂閱者不需要同時線上,可以自由選擇時間來消費消息。

主題

MQTT是通過主題對消息進行分類的,本質上就是一個UTF-8的字串,不過可以通過反斜線表示多個層級關係。主題並不需要創建,直接使用就是了。

主題還可以通過萬用字元進行過濾。其中,+可以過濾一個層級,而#只能出現在主題最後表示過濾任意級別的層級。

舉個例子:

·building-b/floor-5:代表B樓5層的設備。

·+/floor-5:代表任何一個樓的5層的設備。

·building-b/#:代表B樓所有的設備。

注意,MQTT允許使用萬用字元訂閱主題,但是並不允許使用萬用字元廣播。

服務品質

為了滿足不同的場景,MQTT支援三種不同級別的服務品質(Quality of Service,QoS)為不同場景提供消息可靠性:

·級別0:盡力而為。消息發送者會想盡辦法發送消息,但是遇到意外並不會重試。

·級別1:至少一次。消息接收者如果沒有知會或者知會本身丟失,消息發送者會再次發送以保證消息接收者至少會收到一次,當然可能造成重複消息。

·級別2:恰好一次。保證這種語義肯定會減少併發或者增加延時,不過丟失或者重複消息是不可接受的時候,級別2是最合適的。

服務品質是個老話題了。級別2所提供的不重不丟很多情況下是最理想的,不過往返多次的確認一定對併發和延遲帶來影響。級別1提供的至少一次語義在日誌處理這種場景下是完全OK的,所以像Kafka這類的系統利用這一特點減少確認從而大大提高了併發。級別0適合雞肋資料場景,食之無味棄之可惜,就這麼著吧。

消息類型

MQTT擁有14種不同的消息類型:

1.CONNECT:用戶端連接到MQTT代理

2.CONNACK:連接確認

3.PUBLISH:新發佈消息

4.PUBACK:新發佈消息確認,是QoS 1給PUBLISH消息的回復

5.PUBREC:QoS 2消息流的第一部分,表示消息發佈已記錄

6.PUBREL:QoS 2消息流的第二部分,表示消息發佈已釋放

7.PUBCOMP:QoS 2消息流的第三部分,表示消息發佈完成

8.SUBSCRIBE:用戶端訂閱某個主題

9.SUBACK:對於SUBSCRIBE消息的確認

10. UNSUBSCRIBE:用戶端終止訂閱的消息

11. UNSUBACK:對於UNSUBSCRIBE消息的確認

12. PINGREQ:心跳

13. PINGRESP:確認心跳

14. DISCONNECT:用戶端終止連接前優雅地通知MQTT代理

從現有的移動端(Android)消息推送方案中,也可以看出MQTT協定和XMPP協定的優缺點

方案1、 使用GCM服務(Google Cloud Messaging)

簡介:Google推出的雲消息服務,即第二代的G2DM。

優點:Google提供的服務、原生、簡單,無需實現和部署服務端。

缺點:Android版本限制(必須大於2.2版本),該服務在國內不夠穩定、需要使用者綁定Google帳號,受限於Google。

方案2、 使用XMPP協議(Openfire + Spark + Smack)

簡介:基於XML協議的通訊協定,前身是Jabber,目前已由IETF國際標準組織完成了標準化工作。

優點:協議成熟、強大、可擴展性強、目前主要應用於許多聊天系統中,且已有開源的Java版的開發實例androidpn。

缺點:協定較複雜、冗餘(基於XML)、費流量、費電,部署硬體成本高。

方案3、 使用MQTT協議

簡介:羽量級的、基於代理的“發佈/訂閱”模式的消息傳輸協定。

優點:協議簡潔、小巧、可擴展性強、省流量、省電,目前已經應用到企業領域,且已有C++版的服務端元件rsmb。

缺點:不夠成熟、實現較複雜、服務端元件rsmb不開源,部署硬體成本較高。

方案4、 使用HTTP輪循方式

簡介:定時向HTTP服務端介面(Web Service API)獲取最新消息。

優點:實現簡單、可控性強,部署硬體成本低。

缺點:即時性差。

協議三:物聯網協定CoAP

CoAP是受限制的應用協定(Constrained Application Protocol)的代名詞。在最近幾年的時間中,專家們預測會有更多的設備相互連接,而這些設備的數量將遠超人類的數量。在這種大背景下,物聯網和 M2M技術應運而生。雖然對人而言,連接入互聯網顯得方便容易,但是對於那些微型設備而言接入互聯網非常困難。在當前由PC機組成的世界,資訊交換是通過 TCP和應用層協議HTTP實現的。但是對於小型設備而言,實現TCP和HTTP協議顯然是一個過分的要求。為了讓小設備可以接入互聯網,CoAP協議被 設計出來。CoAP是一種應用層協議,它運行於UDP協議之上而不是像HTTP那樣運行於TCP之上。CoAP協定非常的小巧,最小的資料包僅為4位元組。

由於物聯網中的很多設備都是資源受限型的,即只有少量的記憶體空間和有限的計算能力,所以傳統的HTTP協議應用在物聯網上就顯得過於龐大而不適用。 IETF的CoRE工作組提出了一種基於REST架構的CoAP協議。CoAP是6LowPAN協定棧中的應用層協定。該文在詳細介紹了CoAP協定的內容、特點和交互模型後,在uIPv6 START KIT無線網路開發套件上,使用Contiki嵌入式作業系統,不僅在流覽器端實現了CoAP協議而且用自己編寫的用戶端程式實現了CoAP協定,增加了和資料庫之間的交互功能,從而實現了在Web介面上不僅可以查看即時資料,還可以查看歷史資料的功能。

CoAP應用

由於無線物聯網中的設備很多都是資源受限型的,這些設備只有少量的記憶體空間和有限的計算能力。為此,IETF(Intemet Engineering Task Force)的CoRE(Constrained RESTful Environment)工作組為受限節點制定相關的REST(Representational State Transfer)形式的應用層協議。這就是CoRE工作組正在制訂的CoAP(Constrained Application Protocol)協議。

協議四:物聯網協議RESTful HTTP

REST 指的是一組架構約束條件和原則。滿足這些約束條件和原則的應用程式或設計就是 RESTful。

Web 應用程式最重要的 REST 原則是,用戶端和伺服器之間的交互在請求之間是無狀態的。從用戶端到伺服器的每個請求都必須包含理解請求所必需的資訊。如果伺服器在請求之間的任何時間點 重啟,用戶端不會得到通知。此外,無狀態請求可以由任何可用伺服器回答,這十分適合雲計算之類的環境。用戶端可以緩存資料以改進性能。

RESTful的關鍵是定義可表示流程元素/資源的物件。在REST中,每一個物件都是通過URL來表示的,物件使用者負責將狀態資訊打包進每一條消息內,以便物件的處理總是無狀態的。

RESTful的第二大問題是組合管理及流程綁定。企業對正規的(基於SOAP)SOA最大的反對聲之一便是,這種等級的發現和綁定靈活性不足以適應複雜性。

協議:其他

MQTT協定是IBM公司主推的協定,現有的情況下,MQTT比起XMPP和RESTful比較有優勢。如果我們對上面的結果進行一次PK,我想最 後的結果就是MQTT vs CoAP。HTTP對於嵌入式設備來說太重了,也不靈活,XMPP就更不用說了,與MQTT還有一比的便是CoAP——一個還在草稿階段的協議。

Next Article
喜欢就按个赞吧!!!
点击关闭提示