HomeBlog MQTT-Protokollformat verstehen

MQTT Protokoll Packet verstehen und zuverlässige Anwendungen bauen

von Ponlakshmi


MQTT Protocol Packet Format & Build Applications

MQTT Protocol (Message Queuing Telemetry Transport) ist ein TCP-basiertes Messaging-Protokoll, das speziell für die Übertragung von Telemetriedaten von Kantengeräten zu einem zentralen Server. Es folgt einem Modell Publish/Subscribe, das MQTT ermöglicht Kunden, die Daten über einen zentralen MQTT-Broker effizient senden und empfangen. Seit seiner Erfindung im Jahr 1999 ist MQTT das am weitesten angenommene Protokoll für IoT-Implementierungen aufgrund seine Leichtigkeit und Zuverlässigkeit. Andererseits erweitert MQTT-SN (Sensor Network) das Protokoll für Rand oder periphere Einrichtungen, die Kommunikation zwischen Geräten und Gateways über Low-Power-Konnektivitätsmedien wie Bluetooth. Trotz seiner Potential, MQTT-SN hat nicht weit verbreitete Adoption wie das Kern-MQTT-Protokoll gewonnen. Während viele MQTT Durchführungen sind auf dem Markt leicht verfügbar, Ein tieferes Verständnis der zugrunde liegenden Konzepte ist entscheidend. Dieses Wissen ermöglicht es Ihnen zu nutzen Diese Implementierungen ermöglichen es Ihnen, leistungsstarke, fehlertolerante IoT-Anwendungen aufzubauen.

MQTT Protokoll Pakettypen

Die Interaktion zwischen MQTT-Geräten und dem MQTT-Server wird durch einen Satz von vordefinierte Nachrichten. Einfachheitsgemäß folgen sowohl ausgehende als auch eingehende Nachrichten dem gleichen Standard. Auf hohem Niveau, MQTT Protokoll Pakete können in zwei Arten für besseres Verständnis kategorisiert werden


  • Datenpaket- Ja. Die Nachrichten, die die tatsächlichen Daten zwischen den Einheiten tragen.
  • Kontrollpakete- Ja. Die Nachrichten, die helfen, die Verbindungen und dieNachrichten nach MQTT QoS Gewebe.

Jenseits der MQTT-Protokoll-Pakete gibt es einige andere Spezifikationen, die darauf achten, wie zu handhaben Sitzungen, die letzte Nachricht und die Abschaltungen zu erhalten, die auch in diesem Artikel abgedeckt werden, da es sehr wichtig zu verstehen, dass für die MQTT-Implementierung.

MQTT-Protokoll Datenpakete

Datenpakete helfen, die tatsächlichen Daten zwischenMQTT Brokerund der MQTT Client. Veröffentlichen und Abonnieren sind die wichtigsten Datenpakete, in denen der MQTT-Client seine Absichten sendet, einen thematisch und der Server veröffentlicht die Daten basierend auf der Anforderung. Wir möchten das Connect-Paket zusätzlich zu dieser Liste hinzufügen, da ein Datensatz als Teil davon gesendet wird.


  • In den Warenkorb- MQTT Publish Paket enthält das Thema, zu dem die Daten benötigt werden veröffentlicht werden, die tatsächlichen Daten und einige Kontrollparameter wie die Anforderung der Nachrichtenspeicherung und Qualität von Service.
  • Anmeldung- MQTT. Abonnieren ist eine der wichtigen Nachrichten aus dem Client an den Server, der die Liste derMQT Alle Filter anzeigen, der Kunde interessiert sich für das Zuhören. Das Paket enthält einen Fixed Header, Variable Header & Payload.
  • )- MQTT Connect Packet ist mehr von einem MQTT-Steuerpaket, aber hält Daten zum LastWill und Retain. Darüber hinaus sendet es einen eindeutigen Identifier, MQTT Authentication details, und Saubere Sitzung die Flagge zu sagen, ob die Sitzung bestehen muss oder nicht. Dieses Paket wird vom Client an dasGehostet von Cloud MQTT Server.

MQT Packet Format Struktur für alle oben drei Nachrichten enthält Fixed Header, Variable Header und Payload.

MQTT Protokoll Control Packs

Kontrollpakete sind entscheidend für den Erfolg der Datenübertragung im MQTT-Protokoll. Ein klares Verständnis Kontrollpakete undMQTT Servicequalität (QoS) Werteist für eine effektive Umsetzung unerlässlich. Während die meisten Kontrollpakete je nach MQTT-Client oder Server an der Kernumsetzungsschicht verwaltet werden verwendet, Aufgaben wie das Speichern von Lieferzuständen, das Handling von Anerkennungen und das Weiterleiten von Nachrichten müssen verwaltet werden auf Anwendungsebene.


  • INHALT– Dieses Paket erkennt die Verbindungsanforderung an und enthält nur die Fester Header im MQTT 3. MQTT 5 hat Optionen, um einen Grundcode für die Ablehnung der Verbindung zu senden. CONNACK auf erfolgreicher Verbindung gesendet beinhaltet die Offenlegung der Server-Funktionen wie die Verfügbarkeit von behalten, Wild Card Abonnements, gemeinsame Abonnements, Abonnement-Identifier und maximale QoS Unterstützt, maximal Paketgröße und Server halten lebendig für den Client, um effizient zu kommunizieren.
  • SUBSCRIBE- MQTT. Abonnieren ist eine der wichtigen Nachrichten aus dem Client an den Server, der die Liste der MQTT Topic-Filter angibt, interessiert sich der Client für das Zuhören bis. Das Paket enthält einen Fixed Header, einen Variable Header & einen Payload.
  • SUBACK– Dieses Paket wird in Reaktion auf die Abonnement-Nachricht von der MQT Client für denMQT Das ist mein Freund. Dieses Paket enthält Fixed & Variable Headers und Payload.
  • UNSUBSCRIBE– Dieses Paket wird vom Client an den Server gesendet, um anweisen zu können der Server zum Stoppen des Sendens weiterer Nachrichten für ein bestimmtes Thema. Die Nachricht enthält einen Fixed Header, Variable Header und Payload.
  • UNSUBACK– Nach Eingang des Abmeldens für einen Themenfilter eines Clients, der Server sollte diesen Themenfilter aus der Liste der Themenfilter entfernen, die er als Abonnements für den Klienten. Das Unsuback enthält Fixed Header, Variable Header und Payload.
  • DISCONNECT– EinmalMQT Plattformerhält diese Anfrage vom MQTT Device, es sollte den Client trennen und Schließen Sie die Verbindung. Der während der Verbindung eingestellte, saubere Sitzungsparameter bestimmt, ob der Client zukünftige Abonnement-Nachrichten werden gespeichert oder verworfen. Der WILL Nachricht sollte entfernt werden. Das Paket enthält nur den Fixed Header. In MQTT 5 kann der Server auch senden DISCONNECT an einen Client, wenn dieser Client nicht dem Protokoll entspricht.
  • VERFAHREN– Dieses Paket kann vom Client oder Server als Quittung gesendet werden das ÖFFENTLICHE Paket, das es auf QoS Level 1 erhalten hat. Wenn die PUBACK nicht empfangen wird, sollte der Absender die Nachricht mit dem DUP-Flag beim Resending. Der Absender kann die Nachricht nach dem Empfang aus der Warteschlange entfernen diese Anerkennung. Das Paket enthält einen Fixed Header & Variable Header.
  • PUBREC, PUBREL & PUBCOMP- Ja.MQTT QoS Ebene 2gewährleistet genau eine Lieferung von MQTT PUBLISH Paket. Diese Steuerpakete werden in einer vordefinierten Serie ausgetauscht, um diese QoS Level 2 Lieferung zu gewährleisten. Diese Serie von Paketflüssen folgen sowohl der Client als auch der Server. Wenn der Empfänger ein ÖFFENTLICHEs Paket erhält, es sendet eine PUBREC als Anerkennung. Der Absender des ÖFFENTLICHEn Pakets muss nun ein PUBREL-Paket in Antwort auf PUBREC. Der Empfänger sendet PUBCOMP als Antwort auf PUBREC. Alle diese Steuerpakete enthalten Fester und variabler Header.
  • PINGREQ, PINGRESP- Ja. Diese Pakete dienen dazu, die Verbindung lebendig zu halten und Arbeiten basierend auf dem MQTT Keep Alive Set während der Connect Request. Es ist die Verantwortung des MQTT Client, um das PingREQ-Paket in einem Intervall zu senden, um am Leben zu bleiben. DieStandard MQTT Serversollte zurückschicken PingRESP-Paket als Bestätigung. Der Server trennt die Client-Verbindung, wenn die PingReq nicht empfangen wird. Im Allgemeinen eine Wartezeit von 2x wird die lebendige Zeit vor der Trennung betrachtet. Diese Pakete haben nur einen Fixed Header.

MQTT Protokoll Paket Format & Größen

MQT Pakete können in drei Teile unterteilt werden, nämlich Fixed Header, Variable Header und Nutzlast. Wenn Sie Sie beginnen Ihre Umsetzung über eineStandard MQTT Clients, dann werden diese Informationen möglicherweise nicht viel benötigt. Um jedoch zu verstehen, wie man Verwenden Sie die richtigen APIs, um den Client zu verwenden, können Sie diese Hand-on. Das feste Headerfeld umfasst die Steuerung Fahnen; der variable Header enthält die Paketlänge; die Nutzlast ist gleich der in der variabler Header. Die Mindestgröße eines Paketlängenfeldes beträgt 1 Byte, was für Nachrichten kleiner als 127 ist Bytes.


Die minimale Paketgröße beträgt 2 Bytes, die nur das Steuerfeld und ein einzelnes Paketlängenfeld aufweist, während die maximale Paketgröße beträgt 256 MB. Kleinere Pakete unter 127 Bytes haben ein 1-Byte-Paketlängenfeld. Die Pakete mit mehr als 127 und weniger als 16383 verwenden 2 Bytes und so weiter. 7-Bit, die mit dem 8. Bit verwendet werden, ist das Fortsetzungsbit.


MQTT Protocol packet size - Explained

Kontrollfeld

Das 8-Bit-Steuerfeld ist das Hauptbyte des 2-Byte-Festkopfs. Es ist in zwei geteilt 4 Bit Felder und enthält alle Protokollbefehle und Antworten. Die ersten vier wichtigsten Bits sind der Befehl oder Nachrichtentypfeld, während der Rest Als Steuerfahnen werden 4 Bit verwendet.

MQTT control field structure

Flaggen kontrollieren

Während es 16 mögliche Fahnen gibt, werden noch eine begrenzte Anzahl von Bits verwendet. Die Publish-Nachricht macht das Beste Verwendung Diese Flaggen.


  • Das Duplikat-Flag wird verwendet, wenn eine Nachricht für QoS 1 oder 2 aufgehoben wird.
  • Die QoS-Flags werden verwendet, um einen QoS-Wert von 0,1,2 anzuzeigen.
  • DieMQT!Flag wird auch beim Veröffentlichen einer Nachricht verwendet.

Restlänge

Die Restlänge ist die Anzahl der im aktuellen Paket verbliebenen Bytes, einschließlich variabler Header und Nutzdaten. Die Restlänge schließt die verwendeten Bytes aus, um die Restlänge zu kodieren. Die verbleibende Länge ist codiert mit einem variablen Längencodierungsschema, das ein Byte für Werte nach oben verwendet bis 127. Die mindestens sieben wichtige Bits jeder Byte kodieren die Daten, und das wichtigste Bit wird verwendet, um anzuzeigen, dass es gibt folgende Bytes in der Darstellung. Somit kodiert jeder Byte 128 Werte und ein "Fortsetzungsbit". Die größte Zahl von Bytes in den übrigen Längenfeld ist vier.


MQTT Packet Format Remaining length in Fixed Header

Variabler Header

Einige Arten von MQTT-Steuerpaketen haben eine variable Header-Komponente. Variable Längenkopffelder sind nicht immer in MQTT vorhanden Nachrichten. Einige MQTT-Nachrichtentypen oder Befehle benötigen dieses Feld, um zusätzliche Steuerinformationen zu tragen. Es bleibt zwischen der Fixed Header und die Payload. Der Variable Header wird je nach Pakettyp variieren.

MQT Paketformat Beispiel: Nachrichtenstruktur verbinden

Als Beispiel, werfen wir einen Blick auf die Details derMQTT Client CONNECTNachricht.


Nach dem Aufbau der TCP-Niveauverbindung mit einer MQTT-Plattform muss das erste Paket ein CONNECT Paket. Der KONNEKT Paket muss nur einmal über die Netzwerkverbindung gesendet werden. Das zweite CONNECT-Paket, das vom MQTT gesendet wird Client wird ignoriert und getrennt.

Feste Kopfzeile


MQTT Packet - fixed header

Variabler Header

Der variable Header sitzt neben dem Fixed Header und hat vier große Teile als Teil des Headers. Sie sind die Protokollnamen Bytes, Protokollebene, verbinden Flaggen und halten-alive. Jeder dieser Teile hat einen vorgegebenen durchte Größe und die Reihenfolge, in der sie vorhanden sind.


Name des Protokolls

Diese Bytes speichern den Protokollnamen. Der Protokollname wird alsMQTin 4 Bytes. Alle anderen Zeichen in einem dieser Felder führen zum Abschalten des Clients vom Server.


MQTT Packet - Variable Header - protocol name bytes

Protokollebene

Dies definiert die Protokollversion. Die Protokollebene für MQTT Broker beträgt 4 für die MQTT 3.1/3.1.1 und 5 für dieMQTT 5 Version. Anderes senden Werte führen zum Abschalten. Der MQTT Broker kann den Client auch auf der von ihm unterstützten Version abschalten.


MQTT protocol Packet version level Explained

Flaggen verbinden

Dies ist ein einziges Byte-Feld und stellt das Vorhandensein oder Fehlen von Daten in der Nutzlast fürMQTT Authentifizierung (Username und Passwort vergessen?, Will message. Die anderen Felder wie Will halten und saubere Sitzung wird entweder wahr oder falsch und QoS-Feld gibt die QoS-Ebene an, die für WILL Message verfolgt werden soll.


MQTT Protocol format - connect flags Explained

MQT Lebewohl

MQT Lebewesen ist ein 2 Byte-Paket, und die maximale Zeit, die Sie für den Halt am Leben einstellen können, beträgt 65535 Sekunden (18 Stunden). Es ist jedoch besser, es etwa 30 Sekunden oder eine Minute auf Grundlage Ihrer Anforderungen zu halten. Der MQTT Client sollte Steuerpaket (PINGREQ) in einem Intervall senden, das den Wert des definierten Haltens nicht überschreitet Alive. Der Rest Der Alive-Wert hängt von der Dauer der Übertragung des Steuerpakets durch den Client ab.


keep alive

MQTT Protokoll Payload Format

Die Nutzlast enthält den MQTT Client Anmeldeinformationen (Benutzername und Passwort). Die Client-ID muss für jeden Client einzigartig sein. Der Broker reagiert mit einer einzigartigen Client-ID für jeden Client, wenn der Client keine Client-ID angibt. wenn Sie senden eine Client-ID in einem leeren Feld, der Kunde wird zurückgewiesen. Die Felder müssen in folgender Reihenfolge ausgefüllt werden: Client ID, Will Topic,Ich will nicht, Benutzername und Passwort.


Alle Felder im Paket Connect sollten im String-Format sein. nach Festlegung des TCP-Pegels Verbindung, der Client sollte den MQTT Connect senden innerhalb einer angemessenen Zeit. Wenn das Verbindungspaket nicht empfangen wird, wird der MQTT Broker den Client abschalten. Nach erfolgreiche Validierung, der Broker wird entweder mit einem CONNACK-Paket mit null Nutzlast oder mit der Abschaltung reagieren, wenn einige Fehler in Verbindung. Nach erfolgreicher Verbindung, der Broker wird den neuen Client in die angeschlossene Liste hinzufügen, und die Sitzung wird für die Datenpakete sowie das Leben erhalten.


Wenn Sie von Grund auf bauen, folgen Sie derMQTT Client Developer Guideund die Spezifikationen, um es besser zu verstehen und umzusetzen.

MQTT Implementierung - verwandte Lesung

Für eine sehr erfolgreiche MQTT-Anwendung, Lesen Sie zusätzlichen Artikel über das MQTT-Protokoll.


Bereit zur Verwendung von MQTT-Anwendungen

Starten Sie Ihre IoT-Implementierung

Sicherer MQTT Broker mit eingebauten Armaturenbrettern - On premise & Cloud