一、簡(jiǎn)述MQTT(Message Queuing Telemetry Transport,消息隊(duì)列遙測(cè)傳輸協(xié)議),是一種基于發(fā)布/訂閱(publish/subscribe)模式的'輕量級(jí)'通訊協(xié)議,該協(xié)議構(gòu)建于TCP/IP協(xié)議上,由IBM在1999年發(fā)布。MQTT最大優(yōu)點(diǎn)在于,可以以極少的代碼和有限的帶寬,為連接遠(yuǎn)程設(shè)備提供實(shí)時(shí)可靠的消息服務(wù)。作為一種低開(kāi)銷(xiāo)、低帶寬占用的即時(shí)通訊協(xié)議,使其在物聯(lián)網(wǎng)、小型設(shè)備、移動(dòng)應(yīng)用等方面有較廣泛的應(yīng)用。 MQTT是一個(gè)基于客戶(hù)端-服務(wù)器的消息發(fā)布/訂閱傳輸協(xié)議。MQTT協(xié)議是輕量、簡(jiǎn)單、開(kāi)放和易于實(shí)現(xiàn)的,這些特點(diǎn)使它適用范圍非常廣泛。在很多情況下,包括受限的環(huán)境中,如:機(jī)器與機(jī)器(M2M)通信和物聯(lián)網(wǎng)(IoT)。其在,通過(guò)衛(wèi)星鏈路通信傳感器、偶爾撥號(hào)的醫(yī)療設(shè)備、智能家居、及一些小型化設(shè)備中已廣泛使用。 二、設(shè)計(jì)規(guī)范由于物聯(lián)網(wǎng)的環(huán)境是非常特別的,所以MQTT遵循以下設(shè)計(jì)原則:
三、主要特性MQTT協(xié)議工作在低帶寬、不可靠的網(wǎng)絡(luò)的遠(yuǎn)程傳感器和控制設(shè)備通訊而設(shè)計(jì)的協(xié)議,它具有以下主要的幾項(xiàng)特性:
四、MQTT協(xié)議原理4.1 MQTT協(xié)議實(shí)現(xiàn)方式實(shí)現(xiàn)MQTT協(xié)議需要客戶(hù)端和服務(wù)器端通訊完成,在通訊過(guò)程中,MQTT協(xié)議中有三種身份:發(fā)布者(Publish)、代理(Broker)(服務(wù)器)、訂閱者(Subscribe)。其中,消息的發(fā)布者和訂閱者都是客戶(hù)端,消息代理是服務(wù)器,消息發(fā)布者可以同時(shí)是訂閱者。 MQTT傳輸?shù)南⒎譃椋褐黝}(Topic)和負(fù)載(payload)兩部分:
4.2 網(wǎng)絡(luò)傳輸與應(yīng)用消息MQTT會(huì)構(gòu)建底層網(wǎng)絡(luò)傳輸:它將建立客戶(hù)端到服務(wù)器的連接,提供兩者之間的一個(gè)有序的、無(wú)損的、基于字節(jié)流的雙向傳輸。 當(dāng)應(yīng)用數(shù)據(jù)通過(guò)MQTT網(wǎng)絡(luò)發(fā)送時(shí),MQTT會(huì)把與之相關(guān)的服務(wù)質(zhì)量(QoS)和主題名(Topic)相關(guān)連。 4.3 MQTT客戶(hù)端一個(gè)使用MQTT協(xié)議的應(yīng)用程序或者設(shè)備,它總是建立到服務(wù)器的網(wǎng)絡(luò)連接??蛻?hù)端可以:
4.4 MQTT服務(wù)器MQTT服務(wù)器以稱(chēng)為'消息代理'(Broker),可以是一個(gè)應(yīng)用程序或一臺(tái)設(shè)備。它是位于消息發(fā)布者和訂閱者之間,它可以:
4.5 MQTT協(xié)議中的訂閱、主題、會(huì)話(huà)一、訂閱(Subscription) 訂閱包含主題篩選器(Topic Filter)和最大服務(wù)質(zhì)量(QoS)。訂閱會(huì)與一個(gè)會(huì)話(huà)(Session)關(guān)聯(lián)。一個(gè)會(huì)話(huà)可以包含多個(gè)訂閱。每一個(gè)會(huì)話(huà)中的每個(gè)訂閱都有一個(gè)不同的主題篩選器。 二、會(huì)話(huà)(Session) 每個(gè)客戶(hù)端與服務(wù)器建立連接后就是一個(gè)會(huì)話(huà),客戶(hù)端和服務(wù)器之間有狀態(tài)交互。會(huì)話(huà)存在于一個(gè)網(wǎng)絡(luò)之間,也可能在客戶(hù)端和服務(wù)器之間跨越多個(gè)連續(xù)的網(wǎng)絡(luò)連接。 三、主題名(Topic Name) 連接到一個(gè)應(yīng)用程序消息的標(biāo)簽,該標(biāo)簽與服務(wù)器的訂閱相匹配。服務(wù)器會(huì)將消息發(fā)送給訂閱所匹配標(biāo)簽的每個(gè)客戶(hù)端。 四、主題篩選器(Topic Filter) 一個(gè)對(duì)主題名通配符篩選器,在訂閱表達(dá)式中使用,表示訂閱所匹配到的多個(gè)主題。 五、負(fù)載(Payload) 消息訂閱者所具體接收的內(nèi)容。 4.6 MQTT協(xié)議中的方法MQTT協(xié)議中定義了一些方法(也被稱(chēng)為動(dòng)作),來(lái)于表示對(duì)確定資源所進(jìn)行操作。這個(gè)資源可以代表預(yù)先存在的數(shù)據(jù)或動(dòng)態(tài)生成數(shù)據(jù),這取決于服務(wù)器的實(shí)現(xiàn)。通常來(lái)說(shuō),資源指服務(wù)器上的文件或輸出。主要方法有:
五、MQTT協(xié)議數(shù)據(jù)包結(jié)構(gòu)在MQTT協(xié)議中,一個(gè)MQTT數(shù)據(jù)包由:固定頭(Fixed header)、可變頭(Variable header)、消息體(payload)三部分構(gòu)成。MQTT數(shù)據(jù)包結(jié)構(gòu)如下:
5.1 MQTT固定頭固定頭存在于所有MQTT數(shù)據(jù)包中,其結(jié)構(gòu)如下: 5.1.1 MQTT數(shù)據(jù)包類(lèi)型 位置:Byte 1中bits 7-4。 相于一個(gè)4位的無(wú)符號(hào)值,類(lèi)型、取值及描述如下: 5.1.2 標(biāo)識(shí)位 位置:Byte 1中bits 3-0。 在不使用標(biāo)識(shí)位的消息類(lèi)型中,標(biāo)識(shí)位被作為保留位。如果收到無(wú)效的標(biāo)志時(shí),接收端必須關(guān)閉網(wǎng)絡(luò)連接: (1)DUP:發(fā)布消息的副本。用來(lái)在保證消息的可靠傳輸,如果設(shè)置為1,則在下面的變長(zhǎng)中增加MessageId,并且需要回復(fù)確認(rèn),以保證消息傳輸完成,但不能用于檢測(cè)消息重復(fù)發(fā)送。 (2)QoS:發(fā)布消息的服務(wù)質(zhì)量,即:保證消息傳遞的次數(shù) ?00:最多一次,即:<=1?01:至少一次,即:>=1?10:一次,即:=1?11:預(yù)留 (3)RETAIN: 發(fā)布保留標(biāo)識(shí),表示服務(wù)器要保留這次推送的信息,如果有新的訂閱者出現(xiàn),就把這消息推送給它,如果設(shè)有那么推送至當(dāng)前訂閱者后釋放。 5.1.3 剩余長(zhǎng)度(Remaining Length) 地址:Byte 2。 固定頭的第二字節(jié)用來(lái)保存變長(zhǎng)頭部和消息體的總大小的,但不是直接保存的。這一字節(jié)是可以擴(kuò)展,其保存機(jī)制,前7位用于保存長(zhǎng)度,后一部用做標(biāo)識(shí)。當(dāng)最后一位為1時(shí),表示長(zhǎng)度不足,需要使用二個(gè)字節(jié)繼續(xù)保存。例如:計(jì)算出后面的大小為0 5.2 MQTT可變頭MQTT數(shù)據(jù)包中包含一個(gè)可變頭,它駐位于固定的頭和負(fù)載之間??勺冾^的內(nèi)容因數(shù)據(jù)包類(lèi)型而不同,較常的應(yīng)用是作為包的標(biāo)識(shí): 很多類(lèi)型數(shù)據(jù)包中都包括一個(gè)2字節(jié)的數(shù)據(jù)包標(biāo)識(shí)字段,這些類(lèi)型的包有:PUBLISH (QoS > 0)、PUBACK、PUBREC、PUBREL、PUBCOMP、SUBSCRIBE、SUBACK、UNSUBSCRIBE、UNSUBACK。 5.3 Payload消息體Payload消息體位MQTT數(shù)據(jù)包的第三部分,包含CONNECT、SUBSCRIBE、SUBACK、UNSUBSCRIBE四種類(lèi)型的消息:
|
|
來(lái)自: leoyuandwedisa > 《待分類(lèi)》