Maximale lengte van credentials (gebruikersnaam, wachtwoord, clientid) in MQTT v3.1.1
Het CONNECT pakket
Het MQTT CONNECT Controle pakket bevat altijd een payload. Het is het eerste pakket dat de client naar de server moet sturen nadat de verbinding tot stand is gebracht.
Het kan maar één keer door de client verzonden worden, als een tweede CONNECT pakket wordt verzonden, moet de server (broker) het als een protocol schending behandelen en de verbinding met de client verbreken.
De payload kan verschillende velden bevatten:
- unieke klantidentificatie (clientid) - altijd aanwezig
- zal onderwerp
- zal bericht
- gebruikersnaam
- wachtwoord (vereist dat gebruikersnaam ook aanwezig is!)
De clientid is verplicht, de andere velden zijn optioneel. De aanwezigheid van de optionele velden wordt bepaald door vlaggen in de header.
Schermafbeelding: OASIS Open MQTT v3.1.1 spec
Grenzen
Hier zijn de limieten die moeten worden ondersteund door makelaars die aan de regels voldoen:
- clientid: 23 UTF-8 gecodeerde bytes
- gebruikersnaam max. 655535 bytes na codering (UTF-8 gecodeerd)
- wachtwoord: 0 tot 65535 bytes binaire gegevens
- berichtlimiet grootte: 268435455 bytes
De volgende tekens voor de client id zijn vereist ondersteund te worden door elke broker die voldoet aan de MQTT v3.1.1 spec:
0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ
Andere tekens en langere client-id's kunnen optioneel door de broker worden ondersteund.
23 tekens is genoeg. Denk eraan, dit zijn geen bits, maar tekens. Als je basis58 codering, bijvoorbeeld, krijg je 58^23 combinaties ~ 3,62E+40 ~ 36211277946678500000000000000000000 combinaties. Als je dat niet doet - dan nog meer.
Optioneel kunnen clientid's met een lengte van nul bytes door de broker worden ondersteund. In dat geval moet de broker een unieke clientid aan de client toekennen. Niet alle brokers ondersteunen dit ("KUNNEN" volgens de specificatie).
De gebruikersnaam moet een UTF-8 gecodeerde string zijn. Het wachtwoord kan een binair gegeven zijn.
Het bericht kan ook uit binaire gegevens bestaan.
Toenemende Grenzen
Om de limiet van clientid in VerneMQ te verhogen, kunt u een optie instellen, max_client_id_size:
https://docs.vernemq.com/configuration/nonstandard
staat hij standaard op 23.
Klant ID moet uniek zijn
In MQTT moeten clients normaal gezien verschillende clientids hebben, zelfs als ze verschillende gebruikersnamen hebben.
Als twee clients hetzelfde clientid hebben, zullen ze terechtkomen in een ping-pong van verbind-disconnect pogingen, aangezien de broker gewoonlijk geen verbindingen toestaat voor twee clients met hetzelfde clientid.
(Ik geloof dat VerneMQ deze optie heeft, maar ik geloof ook dat ze deprecated is; in ieder geval is het beter om er niet mee te ontwerpen, om compatibel te blijven met andere brokers).
Ref
- http://docs.oasis-open.org/mqtt/mqtt/v3.1.1/mqtt-v3.1.1.pdf
- zie punt 1.5.3 voor beperkingen op generieke UTF-8 gecodeerde tekenreeksen, die van toepassing zijn op de gebruikersnaam