lora、nb-iot以及zigbee、藍牙主要解決的是物體互聯(lián)以及接入網(wǎng)絡的問題,從網(wǎng)絡協(xié)議分層來看,基本上都屬于數(shù)據(jù)鏈路層協(xié)議。對于物聯(lián)網(wǎng)的數(shù)據(jù)交換,主要依靠應用層協(xié)議來解決。
在移動互聯(lián)網(wǎng)中,最常用的應用層協(xié)議就是http協(xié)議,http協(xié)議同樣可以用于物聯(lián)網(wǎng)系統(tǒng)中。http協(xié)議采取的是請求-響應(request-response)的通信機制,服務器沒有辦法主動給客戶端發(fā)送消息。如果要實現(xiàn)這種消息推送,就需要借助websocket這種全雙工的通信機制。
不過對于很多計算和存儲資源有限的物聯(lián)網(wǎng)節(jié)點,不太適合使用http協(xié)議。除了http協(xié)議以外,也有很多更適合于物聯(lián)網(wǎng)應用的協(xié)議,比如mqtt、coap、amqp、stomp等。
各個物聯(lián)網(wǎng)軟件平臺最常使用的物聯(lián)網(wǎng)協(xié)議
發(fā)布-訂閱機制
很多物聯(lián)網(wǎng)應用層協(xié)議都是基于發(fā)布-訂閱(publish-subscribe)機制,這種機制非常適合物聯(lián)網(wǎng)系統(tǒng)應用。mqtt協(xié)議、stomp協(xié)議、amqp協(xié)議以及dds協(xié)議都屬于這種發(fā)布-訂閱的機制。
每個傳感器節(jié)點,采集的數(shù)據(jù)需要上傳到網(wǎng)絡,相當于是一個消息的發(fā)布,這個消息需要基于某個主題,比如傳感器的類型。所有關(guān)心這個主題的節(jié)點,都可以通過訂閱這個主題的消息,實時獲取最新的數(shù)據(jù)。
消息的發(fā)布和訂閱是基于某個主題的,實現(xiàn)機制一般依賴于消息隊列
mqtt協(xié)議
消息隊列遙測傳輸協(xié)議(mqtt : message queuing telemetry transport)是為大量計算能力有限,工作帶寬有限、網(wǎng)絡環(huán)境不可靠的傳感器或控制器而設計的協(xié)議。
mqtt協(xié)議基于tcp協(xié)議
mqtt協(xié)議原來是ibm開發(fā)的一個即時通訊協(xié)議,基于tcp協(xié)議實現(xiàn)。mqtt客戶端需要通過消息代理(mqtt broker)來進行消息的發(fā)布和訂閱。
mqtt協(xié)議的兼容性非常好,幾乎支持所有平臺,可以把各種物聯(lián)網(wǎng)設備都連接起來。所以mqtt協(xié)議也是目前應用最廣泛的物聯(lián)網(wǎng)應用層協(xié)議。
coap協(xié)議
受限應用協(xié)議(coap:constrained application protocol)是6lowpan協(xié)議棧中的應用層協(xié)議,基于rest(表述性狀態(tài)傳遞)架構(gòu)風格,支持rest交互。
coap協(xié)議基于udp協(xié)議
coap基于udp協(xié)議,其設計初衷就是盡可能地方便地轉(zhuǎn)換為http協(xié)議。coap讓用戶可以像使用http協(xié)議一樣,在資源受限的物聯(lián)網(wǎng)設備中使用coap協(xié)議。
amqp協(xié)議
高級消息隊列協(xié)議(amqp:advanced message queuing protocol)是一個提供統(tǒng)一消息服務的應用層標準高級消息隊列協(xié)議,為面向消息的中間件設計。
amqp的工作原理
amqp的工作原理與mqtt類似,也是基于發(fā)布-訂閱機制。消息代理broker的交換機組件(exchange)會把接收到的消息,根據(jù)消息的主題,分配到不同的隊列中,以便訂閱者接收。
rabbitmq就是在amqp協(xié)議基礎上實現(xiàn)的一個消息系統(tǒng),遵循mozilla public license開源協(xié)議。rabbitmq在互聯(lián)網(wǎng)應用中常被用作消息服務器。
stomp協(xié)議
簡單(流)文本定向消息協(xié)議(stomp: simple (or streaming) text orientated messaging protocol),提供了一個可互操作的連接格式,允許stomp客戶端與任意stomp消息代理(broker)進行交互。
stomp協(xié)議由于設計簡單,易于開發(fā)客戶端,因此在多種語言和多種平臺上得到廣泛地應用。當前非常流行的開源消息服務器activemq、apollo、rabbitmq(需要插件)都支持stomp協(xié)議。
activemq支持tcp、xmpp、stomp等協(xié)議進行消息傳輸
stomp基于tcp協(xié)議,客戶端和服務器之間的通信是通過“幀”(frame)來實現(xiàn),每個幀由多“行”(line)組成。stomp協(xié)議定義了幀結(jié)構(gòu)。
stomp幀格式
stomp幀第一行是命令,緊跟著鍵值對形式的header內(nèi)容。然后是一個空行,最后是body內(nèi)容。
數(shù)據(jù)分發(fā)服務dds
數(shù)據(jù)分發(fā)服務(dds:data distribution service for real-time systems),是面向?qū)崟r系統(tǒng)的數(shù)據(jù)分布服務,是由omg組織提出的協(xié)議。
dds的數(shù)據(jù)分發(fā)的實時效率非常高,能做到秒級內(nèi)同時分發(fā)百萬條消息到眾多設備。dds在服務質(zhì)量(qos)上提供非常多的保障途徑,因此適用于國防軍事、工業(yè)控制這些高可靠性、可安全性應用領域的原因。不過dds目前還只限于在有線網(wǎng)絡部署,無線網(wǎng)絡的可靠性可能滿足不了dds的qos要求。
總結(jié)
上面列出了一些比較常見的物聯(lián)網(wǎng)應用層協(xié)議,但并不全面,還有一些相對更加小眾的協(xié)議,公開資料也比較少。目前很難說哪種物聯(lián)網(wǎng)應用層協(xié)議會實現(xiàn)壟斷局面,還要看各自生態(tài)和市場需求的未來發(fā)展。