Maximale Länge der Anmeldeinformationen (Benutzername, Passwort, clientid) in MQTT v3.1.1

Das CONNECT-Paket

Das MQTT CONNECT Control-Paket enthält immer eine Nutzlast. Es ist das erste Paket, das der Client nach dem Aufbau der Verbindung an den Server senden muss.

Es kann nur einmal vom Client gesendet werden. Wenn ein zweites CONNECT-Paket gesendet wird, muss der Server (Broker) es als Protokollverletzung behandeln und die Verbindung zum Client trennen.

Die Nutzlast kann mehrere verschiedene Felder enthalten:

  • eindeutige Kundenkennung (clientid) - immer vorhanden
  • wird Thema
  • wird Nachricht
  • Nutzername
  • Passwort (auch der Benutzername muss vorhanden sein!)

Die clientid ist erforderlich, die anderen Felder sind optional. Das Vorhandensein der optionalen Felder wird durch Flags im Header bestimmt.

Bild

Bildschirmfoto: OASIS Open MQTT v3.1.1 Spezifikation

Grenzwerte

Hier sind die Grenzen, die von konformen Brokern unterstützt werden sollten:

  • clientid: 23 UTF-8 kodierte Bytes
  • Nutzername max. 655535 Bytes nach der Kodierung (UTF-8 kodiert)
  • Kennwort: 0 bis 65535 Byte Binärdaten
  • Größe der Nachrichtengrenze: 268435455 Bytes

Die folgenden Zeichen für die Client-ID sind erforderlich von jedem Broker unterstützt werden, der die MQTT v3.1.1 Spezifikation erfüllt:

0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ

Andere Zeichen und längere Client-IDs können optional vom Broker unterstützt werden.

23 Zeichen sind genug. Denken Sie daran, dass es sich nicht um Bits, sondern um Zeichen handelt. Wenn Sie Basis58 Kodierung erhält man zum Beispiel 58^23 Kombinationen ~ 3,62E+40 ~ 362112779466785000000000000000000000000000000 Kombinationen. Wenn Sie das nicht tun - dann sogar noch mehr.

Optional kann der Broker auch Clientid's mit einer Länge von null Bytes unterstützen. In diesem Fall muss der Broker dem Client eine eindeutige Clientid zuweisen. Nicht alle Makler unterstützen dies ("MAY" laut Spezifikation).

Der Benutzername muss eine UTF-8-kodierte Zeichenkette sein. Das Passwort kann aus binären Daten bestehen.

Die Nachricht kann auch aus binären Daten bestehen.

 

Ansteigende Grenzwerte

Um die Clientid-Grenze in VerneMQ zu erhöhen, können Sie eine Option, max_client_id_size, setzen:

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

ist sie standardmäßig auf 23 eingestellt.

Die Kunden-ID sollte eindeutig sein

In MQTT sollten Clients normalerweise unterschiedliche Clientids haben, auch wenn sie unterschiedliche Benutzernamen haben.

Wenn zwei Clients die gleiche Client-ID haben, geraten sie in ein Ping-Pong aus Verbindungsaufbau- und -abbauversuchen, da der Broker normalerweise keine Verbindungen für zwei Clients mit der gleichen Client-ID zulässt.

(Ich glaube, VerneMQ hat diese Option, aber ich glaube auch, dass sie veraltet ist; auf jeden Fall ist es besser, sie nicht zu berücksichtigen, um mit anderen Brokern kompatibel zu bleiben).

Ref