聶永的博客

          記錄工作/學(xué)習(xí)的點點滴滴。

          MQTT-SN協(xié)議亂翻之簡要介紹

          前言

          這一段時間在翻看MQTT-SN的協(xié)議,對針對不依賴于TCP傳輸?shù)腗QTT協(xié)議十分感興趣,總是再想著這貨到底是怎么定義的。一系列文章皆有MQTT-SN 1.2協(xié)議所拼裝組成,原文檔地址: MQTT-SN_spec_v1.2.pdf

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

          非直譯,完全按照自己理解整理而成,請知曉。

          版本變遷歷史

          1. 2007-11-29 1.0版本
          2. 2008-6-5 1.1版本,增加休眠設(shè)備支持
          3. 2011-5-20 1.2版本
          • 增加消息長度255字節(jié)支持
          • 增加轉(zhuǎn)發(fā)封裝支持
          • 增加返回代碼"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 Craggs

          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協(xié)議,一般運行在嵌入式電池驅(qū)動的電子元件中,傳輸通過基于IEEE 802.15.4規(guī)范無線低速網(wǎng)絡(luò)構(gòu)成的無線傳感網(wǎng)絡(luò)(WSN),同樣具有企業(yè)級別特性具有以數(shù)據(jù)為核心的(data-centric)訂閱/發(fā)布特性。

          總之,針對低功耗、電池驅(qū)動、處理存儲受限的設(shè)備、不支持TCP/IP協(xié)議棧網(wǎng)絡(luò)的電子器件而定制,比如常見的ZigBee(或XBee),對所依賴的底層傳輸網(wǎng)絡(luò)不可知,但只要網(wǎng)絡(luò)支持雙向數(shù)據(jù)傳輸和網(wǎng)關(guān),都是可以支持較為上層的MQTT-SN協(xié)議傳輸。比如簡單數(shù)據(jù)報服務(wù),只要支持一個源端點發(fā)送數(shù)據(jù)到一個特定目的地端點,這對支持MQTT-SN協(xié)議,就足夠了。廣播數(shù)據(jù)報傳輸服務(wù)也是必須的用于網(wǎng)關(guān)和終端的自動發(fā)現(xiàn)流程。為了降低廣播風(fēng)暴,MQTT-SN定義了廣播路徑深度(廣播范圍或廣播半徑)。

          一些名詞和術(shù)語

          • topic id,主題標(biāo)識符,兩個字節(jié)16位表示的自然數(shù)(java語言short類型,0-65535范圍),對應(yīng)于主題topic name
          • 網(wǎng)關(guān)/服務(wù)器(gateway/server),在MQTT-SN中統(tǒng)一稱之為網(wǎng)關(guān),主要處理和MQTT-SN客戶端的交互,縮寫為網(wǎng)關(guān)
          • MQTT-SN終端和客戶端(client),統(tǒng)一稱之為客戶端,其實也是嵌入式傳感設(shè)備,或電子元件,資源受限,在無線區(qū)域個人網(wǎng)中運行
          • IEEE 802.15.4,完整棧的整個數(shù)據(jù)上限為128個字節(jié),一般選擇UDP(相比20個字節(jié)的TCP協(xié)議,UDP報文頭部僅僅需要8個字節(jié))協(xié)議傳輸數(shù)據(jù)
          • 低速網(wǎng)絡(luò)/當(dāng)前網(wǎng)絡(luò),指的是LR-WPAN(low-rate wireless personal area network,),低速無線個人區(qū)域網(wǎng)絡(luò)

          MQTT-SN VS MQTT

          盡管MQTT-SN被設(shè)計成盡可能接近于MQTT,但那些低功耗、電池驅(qū)動、資源受限的設(shè)備所在網(wǎng)絡(luò)場景為低速帶寬、高連接失敗、物理層數(shù)據(jù)包上線為128字節(jié)。文檔提出了以下不同點:

          1. CONNECT消息被拆分成三個消息(CONNECT,WILLTIPIC,WILLMSG),后兩者用于客戶端傳遞遺囑主題和遺囑消息等
          2. 在PUBLISH消息中主題(topic name)被替換成兩個字節(jié)長度自然數(shù)(topic id),這個需要客戶端通過注冊流程進(jìn)行獲取對應(yīng)的topic id
          3. 預(yù)定義(提前定義)topic id和topic name,省去中間注冊流程,客戶端和網(wǎng)關(guān)要求提前在其固件中指定
          4. 協(xié)議引入的自動發(fā)現(xiàn)機(jī)制可幫助客戶端發(fā)現(xiàn)潛在的網(wǎng)關(guān)。若存在多個網(wǎng)關(guān),彼此可協(xié)調(diào)是為主從互備或者負(fù)載均衡
          5. "clean session"即可作用于訂閱持久化,也被擴(kuò)展作用于遺囑特性(遺囑主題和遺囑消息)
          6. 針對休眠設(shè)備增加離線保活機(jī)制支持,當(dāng)有消息時代理需要緩存,客戶端被喚醒時再發(fā)送

          MQTT-SN架構(gòu)示意

          在MQTT-SN架構(gòu)圖中,存在三種組件:

          1. MQTT-SN 客戶端
          2. MQTT-SN 網(wǎng)關(guān),可單獨存在,也可以被集成到MQTT服務(wù)器中。需要承擔(dān)MQTT-SN和MQTT協(xié)議之間的轉(zhuǎn)換工作
          3. MQTT-SN 轉(zhuǎn)發(fā)器,負(fù)責(zé)轉(zhuǎn)發(fā)當(dāng)前客戶端數(shù)據(jù)到不可直接訪問的網(wǎng)關(guān)上去,針對客戶端而言網(wǎng)關(guān)不可直接訪問時,轉(zhuǎn)發(fā)器作用就凸顯。轉(zhuǎn)發(fā)器封裝MQTT-SN消息轉(zhuǎn)發(fā)給網(wǎng)關(guān),解封來自網(wǎng)關(guān)的消息發(fā)送給客戶端。網(wǎng)關(guān)不能夠篡改原始數(shù)據(jù)。

          MQTT-SN傳輸網(wǎng)關(guān)

          MQTT-SN網(wǎng)關(guān)傳輸方式,下面的圖片一目了然。

          1. 透明網(wǎng)關(guān),會為每一個客戶端都建立一個TCP連接到MQTT服務(wù)器的通道,這樣會較為耗費網(wǎng)關(guān)網(wǎng)絡(luò)資源,但模型簡單
          2. 聚合網(wǎng)關(guān),只建立一條TCP連接通道到MQTT服務(wù)器上,所有的客戶端共享一個通道,很經(jīng)濟(jì)的說。

          網(wǎng)關(guān)需要抉擇哪些消息需要和遠(yuǎn)程的MQTT Server進(jìn)行交互,比如只選擇客戶端發(fā)送的PUBLISH、SUBSCRIBLE消息等。

          小結(jié)

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

          posted on 2015-01-07 22:41 nieyong 閱讀(11776) 評論(0)  編輯  收藏 所屬分類: MQTT

          公告

          所有文章皆為原創(chuàng),若轉(zhuǎn)載請標(biāo)明出處,謝謝~

          新浪微博,歡迎關(guān)注:

          導(dǎo)航

          <2015年1月>
          28293031123
          45678910
          11121314151617
          18192021222324
          25262728293031
          1234567

          統(tǒng)計

          常用鏈接

          留言簿(58)

          隨筆分類(130)

          隨筆檔案(151)

          個人收藏

          最新隨筆

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 枣强县| 青州市| 蒙山县| 工布江达县| 涪陵区| 健康| 扶风县| 木兰县| 天津市| 呼伦贝尔市| 庆城县| 大洼县| 苍山县| 东阳市| 游戏| 商洛市| 蒲江县| 汉川市| 沾化县| 鹤岗市| 青龙| 荃湾区| 西林县| 清流县| 泾源县| 合江县| 灵石县| 宜川县| 铜山县| 喀什市| 南丰县| 宝兴县| 大同市| 呈贡县| 平阴县| 宾阳县| 丰都县| 类乌齐县| 沙坪坝区| 长顺县| 错那县|