MQTT vs. CoAP — zwei leichte IoT-Protokolle im Vergleich
MQTT und CoAP gelten beide als schlanke IoT-Protokolle, lösen aber verschiedene Probleme: MQTT verteilt Nachrichten über einen Broker per Publish/Subscribe über TCP, CoAP (RFC 7252) bringt REST-Semantik mit GET/PUT/POST auf stark beschränkte Geräte und läuft über UDP. Wer zwischen beiden wählt, entscheidet vor allem über Architektur und Netzwerktyp.
MQTT
MQTT ist eine schlanke, gemeinsame Sprache, mit der Geräte im Internet der Dinge (IoT) Daten austauschen.
CoAP
CoAP ist «HTTP für winzige Geräte»: RESTful über UDP mit 4-Byte-Header.
MQTT
- Standard
- Offener Standard der Standardisierungsorganisation OASIS; Versionen 3.1.1 (2014) und 5.0 (2019), 3.1.1 auch als ISO-Norm (ISO/IEC 20922)
- Transport
- TCP/IP (die zuverlässige Basisverbindung des Internets); für Browser-Anwendungen zusätzlich über WebSocket (eine Dauerverbindung im Webbrowser)
- Standard-Ports
- 1883 (unverschlüsselt), 8883 (verschlüsselt mit TLS); via WebSocket üblich 80/443
- Einordnung
- Anwendungsebene: MQTT setzt auf bestehende Internetverbindungen auf (Fachjargon: OSI-Schicht 7)
- Topologie
- Sternförmig: alle Clients verbinden sich mit einem zentralen Broker
- QoS-Stufen
- 0 (höchstens einmal), 1 (mindestens einmal), 2 (genau einmal)
CoAP
- Voller Name
- Constrained Application Protocol
- Norm / Standard
- IETF RFC 7252 (2014); OBSERVE: RFC 7641; Block-Wise: RFC 7959
- Transport
- UDP (optional TCP/TLS/WebSocket per RFC 8323)
- Ports
- 5683 (CoAP), 5684 (CoAPs, mit DTLS)
- Header-Grösse
- 4 Byte fester Basis-Header (sehr kompakt, binär)
- Kern-Operationen
- GET, POST, PUT, DELETE (RESTful, auf Ressourcen-URIs)
// Wofür sie gemacht sind
MQTT: gut geeignet für
- Viele Geräte, kleine Nachrichten: Ein Broker verteilt mühelos Messwerte von Tausenden Sensoren gleichzeitig.
- Schmale Bandbreite: Der Verwaltungsanteil pro Nachricht (Overhead) ist extrem klein, eine komplette Datennachricht kommt mit wenigen Bytes plus Topic-Name aus, ein Bruchteil eines HTTP-Requests.
- Instabile Verbindungen: Quittungsmechanismen (QoS) und die Abschiedsnachricht Last Will fangen Verbindungsabbrüche sauber ab.
- Entkopplung: Sender und Empfänger kennen sich nicht, dadurch lassen sich neue Abonnenten jederzeit ergänzen, ohne die Sender anzufassen.
- Firewall-freundlich: Der Client (so heisst jedes angeschlossene Gerät oder Programm) baut die Verbindung immer selbst nach aussen zum Broker auf. Auf der Geräteseite muss keine Tür in der Firewall (ein sogenannter Port) von aussen geöffnet werden; erreichbar sein muss nur der Broker.
MQTT: weniger geeignet für
- Harte Echtzeit im Maschinentakt: Wenn jede Millisekunde zählt, etwa bei der Steuerung von Maschinenachsen, sind spezialisierte Maschinen-Netzwerke die richtige Wahl (Fachbegriffe: Feldbusse oder Industrial Ethernet, etwa PROFINET und EtherCAT).
- Grosse Dateien: MQTT ist für kurze Meldungen gebaut, für Firmware-Updates, Bilder oder Videos eignet sich ein Dateitransfer über HTTP oder ein spezialisiertes Protokoll besser.
- Klassisches Frage-Antwort-Muster: Wer gezielt eine Antwort auf eine Anfrage braucht, etwa eine App, die auf Knopfdruck Daten abruft, fährt mit HTTP, der gewohnten Web-Technik, meist einfacher.
- Direktverbindungen ohne Infrastruktur: MQTT braucht immer einen Broker, für eine simple Punkt-zu-Punkt-Verbindung zwischen zwei Geräten ist das zu viel des Guten.
CoAP: gut geeignet für
- Für stark eingeschränkte Geräte mit wenig RAM, Rechenleistung und Batterie, weil der 4-Byte-Header und UDP kaum Ressourcen verbrauchen.
- Für verlustbehaftete Funknetze mit kleiner Bandbreite (z. B. 6LoWPAN), weil CoAP von Grund auf für kleine Pakete und gelegentliche Paketverluste ausgelegt ist.
- Für Web-nahe Architekturen, weil das RESTful-Modell (GET/PUT/POST/DELETE auf URIs) direkt zu HTTP passt und sich per Proxy einfach überbrücken lässt.
- Für ereignisgetriebene Überwachung, weil die OBSERVE-Erweiterung Änderungen aktiv pusht, statt das Gerät ständig abfragen zu lassen – das spart Strom und Funkzeit.
- Für Massen-Geräteverwaltung, weil etablierte Standards wie LwM2M auf CoAP aufsetzen und Firmware-Updates und Konfiguration standardisiert abbilden.
CoAP: weniger geeignet für
- Für die zuverlässige Übertragung grosser Datenmengen (Bilder, Logs, Streams), weil UDP dafür nicht gemacht ist; besser passt hier HTTP über TCP oder MQTT.
- Für stark entkoppelte Ereignis-Verteilung an viele Abnehmer, weil CoAP im Kern Request/Response ist und keinen zentralen Broker hat; besser passt hier MQTT mit Publish/Subscribe.
- Für harte Maschinen-Echtzeit im Millisekunden-Takt, weil CoAP darauf nicht ausgelegt ist; besser passen hier PROFINET oder EtherCAT.
- Für Umgebungen, in denen UDP durch Firewalls oder NAT blockiert wird, weil CoAP dann schlecht durchkommt; besser passt hier ein TCP-basiertes Protokoll oder CoAP über TCP/WebSocket (RFC 8323).
// Wann was?
Nimm MQTT, wenn …
- Nimm MQTT, wenn Daten an mehrere Empfänger verteilt werden sollen: der Broker entkoppelt Sender und Abonnenten, neue Konsumenten kommen ohne Geräteänderung dazu.
- Nimm MQTT für die Cloud-Anbindung: AWS IoT Core, Azure IoT Hub und praktisch jede IoT-Plattform sprechen nativ MQTT, CoAP-Support ist die Ausnahme.
- Nimm MQTT, wenn du zuverlässige Zustellung über TCP mit QoS 1/2 willst und die Geräte genug Ressourcen für eine dauerhafte TCP/TLS-Verbindung haben.
- Nimm MQTT, wenn Werkzeuge und Team-Wissen zählen: Broker, Client-Bibliotheken und Debugging-Tools sind für MQTT deutlich breiter verfügbar.
Nimm CoAP, wenn …
- Nimm CoAP für extrem beschränkte Geräte in 6LoWPAN- oder Thread-Netzen: 4-Byte-Header über UDP, kein TCP-Stack und keine stehende Verbindung nötig.
- Nimm CoAP, wenn Geräte lange schlafen: ohne dauerhafte Verbindung entfällt das teure Wiederaufbauen von TCP- und TLS-Sessions nach jedem Aufwachen.
- Nimm CoAP, wenn du REST-Denken direkt aufs Gerät bringen willst: Ressourcen mit URIs, GET/PUT/POST/DELETE und Discovery über /.well-known/core.
- Nimm CoAP, wenn du Multicast brauchst, etwa um eine Gerätegruppe mit einem einzigen Request anzusprechen — das kann MQTT prinzipbedingt nicht.
CoAP ist das Protokoll für die unterste Geräteklasse und lokale Funk-Meshes, MQTT das Protokoll für Datenverteilung und Cloud-Anbindung. In vielen Architekturen treffen sich beide: Sensoren sprechen CoAP bis zum Border-Router, ein Gateway übersetzt auf MQTT Richtung Plattform. Für typische Projekte mit WLAN- oder Ethernet-Geräten ist MQTT wegen des Ökosystems fast immer der pragmatischere Start.
// Häufige Fragen
Welches Protokoll verbraucht weniger Strom, MQTT oder CoAP?
Bei batteriebetriebenen Geräten mit langen Schlafphasen meist CoAP: es gibt keine TCP-Verbindung, die gehalten oder nach dem Aufwachen samt TLS-Handshake neu aufgebaut werden muss. MQTT kompensiert mit Keep-Alive, persistenten Sessions (bei MQTT 5 flexibel per Session Expiry Interval) und TLS-Session-Resumption auf Transportebene, bleibt aber verbindungsorientiert. Bei dauerversorgten Geräten ist der Unterschied praktisch egal.
Ist CoAP über UDP überhaupt zuverlässig?
Ja, wahlweise: CoAP kennt «Confirmable»-Nachrichten, die vom Empfänger bestätigt und bei Verlust automatisch wiederholt werden. Das entspricht grob MQTT QoS 1. Für Sicherheit sorgt DTLS, das Pendant zu TLS für UDP — es muss aber wie bei MQTT sauber mit Zertifikaten oder PSK konfiguriert werden.
