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.
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
- http://docs.oasis-open.org/mqtt/mqtt/v3.1.1/mqtt-v3.1.1.pdf
- vedere la sezione 1.5.3 per i limiti sulle stringhe generiche codificate UTF-8, che si applicano al nome utente