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

MQTT協議,終于有人講清楚了

網絡 網絡管理
大家好,我是小麥,最近做了一個物聯網的項目,順便總結一下MQTT協議。大家都知道,MQTT協議在物聯網中很常用,如果你對此還不是很了解,相信這篇文章可以帶你入門。

[[409407]]

本文轉載自微信公眾號「小麥大叔」,作者菜刀和小麥。轉載本文請聯系小麥大叔公眾號。

大家好,我是小麥,最近做了一個物聯網的項目,順便總結一下MQTT協議。大家都知道,MQTT協議在物聯網中很常用,如果你對此還不是很了解,相信這篇文章可以帶你入門。

  • mqtt協議
  • 1 MQTT協議特點
    • 發布和訂閱
    • QoS(Quality of Service levels)
  • 2 MQTT 數據包結構
    • 2.1 MQTT固定頭
    • 2.2 MQTT可變頭 / Variable header
    • 2.3 Payload消息體
  • 3 環境搭建
    • 3.1 MQTT服務器搭建
    • 3.2 MQTT Client
  • 4 總結

mqtt協議

MQTT(Message Queuing Telemetry Transport,消息隊列遙測傳輸協議),是一種基于發布/訂閱(publish/subscribe)模式的“輕量級”通訊協議,該協議構建于TCP/IP協議上,由IBM在1999年發布。

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

作為一種低開銷、低帶寬占用的即時通訊協議,使其在物聯網、小型設備、移動應用等方面有較廣泛的應用。

1、MQTT協議特點

MQTT是一個基于客戶端-服務器的消息發布/訂閱傳輸協議。

MQTT協議是輕量、簡單、開放和易于實現的,這些特點使它適用范圍非常廣泛。在很多情況下,包括受限的環境中,如:機器與機器(M2M)通信和物聯網(IoT)。

其在,通過衛星鏈路通信傳感器、偶爾撥號的醫療設備、智能家居、及一些小型化設備中已廣泛使用。

MQTT協議當前版本為,2014年發布的MQTT v3.1.1。除標準版外,還有一個簡化版MQTT-SN,該協議主要針對嵌入式設備,這些設備一般工作于TCP/IP網絡,如:ZigBee。

MQTT 與 HTTP 一樣,MQTT 運行在傳輸控制協議/互聯網協議 (TCP/IP) 堆棧之上。

MQTT OSI

發布和訂閱

MQTT使用的發布/訂閱消息模式,它提供了一對多的消息分發機制,從而實現與應用程序的解耦。

這是一種消息傳遞模式,消息不是直接從發送器發送到接收器(即點對點),而是由MQTT server(或稱為 MQTT Broker)分發的。

MQTT 服務器是發布-訂閱架構的核心。

它可以非常簡單地在Raspberry Pi或NAS等單板計算機上實現,當然也可以在大型機或 Internet 服務器上實現。

服務器分發消息,因此必須是發布者,但絕不是訂閱者!

客戶端可以發布消息(發送方)、訂閱消息(接收方)或兩者兼而有之。

客戶端(也稱為節點)是一種智能設備,如微控制器或具有 TCP/IP 堆棧和實現 MQTT 協議的軟件的計算機。

消息在允許過濾的主題下發布。主題是分層劃分的 UTF-8 字符串。不同的主題級別用斜杠/作為分隔符號。

我們來看看下面的設置。

  • 光伏發電站是發布者(Publisher)。
  • 主要主題(Topic)級別是"PV",這個工廠發布兩個子級別"sunshine"和"data";
  • "PV/sunshine"是一個布爾值(true/fault,也可以是 1/0),充電站需要它來知道是否應該裝載電動汽車(僅在陽光普照時 :))。
  • 充電站(EVSE)是訂閱者,訂閱"PV/sunshine"從服務器獲取信息。
  • "PV/data" 另一方面,以 kW 為單位傳輸工廠產生的瞬時功率,并且該主題可以例如通過計算機或平板電腦訂閱,以生成一天內傳輸功率的圖表。

這就是一個簡單的MQTT的應用場景,具體如下圖所示;

MQTT 發布和訂閱

QoS(Quality of Service levels)

服務質量是 MQTT 的一個重要特性。當我們使用 TCP/IP 時,連接已經在一定程度上受到保護。但是在無線網絡中,中斷和干擾很頻繁,MQTT 在這里幫助避免信息丟失及其服務質量水平。這些級別在發布時使用。如果客戶端發布到 MQTT 服務器,則客戶端將是發送者,MQTT 服務器將是接收者。當MQTT服務器向客戶端發布消息時,服務器是發送者,客戶端是接收者。

QoS 0

這一級別會發生消息丟失或重復,消息發布依賴于底層TCP/IP網絡。即:<=1

QoS 1

QoS 1 承諾消息將至少傳送一次給訂閱者。

QoS 2

使用 QoS 2,我們保證消息僅傳送到目的地一次。為此,帶有唯一消息 ID 的消息會存儲兩次,首先來自發送者,然后是接收者。QoS 級別 2 在網絡中具有最高的開銷,因為在發送方和接收方之間需要兩個流。

2、MQTT 數據包結構

  • 固定頭(Fixed header),存在于所有MQTT數據包中,表示數據包類型及數據包的分組類標識;
  • 可變頭(Variable header),存在于部分MQTT數據包中,數據包類型決定了可變頭是否存在及其具體內容;
  • 消息體(Payload),存在于部分MQTT數據包中,表示客戶端收到的具體內容;

整體MQTT的消息格式如下圖所示;

2.1 MQTT固定頭

固定頭存在于所有MQTT數據包中,其結構如下:

下面簡單分析一下固定頭的消息格式;

MQTT消息類型 / message type

**位置:**byte 1, bits 7-4。

4位的無符號值,類型如下:

名稱 流方向 描述
Reserved 0 不可用 保留位
CONNECT 1 客戶端到服務器 客戶端請求連接到服務器
CONNACK 2 服務器到客戶端 連接確認
PUBLISH 3 雙向 發布消息
PUBACK 4 雙向 發布確認
PUBREC 5 雙向 發布收到(保證第1部分到達)
PUBREL 6 雙向 發布釋放(保證第2部分到達)
PUBCOMP 7 雙向 發布完成(保證第3部分到達)
SUBSCRIBE 8 客戶端到服務器 客戶端請求訂閱
SUBACK 9 服務器到客戶端 訂閱確認
UNSUBSCRIBE 10 客戶端到服務器 請求取消訂閱
UNSUBACK 11 服務器到客戶端 取消訂閱確認
PINGREQ 12 客戶端到服務器 PING請求
PINGRESP 13 服務器到客戶端 PING應答
DISCONNECT 14 客戶端到服務器 中斷連接
Reserved 15 不可用 保留位

標識位 / DUP

**位置:**byte 1, bits 3-0。

在不使用標識位的消息類型中,標識位被作為保留位。如果收到無效的標志時,接收端必須關閉網絡連接:

數據包 標識位 Bit 3 Bit 2 Bit 1 Bit 0
CONNECT 保留位 0 0 0 0
CONNACK 保留位 0 0 0 0
PUBLISH MQTT 3.1.1使用 DUP1 QoS2 QoS2 RETAIN3
PUBACK 保留位 0 0 0 0
PUBREC 保留位 0 0 0 0
PUBREL 保留位 0 0 0 0
PUBCOMP 保留位 0 0 0 0
SUBSCRIBE 保留位 0 0 0 0
SUBACK 保留位 0 0 0 0
UNSUBSCRIBE 保留位 0 0 0 0
UNSUBACK 保留位 0 0 0 0
PINGREQ 保留位 0 0 0 0
PINGRESP 保留位 0 0 0 0
DISCONNECT 保留位 0 0 0 0
  • DUP:發布消息的副本。用來在保證消息的可靠傳輸,如果設置為

1,則在下面的變長中增加MessageId,并且需要回復確認,以保證消息傳輸完成,但不能用于檢測消息重復發送。

  • QoS發布消息的服務質量(前面已經做過介紹),即:保證消息傳遞的次數
    • 00:最多一次,即:<=1
    • 01:至少一次,即:>=1
    • 10:一次,即:=1
    • 11:預留
  • RETAIN:發布保留標識,表示服務器要保留這次推送的信息,如果有新的訂閱者出現,就把這消息推送給它,如果設有那么推送至當前訂閱者后釋放。

剩余長度(Remaining Length)

位置:byte 1。

固定頭的第二字節用來保存變長頭部和消息體的總大小的,但不是直接保存的。這一字節是可以擴展,其保存機制,前7位用于保存長度,后一部用做標識。當最后一位為 1時,表示長度不足,需要使用二個字節繼續保存。例如:計算出后面的大小為0

2.2 MQTT可變頭 / Variable header

MQTT數據包中包含一個可變頭,它駐位于固定的頭和負載之間。可變頭的內容因數據包類型而不同,較常的應用是做為包的標識:

Bit 7  — 0
byte 1 包標簽符(MSB)
byte 2… 包標簽符(LSB)

很多類型數據包中都包括一個2字節的數據包標識字段,這些類型的包有:

PUBLISH (QoS > 0)、PUBACK、PUBREC、PUBREL、PUBCOMP、

SUBSCRIBE、SUBACK、UNSUBSCRIBE、UNSUBACK

2.3 Payload消息體

Payload消息體是MQTT數據包的第三部分,CONNECT、SUBSCRIBE、SUBACK、UNSUBSCRIBE四種類型的消息 有消息體:

CONNECT,消息體內容主要是:客戶端的ClientID、訂閱的Topic、Message以及用戶名和密碼

SUBSCRIBE,消息體內容是一系列的要訂閱的主題以及QoS。

SUBACK,消息體內容是服務器對于SUBSCRIBE所申請的主題及QoS進行確認和回復。

UNSUBSCRIBE,消息體內容是要訂閱的主題。

3、環境搭建

介紹完基礎理論部分,下面在Windows平臺上搭建一個簡單的MQTT應用,進行簡單的應用,整體架構如下圖所示;

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-ScRucIVO-1625480723109)(架構圖.png)]

3.1 MQTT服務器搭建

目前MQTT代理的主流平臺有下面幾個:

  • Mosquitto:https://mosquitto.org/
  • VerneMQ:https://vernemq.com/
  • EMQTT:http://emqtt.io/

本文將使用 Mosquitoo 進行測試,進入到安裝頁面,下載自己電腦的系統所適配的程序;

下載頁面

安裝成功之后,進入到安裝路徑下,找到mosquitto.exe;

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-YXZupgOv-1625480723111)(image-20210705171401654.png)]

按住Shift,右鍵鼠標點擊空白處,然后打開Powershell,正常打開一個終端軟件即可;

  • 輸入./mosquitto.exe -h 可以查看相應的幫助;
  • 輸入./mosquitto.exe -p 10086,就開啟了MQTT服務,監聽的地址是127.0.0.1,端口是10086;

具體如下圖所示;

3.2 MQTT Client

服務器搭建好了,下面就是開啟客戶端,進行發布和訂閱,這樣就可以傳輸相應的消息。

這里我使用的是自己編譯了一個QT mqtt client 程序,是基于Qt的官方庫進行編譯的,下面打開這個軟件,下一期簡單介紹一下如何完成這個客戶端,并設置好相應參數:

  • 地址:127.0.0.1
  • 端口:10086

然后訂閱主題,就可以互相發送數據了,具體如下圖所示;

結合前面的圖片來看,整體的架構如下所示;

4、總結

本文簡單介紹了MQTT協議的工作原理,以及相應的協議格式,簡單介紹了協議的一些細節,具體舉出了相應的應用場景,作者水平和能力有限,文中難免存在錯誤和紕漏,請大佬不吝賜教。

本期就到此結束了,我是小麥,我們下期再見。

 

責任編輯:武曉燕 來源: 小麥大叔
相關推薦

2020-07-29 09:21:34

Docker集群部署隔離環境

2019-07-07 08:18:10

MySQL索引數據庫

2024-04-01 10:09:23

AutowiredSpring容器

2020-12-24 15:18:27

大數據數據分析

2023-08-14 11:35:16

流程式轉化率數據指標

2021-04-10 10:37:04

OSITCP互聯網

2024-02-23 08:08:21

2022-01-05 09:27:24

讀擴散寫擴散feed

2019-05-22 08:43:45

指令集RISC-V開源

2020-10-16 17:20:21

索引MySQL數據庫

2021-01-29 10:50:04

數據中臺數據數據管理

2020-04-23 10:21:57

Linux 網絡編程 數據

2024-02-27 14:27:16

2022-07-04 11:27:02

標簽數據指標標簽體系

2023-05-29 13:59:00

GPTOpenAI監督微調

2019-06-19 14:58:38

服務器負載均衡客戶端

2024-07-01 13:45:18

2019-07-04 09:13:04

中臺百度團隊

2021-02-25 08:21:38

高可用風險故障

2021-10-29 11:30:31

補碼二進制反碼
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 亚洲欧美日韩一区二区 | 精品久 | 51ⅴ精品国产91久久久久久 | 精品一区二区三区四区五区 | 精品96久久久久久中文字幕无 | 伊人精品在线 | 成人羞羞国产免费视频 | 成人a在线| 97人人澡人人爽91综合色 | 99re在线视频| 精品在线看| 国产亚洲精品久久午夜玫瑰园 | 日韩一区二区免费视频 | 九九福利| 中文字幕乱码视频32 | 97国产在线观看 | 中文字幕成人在线 | 午夜一区 | 天天射天天干 | 久久久久久久久中文字幕 | 欧美老少妇一级特黄一片 | 伊人青青久久 | 国产美女在线观看 | 日本三级全黄三级a | 婷婷福利 | 天天久久 | 国产激情视频在线免费观看 | 欧美a在线| 国产一区二区三区在线看 | www.久 | 日本人麻豆 | 精品久久久久久久久亚洲 | 涩涩99| 午夜亚洲| 精品网站999 | 区一区二区三在线观看 | 日韩资源 | 欧美综合一区二区 | 福利视频一区二区三区 | 一级毛片视频 | 国产一级淫片a直接免费看 免费a网站 |