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