Kommunikation via MQTT

Das MQTT Protokoll

Bei MQTT (Message Queuing Telemetry Transport) shandelt es sich um ein Netzwerkprotokoll, das vorwiegend für IoT (Internet of Things) Anwendungen eingesetzt wird.

MQTT ist ein offenes Protokoll, das von der OASIS (Organization for the Advancement of Structured Information Standards) standardisiert wird (Link zu OASIS MQTT).

Eingenschaften des MQTT Protokolls

MQTT basiert entfernt auf dem Client-Server-Modell, wobei der Server bei MQTT als Broker bezeichnet wird. Häufig spricht man bei MQTT aber vom Publish-Subscriber-Modell, was den Grundprinzipien von MQTT eher entspricht.

MQTT ist üblicherweise TCP/IP-basiert, weil so auf vorhandene Netz-Infrastrukturen zurückgegriffen werden kann.

Es gibt auch eine spezielle Spezifikation für nicht TCP-IP basierte Netz-Infrastrukturen.

Der Broker ist der zentrale Anlaufpunkt und Koordinator der Kommunikation mit den Clients. Eine direkte Kommunikation zwischen den Clients ist nicht möglich. Eine Speicherung des Kommunikationsverlaufs erfolgt (außer bei Retained-Messages) nicht.

MQTT Nachrichtenformat

Eine MQTT-Nachricht (MQTT-message) besteht aus einem fixen Header (2 Byte), einer optional vorhandenen Header-Extension (1-4 Byte) und einer optional vorhandenem Inhalt (Payload).
Häufig wird der Inhalt einer Nachricht im MQTT-Netz in der Länge beschränkt.

MQTT Transaktionen (zeitlicher Ablauf)

Die Kommunikation via MQTT läuft immer zwischen Client und Broker. Direkte Kommunikation zwischen den Clients gibt es nicht. Die Clients wissen auch nichts von der Existenz anderer Clients.
Der Broker ist also der zentrale Anlaufpunkt in einem Netz aus MQTT Clients.

Um eine Kommunikation zu beginnen, muss sich der Client zunächst mit dem Broker verbinden (CONNECT).
Der Broker bestätigt die Verbindung mit dem Client (CONNACK)

Wenn der Client mit dem Broker verbunden ist, kann der Client Daten veröffentlichen (PUBLISH) oder anfordern (SUBSCRIBE).
Das Veröffentlichen (Senden) und das Anfordern (Empfangen) von Daten läuft anonym über Topics (Themengebiete), die vom Broker strukturiert und verwaltet werden.

Die Verbindung zum Broker kann vom Client beendet werden (DISCONNECT).

MQTT Kommunikation: zeitlicher Ablauf

Der MQTT Broker und seine Aufgaben

Der Broker ist der zentrale Dreh- und Angelpunkt jeglicher Kommunikation im MQTT-Netz.
Er empfängt die Daten, die die Clients veröffentlichen und leitet sie an die Subscriber weiter.
Er organisiert die Daten nach Topics. Die Struktur dieser Topics ist hierarchisch, ähnlich wie bei einem Linux-Filesystem, aufgebaut.

MQTT Clients

Um im MQTT-Netz kommunizieren zu können, muss ein Client mit dem Broker verbunden sein. Dazu sendet der Client eine CONNECT Anfrage, die vom Broker mit einem CONNACK bestätigt wird. Bei der Kommunikation via MQTT handelt es sich also um eine verbindungsorientierte Kommunikation.

Clients können niemals direkt miteinander kommunizieren. Die Kommunikation verläuft immer über den Broker. Clients haben auch keinerlei Kenntnis von der Existenz anderer Clients. Die Kommunikation verläuft also anonym.

Es gibt zwei Arten zu kommunizieren:

PUBLISH

Clients können Daten an den Broker senden (PUBLISH). Dazu senden sie die Daten unter der Angabe eines Topics an den Broker.

SUBSCRIBE

Clients können Daten vom Broker empfangen (SUBSCRIBE). Dazu müssen sie ein Topic beim Broker "abonnieren".
Sobald irgendein Client unter diesem Topic neue Daten veröffentlicht, sorgt der Broker dafür, dass diese an alle Abonnenten (Subscriber) des Topics weitergeleitet werden.

MQTT Zusatz-Features

Quality of Service (QoS)

MQTT bietet drei QoS-Level für die Nachrichtenübertragung an.

0

"At most once"
Die Nachricht wird ein Mal gesendet, jedoch wird der Empfang der Nachricht nicht bestätigt. Es ist also nicht sichergestellt, dass die Nachricht auch beim Empfänger ankommt.

1

"At least once"
Der Empfang der Nachricht wird vom Broker an den Client bestätigt. Es ist jedoch möglich, dass die Nachricht den Empfänger mehrfach erreicht. Es wird aber sichergestellt, dass die Nachricht den Empfänger mindestens ein mal erreicht.

2

"Exactly once"
Durch eine mehrstufige Nachrichtenbestätigung wird sichergestellt, dass die Nachricht den Empfänger genau ein Mal erreicht.

RETAIN-Flag

Eine Nachricht mit einem RETAIN-Flag wird vom Broker zwischengespeichert, bis sie von einer neuen Nachricht überschrieben wird. Ein Client, der das Topic danach abonniert oder sich zu spät mit dem Broker verbindet, erhält diese letzte Nachricht trotzdem.

LAST-WILL

Clients können eine vordefinierte Nachricht veröffentlichen, falls die Verbindung zum Broker unterbrochen wird.