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.

Protokollversion
QoS
Payload
47 Bytes als UTF-8
PUBLISH-Paket89 B42 B Protokoll-Overhead (47%)
Pro Nachricht inkl. Acks93 Bein Hop, 4 B Acks
Flotte pro Monat8,04 GB43.200.000 publizierte Nachrichten

Aufschlüsselung des PUBLISH-Pakets

FeldBytes
Fixed Header (Pakettyp + Flags)1
Remaining Length — Variable Byte Integer, 1–4 Bytes1
Längenpräfix des Topics2
Topic-Name (UTF-8)35
Packet Identifier — nur bei QoS 1 und 22
Property-Länge — MQTT-5-Variable-Byte-Integer1
Properties0
Payload47
PUBLISH gesamt89
PUBACK — Bestätigung4
Gesamt inkl. Bestätigungen93

Bandbreite der Flotte

TrafficPro TagPro Monat
Geräte → Broker
PUBLISH rein, Acks raus
134 MB4,02 GB
Broker → Subscriber (×1)
jede Zustellung ist ein neues PUBLISH
134 MB4,02 GB
MQTT-Traffic gesamt268 MB8,04 GB
Ein Gerät → Broker134 KB4,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.

Von den Machern von TestMQTT

Kennst du deinen Traffic? Wähle einen passenden Broker

Öffentliche Test-Broker teilst du mit Tausenden Fremden. ConnectMQ gibt dir einen privaten MQTT-Broker, dem du echte Geräte anvertrauen kannst – in wenigen Minuten eingerichtet.

  • Dein eigener, isolierter Broker – niemand sonst kann deine Topics lesen
  • Authentifizierung per Benutzername / Passwort und Zugriffskontrolle pro Topic
  • TLS und sichere WebSockets, MQTT 3.1.1 und MQTT 5
  • Derselbe Client-Code vom ersten Test bis zur Produktion