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
).
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" |
1: |
"At least once" |
2: |
"Exactly once" |
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.