聶永的博客

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

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

          前言

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

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

          非直譯,完全按照自己理解整理而成,請(qǐng)知曉。

          版本變遷歷史

          1. 2007-11-29 1.0版本
          2. 2008-6-5 1.1版本,增加休眠設(shè)備支持
          3. 2011-5-20 1.2版本
          • 增加消息長(zhǎng)度255字節(jié)支持
          • 增加轉(zhuǎn)發(fā)封裝支持
          • 增加返回代碼"0x03 Rejected, not supported"
          • ReturnCode 增加到WILLTOPICRESP和WILLMSGRESP消息中

          MQTT-SN名稱由來(lái)

          原名是MQTT-S,但會(huì)引起人們的誤解,因此更名成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.

          針對(duì)適配傳感裝置(縮寫(xiě)為SA)的特定版MQTT協(xié)議,一般運(yùn)行在嵌入式電池驅(qū)動(dòng)的電子元件中,傳輸通過(guò)基于IEEE 802.15.4規(guī)范無(wú)線低速網(wǎng)絡(luò)構(gòu)成的無(wú)線傳感網(wǎng)絡(luò)(WSN),同樣具有企業(yè)級(jí)別特性具有以數(shù)據(jù)為核心的(data-centric)訂閱/發(fā)布特性。

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

          一些名詞和術(shù)語(yǔ)

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

          MQTT-SN VS MQTT

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

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

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

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

          1. MQTT-SN 客戶端
          2. MQTT-SN 網(wǎng)關(guān),可單獨(dú)存在,也可以被集成到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èn)的網(wǎng)關(guān)上去,針對(duì)客戶端而言網(wǎng)關(guān)不可直接訪問(wèn)時(shí),轉(zhuǎn)發(fā)器作用就凸顯。轉(zhuǎn)發(fā)器封裝MQTT-SN消息轉(zhuǎn)發(fā)給網(wǎng)關(guān),解封來(lái)自網(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),會(huì)為每一個(gè)客戶端都建立一個(gè)TCP連接到MQTT服務(wù)器的通道,這樣會(huì)較為耗費(fèi)網(wǎng)關(guān)網(wǎng)絡(luò)資源,但模型簡(jiǎn)單
          2. 聚合網(wǎng)關(guān),只建立一條TCP連接通道到MQTT服務(wù)器上,所有的客戶端共享一個(gè)通道,很經(jīng)濟(jì)的說(shuō)。

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

          小結(jié)

          上面簡(jiǎn)單介紹了MQTT-SN,下面將會(huì)介紹MQTT-SN消息頭部和格式。

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

          公告

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

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

          導(dǎo)航

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

          統(tǒng)計(jì)

          常用鏈接

          留言簿(58)

          隨筆分類(130)

          隨筆檔案(151)

          個(gè)人收藏

          最新隨筆

          搜索

          最新評(píng)論

          閱讀排行榜

          評(píng)論排行榜

          主站蜘蛛池模板: 鹿邑县| 平乐县| 赤峰市| 云安县| 龙胜| 隆回县| 冀州市| 武城县| 阿图什市| 康定县| 黔西县| 武夷山市| 平顺县| 新邵县| 峨眉山市| 东方市| 江安县| 滦平县| 讷河市| 东乡| 长顺县| 鄂州市| 高安市| 五河县| 朔州市| 文安县| 南丹县| 海林市| 昌宁县| 红桥区| 贵州省| 香港| 华宁县| 中牟县| 崇信县| 新郑市| 临颍县| 敦煌市| 中超| 宜丰县| 郓城县|