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