Longueur maximale des informations d'identification (nom d'utilisateur, mot de passe, clientid) dans MQTT v3.1.1
Le paquet CONNECT
Le paquet de contrôle MQTT CONNECT contient toujours une charge utile. Il s'agit du premier paquet que le client doit envoyer au serveur après l'établissement de la connexion.
Il ne peut être envoyé qu'une seule fois par le client. Si un deuxième paquet CONNECT est envoyé, le serveur (broker) doit le traiter comme une violation du protocole et déconnecter le client.
La charge utile peut contenir plusieurs champs différents :
- identifiant unique du client (clientid) - toujours présent
- sera sujet
- message de volonté
- nom d'utilisateur
- mot de passe (le nom d'utilisateur doit également être présent !)
Le clientid est obligatoire, les autres champs sont facultatifs. La présence des champs facultatifs est déterminée par des drapeaux dans l'en-tête.
Capture d'écran : Spécification OASIS Open MQTT v3.1.1
Limites
Voici les limites qui devraient être supportées par les courtiers conformes :
- clientid : 23 octets codés UTF-8
- nom d'utilisateur max. 655535 octets après encodage (encodé en UTF-8)
- mot de passe : 0 à 65535 octets de données binaires
- taille limite du message : 268435455 octets
Les caractères suivants pour l'identifiant du client sont requis pour être pris en charge par tout courtier répondant à la spécification MQTT v3.1.1 :
0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ
D'autres caractères et des identifiants clients plus longs peuvent être pris en charge de manière facultative par le courtier.
23 caractères, c'est amplement suffisant. N'oubliez pas qu'il ne s'agit pas de bits, mais de caractères. Si vous utilisez base58 En codant, par exemple, vous obtenez 58^23 combinaisons ~ 3,62E+40 ~ 3621127794667850000000000000000000000 combinaisons. Si vous n'en avez pas - alors encore plus.
Le courtier peut également prendre en charge les clientid d'une longueur de zéro octet. Dans ce cas, le courtier doit attribuer un clientid unique au client. Tous les courtiers ne prennent pas en charge cette option ("MAY" selon la spécification).
Le nom d'utilisateur doit être une chaîne de caractères codée en UTF-8. Le mot de passe peut être une donnée binaire.
Le message peut également être constitué de données binaires.
Augmentation des limites
Afin d'augmenter la limite de clientid dans VerneMQ, vous pouvez définir une option, max_client_id_size :
https://docs.vernemq.com/configuration/nonstandard
la valeur par défaut est de 23.
L'ID du client doit être unique
Dans MQTT, les clients doivent normalement avoir des clientids distincts, même s'ils ont des noms d'utilisateur différents.
Si deux clients partagent le même identifiant, ils se retrouveront dans un ping-pong de tentatives de connexion-déconnexion, car le courtier n'autorise généralement pas les connexions pour deux clients ayant le même identifiant.
(Je crois que VerneMQ dispose de cette option, mais je crois aussi qu'elle est dépréciée ; dans tous les cas, il est préférable de ne pas la concevoir dans cette optique, pour rester compatible avec les autres brokers).
Réf.
- http://docs.oasis-open.org/mqtt/mqtt/v3.1.1/mqtt-v3.1.1.pdf
- voir la section 1.5.3 pour les limites sur les chaînes génériques codées UTF-8, qui s'appliquent au nom d'utilisateur.