设备通信协议 - AWS IoT Core

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

设备通信协议

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

TLS协议版本

AWS IoT Core 使用TLS版本 1.2TLS1.3 对所有通信进行加密。您可以通过在域配置中配置TLS设置来为终端节点配置其他TLS策略版本。将设备连接到时 AWS IoT Core,客户端可以发送服务器名称指示 (SNI) 扩展名,这是多账户注册可配置端点、自定义域VPC端点等功能所必需的。有关更多信息,请参阅 AWS IoT中的传输安全

AWS IoT 设备 SDKs支持MQTTWSS和MQTT支持客户端连接的安全要求。我们建议使用 AWS IoT 设备 SDKs 将客户端连接到 AWS IoT。

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

设备或客户端如何连接到消息代理是可以使用身份验证类型配置的。默认情况下,或者不发送SNI扩展名时,身份验证方法基于设备使用的应用协议、端口和应用层协议协商 (ALPN) TLS 扩展。下表列出了基于端口、端口和的预期身份验证ALPN。

协议、身份验证和端口映射
协议 支持的操作 身份验证 端口 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 扩展,并使用客户端ALPN ProtocolNameList 发送的消息中列出的ALPN协议名称作为消息的一部分。ClientHello

在端口 443 上,Iot: Data-ATS 端点支持 ALPN x-amzn-http-caHTTP,但是 I oT: Jobs 端点不支持。

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

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

注意

AWS SDKs不需要整个URL。它们只需要端点主机名,SDK例如 Python AWS IoT 设备开启的pubsub.py示例 GitHub。按照下表提供的方式传递完整URL内容可能会生成错误,例如主机名无效。

正在连接到 AWS IoT Core

协议

终端节点或 URL

MQTT

iot-endpoint

MQTT结束了 WSS

wss://iot-endpoint/mqtt

HTTPS

https://iot-endpoint/topics

为设备通信选择应用程序协议

对于通过设备端点进行的大部分物联网设备通信,您需要使用 Secure MQTT 或 ov MQTT er WebSocket Secure (WSS) 协议;但是,设备端点也支持HTTPS。

下表比较了如何 AWS IoT Core 使用两个高级协议(MQTT和HTTPS)进行设备通信。

AWS IoT 设备协议(MQTT和HTTPS) side-by-side

特征

MQTT

HTTPS

发布/订阅支持

发布和订阅

仅发布

SDK 支持

AWS 设备SDKs支持MQTT和WSS协议

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

服务质量支持

MQTT服务质量等级 0 和 1

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

clientId 现场支持

Yes

不支持

设备断开检测

Yes

不支持

安全通信

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

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

主题定义

定义的应用程序

定义的应用程序

消息数据格式

定义的应用程序

定义的应用程序

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

为设备通信选择身份验证类型

您可以使用可配置的端点为 IoT 端点配置身份验证类型。或者,使用默认配置,并通过应用程序协议、端口和ALPNTLS扩展组合来确定您的设备如何进行身份验证。您选择的身份验证类型决定了您的设备在连接时将如何进行身份验证 AWS IoT Core。身份验证类型有五种:

X.509 证书

使用 X.509 客户端证书对设备进行身份验证,该证书可 AWS IoT Core 验证设备身份。此身份验证类型适用于安全MQTT(o MQTT verTLS)和HTTPS协议。

X.509 证书和自定义授权方

使用 X.509 客户端证书对设备进行身份验证,并使用自定义授权方执行其他身份验证操作,自定义授权方将接收 X.509 客户端证书信息。此身份验证类型适用于安全MQTT(o MQTT verTLS)和HTTPS协议。只有结合使用可配置端点与 X.509 自定义身份验证时才能使用这种身份验证类型。没有 ALPN 选项。

AWS 签名版本 4 (Sigv4)

使用 Cognito 或您的后端服务对设备进行身份验证,支持社交和企业联合身份验证。此身份验证类型适用于 ov MQTT er WebSocket Secure (WSS) 和HTTPS协议。

自定义授权方

通过配置 Lambda 函数来处理发送到 AWS IoT Core的自定义身份验证信息,对设备进行身份验证。这种身份验证类型适用于安全MQTT(MQTT通过TLS)和MQTT WebSocket 安全(WSS)协议。HTTPS

默认

根据设备使用的端口和/或应用层协议协商 (ALPN) 扩展对设备进行身份验证。不支持某些其他身份验证选项。有关更多信息,请参阅 协议、端口映射和身份验证

下表显示了所有支持的身份验证类型和应用程序协议组合。

支持的身份验证类型和应用程序协议组合
身份验证类型 安全MQTT(MQTT已结束TLS) MQTTover WebSocket Secure (WSS) HTTPS 默认
X.509 证书
X.509 证书和自定义授权方
AWS 签名版本 4 (Sigv4)
自定义授权方
默认

连接持续时间限制

HTTPS不能保证连接的持续时间长于接收和响应请求所需的时间。

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

MQTT按身份验证功能划分的连接时长

特征

最长持续时间 *

X.509 客户端证书

1-2 周

自定义身份验证

1-2 周

Signature Version 4

长达 24 小时

*无法保证

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

  • Wi-Fi 可用性中断

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

  • 服务修补

  • 服务部署

  • 服务自动扩展

  • 服务主机不可用

  • 负载均衡器问题和更新

  • 客户端错误

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