设备通信协议
Amazon IoT Core 支持设备和客户端使用 MQTT 和通过 WebSocket Secure(WSS)的 MQTT 协议发布和订阅消息,使用 HTTPS 协议发布消息。所有协议都支持 IPv4 和 IPv6。本节介绍设备和客户端的不同连接选项。
TLS 协议版本
Amazon IoT Core 使用 TLS
Amazon IoT Device SDK 支持 MQTT 和基于 WSS 的 MQTT,并支持客户端连接的安全要求。我们建议使用 Amazon IoT Device SDK 将客户端连接到 Amazon IoT。
协议、端口映射和身份验证
设备或客户端如何连接到消息代理是可以使用身份验证类型配置的。默认情况下,或者如果未发送 SNI 扩展,身份验证方法基于设备使用的应用程序协议、端口以及应用程序层协议协商(ALPN)TLS 扩展。下表列出了基于端口和 ALPN 的预期身份验证。
| 协议 | 支持的操作 | 身份验证 | 端口 | ALPN 协议名称 |
|---|---|---|---|---|
|
通过 WebSocket 的 MQTT |
发布、订阅 | Signature Version 4 | 443 |
不适用 |
|
通过 WebSocket 的 MQTT |
发布、订阅 | 自定义身份验证 | 443 |
不适用 |
|
MQTT |
发布、订阅 |
X.509 客户端证书 |
443†† |
|
| MQTT | 发布、订阅 | X.509 客户端证书 | 8883 | 不适用 |
|
MQTT |
发布、订阅 |
自定义身份验证 |
443†† |
|
|
HTTPS |
仅发布 |
Signature Version 4 |
443 |
不适用 |
|
HTTPS |
仅发布 |
X.509 客户端证书 |
443†† |
|
| HTTPS | 仅发布 | X.509 客户端证书 | 8443 | 不适用 |
| HTTPS | 仅发布 | 自定义身份验证 | 443 | 不适用 |
应用程序层协议协商(ALPN)
†使用默认端点配置时,使用 X.509 客户端证书身份验证在端口 443 上连接的客户端必须实施应用程序层协议协商(ALPN)ClientHello 消息的一部分。
在端口 443 上,IoT:Data-ATS 端点支持 ALPN x-amzn-http-ca HTTP,但 IoT:Jobs 端点不支持。
在使用 ALPN x-amzn-mqtt-ca 的端口 8443 HTTPS 和端口 443 MQTT 上,无法使用自定义身份验证。
客户端连接到其 Amazon Web Services 账户 的设备端点。有关如何查找您账户的设备端点的信息,请参阅 Amazon IoT 设备数据和服务端点。
注意
Amazon SDK 不需要整个 URL。它们只需要端点主机名,例如 GitHub 上适用于 Python 的 Amazon IoT 设备 SDK 的 pubsub.py 示例
|
协议 |
端点或 URL |
|---|---|
|
MQTT |
|
|
基于 WSS 的 MQTT |
|
|
HTTPS |
|
为设备通信选择应用程序协议
对于大多数通过设备端点进行的物联网设备通信,您将希望使用 MQTT 或基于 WebSocket Secure(WSS)的 MQTT 协议;但是,设备端点也支持 HTTPS。
下表比较了 Amazon IoT Core 使用这两种高级协议(MQTT 和 HTTPS)进行设备通信的方式。
|
功能 |
||
|---|---|---|
|
发布/订阅支持 |
发布和订阅 |
仅发布 |
|
SDK 支持 |
Amazon Device SDK 支持 MQTT 和 WSS 协议 |
不支持 SDK,但您可以使用特定于语言的方法来发出 HTTPS 请求 |
|
服务质量支持 |
通过传递查询字符串参数 ?qos=qos 来支持 QoS,其值可以是 0 或 1。您可以添加此查询字符串,以发布具有所需 QoS 值的消息。 |
|
| 可以接收设备离线时错过的消息 | 是 | 否 |
|
|
是 |
否 |
|
设备断开检测 |
是 |
否 |
|
安全通信 |
是。请参阅 协议、端口映射和身份验证。 |
是。请参阅 协议、端口映射和身份验证。 |
|
主题定义 |
定义的应用程序 |
定义的应用程序 |
|
消息数据格式 |
定义的应用程序 |
定义的应用程序 |
| 协议开销 | 小于 | 更高 |
| 功耗 | 小于 | 更高 |
为设备通信选择身份验证类型
您可以使用可配置的端点为物联网端点配置身份验证类型。或者,使用默认配置,并确定您的设备如何通过应用程序协议、端口和 ALPN TLS 扩展组合进行身份验证。您选择的身份验证类型决定了您的设备在连接 Amazon IoT Core 时将如何进行身份验证。身份验证类型有五种:
X.509 证书
使用 X.509 客户端证书对设备进行身份验证,Amazon IoT Core 将验证设备身份。这种身份验证类型适合配合安全的 MQTT(基于 TLS 的 MQTT)和 HTTPS 协议使用。
X.509 证书和自定义授权方
使用 X.509 客户端证书对设备进行身份验证,并使用自定义授权方执行其他身份验证操作,自定义授权方将接收 X.509 客户端证书信息。这种身份验证类型适合配合安全的 MQTT(基于 TLS 的 MQTT)和 HTTPS 协议使用。只有结合使用可配置端点与 X.509 自定义身份验证时才能使用这种身份验证类型。没有 ALPN 选项。
Amazon 签名版本 4(SigV4)
使用 Cognito 或您的后端服务对设备进行身份验证,支持社交和企业联合身份验证。这种身份验证类型适合配合基于 WebSocket Secure(WSS)的 MQTT 和 HTTPS 协议使用。
自定义授权方
通过配置 Lambda 函数来处理发送到 Amazon IoT Core 的自定义身份验证信息,对设备进行身份验证。这种身份验证类型适合配合安全的 MQTT(基于 TLS 的 MQTT)、HTTPS 以及基于 WebSocket Secure(WSS)的 MQTT 协议使用。
默认值:
根据设备使用的端口和/或应用层协议协商(ALPN)扩展对设备进行身份验证。不支持某些其他身份验证选项。有关更多信息,请参阅 协议、端口映射和身份验证。
下表显示了所有支持的身份验证类型和应用程序协议组合。
| 身份验证类型 | 安全端点 MQTT(基于 TLS 的 MQTT) | 基于 WebSocket Secure(WSS)的 MQTT | HTTPS | 默认值 |
|---|---|---|---|---|
| X.509 证书 | ✓ | ✓ | ||
| X.509 证书和自定义授权方 | ✓ | ✓ | ||
| Amazon 签名版本 4(SigV4) | ✓ | ✓ | ||
| 自定义授权方 | ✓ | ✓ | ✓ | |
| 默认值: | ✓ |
连接持续时间限制
HTTPS 连接的持续时间不一定能超过接收和响应请求所需的时间。
MQTT 连接持续时间取决于您所使用的身份验证特征。下表列出了每个特征在理想条件下的最长连接持续时间。
|
功能 |
最长持续时间 * |
|---|---|
|
X.509 客户端证书 |
1-2 周 |
|
自定义身份验证 |
1-2 周 |
|
Signature Version 4 |
长达 24 小时 |
*无法保证
使用 X.509 证书和自定义身份验证,则连接持续时间没有硬性限制,但最短可能只有几分钟。导致连接中断的原因多种多样。以下列表包含一些最常见的原因。
-
Wi-Fi 可用性中断
-
互联网服务提供商(ISP)连接中断
-
服务修补
-
服务部署
-
服务自动扩展
-
服务主机不可用
-
有效载荷均衡器问题和更新
-
客户端错误
您的设备必须执行检测断开连接的策略和重新连接的策略。获取有关断开连接事件及其处理方式的指导信息,请参阅 生命周期事件 中的 连接/断开连接事件。