设备通信协议 - Amazon IoT Core
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

设备通信协议

Amazon IoT Core 支持使用 MQTT 和 MQTT over S WebSocket ecure (WSS) 协议发布和订阅消息的设备和客户端,以及使用 HTTPS 协议发布消息的设备和客户端。所有协议都支持 IPv4 和 IPv6。本节介绍设备和客户端的不同连接选项。

TLS 1.2 和 TLS 1.3

Amazon IoT Core 使用 TLS 版本 1.2TLS 版本 1.3 来加密所有通信。将设备连接到 Amazon IoT Core 时,客户端可以发送服务器名称指示(SNI)扩展,这不是必需的,但强烈建议您这样做。要使用多账户注册自定义域VPC 端点等特征,必须使用 SNI 扩展。有关更多信息,请参阅中的传输安全 Amazon IoT

Amazon IoT 设备软件开发工具包 支持 MQTT 和基于 WSS 的 MQTT,并支持客户端连接的安全要求。我们建议使用 Amazon IoT 设备软件开发工具包 将客户端连接到 Amazon IoT。

协议、端口映射和身份验证

设备或客户端如何使用设备终端节点连接到消息代理,取决于它使用的协议。下表列出了 Amazon IoT 设备端点支持的协议及其使用的身份验证方法和端口。

协议、身份验证和端口映射
协议 支持的操作 身份验证 端口 ALPN 协议名称

MQTT 结束了 WebSocket

发布、订阅 Signature Version 4 443

不适用

MQTT 结束了 WebSocket

发布、订阅 自定义身份验证 443

不适用

MQTT

发布、订阅

X.509 客户端证书

443

x-amzn-mqtt-ca

MQTT 发布、订阅 X.509 客户端证书 8883 不适用

MQTT

发布、订阅

自定义身份验证

443

mqtt

HTTPS

仅发布

Signature Version 4

443

不适用

HTTPS

仅发布

X.509 客户端证书

443

x-amzn-http-ca

HTTPS 仅发布 X.509 客户端证书 8443 不适用
HTTPS 仅发布 自定义身份验证 443 不适用
应用程序层协议协商 (ALPN)

通过 X.509 客户端证书身份验证在端口 443 上连接的客户端必须实现应用层协议协商 (ALPN) TLS 扩展,并使用客户端作为消息一部分 ProtocolNameList 发送的 AP N 中列出的 ALPN 协议名称ClientHello

在端口 443 上,Iot: data-ats 端点支持 ALPN x-amzn-http-ca HTTP,但是 IoT: Jobs 端点不支持。

在端口 8443 HTTPS 和带有 ALPN 的 443 MQTT 端口上 x-amzn-mqtt-ca,无法使用自定义身份验证

客户端连接到其 Amazon Web Services 账户设备端点。有关如何查找您账户的设备终端节点的信息,请参阅 Amazon IoT 设备数据和服务端点

注意

Amazon 软件开发工具包不需要完整的 URL。它们只需要端点主机名,例如适用于 Python 的 Amazon IoT 设备 SDK 的pubsub.py示例 GitHub。如下表中所示传递整个 URL 可能会生成错误,例如主机名无效。

正在连接到 Amazon IoT Core

协议

终端节点或 URL

MQTT

iot-endpoint

基于 WSS 的 MQTT

wss://iot-endpoint/mqtt

HTTPS

https://iot-endpoint/topics

为设备通信选择协议

对于大多数通过设备终端节点进行的 IoT 设备通信,您将希望使用 MQTT 或基于 WSS 的 MQTT 协议;但是,设备终端节点也支持 HTTPS。下表比较了如何 Amazon IoT Core 使用这两种协议进行设备通信。

Amazon IoT 设备协议 side-by-side

功能

MQTT

HTTPS

发布/订阅支持

发布和订阅

仅发布

SDK 支持

Amazon 设备软件开发工具包支持 MQTT 和 WSS 协议

不支持 SDK,但您可以使用特定于语言的方法来发出 HTTPS 请求

服务质量支持

MQTT QoS 级别 0 和 1

通过传递查询字符串参数 ?qos=qos 来支持 QoS,其值可以是 0 或 1。您可以添加此查询字符串,以发布具有所需 QoS 值的消息。
可以接收设备离线时错过的消息

clientId 现场支持

设备断开检测

安全通信

是。请参阅 协议、端口映射和身份验证

是。请参阅 协议、端口映射和身份验证

主题定义

定义的应用程序

定义的应用程序

消息数据格式

定义的应用程序

定义的应用程序

协议开销 小于 更高
功耗 小于 更高

连接持续时间限制

HTTPS 连接的持续时间不一定能超过接收和响应请求所需的时间。

MQTT 连接持续时间取决于您所使用的身份验证特征。下表列出了每个特征在理想条件下的最长连接持续时间。

按身份验证特征列出 MQTT 连接持续时间

特征

最长持续时间 *

X.509 客户端证书

1-2 周

自定义身份验证

1-2 周

Signature Version 4

长达 24 小时

*无法保证

使用 X.509 证书和自定义身份验证,则连接持续时间没有硬性限制,但最短可能只有几分钟。导致连接中断的原因多种多样。以下列表包含一些最常见的原因。

  • Wi-Fi 可用性中断

  • 互联网服务提供商 (ISP) 连接中断

  • 服务修补

  • 服务部署

  • 服务自动扩展

  • 服务主机不可用

  • 负载均衡器问题和更新

  • 客户端错误

您的设备必须执行检测断开连接的策略和重新连接的策略。获取有关断开连接事件及其处理方式的指导信息,请参阅 生命周期事件 中的 连接/断开连接事件