Calculateur de taille de paquet MQTT et de bande passante

Découvrez exactement combien d’octets un MQTT PUBLISH occupe sur le réseau — en-tête, topic, propriétés, payload et acquittements QoS — et ce que tout votre parc d’appareils envoie par jour et par mois.

Version du protocole
QoS
Payload
47 octets en UTF-8
Paquet PUBLISH89 B42 o de surcoût protocolaire (47%)
Par message, acquittements inclus93 Bun saut, 4 o d’acquittements
Parc par mois8,04 GB43 200 000 messages publiés

Détail du paquet PUBLISH

ChampOctets
En-tête fixe (type de paquet + flags)1
Remaining Length — entier à longueur variable, 1 à 4 octets1
Préfixe de longueur du topic2
Nom du topic (UTF-8)35
Identifiant de paquet — QoS 1 et 2 uniquement2
Longueur des propriétés — entier à longueur variable MQTT 51
Propriétés0
Payload47
Total PUBLISH89
PUBACK — acquittement4
Total, acquittements inclus93

Bande passante du parc

TraficPar jourPar mois
Appareils → broker
PUBLISH entrants, acquittements sortants
134 MB4,02 GB
Broker → abonnés (×1)
chaque livraison est un nouveau PUBLISH
134 MB4,02 GB
Trafic MQTT total268 MB8,04 GB
Un appareil → broker134 KB4,02 MB

1 Ko = 1 000 octets ; un mois compte 30 jours. Les acquittements sont supposés sous leur forme minimale de 4 octets (en MQTT 5, un acquittement de succès sans propriétés peut omettre le reason code). Les livraisons aux abonnés supposent le même topic et la même QoS. Le framing TCP/IP, TLS et WebSocket n’est pas inclus — voir les remarques ci-dessous.

Anatomie d’un paquet MQTT PUBLISH

Chaque paquet MQTT commence par un en-tête fixe : un octet contenant le type de paquet et les flags (pour PUBLISH : DUP, QoS et RETAIN), suivi du Remaining Length, le nombre d’octets qui suivent, encodé sous forme d’entier à longueur variable (variable byte integer). Les valeurs jusqu’à 127 occupent un octet, jusqu’à 16 383 deux octets, jusqu’à 2 097 151 trois octets et jusqu’à 268 435 455 quatre octets.

L’en-tête variable d’un PUBLISH contient le nom du topic, précédé d’une longueur sur 2 octets, et — uniquement pour les QoS 1 et 2 — un identifiant de paquet sur 2 octets. En MQTT 5, il transporte aussi une longueur de propriétés (un autre entier à longueur variable, d’au moins un octet même sans aucune propriété) et les propriétés elles-mêmes, comme Message Expiry Interval, Content Type ou User Properties. Tout ce qui suit constitue le payload : MQTT ne lui ajoute pas de préfixe de longueur, car sa taille se déduit du Remaining Length.

Pourquoi les noms de topics comptent pour la bande passante

Le nom du topic est envoyé en entier avec chaque message. Un topic comme factory/line-1/sensor-042/telemetry coûte 35 octets, souvent plus qu’un payload de capteur compact. Pour un parc qui envoie des données toutes les quelques secondes, raccourcir les topics est l’une des optimisations les moins coûteuses qui soient. MQTT 5 propose aussi les topic aliases : après le premier message, le client peut envoyer un numéro d’alias sur 2 octets (une propriété de 3 octets) au lieu de la chaîne du topic. Pour en savoir plus sur la structuration des topics, consultez le guide des topics et wildcards MQTT.

QoS et acquittements

La QoS 0 fonctionne en « fire-and-forget » : ni identifiant de paquet, ni acquittement. La QoS 1 ajoute un identifiant de 2 octets et un PUBACK de 4 octets. La QoS 2 utilise un échange en quatre étapes — PUBLISH, PUBREC, PUBREL, PUBCOMP — qui ajoute 14 octets et un aller-retour complet supplémentaire par message. Les acquittements ont lieu à chaque saut : entre l’éditeur et le broker, puis à nouveau entre le broker et chaque abonné, avec la plus basse des deux QoS (celle de la publication et celle de l’abonnement). Le guide des niveaux de QoS explique quand ce surcoût en vaut la peine.

Ce que le calculateur ne prend pas en compte

La consommation réseau réelle est supérieure au nombre d’octets MQTT. Chaque segment TCP transporte 40 octets d’en-têtes IPv4 + TCP (60 en IPv6), et davantage avec les options TCP. TLS ajoute un en-tête d’enregistrement, un MAC/tag et du padding, soit environ 22 à 29 octets par enregistrement, plus quelques kilo-octets à chaque handshake. MQTT over WebSockets ajoute un en-tête de trame de 2 à 14 octets par message. À cela s’ajoutent, sur les connexions inactives, des paquets PINGREQ/PINGRESP de 2 octets échangés à chaque intervalle keep alive — voir le keep alive MQTT.

Vous voulez vérifier ces chiffres ? Publiez le même message dans le client MQTT en ligne et inspectez-le. Vous découvrez le protocole ? Commencez par qu’est-ce que MQTT. Si votre broker rejette les gros messages avec le code de raison 0x95, comparez la taille du paquet avec son paramètre de taille maximale de paquet.

FAQ sur la taille des paquets

Quelle est la taille minimale d’un message MQTT ?

Un PUBLISH QoS 0 en MQTT 3.1.1 avec un topic d’un seul caractère et un payload vide fait 5 octets : 1 octet d’en-tête fixe, 1 octet de Remaining Length, 2 octets de longueur de topic et 1 octet de topic. MQTT 5 ajoute au moins un octet pour la longueur des propriétés.

Quelle est la taille maximale d’un message MQTT ?

Le champ Remaining Length peut encoder jusqu’à 268 435 455 octets (environ 256 Mo) : c’est la limite du protocole. En pratique, les brokers fixent des limites bien plus basses — souvent de quelques centaines de kilo-octets à quelques mégaoctets — et les clients et brokers MQTT 5 peuvent annoncer une Maximum Packet Size.

Combien de bande passante ajoutent les QoS 1 et 2 ?

La QoS 1 ajoute un identifiant de paquet de 2 octets au PUBLISH plus un PUBACK de 4 octets, soit 6 octets par message. La QoS 2 ajoute le même identifiant plus PUBREC, PUBREL et PUBCOMP, soit 14 octets par message, ainsi qu’un aller-retour supplémentaire.

Le surcoût TLS et TCP est-il inclus ?

Non. Le calculateur ne compte que les octets MQTT. Les en-têtes TCP/IP ajoutent environ 40 à 52 octets par segment, TLS environ 22 à 29 octets par enregistrement, et les WebSockets 2 à 14 octets par trame. Pour les petits messages, ce surcoût peut dépasser la taille du paquet MQTT lui-même.

Par les créateurs de TestMQTT

Vous connaissez votre trafic ? Choisissez un broker adapté

Les brokers de test publics sont partagés avec des milliers d’inconnus. ConnectMQ vous offre un broker MQTT privé, fiable pour de vrais appareils — prêt en quelques minutes.

  • Votre propre broker isolé — personne d’autre ne peut lire vos topics
  • Authentification par identifiant / mot de passe et contrôle d’accès par topic
  • TLS et WebSocket sécurisé, MQTT 3.1.1 et MQTT 5
  • Le même code client, du premier test à la production