-
您的位置:
- 網(wǎng)站首頁
- > 物聯(lián)百科
- > 技術(shù)問答
您的位置:
Mqtt(消息隊(duì)列遙測(cè)傳輸)是一種基于發(fā)布/訂閱模式的“輕量級(jí)”通信協(xié)議。該協(xié)議建立在TCP/IP協(xié)議之上,由IBM于1999年發(fā)布。mqtt的最大優(yōu)點(diǎn)是,它可以用很少的代碼和有限的帶寬為連接的遠(yuǎn)程設(shè)備提供實(shí)時(shí)可靠的消息服務(wù)。作為一種低開銷、低帶寬占用的即時(shí)通信協(xié)議,它廣泛應(yīng)用于物聯(lián)網(wǎng)、小型設(shè)備、移動(dòng)應(yīng)用等領(lǐng)域。
Mqtt是一種基于客戶機(jī)-服務(wù)器的消息發(fā)布/訂閱傳輸協(xié)議。Mqtt協(xié)議輕量級(jí)、簡(jiǎn)單、開放且易于實(shí)現(xiàn)。這些特點(diǎn)使其具有廣泛的適用性。在許多情況下,包括受限環(huán)境,如機(jī)器對(duì)機(jī)器(M2M)通信和物聯(lián)網(wǎng)(IOT)。它已廣泛應(yīng)用于通過衛(wèi)星鏈路的通信傳感器、偶爾的撥號(hào)醫(yī)療設(shè)備、智能家居和一些小型設(shè)備。
Mqtt協(xié)議設(shè)計(jì)規(guī)范
由于物聯(lián)網(wǎng)的環(huán)境非常特殊,mqtt遵循以下設(shè)計(jì)原則:
(1)精簡(jiǎn)和不增加可有可無的功能;
(2)發(fā)布/訂閱(Pub/sub)模式,以促進(jìn)傳感器之間的消息傳輸;
(3)允許用戶動(dòng)態(tài)創(chuàng)建主題,零運(yùn)維成本;
(4)將傳輸容量降至最低,以提高傳輸效率;
(5)考慮了低帶寬、高延遲、網(wǎng)絡(luò)不穩(wěn)定等因素;
(6)支持連續(xù)會(huì)話控制;
(7)了解客戶機(jī)的計(jì)算能力可能非常低;
(8)提供服務(wù)質(zhì)量管理;
(9)假設(shè)數(shù)據(jù)未知,則不需要傳輸數(shù)據(jù)的類型和格式來保持靈活性。
3、Mqtt協(xié)議主要特征
Mqtt協(xié)議設(shè)計(jì)用于低帶寬和不可靠網(wǎng)絡(luò)中遠(yuǎn)程傳感器和控制設(shè)備之間的通信。它具有以下主要特點(diǎn):
(1)使用發(fā)布/訂閱消息模式可提供一對(duì)多消息發(fā)布和解耦應(yīng)用程序。
這與XMPP非常相似,但mqtt的信息冗余比XMPP少得多,因?yàn)閄MPP使用XML格式的文本傳輸數(shù)據(jù)。
(2)屏蔽有效負(fù)載內(nèi)容的消息傳輸。
(3)使用TCP/IP提供網(wǎng)絡(luò)連接。
主流mqtt基于TCP連接推送數(shù)據(jù),但也有一個(gè)基于UDP的版本,稱為mqttsn。因?yàn)檫@兩個(gè)版本基于不同的連接方法,所以它們的優(yōu)缺點(diǎn)自然不同。
(4)有三種類型的消息發(fā)布服務(wù)質(zhì)量:
“至少一次”,消息發(fā)布完全取決于底層TCP/IP網(wǎng)絡(luò)??赡軙?huì)發(fā)生消息丟失或重復(fù)。此級(jí)別可用于以下情況。主讀取記錄是否丟失并不重要,因?yàn)樵诓痪玫膶頃?huì)有第二次傳輸。此方法主要用于推送普通應(yīng)用程序。如果您的智能設(shè)備在推送消息時(shí)未連接到Internet,并且過去未收到推送,則在再次聯(lián)網(wǎng)時(shí)將不會(huì)收到推送。
“至少一次”,以確保消息到達(dá),但可能會(huì)發(fā)生消息重復(fù)。
“僅一次”以確保消息到達(dá)一次。此級(jí)別可用于某些要求嚴(yán)格的計(jì)費(fèi)系統(tǒng)。在計(jì)費(fèi)系統(tǒng)中,重復(fù)或丟失消息將導(dǎo)致錯(cuò)誤結(jié)果。這項(xiàng)最高質(zhì)量的消息發(fā)布服務(wù)還可用于推送即時(shí)消息應(yīng)用程序,以確保用戶接收并只接收一次。
(5)傳輸量小,開銷低(固定長(zhǎng)度報(bào)頭為2字節(jié)),協(xié)議切換最小化,以減少網(wǎng)絡(luò)流量。
這就是為什么在導(dǎo)言中說它非常適合“傳感器和服務(wù)器之間的通信以及物聯(lián)網(wǎng)領(lǐng)域的信息收集”。您應(yīng)該知道,嵌入式設(shè)備的計(jì)算能力和帶寬相對(duì)較弱。使用此協(xié)議傳輸消息非常合適。
(6)一種通過使用最后遺囑和遺囑特征通知相關(guān)方客戶端異常中斷的機(jī)制。
遺言:遺言機(jī)制,用于通知同一主題下的其他設(shè)備發(fā)送遺言的設(shè)備已斷開連接。
遺囑:遺囑機(jī)制,類似于最后遺囑。
4、Mqtt協(xié)議原理
4.1mqtt協(xié)議的實(shí)現(xiàn)模式
mqtt協(xié)議的實(shí)現(xiàn)需要客戶端和服務(wù)器端通信。在通信過程中,mqtt協(xié)議中有三個(gè)標(biāo)識(shí):發(fā)布者、代理(服務(wù)器)和訂閱者。其中,消息的發(fā)布者和訂閱者都是客戶端,消息代理是服務(wù)器,消息發(fā)布者可以同時(shí)是訂閱者。
mqtt傳輸?shù)南⒎譃閮刹糠郑褐黝}和有效負(fù)載:
(1)主題可以理解為消息的類型。訂閱后,訂閱方將收到該主題的消息內(nèi)容(有效載荷);
(2)有效載荷可以理解為消息的內(nèi)容,指訂戶要使用的特定內(nèi)容。
4.2網(wǎng)絡(luò)傳輸和應(yīng)用信息
Mqtt將構(gòu)建底層網(wǎng)絡(luò)傳輸:它將建立客戶端到服務(wù)器的連接,并在兩者之間提供有序、無損、基于字節(jié)流的雙向傳輸。
當(dāng)應(yīng)用程序數(shù)據(jù)通過mqtt網(wǎng)絡(luò)發(fā)送時(shí),mqtt將把服務(wù)質(zhì)量(QoS)和與其相關(guān)的主題關(guān)聯(lián)起來。
4.3mqtt客戶端
使用mqtt協(xié)議的應(yīng)用程序或設(shè)備。它始終與服務(wù)器建立網(wǎng)絡(luò)連接。客戶可以:
(1)發(fā)布其他客戶可能訂閱的信息;
(2)訂閱其他客戶端發(fā)布的消息;
(3)取消訂閱或刪除應(yīng)用程序消息;
(4)斷開與服務(wù)器的連接。
4.4mqtt服務(wù)器
mqtt服務(wù)器稱為“消息代理”,可以是應(yīng)用程序或設(shè)備。它位于消息發(fā)布者和訂閱者之間。它可以:
(1)接受客戶的網(wǎng)絡(luò)連接;
(2)接受客戶發(fā)布的申請(qǐng)信息;
(3)處理客戶的訂閱和取消訂閱請(qǐng)求;
(4)將應(yīng)用程序消息轉(zhuǎn)發(fā)給訂閱的客戶。
4.5mqtt協(xié)議中的訂閱、主題和會(huì)話
1、訂閱
訂閱包括主題過濾器和最大服務(wù)質(zhì)量(QoS)。訂閱與會(huì)話相關(guān)聯(lián)。一個(gè)會(huì)話可以包含多個(gè)訂閱。每個(gè)會(huì)話中的每個(gè)訂閱都有不同的主題篩選器。
2、會(huì)議
在每個(gè)客戶機(jī)與服務(wù)器建立連接后,這是一個(gè)會(huì)話,客戶機(jī)和服務(wù)器之間存在狀態(tài)交互。網(wǎng)絡(luò)之間存在會(huì)話,或者會(huì)話可能跨越客戶端和服務(wù)器之間的多個(gè)連續(xù)網(wǎng)絡(luò)連接。
3、主題名稱
連接到與服務(wù)器訂閱匹配的應(yīng)用程序消息的標(biāo)簽。服務(wù)器向訂閱匹配標(biāo)記的每個(gè)客戶端發(fā)送一條消息。
4、主題過濾器
主題名稱的通配符篩選器,在訂閱表達(dá)式中用于表示訂閱匹配的多個(gè)主題。
5、載荷(有效載荷)
消息訂閱者接收的特定內(nèi)容。
4.6mqtt協(xié)議中的方法
Mqtt協(xié)議定義了一些方法(也稱為操作)來表示對(duì)已確定資源的操作。此資源可以表示預(yù)先存在的數(shù)據(jù)或動(dòng)態(tài)生成的數(shù)據(jù),具體取決于服務(wù)器的實(shí)現(xiàn)。一般來說,資源指的是服務(wù)器上的文件或輸出。主要方法是:
(1)連接。等待與服務(wù)器建立連接。
(2)斷開連接。等待mqtt客戶端完成其工作,并斷開TCP/IP會(huì)話與服務(wù)器的連接。
(3)訂閱。等待訂閱完成。
(4)取消訂閱。等待服務(wù)器從客戶端取消訂閱一個(gè)或多個(gè)主題。
(5)mqtt客戶端發(fā)送消息請(qǐng)求,并在發(fā)送后返回應(yīng)用程序線程。
5、Mqtt協(xié)議包結(jié)構(gòu)
在mqtt協(xié)議中,mqtt數(shù)據(jù)包由固定報(bào)頭、可變報(bào)頭和有效負(fù)載組成。mqtt數(shù)據(jù)包結(jié)構(gòu)如下所示:
(1)固定標(biāo)題。它存在于所有mqtt數(shù)據(jù)包中,并表示數(shù)據(jù)包的數(shù)據(jù)包類型和數(shù)據(jù)包類ID。
(2)可變標(biāo)題。它存在于某些mqtt數(shù)據(jù)包中。數(shù)據(jù)包類型確定變量頭是否存在及其特定內(nèi)容。
(3)消息正文(有效負(fù)載)。它存在于某些mqtt數(shù)據(jù)包中,表示客戶端接收到的特定內(nèi)容。
5.1mqtt固定頭
固定頭存在于所有mqtt包中,其結(jié)構(gòu)如下:
5.1.1mqtt數(shù)據(jù)包類型
位置:字節(jié)1中的第7-4位。
對(duì)應(yīng)于4位無符號(hào)值,類型、值和說明如下:
5.1.2識(shí)別位
位置:字節(jié)1中的第3-0位。
在不使用標(biāo)識(shí)位的消息類型中,標(biāo)識(shí)位用作保留位。如果接收到無效標(biāo)志,則接收端必須關(guān)閉網(wǎng)絡(luò)連接:
(1)DUP:已發(fā)布消息的副本。它用于確保信息的可靠傳輸。如果設(shè)置為1,則messageid將添加到以下可變長(zhǎng)度,需要回復(fù)確認(rèn)以確保消息傳輸完成,但不能用于檢測(cè)重復(fù)的消息傳輸。
(2)QoS:發(fā)布消息的服務(wù)質(zhì)量,即消息傳遞的數(shù)量
?00:最多一次,即<=1
?01:至少一次,即>=1
?10:一次,即:=1
?11:保留
(3)Retain:發(fā)布保留ID,表示服務(wù)器希望保留這次推送的信息。如果出現(xiàn)新訂戶,請(qǐng)將消息推送到該訂戶。如果是,請(qǐng)將其推送到當(dāng)前訂閱服務(wù)器并釋放。5.1.3剩余長(zhǎng)度
地址:字節(jié)2。
固定標(biāo)頭的第二個(gè)字節(jié)用于存儲(chǔ)可變長(zhǎng)度標(biāo)頭和消息正文的總大小,但不能直接存儲(chǔ)。這個(gè)字節(jié)可以擴(kuò)展。其保存機(jī)制是前7位用于保存長(zhǎng)度,最后一位用作標(biāo)識(shí)。最后一位為1時(shí),表示長(zhǎng)度不足,需要用兩個(gè)字節(jié)保存。例如:將以下大小計(jì)算為0
5.2mqtt可變磁頭
mqtt數(shù)據(jù)包包含一個(gè)位于固定頭和有效負(fù)載之間的可變頭??勺儓?bào)頭的內(nèi)容因數(shù)據(jù)包類型而異。它通常用作數(shù)據(jù)包的標(biāo)識(shí):
許多類型的數(shù)據(jù)包包括一個(gè)2字節(jié)的數(shù)據(jù)包標(biāo)識(shí)字段。這些類型的數(shù)據(jù)包包括:發(fā)布(QoS>0)、puback、pubrec、pubrel、pubcomp、訂閱、訂閱、取消訂閱、取消訂閱。
5.3有效載荷消息正文
有效負(fù)載消息正文是mqtt數(shù)據(jù)包的第三部分,它包含四種類型的消息:connect、subscribe、suback和unsubscribe:
(1)Connect,消息體的主要內(nèi)容有:客戶端ID、訂閱主題、消息、客戶端用戶名和密碼。
(2)訂閱,消息體的內(nèi)容是一系列要訂閱的主題和QoS。
(3)消息體的內(nèi)容是服務(wù)器確認(rèn)并回復(fù)subscribe應(yīng)用的主題和QoS。
(4)取消訂閱:消息正文的內(nèi)容是要訂閱的主題。