MQTT-SN協議亂翻之簡要介紹

前言

這一段時間在翻看MQTT-SN的協議,對針對不依賴於TCP傳輸的MQTT協議十分感興趣,老是再想着這貨究竟是怎麼定義的。一系列文章皆有MQTT-SN 1.2協議所拼裝組成,原文檔地址: MQTT-SN_spec_v1.2.pdfjava

MQTT-SN文檔分爲7個部分,我直接按照從前到後的順序,直接組裝成四個小篇。嗯,若放在一篇文章中,文字太長,形成排版難度。緩存

非直譯,徹底按照本身理解整理而成,請知曉。服務器

版本變遷歷史

  1. 2007-11-29 1.0版本
  2. 2008-6-5 1.1版本,增長休眠設備支持
  3. 2011-5-20 1.2版本
  • 增長消息長度255字節支持
  • 增長轉發封裝支持
  • 增長返回代碼"0x03 Rejected, not supported"
  • ReturnCode 增長到WILLTOPICRESP和WILLMSGRESP消息中

MQTT-SN名稱由來

原名是MQTT-S,但會引發人們的誤解,所以改名成MQTT-SN:網絡

As part of the job of applying the same or similar license terms to the MQTT-S specification as those on the MQTT specification, we are proposing a small name change. The new name would be MQTT-SN, standing for exactly the same long name, MQTT for Sensor Networks. Some people had assumed that the S in MQTT-S stood for secure, so we hope this change will avoid that confusion. -- Ian Craggssession

MQTT-SN存在目的

MQTT for Sensor Networks is aimed at embedded devices on non-TCP/IP networks, such as Zigbee. MQTT-SN is a publish/subscribe messaging protocol for wireless sensor networks (WSN), with the aim of extending the MQTT protocol beyond the reach of TCP/IP infrastructure for Sensor and Actuator solutions.架構

針對適配傳感裝置(縮寫爲SA)的特定版MQTT協議,通常運行在嵌入式電池驅動的電子元件中,傳輸經過基於IEEE 802.15.4規範無線低速網絡構成的無線傳感網絡(WSN),一樣具備企業級別特性具備以數據爲核心的(data-centric)訂閱/發佈特性。app

總之,針對低功耗、電池驅動、處理存儲受限的設備、不支持TCP/IP協議棧網絡的電子器件而定製,好比常見的ZigBee(或XBee),對所依賴的底層傳輸網絡不可知,但只要網絡支持雙向數據傳輸和網關,都是能夠支持較爲上層的MQTT-SN協議傳輸。好比簡單數據報服務,只要支持一個源端點發送數據到一個特定目的地端點,這對支持MQTT-SN協議,就足夠了。廣播數據報傳輸服務也是必須的用於網關和終端的自動發現流程。爲了下降廣播風暴,MQTT-SN定義了廣播路徑深度(廣播範圍或廣播半徑)。負載均衡

一些名詞和術語

  • topic id,主題標識符,兩個字節16位表示的天然數(java語言short類型,0-65535範圍),對應於主題topic name
  • 網關/服務器(gateway/server),在MQTT-SN中統一稱之爲網關,主要處理和MQTT-SN客戶端的交互,縮寫爲網關
  • MQTT-SN終端和客戶端(client),統一稱之爲客戶端,其實也是嵌入式傳感設備,或電子元件,資源受限,在無線區域我的網中運行
  • IEEE 802.15.4,完整棧的整個數據上限爲128個字節,通常選擇UDP(相比20個字節的TCP協議,UDP報文頭部僅僅須要8個字節)協議傳輸數據
  • 低速網絡/當前網絡,指的是LR-WPAN(low-rate wireless personal area network,),低速無線我的區域網絡

MQTT-SN VS MQTT

儘管MQTT-SN被設計成儘量接近於MQTT,但那些低功耗、電池驅動、資源受限的設備所在網絡場景爲低速帶寬、高鏈接失敗、物理層數據包上線爲128字節。文檔提出瞭如下不一樣點:less

  1. CONNECT消息被拆分紅三個消息(CONNECT,WILLTIPIC,WILLMSG),後二者用於客戶端傳遞遺囑主題和遺囑消息等
  2. 在PUBLISH消息中主題(topic name)被替換成兩個字節長度天然數(topic id),這個須要客戶端經過註冊流程進行獲取對應的topic id
  3. 預約義(提早定義)topic id和topic name,省去中間註冊流程,客戶端和網關要求提早在其固件中指定
  4. 協議引入的自動發現機制可幫助客戶端發現潛在的網關。若存在多個網關,彼此可協調是爲主從互備或者負載均衡
  5. "clean session"便可做用於訂閱持久化,也被擴展做用於遺囑特性(遺囑主題和遺囑消息)
  6. 針對休眠設備增長離線保活機制支持,當有消息時代理須要緩存,客戶端被喚醒時再發送

MQTT-SN架構示意

在MQTT-SN架構圖中,存在三種組件:this

  1. MQTT-SN 客戶端
  2. MQTT-SN 網關,可單獨存在,也能夠被集成到MQTT服務器中。須要承擔MQTT-SN和MQTT協議之間的轉換工做
  3. MQTT-SN 轉發器,負責轉發當前客戶端數據到不可直接訪問的網關上去,針對客戶端而言網關不可直接訪問時,轉發器做用就凸顯。轉發器封裝MQTT-SN消息轉發給網關,解封來自網關的消息發送給客戶端。網關不可以篡改原始數據。

MQTT-SN傳輸網關

MQTT-SN網關傳輸方式,下面的圖片一目瞭然。 

  1. 透明網關,會爲每個客戶端都創建一個TCP鏈接到MQTT服務器的通道,這樣會較爲耗費網關網絡資源,但模型簡單
  2. 聚合網關,只創建一條TCP鏈接通道到MQTT服務器上,全部的客戶端共享一個通道,很經濟的說。

網關須要抉擇哪些消息須要和遠程的MQTT Server進行交互,好比只選擇客戶端發送的PUBLISH、SUBSCRIBLE消息等。

小結

上面簡單介紹了MQTT-SN,下面將會介紹MQTT-SN消息頭部和格式。

相關文章
相關標籤/搜索