什麼是 MQTT?

MQTT 是一種以標準為基礎的訊息傳遞協定或規則集,用於機器對機器的通訊。智慧型感應器、可穿戴裝置和其他物聯網 (IoT) 裝置,通常必須透過頻寬有限的資源受限網路來傳輸和接收資料。這些 IoT 裝置使用 MQTT 進行資料傳輸,因為它易於實作並且可有效地傳輸 IoT 資料。MQTT 支援裝置到雲端和雲端到裝置間的訊息傳遞。

為什麼 MQTT 協定很重要?

MQTT 協定因具有下列優勢而成為 IoT 資料傳輸的標準:

輕量高效

IoT 裝置上的 MQTT 實作需要最少的資源,因此甚至可用於較小的微型控制器。例如,最小的 MQTT 控制訊息可以少至兩個資料位元組。MQTT 訊息標頭也很小,因此您可以最佳化網路頻寬。

可擴展

MQTT 實作需要最少量的程式碼,在操作中消耗的能量極少。該協定還具有各種內建功能,支援與大量 IoT 裝置進行通訊。因此,您可以實作 MQTT 協定,來連線數百萬部此類裝置。

可靠

許多 IoT 裝置透過不可靠的蜂窩網路連線,具有低頻寬和高延遲。MQTT 具有各種內置功能,可減少 IoT 裝置重新連線雲端所需的時間。此外,它還定義了三種不同的服務品質水準,以確保 IoT 使用案例的可靠性 – 最多一次 (0)、至少一次 (1) 和正好一次 (2)。

安全

MQTT 讓開發人員能夠輕鬆地使用現代身分驗證協定 (如 OAuth、TLS1.3、客戶受管憑證等) 來加密訊息,並對裝置和使用者進行身分驗證。

出色的支援

Python 之類的多種語言對 MQTT 協定實作提供廣泛的支援。因此,開發人員可在任何類型的應用程式中,以最少的編碼快速實作。

MQTT 協定背後的歷史是什麼?

MQTT 協定於 1999 年編製,用於石油與天然氣產業。工程師需要一種協定來實作最小頻寬和最小電池損耗,以透過衛星監控石油管道。最初,由於 IBM 產品 MQ 系列首先支援其初始階段,因此該協定被稱為訊息佇列遙測傳輸。2010 年,IBM 發佈了 MQTT 3.1 作為任何人都能實作的免費開放協定,然後於 2013 年提交給結構化資訊標準促進組織 (OASIS) 規範機構進行維護。2019 年,OASIS 發佈了升級的 MQTT 版本 5。現在,MQTT 不再是首字母縮略詞,而被認為是協定的正式名稱。 

MQTT 背後的原理是什麼?

MQTT 協定的運作原理是發佈/訂閱模型。在傳統的網路通訊中,用戶端和伺服器直接相互通訊。用戶端向伺服器請求資源或資料,然後伺服器會處理並傳回回應。但是,MQTT 使用發佈/訂閱模式,將訊息傳送者 (發佈者) 與訊息接收者 (訂閱者) 解耦。而稱為訊息代理程式的第三個元件,則處理發佈者與訂閱者之間的通訊。代理程式的任務是篩選發佈者的所有傳入訊息,並將其正確地分發給訂閱者。代理程式將發佈者與訂閱者如下所示解耦:

空間解耦

發佈者與訂閱者不知道彼此的網路位置,也不交換 IP 地址或連接埠號等資訊。

時間解耦

發佈者與訂閱者不會同時執行或具有網路連線。

同步解耦

發佈者與訂閱者都可以傳送或接收訊息而不會互相干擾。例如,訂閱者不必等待發佈者傳送訊息。

什麼是 MQTT 元件?

MQTT 如下所示定義用戶端和代理程式,來實作發佈/訂閱模型。

MQTT 用戶端

MQTT 用戶端是指執行 MQTT 程式庫的任何裝置,包括伺服器和微型控制器。如果用戶端正在傳送訊息,則充當發佈者;如果正在接收訊息,則充當接收者。基本上,任何透過網路使用 MQTT 進行通訊的裝置都可稱為 MQTT 用戶端裝置。

MQTT 代理程式

MQTT 代理程式是協調不同用戶端間訊息的後端系統。代理程式的職責包括接收和篩選訊息,識別訂閱每則訊息的用戶端,並向其傳送訊息。此外,它還負責其他任務,例如:

  • 授權和驗證 MQTT 用戶端
  • 將訊息傳遞給其他系統以作進一步分析
  • 處理錯過的訊息和用戶端工作階段

MQTT 連線

用戶端和代理程式開始使用 MQTT 連線進行通訊。用戶端透過向 MQTT 代理程式傳送 CONNECT 訊息來起始連線。代理程式透過回應 CONNACK 訊息,來確認已建立連線。MQTT 用戶端和代理程式都需要 TCP/IP 堆疊以進行通訊。用戶端從不相互連線,只與代理程式連線。

MQTT 如何運作?

下面概述了 MQTT 的運作方式。 

  1. MQTT 用戶端與 MQTT 代理程式建立連線。
  2. 連線後,用戶端可發佈訊息、訂閱特定訊息,或兩者兼而有之。
  3. 當 MQTT 代理程式收到訊息時,它會將其轉傳給感興趣的訂閱者。

我們來分解細節以進一步了解。

MQTT 主題

術語「主題」是指 MQTT 代理程式用於針對 MQTT 用戶端篩選訊息的關鍵字。主題依階層整理,類似於檔案或資料夾目錄。例如,假設在多層房屋中運作的智慧型家居系統,每層都有不同的智慧型裝置。在這種情況下,MQTT 代理程式可按以下方式整理主題:

家/地面層/客廳/燈

家/一樓/廚房/溫度

MQTT 發佈

MQTT 用戶端以位元組格式發佈包含主題和資料的訊息。用戶端確定資料格式,如文字資料、二進位資料、XML 或 JSON 檔案。例如,智慧型家居系統中的一盞燈可能會針對主題客廳/燈,發佈亮起訊息。

MQTT 訂閱

MQTT 用戶端向 MQTT 代理程式傳送 SUBSCRIBE 訊息,以接收有關感興趣主題的訊息。此訊息包含不重複識別符和訂閱清單。例如,您手機上的智慧型家居應用程式想要顯示您家中有多少盞燈亮著。它將訂閱主題,並增加所有亮起訊息的計數器。 

什麼是 MQTT over WSS?

MQTT over WebSockets (WSS) 是一種 MQTT 實作,用於將資料直接接收到 Web 瀏覽器中。MQTT 協定定義一個 JavaScript 用戶端,來為瀏覽器提供 WSS 支援。在這種情況下,該協定照常工作,但會向 MQTT 訊息新增額外的標頭以同時支援 WSS 協定。您可以將其視為包裝在 WSS 信封的 MQTT 訊息承載。

MQTT 安全嗎?

MQTT 通訊使用 SSL 協定來保護 IoT 裝置傳輸的敏感資料。您可以使用 SSL 憑證及/或密碼,在用戶端與代理程式之間實作身分、身分驗證和授權。MQTT 代理程式通常使用其密碼,以及配置給每個用戶端的不重複用戶端識別符,對用戶端進行身分驗證。在大多數實作中,用戶端使用憑證或 DNS 查詢對伺服器進行身分驗證。您還可以使用 MQTT 實作加密協定。 

MQTT 是 RESTful 嗎?

MQTT 並非 RESTful。具象狀態轉移 (REST) 是一種網路通訊的架構方法,使用訊息傳送者和接收者之間的請求-回應模式進行通訊。相比之下,MQTT 在應用層使用發佈/訂閱模型進行通訊,並且需要常設的 TCP 連線,以推送的方式傳輸訊息。然而,MQTT 版本 5 新增了一種新的請求/回應方法,以類似於 REST 的方式執行,其中發佈者可附加特殊的回應主題,而接收者則處理並產生適當的回應。

AWS 如何支援您的 MQTT 實作?

AWS IoT Core 是一項全受管服務,可讓您連接數十億個 IoT 裝置,並將數萬億則訊息路由至 AWS 服務。您可以:

  • 無需佈建或管理伺服器,即可輕鬆可靠地連線、管理和擴展您的裝置機群。
  • 選擇您偏好的通訊協定,包括 MQTT、HTTPS、MQTT over WSS 和 LoRaWAN。
  • 透過相互身分驗證和端對端加密,保護裝置連線和資料。
  • 根據您定義的商業規則來立即篩選、轉換裝置資料並採取行動。

立即建立一個免費帳戶,開始使用 MQTT on AWS。

AWS MQTT 後續步驟

註冊免費帳戶

立即存取 AWS 免費方案。 

註冊 
開始在主控台進行建置

開始在 AWS 管理主控台使用 AWS 進行建置。

登入