成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

什么是物聯網協議MQTT

物聯網
MQTT是一個基于客戶端-服務器的消息發布/訂閱傳輸協議。由IBM在1999年發布。MQTT協議是輕量、簡單、開放和易于實現的,這些特點使它適用范圍非常廣泛。

??想了解更多關于開源的內容,請訪問:??

??51CTO 開源基礎軟件社區??

??https://ost.51cto.com??

1、MQTT簡介

MQTT(消息隊列遙測傳輸)是ISO 標準(ISO/IEC PRF 20922)下基于發布/訂閱范式的消息協議。它工作在 TCP/IP協議族上,是為硬件性能低下的遠程設備以及網絡狀況糟糕的情況下而設計的發布/訂閱型消息協議,為此,它需要一個消息中間件?。

MQTT是一個基于客戶端-服務器的消息發布/訂閱傳輸協議。由IBM在1999年發布。MQTT協議是輕量、簡單、開放和易于實現的,這些特點使它適用范圍非常廣泛。在很多情況下,包括受限的環境中,作為一種低開銷、低帶寬占用的即時通訊協議,使其在物聯網、小型設備、移動應用等方面有較廣泛的應用。如:機器與機器(M2M)通信和物聯網(IoT)。其在通過鏈路通信傳感器、偶爾撥號的醫療設備、智能家居、及一些小型化設備中已廣泛使用。

MQTT最大優點在于,用極少的代碼和有限的帶寬,為連接遠程設備提供實時可靠的消息服務。

#創作者激勵#物聯網協議MQTT-開源基礎軟件社區

2、MQTT特點

本協議運行在 TCP/IP,或其它提供了有序、可靠、 雙向連接的網絡連接上。MQTT屬于應用層協議,它有以下特點:使用發布/訂閱消息模式,提供了一對多的消息分發和應用之間的解耦。消息傳輸不需要知道負載內容。

提供三種等級的服務質量: .

  • QS0:“最多一次”,盡操作環境所能提供的最大努力分發消息。 消息可能會丟失。 ??例如, 這個等級可用于環境傳感器數據,單次的數據丟失沒關系, 因為不久之后會再次發送。
  • QS1:“至少一次”,保證消息可以到達, 但是可能會重復。
  • QS2: “僅一次”, 保證消息只到達一次。 例如, 這個等級可用在一個計費系統中, 這里如果消息重復或丟失會導致不正確的收費。很小的傳輸消耗和協議數據交換,最大限度減少網絡流量。??

在MQTT連接建立時,客戶端需要通過TCP連接到MQTT服務器,并進行握手協商,包括協議版本、客戶端標識符、遺囑消息、 QoS級別等信息,以確保雙方能夠正確地交換數據。一旦握手成功,客戶端和服務器之間就建立了一個持久化的TCP連接,可以隨時進行消息傳輸。
由于TCP協議本身已經提供了一定程度的可靠性保證,因此MQTT協議只需要在TCP的基礎上實現發布/訂閱機制、 QoS級別控制、保留消息等特性即可,從而使得它成為一種輕量級且高效的物聯網通信協議。

3、MQTT協議數據量限制

MQTT協議本身沒有限制數據包的大小,但是它需要遵循底層傳輸協議(TCP/IP)的限制和約束。在實際應用中,MQTT協議能夠傳輸的有效數據量是受多種因素影響的,如網絡帶寬、QoS級別、MQTT消息頭部信息等。一般來說,在默認情況下,MQTT協議對于單個消息的有效載荷有一個限制,即不超過256MB。這個限制主要由MQTT協議的消息長度字段決定,該字段的最大值是4字節,因此最大能表示2^32-1個字節的消息長度,即約為4GB。然而,在實際應用中,由于網絡帶寬和設備性能等方面的限制,很難實現傳輸如此巨大的消息。另外,需要注意的是,如果使用較高級別的QoS,如“至少一次”或“恰好一次”,則MQTT協議會對每條消息進行確認和重傳,這可能會導致更多的網絡流量和延遲。因此,在選擇QoS級別時,需要根據應用場景和網絡環境的實際情況進行優化和調整,以充分利用MQTT協議的特點和優勢。

4、MQTT控制報文

MQTT協議通過交換預定義的 MQTT 控制報文來通信。MQTT 控制報文由三部分組成:固定報頭(Fixed header)、可變報頭(Variable header)、有效載荷(Payload)。

Fixed header 固定報頭,所有控制報文都包含

Variable header 可變報頭, 部分控制報文包含

Payload 有效載荷, 部分控制報文包含

(1)固定報頭格式

#創作者激勵#物聯網協議MQTT-開源基礎軟件社區

控制報文類型

#創作者激勵#物聯網協議MQTT-開源基礎軟件社區

(2)MQTT控制報文類型集標志

固定報頭第1個字節高4位(47)為控制報文類型,一共14個,低4位(03)包含每個 MQTT 控制報文類型特定的標志,見下表。表中任何標記為“保留”的標志位,都是保留給以后使用的,必須設置為表格中列出的值。如果收到非法的標志,接收者必須關閉網絡連接。

#創作者激勵#物聯網協議MQTT-開源基礎軟件社區

DUP1 =控制報文的重復分發標志。

QoS2 = PUBLISH 報文的服務質量等級。

RETAIN3 = PUBLISH 報文的保留標志。

詳情參考MQTT3.1協議。

(3)剩余長度計算

剩余長度(Remaining Length) 表示當前報文剩余部分的字節數,包括可變報頭和負載的數據。 剩余長度不包括用于編碼剩余長度字段本身的字節數。

剩余長度字段使用一個可變長度編碼方案,對小于128的值它使用單字節編碼。 更大的值按下面的方式處理。低7位有效位用于編碼數據,最高有效位用于指示是否有更多的字節。 即剩余長度安裝128進制進行計數,剩余長度字段最大 4 個字節。

剩余長度字段取值如下:

#創作者激勵#物聯網協議MQTT-開源基礎軟件社區

剩余長度按128進制計數,采用16進制方式表示,低字節在前。剩余長度編碼示例:

①例如64:(64/128)取整=0,說明64不需要進位,1個字節即可表示,即:0x40。

②例如456:(456/128)取整=3,(3/128)取整=0,說明456需要2個字節表示。

第一個字節bit7=1,(bit0~bit6)=456%128=72=0x48,即第一個字節表示為:0xc8。

第二個字節bit7=3/128=0,(bit0~bit6)=3%128=3,即第二個字節表示位:0x3。

綜上,456采用2個字節表示為:0xc8 0x3。

③例如100000:(100000/128)=781,(781/128)=6,說明100000需要3字節表示。

第一個字節bit7=1,(bit0~bit6)=100000%128=0x20,即第一個字節為0xa0。

第二個字節bit7=1,(bit0~bit6)=781%128=0x0d,即第二個字節為0x8d。

第三個字節bit7=0,(bit0~bit6)=6%128=6,即第三個字節為0x6。

綜上,100000采用3字節表示為:0xa0 0x8d 0x6。

(4)剩余長度計算C語言實現示例

剩余長度編碼

int MQTT_RemainSum(int data,u8 buff[])
{
int cnt=0;//記錄編碼的字節數
do
{
u8 encodedByte = data % 128;
data/=128;
if(data>0)
{
//若data超過128,則將最最高位置1
encodedByte=encodedByte|=0x80;
}
buff[cnt++]=encodedByte;

}while(data>0);
return cnt;//返回需要編碼的字節數個數
}

剩余長度解碼

int MQTT_remainGet(u8 buff[],int cnt)
{
int data=0;
int i=0;
int count=1;
for(;i<cnt;i++)
{
data+=(buff[i]&0x7f)*count;
count<<=7;
}
return data;
}

測試示例:

int main(int argc,char *argv[])
{
if(argc!=2)
{
printf("格式:./a.out <剩余長度>\n");
return 0;
}
int data=atoi(argv[1]);
u8 buff[4];
int cnt=MQTT_RemainSum(data,buff);
for(int i=0;i<cnt;i++)
{
printf("%#x ",buff[i]);
}
printf("\n");
printf("data=%d\n", MQTT_remainGet(buff,cnt));
}
[wbyq@wbyq work]$ ./a.out 64
0x40
data=64
[wbyq@wbyq work]$ ./a.out 456
0xc8 0x3
data=456
[wbyq@wbyq work]$ ./a.out 100000
0xa0 0x8d 0x6
data=100000
[wbyq@wbyq work]$ ./a.out 268435455
0xff 0xff 0xff 0x7f
data=268435455

5、MQTT消息等級

MQTT提供三種等級的服務質量。

  • QS0:“最多一次”,盡操作環境所能提供的最大努力分發消息。 消息可能會丟失。 例如,這個等級可用于環境傳感器數據,  單次的數據丟失沒關系, 因為不久之后會再次發送。
  • QS1:“至少一次”,保證消息可以到達, 但是可能會重復。
  • QS2: “僅一次”, 保證消息只到達一次。 例如, 這個等級可用在一個計費系統中,這里如果消息重復或丟失會導致不正確的收費。很小的傳輸消耗和協議數據交換,最大限度減少網絡流量。

#創作者激勵#物聯網協議MQTT-開源基礎軟件社區

PUBLISH報文不能將 QoS所有的位設置為1。如果服務端或客戶端收到QoS所有位都為 1的PUBLISH報文,它必須關閉網絡連接。Qos0最多一次。

只發送一次消息,不進行重試。在協議中也沒有定義重傳的語義。消息可能到達服務器1次,也可能根本不會到達。

#創作者激勵#物聯網協議MQTT-開源基礎軟件社區

Qos1至少一次


服務器接收到消息會被確認,通過傳輸一個PUBACK信息。如果有一個可以辨認的傳輸失敗,無論是通訊連接還是發送設備,還是過了一段時間確認信息沒有收到,發送方都會將消息頭的DUP位置1,然后再次發送消息。消息最少一次到達服務器。

如果客戶端沒有接收到PUBACK信息(無論是應用定義的超時,還是檢測到失敗然后通訊session重啟),客戶端都會再次發送PUBLISH信息,并且將DUP位置1。

它從客戶端接收到重復的數據,服務器重新發送消息給訂閱者,并且發送另一個PUBACK消息。

#創作者激勵#物聯網協議MQTT-開源基礎軟件社區


如上圖所示, Qos1消息等級為了保證至少傳達一次,發布方會將發送的消息本地暫存,并且會每隔一段時間重發一次,直到接收方返回應答為止。當我們收到應答后即可將暫存消息刪除,停止重傳。

對應接收方,則需要在每次收到消息后都要回復應答。在上圖中publisher(發布方)到broker(代理方,服務器)和broker(代理方,服務器)到subscriber(訂閱方)是同等的,兩段通信都應按以上討論的進行實現。

Qos2僅一次

#創作者激勵#物聯網協議MQTT-開源基礎軟件社區

QS2消息等級保證消息一定可以到達一次,publisher(發布方)到broker(代理方,服務器)和broker(代理方,服務器)到subscriber(訂閱方)是同等的,兩段通信都是相同等級。具體消息傳輸過程如下:

1.發布方發送消息,并將消息內容本地暫存。

2.接收方接收到消息內容后,將消息內容暫存本地,并給發送方回復一個應答(PUBREC),發布方在沒有收到PUBREC之前會隔一段時間進行消息重發一次,以確保消息一定可以送達。

3.當發布方收到PUBREC后,則停止消息重發,并給接收方發送釋放(PUBREL)消息內容,接收方收到PUBREL后即可確定消息傳輸成功。

4.刪除暫存的消息,之后發送端每次收到PUBREC都直接發送一個PUBREL消息給接收端。

5.接收端在收到PUBREL消息后,修改暫存的消息狀態為發布完成,停止發送PUBREC,然后給發送端發去一個發布完成(PUBCOM)的消息。此時接收端則將刪除暫存的消息,之后每次收到PUBREL都直接回復PUBCOM。

6.發送端收到PUBCOM,如果發現暫存的消息還每刪除的話,就刪除暫存消息,如果已經刪除了就不管了。

注意:在此過程中本地暫存消息的作用是為了在收到重復內容時可以實現去重,在接收到PUBREL后,就能確定發送端不再會發送此消息,所以這個時候就可以刪除暫存消息了,同樣的,發送端在接收到PUBREC后知道接收端已經接收到消息了,所以不必再發送消息,并且可以刪除暫存了。

??想了解更多關于開源的內容,請訪問:??

??51CTO 開源基礎軟件社區??

??https://ost.51cto.com??

責任編輯:jianghua 來源: 51CTO 開源基礎軟件社區
相關推薦

2023-09-24 23:18:50

2024-03-26 11:52:13

2022-06-27 10:41:45

MQTT物聯網協議

2023-09-07 14:59:42

物聯網MQTTCoAP

2018-08-17 06:13:16

物聯網協議MQTTMQTT-SN

2023-07-18 10:38:09

2024-01-23 12:47:27

2020-11-15 23:25:50

物聯網IoT協議IOT

2024-01-12 07:46:07

MQTT協議物聯網應用.NET

2022-06-02 10:10:24

物聯網傳感器

2020-07-26 00:25:07

物聯網IOT物聯網應用

2022-10-28 11:44:44

物聯網IoT

2021-03-28 09:24:48

工業物聯網IIOT物聯網

2021-05-20 14:42:42

物聯網互聯網IoT

2019-11-21 17:46:35

物聯網智能照明3D打印

2019-08-12 08:50:23

物聯網平臺物聯網IOT

2020-11-19 09:19:42

物聯網物聯網標準物聯網協議

2013-04-28 10:29:07

MQTT物聯網消息隊列遙測傳輸

2019-12-27 10:42:45

HTTPMQTT物聯網

2022-11-11 11:07:33

點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 亚洲国产日韩一区 | 精一区二区 | 欧美成人一区二区三区 | 国产成人短视频在线观看 | a毛片| 国产一级视频在线 | 亚洲高清视频在线观看 | v亚洲 | 中文字幕第一页在线 | 日本在线网址 | 国产污视频在线 | 久久最新| 亚洲精品久久久久久久久久吃药 | 亚洲精品成人免费 | 草逼网站| 狠狠色狠狠色综合系列 | 天天射美女 | 免费黄色大片 | 粉嫩一区二区三区性色av | 精品久久久久久久人人人人传媒 | 欧美日韩在线观看一区二区三区 | 国产精品视频不卡 | 欧美精品福利 | 91一区二区三区 | 精品久久久久久 | 精品国产区 | 成人免费在线小视频 | 日韩精品一区在线 | 国产精品久久久久aaaa | 国产精品视频网 | 欧美一级黄 | 91精品国产乱码久久久久久久 | 日韩国产一区二区三区 | 精品一区二区三区在线视频 | www九色 | 黄色一级大片在线观看 | 超碰成人在线观看 | a级片www| 丝袜美腿一区二区三区 | 亚洲97 | 99re视频在线观看 |