王劍秋,趙 一
(1.中國電信股份有限公司浙江分公司,浙江 杭州 310006;2.杭州電子科技大學)
物聯網傳輸協議MQTT與CoAP比較與應用
王劍秋1,趙 一2
(1.中國電信股份有限公司浙江分公司,浙江 杭州 310006;2.杭州電子科技大學)
目前在物聯網(IoT)領域還沒有一個可以適用于所有場景的傳輸協議。在眾多的物聯網傳輸協議中,兩個輕量級協議目前應用得最為廣泛:MQTT(Message Queue Telemetry)和CoAP(Constrained Application Protocol)。文章從協議特點、實現方式、適用場景等方面對這兩個協議進行對比,并進行了服務器端的連接測試仿真,根據兩個協議的特點與仿真結果提出了不同應用場景下IoT傳輸協議選取的建議。
物聯網;MQTT;CoAP;傳輸協議
作為計算機、互聯網與移動通信之后的世界信息產業(yè)的第三次浪潮,物聯網將終端從PC擴展到了物品。“感知中國”于2009年由溫家寶總理在政府工作報告中提出。自此,物聯網正式被列入了國家五大新興戰(zhàn)略性產業(yè)之一,在中國全社會受到了極大的關注。
從國內BAT公司動向來看,阿里的云物聯套件、百度開放云物聯網服務IoT、騰訊QQ物聯平臺都將MQTT作為IM/IoT共享的接入服務。然而華為NB-IoT戰(zhàn)略中的首款芯片Boudica 120以及LiteOS操作系統(tǒng)卻支持CoAP協議。
本文針對MQTT和CoAP這兩種在物聯網領域較熱門的協議進行對比,并分析它們各自適用的場景。
MQTT(消息隊列遙測傳輸)和CoAP(約束應用協議)是適用于小型設備的目前應用最廣泛的IoT標準協議。MQTT和CoAP都是開放標準,適合受限環(huán)境,支持異步通信和在IP上運行。
MQTT是基于ISO標準的在TCP/IP協議之上的基于發(fā)布訂閱的“輕量級”消息協議。它是專門為M2M通信而設計的,最初由IBM開發(fā),覆蓋全平臺,而且可以基本上把所有的聯網設備和外部設備連接起來[1]。
同HTTP協議一樣,MQTT協議也是應用層協議。MQTT協議采用了發(fā)布/訂閱消息模式,就是指發(fā)布者與訂閱者并不是直接通過MQTT協議交互數據,而是分別與消息代理(Broker)通過MQTT交互數據。
MQTT采用客戶端/服務器模型,每個傳感器都是一個客戶端,并通過TCP連接到被稱為代理的服務器。MQTT是面向消息的,每個消息都是離散的數據塊,對代理不透明[2]。每個消息都被發(fā)布到一個稱為主題的地址。客戶可以訂閱多個主題,每個訂閱主題的客戶都收到發(fā)布到該主題的每個消息。MQTT同時提供三種消息QoS供開發(fā)者選擇。

圖1 MQTT結構圖
CoAP,即約束應用協議,與HTTP協議一樣也是一種文檔傳輸協議。而不同的是,CoAP是針對受限設備的需求來設計的,其數據包大小遠小于HTTP的TCP流。CoAP通過UDP協議運行,客戶端和服務器通過無連接數據包進行通信,并且允許UDP廣播和多播用于尋址[3]。

圖2 CoAP結構圖
CoAP協議遵循客戶端/服務器模型,客戶端向服務器發(fā)出請求,服務器對請求發(fā)回響應[4]。模型中的客戶端和服務器是功能邏輯上的劃分,節(jié)點可兼具客戶端和服務器的功能[5]。像HTTP一樣,CoAP基于非常成功的REST模型:服務器使資源在URL下可用,客戶端使用GET,PUT,POST和DELETE等方法訪問這些資源。
MQTT協議的成熟實現方式有很多,比較常見的有以下幾種。
⑴Mosquitto
這是在生產環(huán)境中可用的代理之一,目前基于MQTT協議版本3.1和3.1.1。它包括C和C++客戶端庫,可實現消息訂閱和發(fā)布,并可根據個人需求定制配置參數。Mosquitto是MQTT協議非常常用的一種測試與實現方式,在Github上較為活躍,是目前最受歡迎的實現方式之一。
⑵Mosca
Mosca是一個封裝好的在Node.js上實現MQTT協議消息代理的一種方式。與此同時,它的作者也在維護MQTT.js這樣一個運行在Node.js和瀏覽器的庫。二者搭配起來可以輕松地定制所需完成的需求。但是Mosca目前只能提供消息質量QoS 0和QoS 1兩個選項。
⑶HiveMQ
在大規(guī)模企業(yè)級的消息代理上,HiveMQ可以提供很好的支持。企業(yè)集成可以最低的延遲處理巨大的吞吐量,并進一步處理數據。HiveMQ服務器具有可擴展性,安全性和簡單性。針對個人用戶有免費版,是進行生產環(huán)境部署的一個很好的選擇。
在客戶端實現方面,Eclipse公司的paho項目幾乎提供了所有主流語言對于MQTT客戶端的實現方式。

表1MQTT客戶端比較
CoAP協議的開源實現,有三個版本較為實用:
⑴libcoap
ibcoap是針對資源受限(如計算能力、射頻范圍、內存、帶寬、網絡數據包大小等)設備的輕量級應用程序協議的C實現。該協議由IETF作為RFC 7252標準化,并提供server和client方法,非常方便調試CoAP。
⑵Californium
基于Java實現的Californium是另一個很實用的開源版本。Californium是一個強大的CoAP框架,它為技術人員開發(fā)與調試提供了很方便的API。
⑶node-coap
node-coap是建立在Node.js的http庫上的一個CoAP協議客戶端和服務器的開源庫。它也是一種很流行CoAP實現方式,具有快速搭建、簡單配置的特性,可以方便地使用它進行測試與開發(fā)。
從上面的實現部分可以看出,MQTT和CoAP基本上可以在全平臺實現,那么如何針對實際應用場景選擇合適的協議就是一個需要解決的問題。首先,需要了解它們各自的特點。
從表2來看,二者從模型到基于的傳輸協議,以及安全性等方面都有很大的不同點,這讓他們在某些方面的應用上相比對方更有優(yōu)勢。

表2MQTT與CoAP的對比
對于MQTT協議來說,相比CoAP它更加完善,是現階段廣域網上的設備之間進行通信的理想選擇。它類似于微博,可以關注(訂閱)所關心的人(話題),當關注的人發(fā)布新消息的時候,關注者就會收到來自服務器推送的信息。當然,與微博有所不同的是服務器在中間可以對訂閱者的偏好進行過濾操作。由于采用了發(fā)布/訂閱的模式,在帶寬有限的情況下(如缺少強大網絡覆蓋的偏遠地區(qū)),MQTT使物聯網的發(fā)展成為了可能。
相比MQTT類似于微博,CoAP就像是傳統(tǒng)的基于網站的業(yè)務,可以訪問服務器資源,并且提交自己的數據。同MQTT一樣,CoAP也對受限環(huán)境做了特殊的設計。不同于采用發(fā)布/訂閱模式,CoAP采用了UDP傳輸協議,由于UDP允許廣播和多播,其在帶寬較少的地區(qū)的信息傳輸有更好的表現。
在現實生活中,物聯網正在成為我們生活的組成部分:大到智慧城市、醫(yī)療醫(yī)護,小到汽車、智能家居。有很多場景,其實用兩種協議都可以實現,但都有各自的優(yōu)缺點。以下用最近比較火的共享單車為例子進行比較。
以MQTT協議作為通信協議,忽略掉在信息傳輸過程中比較復雜的認證、session等過程,簡化之后每輛單車就相當于是客戶端,云端服務器就等價于消息代理。單車作為客戶端訂閱各種與自己本身相關的事件主題,如開鎖、故障等。當觸發(fā)事件時,服務器向單車推送相應主題的消息,單車根據消息做出相應的處理。如果出現特殊事件,如服務器奔潰等,服務器可以作為發(fā)布者,向每輛單車推送停止運行的消息。
以CoAP實現,類似于傳統(tǒng)的Web服務器,單車以GET、POST等方式向服務器發(fā)送請求,例如認證、故障等,服務器對請求作出響應,單車使用返回的響應信息進行相應的操作。此時,服務器需要識別每一輛單車,信息交互需要二者同時處于在線狀態(tài)。
從上面例子看出,在實現共享單車的過程中,使用MQTT可以讓客戶端和服務器最大限度地解耦,二者不需要交互不需要同時在線。而CoAP最大的優(yōu)勢是其與絕大部分HTTP網站兼容。如果有一個現成的Web服務系統(tǒng),那么使用CoAP是一個很好的選擇。在諸如智能家居等已有現成的Web服務架構的領域,CoAP依賴其對于HTTP的兼容性,開發(fā)工作就相對簡單。反過來如果以MQTT為傳輸協議,則需要對架構進行重新設計。
為了測試采用MQTT和CoAP協議的服務器在實際開發(fā)中的性能,此次設計了測試二者多線程連接的實驗。實驗采用的是Ubuntu 16.04的操作系統(tǒng),壓力測試軟件采用了基于Java的JMeter,Java版本為1.8.0_121。
MQTT協議測試采用XMeter團隊開發(fā)的MQTT-JMeter插件,服務器用Mosca搭建。而由于JMeter官方暫時沒有對CoAP協議測試的支持,所以采用的是Elang2所寫的jmeter-coap-sampler,需要在Github上下載并編譯到本地環(huán)境。測試CoAP服務器使用 node-coap搭建。每組數據的線程數是5000,實測數據如下。

表3 MQTT與CoAP服務器不同硬件條件下連接測試結果
從仿真結果可以看出,隨著內存的增大CoAP服務器對于連接請求的響應時間有下降趨勢,而錯誤率逐漸趨向于0,吞吐量也逐漸增大。MQTT服務器的各項數據與CoAP服務器各項數據變化趨勢基本相同(在4g內存時,受限于測試機器的性能,數據可能存在一定的誤差)。
橫向來看,在同一環(huán)境下,CoAP對于請求的處理時間、吞吐量均優(yōu)于相同條件下MQTT服務器的數據,并且MQTT協議的連接錯誤率遠高于CoAP協議。
由于上述實驗中MQTT協議的服務器錯誤率偏高,又在此基礎上新增了一組少并發(fā)情況下MQTT協議的連接實驗。

表4 內存為2g條件下的MQTT服務器連接測試結果
從第二組實驗結果可以看出,對于MQTT協議,在2g內存的條件下,500以內的線程數可以使服務器錯誤率趨近于0,而500以上線程數的條件下,錯誤率會急劇升高。
從兩組仿真實驗可以得出,CoAP服務器端各項數據均比MQTT協議表現突出,MQTT的性能需要更高的硬件條件才能更好地發(fā)揮。
本文從國內大公司發(fā)展物聯網所選的MQTT和CoAP協議入手,分析了它們目前比較普遍的實現方式以及各自的特點,并且從實際應用中分析在各種情形下協議的合理選取,之后通過實驗仿真兩個協議服務器的性能。
從特點分析以及實驗結果可見,如果開發(fā)人員利用現有Web服務器架構來開發(fā),使用CoAP是很好的選擇。而如果將應用接入主流的第三方云平臺,MQTT是更好的選擇。從仿真實驗可見,對于硬件要求不高的小型IoT項目開發(fā),如智能家居等,CoAP可以很完美地實現;如果開發(fā)大型IoT,從各大公司開發(fā)的物聯網云構架可以看得出來,到目前為止,MQTT是最好的選擇。
[1]Hunkeler U,Hong L T,Stanford-Clark A.MQTT-S-A publish/subscribe protocol for Wireless Sensor Networks[C]//International Conference on Communication Systems Software and MIDDLEWARE and Workshops,2008.Comsware.IEEE,2008:791-798
[2]Bormann C,Castellani A P,Shelby Z.CoAP:An Application Protocol for Billions of Tiny Internet Nodes[J].IEEE Internet Computing,2012.16(2):62-67
[3]Sensinode.Constrained Application Protocol(CoAP)[J],2013.
[4]Al-Fuqaha A,Guizani M,Mohammadi M,et al.Internet of Things:A Survey on Enabling Technologies,Protocols,and Applications[J].IEEE Communications Surveys&Tutorials,2015.17(4):2347-2376
[5]陳旖,張美平,許力.WSN應用層協議MQTT-SN與CoAP的剖析與改進[J].計算機系統(tǒng)應用,2015.2:229-234
Comparison of IoT protocols MQTT and CoAP and their applications
Wang Jianqiu1,Zhao Yi2
(1.China Telecom Co.,Ltd.Zhejiang Branch,Hangzhou,Zhejiang 310006,China;2.HangzhouDianzi University)
At present,in the field of emerging Internet of Things(IoT),there is no transmission protocol can be applied to all scenarios.Among the many IoT protocols,two lightweight protocols are currently the most widely used:MQTT(Message Queue Telemetry)and CoAP(Constrained Application Protocol).This paper compares the two protocols from the characteristics of the protocol,the ways of implementation and the application scenarios,and simulates the server-side connection test.According to the characteristics of the two protocols and the simulation results,the proposal of selecting IoT transmission protocol in different application scenarios is put forward.
Internet of things;MQTT;CoAP;transmission protocol
TP3
A
1006-8228(2017)10-25-04
2017-08-14
王劍秋(1975-),男,杭州人,本科,中級工程師,主要研究方向:通訊工程與計算機技術。
10.16644/j.cnki.cn33-1094/tp.2017.10.008