Lunghezza massima delle credenziali (username, password, clientid) in MQTT v3.1.1

Il pacchetto CONNECT

Il pacchetto MQTT CONNECT Control contiene sempre un carico utile. È il primo pacchetto che il client deve inviare al server dopo che la connessione è stata stabilita.

Può essere inviato solo una volta dal client, se viene inviato un secondo pacchetto CONNECT, il server (broker) deve trattarlo come una violazione del protocollo e disconnettere il client.

Il carico utile può contenere diversi campi:

  • identificatore unico del cliente (clientid) - sempre presente
  • argomento della volontà
  • messaggio di volontà
  • nome utente
  • password (richiede che sia presente anche il nome utente!)

Il clientid è richiesto, gli altri campi sono opzionali. La presenza dei campi opzionali è determinata dai flag nell'intestazione.

immagine

Schermata: OASIS Open MQTT v3.1.1 spec

Limiti

Ecco i limiti che dovrebbero essere supportati dai broker conformi:

  • clientid: 23 byte codificati UTF-8
  • nome utente max. 655535 byte dopo la codifica (codifica UTF-8)
  • password: da 0 a 65535 byte di dati binari
  • dimensione limite del messaggio: 268435455 byte

I seguenti caratteri per l'id del cliente sono richiesto per essere supportato da qualsiasi broker che soddisfi le specifiche MQTT v3.1.1:

0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ

Altri caratteri e id di clienti più lunghi possono essere supportati opzionalmente dal broker.

23 caratteri sono molti. Ricordate, questi non sono bit, ma caratteri. Se usate base58 codifica, per esempio, si ottengono 58^23 combinazioni ~ 3,62E+40 ~ 36211277946678500000000000000000000000000 combinazioni. Se non lo fai - allora ancora di più.

Opzionalmente i clientid con lunghezza di zero byte possono essere supportati dal broker. In questo caso, il broker deve assegnare una clientid unica al client. Non tutti i broker supportano questo ("MAY" come da specifica).

Il nome utente deve essere una stringa codificata UTF-8. La password può essere un dato binario.

Il messaggio può anche essere costituito da dati binari.

 

Aumentare i limiti

Per aumentare il limite di clientid in VerneMQ, è possibile impostare un'opzione, max_client_id_size:

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

è predefinito a 23.

L'ID del cliente deve essere unico

In MQTT normalmente i client dovrebbero avere clientid distinti, anche se hanno nomi utente diversi.

Se due client condividono l'id del client, finiranno in un ping-pong di tentativi di connessione-disconnessione, poiché il broker di solito non permette connessioni per due client con lo stesso clientid.

(Credo che VerneMQ abbia questa opzione, ma credo anche che sia deprecata; in ogni caso è meglio non progettare con essa in mente, per rimanere compatibili con altri broker).

Rif