MQTT-Paketgrößen- & Bandbreitenrechner
Sieh genau, wie viele Bytes ein MQTT-PUBLISH auf der Leitung belegt – Header, Topic, Properties, Payload und QoS-Bestätigungen – und was deine gesamte Flotte pro Tag und pro Monat sendet.
Aufschlüsselung des PUBLISH-Pakets
| Feld | Bytes |
|---|---|
| Fixed Header (Pakettyp + Flags) | 1 |
| Remaining Length — Variable Byte Integer, 1–4 Bytes | 1 |
| Längenpräfix des Topics | 2 |
| Topic-Name (UTF-8) | 35 |
| Packet Identifier — nur bei QoS 1 und 2 | 2 |
| Property-Länge — MQTT-5-Variable-Byte-Integer | 1 |
| Properties | 0 |
| Payload | 47 |
| PUBLISH gesamt | 89 |
| PUBACK — Bestätigung | 4 |
| Gesamt inkl. Bestätigungen | 93 |
Bandbreite der Flotte
| Traffic | Pro Tag | Pro Monat |
|---|---|---|
| Geräte → Broker PUBLISH rein, Acks raus | 134 MB | 4,02 GB |
| Broker → Subscriber (×1) jede Zustellung ist ein neues PUBLISH | 134 MB | 4,02 GB |
| MQTT-Traffic gesamt | 268 MB | 8,04 GB |
| Ein Gerät → Broker | 134 KB | 4,02 MB |
1 KB = 1.000 Bytes; ein Monat hat 30 Tage. Acks werden in der minimalen 4-Byte-Form angenommen (in MQTT 5 darf ein Erfolgs-Ack ohne Properties den Reason Code weglassen). Für Zustellungen an Subscriber werden dasselbe Topic und dieselbe QoS angenommen. TCP/IP-, TLS- und WebSocket-Framing sind nicht enthalten – siehe die Hinweise unten.
Aufbau eines MQTT-PUBLISH-Pakets
Jedes MQTT-Paket beginnt mit einem Fixed Header: einem Byte mit Pakettyp und Flags (bei PUBLISH: DUP, QoS und RETAIN), gefolgt von der Remaining Length – der Anzahl der folgenden Bytes, kodiert als Variable Byte Integer. Werte bis 127 belegen ein Byte, bis 16.383 zwei Bytes, bis 2.097.151 drei Bytes und bis 268.435.455 vier Bytes.
Der Variable Header eines PUBLISH enthält den Topic-Namen mit einem 2-Byte-Längenpräfix und – nur bei QoS 1 und 2 – einen 2-Byte-Packet Identifier. In MQTT 5 kommen eine Property-Länge (ein weiterer Variable Byte Integer, mindestens ein Byte, auch ohne Properties) und die Properties selbst hinzu, etwa Message Expiry Interval, Content Type oder User Properties. Alles danach ist Payload: MQTT stellt ihm kein Längenpräfix voran, weil sich seine Größe aus der Remaining Length ergibt.
Warum Topic-Namen für die Bandbreite zählen
Der Topic-Name wird mit jeder einzelnen Nachricht vollständig übertragen. Ein Topic wie factory/line-1/sensor-042/telemetry kostet 35 Bytes – oft mehr als ein kompakter Sensor-Payload. Bei einer Flotte, die alle paar Sekunden sendet, gehört das Kürzen von Topics zu den günstigsten Optimierungen überhaupt. MQTT 5 bietet außerdem Topic Aliases: Nach der ersten Nachricht kann der Client statt des Topic-Strings eine 2-Byte-Alias-Nummer (eine 3-Byte-Property) senden. Mehr zur Strukturierung von Topics findest du im Guide zu MQTT-Topics und Wildcards.
QoS und Bestätigungen
QoS 0 heißt Fire-and-forget: kein Packet Identifier und keine Bestätigung. QoS 1 fügt einen 2-Byte-Identifier und ein 4-Byte-PUBACK hinzu. QoS 2 nutzt einen vierstufigen Handshake – PUBLISH, PUBREC, PUBREL, PUBCOMP – und kostet 14 Bytes plus einen kompletten zusätzlichen Roundtrip pro Nachricht. Bestätigungen gibt es auf jedem Hop: zwischen Publisher und Broker und noch einmal zwischen Broker und jedem Subscriber, jeweils mit der niedrigeren von Publish-QoS und Subscription-QoS. Im Guide zu den QoS-Stufen erfährst du, wann sich der Mehraufwand lohnt.
Was der Rechner nicht mitzählt
Der reale Netzwerkverbrauch liegt über der MQTT-Byte-Zahl. Jedes TCP-Segment trägt 40 Bytes IPv4- + TCP-Header (60 mit IPv6), mit TCP-Optionen mehr. TLS fügt pro Record einen Header, MAC/Tag und Padding von etwa 22–29 Bytes hinzu, plus einige Kilobytes für jeden Handshake. MQTT über WebSockets fügt pro Nachricht einen Frame-Header von 2–14 Bytes hinzu. Dazu tauschen inaktive Verbindungen in jedem Keep-Alive-Intervall 2-Byte-PINGREQ/PINGRESP-Pakete aus – siehe MQTT Keep Alive.
Willst du die Zahlen überprüfen? Publiziere dieselbe Nachricht im Online-MQTT-Client und sieh sie dir an – oder bist du neu beim Protokoll? Dann starte mit Was ist MQTT?. Lehnt dein Broker große Nachrichten mit Reason Code 0x95 ab, vergleiche die Paketgröße mit seiner Einstellung für die maximale Paketgröße.
FAQ zur Paketgröße
Wie groß ist eine MQTT-Nachricht mindestens?
Ein QoS-0-PUBLISH in MQTT 3.1.1 mit einem einstelligen Topic und leerem Payload ist 5 Bytes groß: 1 Byte Fixed Header, 1 Byte Remaining Length, 2 Bytes Topic-Länge und 1 Byte Topic. MQTT 5 fügt mindestens ein Byte für die Property-Länge hinzu.
Wie groß darf eine MQTT-Nachricht maximal sein?
Das Feld Remaining Length kann bis zu 268.435.455 Bytes (etwa 256 MB) kodieren – das ist das Protokolllimit. In der Praxis setzen Broker deutlich niedrigere Grenzen, oft einige hundert Kilobyte bis wenige Megabyte, und MQTT-5-Clients und -Broker können eine Maximum Packet Size ankündigen.
Wie viel Bandbreite kosten QoS 1 und QoS 2 zusätzlich?
QoS 1 fügt dem PUBLISH einen 2-Byte-Packet-Identifier plus ein 4-Byte-PUBACK hinzu, also 6 Bytes pro Nachricht. QoS 2 fügt denselben Identifier plus PUBREC, PUBREL und PUBCOMP hinzu – 14 Bytes pro Nachricht und einen zusätzlichen Roundtrip.
Ist der TLS- und TCP-Overhead enthalten?
Nein. Der Rechner zählt nur MQTT-Bytes. TCP/IP-Header kosten etwa 40–52 Bytes pro Segment, TLS etwa 22–29 Bytes pro Record und WebSockets 2–14 Bytes pro Frame. Bei kleinen Nachrichten kann dieser Overhead größer sein als das MQTT-Paket selbst.