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)知曉。
版本變遷歷史
- 2007-11-29 1.0版本
- 2008-6-5 1.1版本,增加休眠設(shè)備支持
- 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):
- CONNECT消息被拆分成三個(gè)消息(CONNECT,WILLTIPIC,WILLMSG),后兩者用于客戶端傳遞遺囑主題和遺囑消息等
- 在PUBLISH消息中主題(topic name)被替換成兩個(gè)字節(jié)長(zhǎng)度自然數(shù)(topic id),這個(gè)需要客戶端通過(guò)注冊(cè)流程進(jìn)行獲取對(duì)應(yīng)的topic id
- 預(yù)定義(提前定義)topic id和topic name,省去中間注冊(cè)流程,客戶端和網(wǎng)關(guān)要求提前在其固件中指定
- 協(xié)議引入的自動(dòng)發(fā)現(xiàn)機(jī)制可幫助客戶端發(fā)現(xiàn)潛在的網(wǎng)關(guān)。若存在多個(gè)網(wǎng)關(guān),彼此可協(xié)調(diào)是為主從互備或者負(fù)載均衡
- "clean session"即可作用于訂閱持久化,也被擴(kuò)展作用于遺囑特性(遺囑主題和遺囑消息)
- 針對(duì)休眠設(shè)備增加離線保活機(jī)制支持,當(dāng)有消息時(shí)代理需要緩存,客戶端被喚醒時(shí)再發(fā)送
MQTT-SN架構(gòu)示意
在MQTT-SN架構(gòu)圖中,存在三種組件:
- MQTT-SN 客戶端
- MQTT-SN 網(wǎng)關(guān),可單獨(dú)存在,也可以被集成到MQTT服務(wù)器中。需要承擔(dān)MQTT-SN和MQTT協(xié)議之間的轉(zhuǎn)換工作
- 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)傳輸方式,下面的圖片一目了然。
- 透明網(wǎng)關(guān),會(huì)為每一個(gè)客戶端都建立一個(gè)TCP連接到MQTT服務(wù)器的通道,這樣會(huì)較為耗費(fèi)網(wǎng)關(guān)網(wǎng)絡(luò)資源,但模型簡(jiǎn)單
- 聚合網(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