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.
Détail du paquet PUBLISH
| Champ | Octets |
|---|---|
| En-tête fixe (type de paquet + flags) | 1 |
| Remaining Length — entier à longueur variable, 1 à 4 octets | 1 |
| Préfixe de longueur du topic | 2 |
| Nom du topic (UTF-8) | 35 |
| Identifiant de paquet — QoS 1 et 2 uniquement | 2 |
| Longueur des propriétés — entier à longueur variable MQTT 5 | 1 |
| Propriétés | 0 |
| Payload | 47 |
| Total PUBLISH | 89 |
| PUBACK — acquittement | 4 |
| Total, acquittements inclus | 93 |
Bande passante du parc
| Trafic | Par jour | Par mois |
|---|---|---|
| Appareils → broker PUBLISH entrants, acquittements sortants | 134 MB | 4,02 GB |
| Broker → abonnés (×1) chaque livraison est un nouveau PUBLISH | 134 MB | 4,02 GB |
| Trafic MQTT total | 268 MB | 8,04 GB |
| Un appareil → broker | 134 KB | 4,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.