Longitud máxima de las credenciales (nombre de usuario, contraseña, clientid) en MQTT v3.1.1

El paquete CONNECT

El paquete MQTT CONNECT Control siempre contiene una carga útil. Es el primer paquete, que el cliente debe enviar al servidor después de establecer la conexión.

Sólo puede ser enviado una vez por el cliente, si se envía un segundo paquete CONNECT, el servidor (broker) debe procesarlo como una violación del protocolo y desconectar al cliente.

La carga útil puede contener varios campos diferentes:

  • identificador único del cliente (clientid) - siempre presente
  • tema de la voluntad
  • mensaje de voluntad
  • nombre de usuario
  • contraseña (requiere que el nombre de usuario también esté presente)

El clientid es obligatorio, los demás campos son opcionales. La presencia de los campos opcionales se determina mediante banderas en la cabecera.

imagen

Captura de pantalla: Especificaciones de OASIS Open MQTT v3.1.1

Límites

Estos son los límites que deben soportar los corredores que cumplen con la normativa:

  • clientid: 23 bytes codificados en UTF-8
  • nombre de usuario máx. 655535 bytes después de la codificación (codificación UTF-8)
  • contraseña: de 0 a 65535 bytes de datos binarios
  • tamaño límite del mensaje: 268435455 bytes

Los siguientes caracteres para la identificación del cliente son requerido para ser soportado por cualquier broker que cumpla con la especificación MQTT v3.1.1:

0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ

Otros caracteres e ids de cliente más largos pueden ser soportados opcionalmente por el broker.

23 caracteres es suficiente. Recuerde que no se trata de bits, sino de caracteres. Si utiliza base58 codificación, por ejemplo, se obtienen 58^23 combinaciones ~ 3,62E+40 ~ 362112779466785000000000000000000000000 combinaciones. Si no lo hace - entonces aún más.

Opcionalmente, el broker puede admitir clientid's con una longitud de cero bytes. En este caso, el broker debe asignar un clientid único al cliente. No todos los brokers lo soportan ("MAY" según la especificación).

El nombre de usuario debe ser una cadena codificada en UTF-8. La contraseña puede ser un dato binario.

El mensaje también puede ser un dato binario.

 

Aumento de los límites

Para aumentar el límite de clientid en VerneMQ, puede establecer una opción, max_client_id_size:

https://docs.vernemq.com/configuration/nonstandard

se pone por defecto en 23.

El ID del cliente debe ser único

En MQTT normalmente los clientes deben tener clientids distintos, incluso si tienen diferentes nombres de usuario.

Si dos clientes comparten el id de cliente, acabarán en un ping-pong de intentos de conexión-desconexión, ya que el broker no suele permitir conexiones para dos clientes con el mismo clientid.

(Creo que VerneMQ tiene esta opción, pero también creo que está obsoleta; en cualquier caso, es mejor no diseñar con ella en mente, para seguir siendo compatible con otros brokers).

Ref