mqtt協議闡述
(1)輕量級
因為物聯網裝置的特殊性,為了保證資料在低頻寬、不可靠的網路中傳輸有效的資料,故mqtt協議的設計原則是精簡,不新增可有可無的功能,以保證協議的輕便性,因此mqtt協議頭部協議欄位2只有兩位元組,盡量保持輕量級的特性。
(2)支援發布(publish)/訂閱(subscribe)模式
使用發布/訂閱模式解除了通訊裝置終端之間的耦合,解耦方式可以從多個方面進行加以區分,主要有空間解耦、時間解耦和同步解耦。空間解耦:支援一對多、多對
一、多對多的訊息傳遞,發布者裝置與訂閱者裝置彼此相互獨立,訊息發布者與訂閱者不知道彼此任何相關資訊就可以實現資料互動,比如對方的ip位址和埠,方便了訊息在裝置之間的傳遞;時間解耦:發布者和訂閱者無需同時執行;同步解耦:在裝置訊息發布或接收期間,訊息發布者與訂閱者的其他操作不會暫停。
(3)提供三種級別qos訊息傳遞型別
當qos值為0時,為最多傳輸一次(at most once delivery),此種傳輸方式中,傳送方不需要收到伺服器回應,訊息可能到達伺服器一次,或可能根本不會到達此種傳輸方式屬於允許訊息丟失場景,效能最高;當qos值為1時,傳送放至少傳送一次(at least once delivery),以確保訊息到達接收方,接收方需要返回確認訊息,在此情況下,接受方可能會接收到重複訊息,即適合不允許訊息丟失,但允許訊息重複的場景,效能中等。當qos值為2時,訊息體只到達一次並且保證訊息送達(exactly once delivery)。為確保響應訊息能夠到達傳送方,接收方必須等待傳送方對接受方響應訊息的響應,只有收到傳送方的確認訊息後,接收方才能對訂閱者投遞訊息。
(4)提供遺囑機制
遺囑保留主要用於發布態(publish)的訊息,當遺囑標誌(連線標誌的第二位)被設定為1,並且遺囑保留位(連線標誌的第五位)被設定為1,伺服器端會將此次傳送的訊息作為遺囑訊息保留發布,即當有新的訂閱者出現,伺服器會將此訊息推送出去。
mqtt控制報文格式
使用mqtt協議,必須嚴格遵循mqtt控制報文格式來進行通訊,mqtt預定義的控制報文格式較為精簡,主要由三部分組成:固定報頭(fixed header)、可變報頭(variable header)、有效載荷(payload)。控制報文結構如圖所示。
固定報頭
每個mqtt控制報文都必須攜帶乙個固定報頭,固定頭部部分佔兩個位元組,共16位。固定報頭的控制報文格式如圖所示。
mqtt控制報文型別有14種,依次為connect(客戶端請求連線到伺服器)、conack(連線確認)、publish(發布訊息)、puback(發布確認)、pubrec(發布初稿)、pubrel(出版發行)、pubcomp(發布完整)、subscribe(客戶端訂閱請求)、suback(訂閱確認)、unsubscribe(退訂請求)、unsuback(退訂確認)、pingreq(ping 請求)、pingresp(ping 響應)、disconnect(客戶端斷開伺服器連線)。如圖所示。
控制報文型別的標誌位只有在publish(發布訊息)型別時有效,其他控制報文型別標誌位現保留。控制報文型別的標誌位重發標誌dup,在固定報頭第一位元組第3位,如果dup標誌為0,表示這是傳送方第一次請求傳送的publish報文,如果值為dup標誌位被設定為1,表示這可能是早期報文請求的重發。控制報文型別的標誌位服務質量等級qos,在固定報頭第一位元組2-1位,該欄位表示訊息傳遞型別。三種訊息傳遞服務質量如圖所示。
剩餘長度字段是從報文段的第二個位元組開始,剩餘長度字段(remaining length)是除固定頭部報文段以外的報文段,包括可變報頭和負載資料。
可變報頭
mqtt報文字段除了必須的固定報頭,在某些mqtt控制報文中包含可變報頭字段,該報文段根據各報文型別的不同而不同,具體可根據報文識別符號識別。在publish控制報文、puback控制報文、pubrec控制報文、pubrel控制報文、pubcomp控制報文、subscribe控制報文、suback控制報文,unsubscibe控制報文、unsuback控制報文的可變頭部部分都含有乙個兩位元組的可變頭部,報文識別符號的作用是標識區別報文,當客戶端每傳送乙個新的型別的報文段時,該客戶端所傳送的報文中必須重新分配新的報文識別符號,且新的控制報文識別符號必須是當前未使用的報文識別符號,而當由於某種原因該客戶端需要重新傳送該控制報文時,重發的控制報文必須攜帶與原控制報文的識別符號相同的報文識別符號。當客戶端收到該控制報文的確認資訊後,才可釋放該報文識別符號,即下次傳送控制報文時可重用該報文識別符號。
有效載荷
有效載荷用於攜帶應用訊息,位於固定首部和可變報頭之後,即位於控制報文的最後部分,有效載荷不是每個控制報文必須攜帶的報文段,但是在connect控制報文、subscribe控制報文、suback控制報文、unsubscribe控制報文中需要攜帶,在publish控制報文中為可選字段,在其他控制報文中不需要攜帶。connect控制報文段中有效載荷字段內容主要是客戶端的clientid、遺囑主題,遺囑訊息以及使用者名稱和密碼,且必須按此順序排列。subscribe控制報文段中效載荷字段內容是要訂閱的主題以及qos。suback控制報文段中效載荷字段內容是對subscribe控制報文所訂閱的主題的確認和回覆。suback控制報文段中訊息體內容是要訂閱的主題。
mqtt控制報文
mqtt客戶端,即使用mqtt協議通訊的程式或裝置,其必須依照mqtt控制報文格式傳送mqtt控制報文到伺服器端。mqtt共14種不同的控制報文的型別。
connect報文是客戶端連線到伺服器端傳送的第乙個報文,並且,在乙個網路連線上,客戶端只能傳送一次connect控制報文,否則伺服器將斷開該連線,並將該報文做違規處理。connect控制報文的固定報頭如圖所示。
客戶端在成功建立tcp連線之後,傳送connect控制報文到伺服器,伺服器給出確認,客戶端收到該確認訊息後,會傳送subscribe控制報文到伺服器訂閱相應的主題列表,訂閱過程中客戶端裝置至少訂閱乙個主題。subscribe控制報文也會指定qos服務質量等級,伺服器根據該報文傳送 publish報文給客戶端。subscribe控制報文固定報頭格式如圖所示。
publish控制報文是訊息推送方推送訊息到伺服器,或由服務推送訊息到相應主題訂閱者的應用訊息報文。publish報文固定報頭如圖2-7所示。第乙個位元組第三位dup標誌位為重發標誌,如果dup標誌位被設定為0,表示這是客戶端或伺服器端第一次請求傳送本報文,如果是重新傳送的報文,則dup標誌應設定為1。
物聯網通訊協議之MQTT
mqtt 協議翻譯成中文叫訊息佇列遙測傳輸,最早來自於ibm公司,是為硬體效能低下的遠端裝置以及網路狀況糟糕的情況下而設計的發布 訂閱型訊息協議。它工作在tcp ip協議上,具有輕量 簡單 開放和易於實現的特點,廣泛應用在物聯網行業上,如在智慧型家居,智慧型農業,智慧型社群的裝置中。2014年發布的...
物聯網通訊協議介紹
from 市場上常見的有zigbee 藍芽以及wifi協議等。zigbee目前在工業控制領域應用廣泛,在智慧型家居領域也有一定應用。它有以下主要優勢 1.低成本。zigbee協議資料傳輸速率低,協議簡單,所以開發成本也比較低。並且zigbee協議還免收專利費用 2.低功耗。由於zigbee協議傳輸速...
物聯網通訊協議介紹
先說接入協議 市場上常見的有zigbee 藍芽以及wifi協議等。一 zigbee zigbee目前在工業控制領域應用廣泛,在智慧型家居領域也有一定應用。它有以下主要優勢 1.低成本。zigbee協議資料傳輸速率低,協議簡單,所以開發成本也比較低。並且zigbee協議還免收專利費用 2.低功耗。由於...