

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

# Protocolos de comunicación de dispositivos
<a name="protocols"></a><a name="iot-message-broker"></a>

AWS IoT Core admite dispositivos y clientes que utilizan los protocolos MQTT y MQTT over WebSocket Secure (WSS) para publicar mensajes y suscribirse a ellos, y dispositivos y clientes que utilizan el protocolo HTTPS para publicar mensajes. Todos los protocolos admiten y IPv4 . IPv6 En esta sección se describen las diferentes opciones de conexión para dispositivos y clientes.

## Versiones del protocolo TLS
<a name="connection-protocol-tls"></a>

AWS IoT Core utiliza la [versión 1.2](https://en.wikipedia.org/wiki/Transport_Layer_Security#TLS_1.2) de [TLS](https://en.wikipedia.org/wiki/Transport_Layer_Security) y la [versión 1.3 de TLS](https://en.wikipedia.org/wiki/Transport_Layer_Security#TLS_1.3) para cifrar todas las comunicaciones. Puede configurar versiones adicionales de la política de TLS para su punto de conexión mediante el [establecimiento de los ajustes de TLS en las configuraciones de dominio](https://docs.aws.amazon.com//iot/latest/developerguide/iot-endpoints-tls-config.html). Al conectar los dispositivos a AWS IoT Core, los clientes pueden enviar la [extensión de indicación de nombre de servidor (SNI)](https://tools.ietf.org/html/rfc3546#section-3.1), que es necesaria para características como el [registro de varias cuentas](https://docs.aws.amazon.com//iot/latest/developerguide/x509-client-certs.html#multiple-account-cert), los [puntos de conexión configurables](https://docs.aws.amazon.com//iot/latest/developerguide/iot-custom-endpoints-configurable.html), los [dominios personalizados](https://docs.aws.amazon.com//iot/latest/developerguide/iot-custom-endpoints-configurable-custom.html) y los [puntos de conexión de VPC](https://docs.aws.amazon.com//iot/latest/developerguide/IoTCore-VPC.html). Para obtener más información, consulte [Seguridad de transporte en AWS IoT](transport-security.html).

Los [AWS IoT Dispositivo SDKs](iot-connect-devices.md#iot-connect-device-sdks) admiten MQTT y MQTT a través de WSS y cumplen los requisitos de seguridad de las conexiones de los clientes. Recomendamos utilizar los [AWS IoT Dispositivo SDKs](iot-connect-devices.md#iot-connect-device-sdks) para conectar los clientes a AWS IoT.

## Protocolos, asignaciones de puertos y autenticación
<a name="protocol-mapping"></a><a name="protocol-port-mapping"></a>

La forma en que un dispositivo o cliente se conecta al agente de mensajes se puede configurar con un [tipo de autenticación](#connection-protocol-auth-mode). De forma predeterminada o cuando no se envía ninguna extensión SNI, el método de autenticación se basa en el protocolo de aplicación, el puerto y la extensión TLS de negociación del protocolo de capa de aplicación (ALPN) que utilizan los dispositivos. En la siguiente tabla se muestra la autenticación esperada en función del puerto y la ALPN.


**Protocolos, autenticación y asignaciones de puertos**  

| Protocolo | Operaciones admitidas | Autenticación | Puerto | Nombre del protocolo ALPN | 
| --- | --- | --- | --- | --- | 
|  MQTT ha terminado WebSocket  | Publicar, suscribirse | Signature Version 4 | 443 |  N/A  | 
|  Se acabó MQTT WebSocket  | Publicar, suscribirse | Autenticación personalizada | 443 |  N/A  | 
|  MQTT  | Publicar, suscribirse |  Certificado de cliente X.509  |  443†  |  `x-amzn-mqtt-ca`  | 
| MQTT | Publicar, suscribirse | Certificado de cliente X.509 | 8883 | N/A | 
|  MQTT  | Publicar, suscribirse |  Autenticación personalizada  |  443†  |  `mqtt`  | 
|  HTTPS  | Solo publicar |  Signature Version 4  |  443  |  N/A  | 
|  HTTPS  | Solo publicar |  Certificado de cliente X.509  |  443†  |  `x-amzn-http-ca`  | 
| HTTPS | Solo publicar | Certificado de cliente X.509 | 8443 | N/A | 
| HTTPS | Solo publicar | Autenticación personalizada | 443 | N/A | 

**Negociación de protocolo de capa de aplicación (ALPN)**  
† Al utilizar las configuraciones de punto final predeterminadas, los clientes que se conecten al puerto 443 con la autenticación mediante certificado de cliente X.509 deben implementar la extensión TLS de [negociación del protocolo de capa de aplicación (ALPN)](https://tools.ietf.org/html/rfc7301) y utilizar el [nombre del protocolo ALPN](https://tools.ietf.org/html/rfc7301#section-3.1) que aparece en el ALPN ProtocolNameList enviado por el cliente como parte del mensaje. `ClientHello`  
[En el puerto 443, el punto final [IoT:data-ATS](iot-connect-devices.md#iot-connect-device-endpoint-table) admite HTTP x-amzn-http-ca ALPN, pero el punto final IoT:Jobs no.](iot-connect-devices.md#iot-connect-device-endpoint-table)  
[En el puerto 8443 HTTPS y el puerto 443 MQTT con ALPN, no se puede usar la autenticación personalizada. x-amzn-mqtt-ca](custom-authentication.md)

Los clientes se conectan a los puntos finales Cuenta de AWS de sus dispositivos. Consulte [AWS IoT datos del dispositivo y puntos finales de servicio](iot-connect-devices.md#iot-connect-device-endpoints) para obtener información sobre cómo encontrar los puntos de conexión de los dispositivos de su cuenta.

**nota**  
AWS SDKs no requieren la URL completa. Solo requieren el nombre de host del punto final, como en el [`pubsub.py`ejemplo de AWS IoT Device SDK for Python on GitHub](https://github.com/aws/aws-iot-device-sdk-python-v2/blob/master/samples/pubsub.py#L100). Pasar la URL completa como se indica en la siguiente tabla puede generar un error (como un nombre de host no válido).


**Conectándose a AWS IoT Core**  

|  Protocolo  |  Punto de enlace o URL  | 
| --- | --- | 
|  MQTT  |  `iot-endpoint`  | 
|  MQTT a través de WSS  |  `wss://iot-endpoint/mqtt`  | 
|  HTTPS  |  `https://iot-endpoint/topics`  | 

## Elección de un protocolo de aplicación para la comunicación entre dispositivos
<a name="protocol-selection"></a>

Para la mayoría de las comunicaciones de los dispositivos de IoT a través de los puntos finales del dispositivo, querrá utilizar los protocolos Secure MQTT o MQTT over WebSocket Secure (WSS); sin embargo, los puntos finales del dispositivo también admiten HTTPS.

En la siguiente tabla se compara cómo se AWS IoT Core utilizan los dos protocolos de alto nivel (MQTT y HTTPS) para la comunicación entre dispositivos.


**AWS IoT protocolos de dispositivo (MQTT y HTTPS) side-by-side**  

|  Característica  |  [MQTT](mqtt.md)  |  [HTTPS](http.md)  | 
| --- | --- | --- | 
|  Soporte para publicación/suscripción  |  Publicar y suscribirse  |  Solo publicar  | 
|  Soporte para SDK  |  [AWS El dispositivo SDKs](iot-connect-devices.md#iot-connect-device-sdks) admite los protocolos MQTT y WSS  |  No compatible con el SDK, pero es posible usar métodos de lenguajes específicos para realizar solicitudes HTTPS  | 
|  Soporte para calidad del servicio  |  [Niveles 0 y 1 de calidad del servicio de MQTT](mqtt.md#mqtt-qos)  | Se admite la calidad del servicio al pasar un parámetro de cadena de consulta ?qos=qos donde el valor puede ser 0 o 1. Puede agregar esta cadena de consulta para publicar un mensaje con el valor de calidad del servicio que desee. | 
| ¿Se pueden perder los mensajes recibidos mientras el dispositivo estaba sin conexión? | Sí | No | 
|  Soporte de campo de `clientId`  |  Sí  |  No  | 
|  Detección de desconexión de dispositivos  |  Sí  |  No  | 
|  Comunicaciones seguras  |  Sí Consulte [Protocolos, asignaciones de puertos y autenticación](#protocol-mapping)  |  Sí Consulte [Protocolos, asignaciones de puertos y autenticación](#protocol-mapping)  | 
|  Definiciones de temas  |  Definido por la aplicación  |  Definido por la aplicación  | 
|  Formato de datos de mensajes  |  Definido por la aplicación  |  Definido por la aplicación  | 
| Sobrecarga de protocolo | Más baja | Más alta | 
| Consumo eléctrico | Más bajo | Más alto | 

## Elección de un tipo de autenticación para la comunicación entre dispositivos
<a name="connection-protocol-auth-mode"></a>

Puede configurar el tipo de autenticación para su punto de conexión de IoT mediante puntos de conexión configurables. Como alternativa, utilice la configuración predeterminada y determine cómo se autentican sus dispositivos con una combinación de protocolo de aplicación, puerto y extensión TLS de ALPN. El tipo de autenticación que elija determina cómo se autenticarán sus dispositivos cuando se conecten a ellos. AWS IoT Core Hay cinco tipos de autenticación: 

**Certificado X.509**

Autentica los dispositivos mediante [certificados de cliente X.509](https://docs.aws.amazon.com//iot/latest/developerguide/x509-client-certs.html), que AWS IoT Core validan la autenticación del dispositivo. Este tipo de autenticación es compatible con los protocolos Secure MQTT (MQTT a través de TLS) y HTTPS.

**Certificado X.509 con autorizador personalizado**

Autentique los dispositivos con [certificados de cliente X.509](https://docs.aws.amazon.com//iot/latest/developerguide/x509-client-certs.html) y realice acciones de autenticación adicionales con un [autorizador personalizado](https://docs.aws.amazon.com//iot/latest/developerguide/config-custom-auth.html), que recibirá la información del certificado de cliente X.509. Este tipo de autenticación es compatible con los protocolos Secure MQTT (MQTT a través de TLS) y HTTPS. Este tipo de autenticación solo es posible mediante puntos de conexión configurables con autenticación personalizada X.509. No hay ninguna opción ALPN.

**AWS Firma, versión 4 (SigV4)**

Autentique los dispositivos mediante Cognito o su servicio de backend, que admiten la federación social y empresarial. Este tipo de autenticación funciona con los protocolos MQTT over WebSocket Secure (WSS) y HTTPS.

**Autorizador personalizado**

Autentique los dispositivos configurando una función de Lambda para procesar la información de autenticación personalizada enviada a AWS IoT Core. Este tipo de autenticación funciona con los protocolos MQTT seguro (MQTT sobre TLS), HTTPS y MQTT sobre WebSocket seguro (WSS).

**Predeterminado**

Autentique los dispositivos en función de la extensión de negociación del protocolo de capa de and/or aplicación (ALPN) de puertos que utilizan los dispositivos. No se admiten algunas opciones de autenticación adicionales. Para obtener más información, consulte [Protocolos, asignaciones de puertos y autenticación](#protocol-mapping).

La siguiente tabla muestra todas las combinaciones compatibles de tipos de autenticación y protocolos de aplicación.


**Combinaciones compatibles de tipos de autenticación y protocolos de aplicación**  

| Tipo de autenticación | Secure MQTT (MQTT a través de TLS) | MQTT a través de WebSocket Secure (WSS) | HTTPS | Predeterminado | 
| --- | --- | --- | --- | --- | 
| Certificado X.509 | ✓ |  | ✓ |  | 
| Certificado X.509 con autorizador personalizado | ✓ |  | ✓ |  | 
| AWS Firma versión 4 (SiGv4) |  | ✓ | ✓ |  | 
| Autorizador personalizado | ✓ | ✓ | ✓ |  | 
| Predeterminado |  |  |  | ✓ | 

## Límites de duración de la conexión
<a name="connection-duration"></a>

No se garantiza que las conexiones HTTPS duren más del tiempo necesario para recibir las solicitudes y responder.

La duración de la conexión MQTT depende de la característica de autenticación que utilice. La siguiente tabla muestra la duración máxima de la conexión en condiciones ideales para cada característica.


**Duración de la conexión MQTT por característica de autenticación**  

|  Característica  |  Duración máxima\$1  | 
| --- | --- | 
|  Certificado de cliente X.509  |  De 1 a 2 semanas  | 
|  Autenticación personalizada  |  De 1 a 2 semanas  | 
|  Signature Version 4  |  Hasta 24 horas  | 

\$1 No garantizado

Con los certificados X.509 y la autenticación personalizada, la duración de la conexión no tiene un límite estricto, pero puede durar incluso solo unos minutos. Las interrupciones en la conexión pueden producirse por diversos motivos. A continuación, se presentan algunos de los casos más comunes.
+ Interrupciones en la disponibilidad de la conexión wifi
+ Interrupciones de conexión del proveedor de servicios de Internet (ISP)
+ Parches de servicio
+ Implementaciones de servicios
+ Escalado automático de servicios
+ Host de servicio no disponible
+ Problemas y actualizaciones del equilibrador de carga
+ Errores del cliente

Los dispositivos deben implementar estrategias para detectar las desconexiones y volver a conectarse. Para obtener información sobre los eventos de desconexión y saber cómo gestionarlos, consulte[Eventos de conexión/desconexión](life-cycle-events.md#connect-disconnect) en [Eventos del ciclo de vida](life-cycle-events.md).