MQTT協議
MQTT(Message Queuing Telemetry Transport,消息隊列遙測傳輸)最早是IBM開發的一個即時通訊協議,MQTT協議是爲大量計算能力有限且工作在低帶寬、不可靠網絡的遠程傳感器和控制設備通訊而設計的一種協議。
MQTT協議的優勢是可以支持所有平臺,它幾乎可以把所有的聯網物品和互聯網連接起來。
-
-
QoS 0:“最多一次”,消息發佈完全依賴底層 TCP/IP 網絡。分發的消息可能丟失或重複。例如,這個等級可用於環境傳感器數據,單次的數據丟失沒關係,因爲不久後還會有第二次發送。
-
QoS 1:“至少一次”,確保消息可以到達,但消息可能會重複。
-
QoS 2:“只有一次”,確保消息只到達一次。例如,這個等級可用在一個計費系統中,這裏如果消息重複或丟失會導致不正確的收費。
-
下圖是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與MQTT的區別
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之間傳遞狀態信息的單對單協議。
HTTP協議
http的全稱是HyperText Transfer Protocol,超文本傳輸協議,這個協議的提出就是爲了提供和接收HTML界面,通過這個協議在互聯網上面傳出web的界面信息。
HTTP與CoAP的區別
CoAP是6LowPAN協議棧中的應用層協議,基於REST(表述性狀態傳遞)架構風格,支持與REST進行交互。通常用戶可以像使用HTTP協議一樣用CoAP協議來訪問物聯網設備。而且CoAP消息格式使用簡單的二進制格式,最小爲4個字節。HTTP使用報文格式對於嵌入式設備來說需要傳輸數據太多,太重,不夠靈活。
XMPP協議
XMPP(可擴展通訊和表示協議)是一種基於可擴展標記語言(XML)的協議,
它繼承了在XML環境中靈活的發展性。可用於服務類實時通訊、表示和需求響應服務中的XML數據元流式傳輸。XMPP以Jabber協議爲基礎,而Jabber是即時通訊中常用的開放式協議。
基本網絡結構
XMPP中定義了三個角色,客戶端,服務器,網關。通信能夠在這三者的任意兩個之間雙向發生。
服務器同時承擔了客戶端信息記錄,連接管理和信息的路由功能。網關承擔着與異構即時通信系統
的互聯互通,異構系統可以包括SMS(短信),MSN,ICQ等。基本的網絡形式是單客戶端通過
TCP/IP連接到單服務器,然後在之上傳輸XML。
功能
1
2
3
4
5
6
|
<? xmlversion = '1.0' ?> < stream:stream to = 'example_com' xmlns = 'jabber:client' xmlns:stream = 'http_etherx_jabber_org/streams' version = '1.0' > |
1
2
3
4
5
6
7
|
<? xmlversion = '1.0' ?> < stream:stream from = 'example_com' id = 'someid' xmlns = 'jabber:client' xmlns:stream = 'http_etherx_jabber_org/streams' version = '1.0' > |
工作原理
XMPP核心協議通信的基本模式就是先建立一個stream,然後協商一堆安全之類的東西,
中間通信過程就是客戶端發送XML Stanza,一個接一個的。服務器根據客戶端發送的信息
以及程序的邏輯,發送XML Stanza給客戶端。但是這個過程並不是一問一答的,任何時候
都有可能從一方發信給另外一方。通信的最後階段是關閉流,關閉TCP/IP連接。
網絡通信過程中數據冗餘率非常高,網絡流量中70% 都消耗在 XMPP 協議層了。對於物聯網來說,大量計算能力有限且工作在低帶寬、不可靠網絡的遠程傳感器和控制設備,省電、省流量是所有底層服務的一個關鍵技術指標,XMPP協議看起來已經落後了。
SoAP協議
SoAP(簡單對象訪問協議)是交換數據的一種協議規範,是一種輕量的、簡單的、
基於可擴展標記語言(XML)的協議,它被設計成在WEB上交換結構化的和固化的信息。
SOAP 可以和現存的許多因特網協議和格式結合使用,包括超文本傳輸協議(HTTP),
簡單郵件傳輸協議(SMTP),多用途網際郵件擴充協議(MIME)。它還支持從消息系統到
遠程過程調用(RPC)等大量的應用程序。SOAP使用基於XML的數據結構和超文本傳輸協議
(HTTP)的組合定義了一個標準的方法來使用Internet上各種不同操作環境中的分佈式對象。
總結:
從當前物聯網應用發展趨勢來分析,MQTT協議具有一定的優勢。因爲目前國內外主要的雲計算服務商,比如阿里雲、AWS、百度雲、Azure以及騰訊雲都一概支持MQTT協議。還有一個原因就是MQTT協議比CoAP成熟的要早,所以MQTT具有一定的先發優勢。但隨着物聯網的智能化和多變化的發展,後續物聯網應用平臺肯定會兼容更多的物聯網應用層協議。