View a markdown version of this page

裝置通訊協定 - AWS IoT Core

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

裝置通訊協定

AWS IoT Core 支援使用 MQTT 和 MQTT over WebSocket Secure (WSS) 通訊協定來發佈和訂閱訊息的裝置和用戶端、使用 HTTPS 通訊協定來發佈訊息的裝置和用戶端,以及使用 Direct Messaging API 將訊息傳送至特定連線用戶端。所有通訊協定皆支援 IPv4 和 IPv6。本節說明裝置和用戶端的不同連線選項。

TLS 通訊協定版本

AWS IoT Core 使用 TLS 1.2 版和 TLS 1.3 版來加密所有通訊。您可以在網域組態中設定 TLS 設定,為您的端點設定其他 TLS 政策版本。將裝置連線至 時 AWS IoT Core,用戶端可以傳送伺服器名稱指示 (SNI) 延伸,這是多帳戶註冊、可設定端點、自訂網域和 VPC 端點等功能的必要項目。如需詳細資訊,請參閱 AWS IoT中的傳輸安全性。

AWS IoT 裝置 SDKs 支援 MQTT 或是經 WSS 的 MQTT,並支援用戶端連線的安全性需求。建議您使用 AWS IoT 裝置 SDKs 將用戶端連線至 AWS IoT。

通訊協定、連接埠映射和身分驗證

裝置或用戶端連線至訊息中介裝置的方式,可使用 身分驗證類型進行設定。根據預設,或未傳送 SNI 延伸時,身分驗證方法是根據裝置使用的應用程式通訊協定、連接埠和應用程式層通訊協定交涉 (ALPN) TLS 延伸。下表列出根據連接埠、連接埠和 ALPN 預期的身分驗證。

通訊協定、身分驗證和連接埠對應
通訊協定 支援的操作 身分驗證 站點 ALPN 通訊協定名稱

MQTT over WebSocket

發佈、訂閱 Signature 第 4 版 443

N/A

MQTT over WebSocket

發佈、訂閱 自訂身分驗證 443

N/A

MQTT

發佈、訂閱

X.509 用戶端憑證

443†

x-amzn-mqtt-ca

MQTT 發佈、訂閱 X.509 用戶端憑證 8883 N/A

MQTT

發佈、訂閱

自訂身分驗證

443†

mqtt

HTTPS

僅發佈

Signature 第 4 版

443

N/A

HTTPS

僅發佈

X.509 用戶端憑證

443†

x-amzn-http-ca

HTTPS 僅發佈 X.509 用戶端憑證 8443 N/A
HTTPS 僅發佈 自訂身分驗證 443 N/A
應用程式層通訊協定交涉 (ALPN)

†使用預設端點組態時,透過 X.509 用戶端憑證身分驗證在連接埠 443 上連線的用戶端,必須實作應用程式層通訊協定交涉 (ALPN) TLS 延伸,並使用用戶端傳送的 ALPN ProtocolNameList 中列出的 ALPN 通訊協定名稱,做為ClientHello訊息的一部分。 ProtocolNameList

在連接埠 443 上,IoT:Data-ATS 端點支援 ALPN x-amzn-http-ca HTTP,但 IoT:Jobs 端點不支援。

ALPN x-amzn-mqtt-ca 在連接埠 8443 HTTPS 和連接埠 443 MQTT 上無法使用自訂身分驗證。

用戶端會連線至 AWS 帳戶其裝置端點。如需有關如何尋找帳戶的裝置端點的資訊,請參閱AWS IoT 裝置資料和服務端點。

注意

AWS SDKs不需要整個 URL。它們只需要端點主機名稱,例如 pubsub.py GitHub 上適用於 Python 的 AWS IoT Device SDK 範例。如下表所示,傳遞完整 URL 可能會產生錯誤,例如主機名稱無效。

連線至 AWS IoT Core

通訊協定

端點或 URL

MQTT

iot-endpoint

透過 WSS 的 MQTT

wss://iot-endpoint/mqtt

HTTPS

https://iot-endpoint/topics

選擇裝置通訊的應用程式通訊協定

對於透過裝置端點進行大多數 IoT 裝置通訊,您會想要使用 Secure MQTT 或 MQTT over WebSocket Secure (WSS) 通訊協定;不過,裝置端點也支援 HTTPS。

下表比較 AWS IoT Core 如何使用兩個高階通訊協定 (MQTT 和 HTTPS) 進行裝置通訊。

AWS IoT 裝置通訊協定 side-by-side (MQTT 和 HTTPS)

功能

MQTT

HTTPS

發佈/訂閱支援

發佈和訂閱

僅發佈

開發套件支援

AWS 裝置 SDKs支援 MQTT 和 WSS 通訊協定

不支援軟體開發套件,但您可以使用特定語言的方法來發出 HTTPS 要求

服務品質支援

MQTT QoS 層級 0 和 1

QoS 的支援是透過傳遞查詢字串參數 ?qos=qos 來進行,其中值可以是 0 或 1。您可以新增此查詢字串,以發佈內含您所需之 QoS 值的訊息。
可接收裝置離線時所遺漏的訊息 是 否

clientId 欄位支援

是

否

裝置中斷連線偵測

是

否

安全通訊

是。請參閱 通訊協定、連接埠映射和身分驗證

是。請參閱 通訊協定、連接埠映射和身分驗證

主題定義

應用程式定義

應用程式定義

訊息資料格式

應用程式定義

應用程式定義

通訊協定負荷 較低 較高
耗電量 較低 較高

選擇裝置通訊的身分驗證類型

您可以使用可設定的端點來設定 IoT 端點的身分驗證類型。或者,使用預設組態,並判斷您的裝置如何使用應用程式通訊協定、連接埠和 ALPN TLS 延伸組合進行身分驗證。您選擇的身分驗證類型決定您的裝置在連線時將如何進行身分驗證 AWS IoT Core。有五種身分驗證類型:

X.509 憑證

使用 X.509 用戶端憑證來驗證裝置,以 AWS IoT Core 驗證裝置。此身分驗證類型適用於 Secure MQTT (MQTT over TLS) 和 HTTPS 通訊協定。

具有自訂授權方的 X.509 憑證

使用 X.509 用戶端憑證驗證裝置,並使用自訂授權方執行其他身分驗證動作,這會接收 X.509 用戶端憑證資訊。此身分驗證類型適用於 Secure MQTT (MQTT over TLS) 和 HTTPS 通訊協定。此身分驗證類型只能使用可設定的端點搭配 X.509 自訂身分驗證。沒有 ALPN 選項。

AWS Signature 第 4 版 (SigV4)

使用 Cognito 或您的後端服務來驗證裝置,以支援社交和企業聯合。此身分驗證類型適用於 MQTT over WebSocket Secure (WSS) 和 HTTPS 通訊協定。

自訂授權方

透過設定 Lambda 函數來驗證裝置,以處理傳送至其中的自訂身分驗證資訊 AWS IoT Core。此身分驗證類型適用於 Secure MQTT (MQTT over TLS)、HTTPS 和 MQTT over WebSocket Secure (WSS) 通訊協定。

預設

根據裝置使用的連接埠和/或應用程式層通訊協定交涉 (ALPN) 延伸來驗證裝置。不支援某些額外的身分驗證選項。如需詳細資訊,請參閱通訊協定、連接埠映射和身分驗證。

下表顯示所有支援的身分驗證類型和應用程式通訊協定組合。

支援的身分驗證類型和應用程式通訊協定組合
身分驗證類型 安全 MQTT (透過 TLS 的 MQTT) 透過 WebSocket Secure (WSS) 的 MQTT HTTPS 預設
X.509 憑證 ✓ ✓
具有自訂授權方的 X.509 憑證 ✓ ✓
AWS Signature 第 4 版 (SigV4) ✓ ✓
自訂授權方 ✓ ✓ ✓
預設 ✓

連線持續時間限制

HTTPS 連線的持續時間不保證比接收和回應要求所需時間更長。

MQTT 連線持續時間取決於您使用的身分驗證功能。下表列出每項功能在理想條件下的連線持續時間上限。

依身分驗證功能分類的 MQTT 連線持續時間

功能

持續時間上限 *

X.509 用戶端憑證

1–2 週

自訂身分驗證

1–2 週

Signature 第 4 版

長達 24 小時

* 不保證

使用 X.509 憑證和自訂身分驗證時,連線持續時間沒有硬性限制,但可以短至幾分鐘。有多種原因可能導致連線中斷。下方清單中包含一些最常見的原因。

  • Wi-Fi 可用性中斷

  • 網際網路服務供應商 (ISP) 連線中斷

  • 服務修補程式

  • 服務部署

  • 服務自動擴展

  • 服務主機無法使用

  • 負載平衡器問題和更新

  • 用戶端錯誤

您的裝置必須實作偵測中斷連線和重新連線的策略。如需中斷連線事件的詳細資訊,以及處理前述事件的指導,請參閱 生命週期事件 中的 連線/中斷連線事件。