使用背景
MQTT最初是為了解決物聯網(IoT)領域設備之間的低帶寬、高延遲、不穩定網絡連接等問題而設計的。
場景介紹
廣泛應用物聯網領域,數據實時傳輸,連接各種智能設備和應用的關鍵橋梁
MQTT簡介和概述
MQTT(Message Queuing Telemetry Transport)是一種輕量級的消息傳輸協議,它是一種基于發布(Publish)/訂閱(Subscribe )模式的消息傳輸協議(物聯網通信協議),它工作在TCP/IP協議族上,并為低帶寬、高延遲或不穩定的網絡環境提供了可靠的消息傳輸服務。MQTT協議是基于TCP/IP協議棧構建的,可以在不同的設備和平臺之間進行通信。憑借簡單易實現、支持 QoS、報文小等特點,占據了物聯網協議的半壁江山. MQTT在物聯網方向的開發出現的頻率非常高, 因此從事該行業方向開發有必要對其進行下系統的學習。
MQTT的主要特點是什么?
MQTT協議的主要特點是輕量級、簡單、靈活和可擴展。它使用了發布/訂閱的消息傳遞模式,這意味著消息的發送者(發布者)和接收者(訂閱者)不需要直接進行連接,而是通過代理(Broker)進行消息的轉發。這種設計使得MQTT非常適合于物聯網場景,因為物聯網中的設備通常具有不同的通信能力和需求。
● 開放消息協議,簡單易實現
● 發布訂閱模式,一對多消息發布
● 基于TCP/IP網絡連接,提供有序,無損,雙向連接。
● 1字節固定報頭,2字節心跳報文,最小化傳輸開銷和協議交換,有效減少網絡流量。
● 消息QoS支持,可靠傳輸保證
注意:
1、 主流的MQTT是基于TCP連接進行數據推送的,但是同樣有基于UDP的版本,叫做MQTT-SN。
2、 關于Qos,需要指出的是三種消息發布質量。
QoS消息發布質量介紹
● QoS0:“至多一次”,消息發布完全依賴底層TCP/IP網絡。會發生消息丟失或重復。這一級別可用于如下情況,環境傳感器數據,丟失一次讀記錄無所謂,因為不久后還會有第二次發送。這一種方式主要用于普通APP的推送,倘若你的智能設備在消息推送時未聯網,推送過去沒收到,即使再次聯網也收不到了。
● QoS1:“至少一次”,確保消息到達,但消息重復可能會發生。
● QoS2:“只有一次”,確保消息到達一次。在一些要求比較嚴格的計費系統中,可以使用此級別。在計費系統中,消息重復或丟失會導致不正確的結果。這種最高質量的消息發布服務還可以用于即時通訊類的APP的推送,確保用戶收到且只會收到一次。
MQTT的基本原理是什么?
MQTT的基本原理是發布/訂閱模式。在MQTT中,消息發布者(Publisher)將消息發布到一個主題(Topic)上,而消息訂閱者(Subscriber)則訂閱這個主題,當有新的消息發布到這個主題上時,訂閱者將會收到這個消息。MQTT的消息傳遞過程如下:
● 發布者將消息發送到MQTT Broker(代理服務器)上,并指定消息發布的主題。
● 訂閱者通過訂閱相應的主題,向MQTT Broker注冊對該主題的訂閱。
● 當有新的消息發布到該主題時,MQTT Broker會將消息發送給所有訂閱了該主題的訂閱者。
MQTT協議使用TCP/IP協議棧進行通信,因此在使用MQTT協議時需要建立TCP連接。MQTT協議支持三種不同的服務質量級別(QoS級別),可以根據需求選擇適當的級別。當消息發布者發布消息時,可以指定消息的QoS級別,用于保證消息的可靠性和傳遞的順序。
MQTT協議還支持保留消息(Retained Messages)和遺囑消息(Last Will and Testament)。保留消息是指最新的消息將一直保存在服務器上,新的訂閱者可以獲取最新的消息。遺囑消息是指在客戶端異常斷開連接時自動發送一條消息,用于通知其他訂閱者該客戶端已經離線。
實現MQTT協議需要客戶端和服務器端通訊完成,在通訊過程中,MQTT協議中有三種身份:發布者(Publish)、代理(Broker)(服務器)、訂閱者(Subscribe)。其中,消息的發布者和訂閱者都是客戶端,消息代理是服務器,消息發布者可以同時是訂閱者。MQTT傳輸的消息分為:主題(Topic)和負載(payload)兩部分:
● Topic,可以理解為消息的類型,訂閱者訂閱(Subscribe)后,就會收到該主題的消息內容(payload);
● payload,可以理解為消息的內容,是指訂閱者具體要使用的內容。
網絡鏈接
由底層傳輸協議提供給MQTT使用的架構
● 底層傳輸協議能夠連通客戶端和服務端
● 底層傳輸協議提供有序的,可靠的,雙向字節流
應用消息
指通過MQTT在網絡中傳輸的應用程序數據。 當應用消息通過MQTT傳輸的時候會附加上質量服務(QoS)和話題名稱。
客戶端
一個使用MQTT協議的應用程序或者設備,它總是建立到服務器的網絡連接。客戶端可以
● 發布, 訂閱消息
● 退訂和刪除應用程序消息
● 斷開和服務器連接
服務端
MQTT服務器被稱為"消息代理"(Broker),它可以是一個應用程序或一臺設備。是位于消息發布者和訂閱者之間,它可以:
● 接收客戶端消息
● 處理客戶端訂閱和退訂請求
● 向訂閱的客戶端轉發消息
主題名
指附著于應用消息的標簽,服務端用它來匹配訂閱。服務端給每個匹配到的客戶端發送一份應用信息的拷貝。
主題過濾器
是包含在訂閱里的一個表達式,用來表示一個或多個感興趣的話題。話題過濾器可以包含通配符。
MQTT控制包
通過網絡連接發送的包含一定信息的數據包。MQTT規范定義了14個不同類型的控制包,其中一個(PUBLISH包)用來傳輸應用信息。
發布/訂閱、主題、會話
mqtt工作流程
● 客戶端發送連接請求到服務器, 在服務器確認(認證)后則建立連接.
● 之后客戶端則可以將消息以主題的形式 發布 到服務器 broker
● 然后其他客戶端則可以 訂閱 相關主題, 接收對應主題的信息(依照訂閱發布模型)
● 同時消息服務器broker 會接收客戶端的心跳請求并返回心跳響應, 用于監測客戶端,服務器健康狀況.
MQTT有什么優點?
1、輕量級
MQTT協議非常輕量級,傳輸的數據包頭很小,通信的負載也很小,適用于各種網絡環境。
2、發布/訂閱模式
MQTT協議采用發布/訂閱模式,可以實現多個客戶端之間的消息傳遞。
3、QoS級別
MQTT協議支持三種不同的服務質量級別(QoS級別),可以根據需求選擇適當的級別。
4、保留消息
MQTT協議支持保留消息,可以將最新的消息保留在服務器上,新的訂閱者可以獲取最新的消息。
5、遺囑消息
MQTT協議支持遺囑消息,可以在客戶端異常斷開連接時自動發送一條消息。
6、安全性
MQTT協議支持TLS/SSL加密,可以保證通信的安全性。
7、易于實現和部署
MQTT協議的實現和部署都非常容易,可以適用于各種物聯網應用場景。
8、開放性
MQTT協議是一個開放的標準,可以與其他協議和系統進行集成。
MQTT有什么缺點?
1、可擴展性有限
MQTT協議的可擴展性有限,不適合大規模的物聯網應用。
2、不支持請求/響應模式
MQTT協議不支持請求/響應模式,限制了一些應用場景。
3、不支持消息隊列
MQTT協議不支持消息隊列,限制了一些應用場景。
4、消息傳遞的延遲
由于MQTT協議的發布/訂閱模式,消息傳遞的延遲可能會比較大,不適合實時性要求較高的應用場景。
MQTT應用領域有哪些?
傳感器數據的采集和傳輸
許多傳感器需要將采集的數據傳輸到服務器或其他設備中進行處理,MQTT協議可以實現數據的實時傳輸和管理。
智能家居
MQTT協議可以用于智能家居中各種設備之間的通信和控制,例如智能燈光、智能家電、智能安防等。
智能交通
MQTT協議可以用于智能交通系統中各個設備之間的通信和協作,例如智能導航、智能停車、智能交通燈等。
智能制造
MQTT協議可以用于智能制造中各種設備之間的通信和控制,例如智能生產線、智能倉儲等。
物流和供應鏈
MQTT協議可以用于物流和供應鏈中各個環節之間的通信和協作,例如智能倉儲、智能物流等。
能源管理
MQTT協議可以用于能源管理中各種設備之間的通信和控制,例如智能電網、智能能源監測等。
智慧城市
MQTT協議可以用于智慧城市的建設和管理中,例如智能路燈、智能公交、智能城市管理等。
MQTT的安全認證機制是什么?
用戶名和密碼認證
MQTT協議可以通過用戶名和密碼認證機制來確保客戶端的身份。在連接MQTT Broker之前,客戶端需要提供用戶名和密碼以進行身份驗證。
SSL/TLS加密
MQTT協議可以通過SSL/TLS加密來保證通信的安全性。客戶端和MQTT Broker之間的數據傳輸會被加密,確保數據的機密性和完整性。
X.509證書認證
MQTT協議可以通過X.509證書認證機制來確保客戶端和MQTT Broker之間的身份認證和通信安全。
IP過濾
MQTT Broker可以通過IP過濾來限制客戶端的訪問,確保安全性和可控性。
ACL(訪問控制列表)
MQTT Broker可以通過ACL機制來限制客戶端的訪問權限,確保數據的安全性和保密性。
防火墻
MQTT Broker可以通過防火墻來限制客戶端的訪問,確保網絡的安全性和穩定性。
MQTT的會話和持久化機制是什么?
MQTT協議支持兩種類型的會話:非持久化會話和持久化會話。
非持久化會話:當客戶端連接到MQTT代理時,會創建一個非持久化會話。這種會話會在客戶端斷開連接時自動結束,會話中的QoS0消息也會被丟棄。
持久化會話:當客戶端連接到MQTT代理時,可以選擇創建一個持久化會話。這種會話會在客戶端斷開連接后繼續存在,會話中的QoS1和QoS2消息也會被保存。客戶端可以重新連接并恢復未接收的消息。
MQTT代理可以使用持久化機制來保存持久化會話的狀態信息,以便在客戶端重新連接時恢復會話。這通常是通過將會話狀態信息保存在磁盤或數據庫中實現的。