Calculadora de tamaño de paquete MQTT y ancho de banda

Descubre exactamente cuántos bytes ocupa un MQTT PUBLISH en la red (cabecera, topic, propiedades, payload y acuses de QoS) y cuánto envía toda tu flota al día y al mes.

Versión del protocolo
QoS
Payload
47 bytes en UTF-8
Paquete PUBLISH89 B42 B de sobrecarga del protocolo (47%)
Por mensaje con acks93 Bun salto, 4 B de acks
Flota al mes8,04 GB43.200.000 mensajes publicados

Desglose del paquete PUBLISH

CampoBytes
Cabecera fija (tipo de paquete + flags)1
Remaining Length — entero de longitud variable, 1–4 bytes1
Prefijo de longitud del topic2
Nombre del topic (UTF-8)35
Identificador de paquete — solo QoS 1 y 22
Longitud de las propiedades — entero de longitud variable de MQTT 51
Propiedades0
Payload47
Total PUBLISH89
PUBACK — acuse de recibo4
Total con acuses de recibo93

Ancho de banda de la flota

TráficoAl díaAl mes
Dispositivos → broker
PUBLISH de entrada, acks de salida
134 MB4,02 GB
Broker → suscriptores (×1)
cada entrega es un nuevo PUBLISH
134 MB4,02 GB
Tráfico MQTT total268 MB8,04 GB
Un dispositivo → broker134 KB4,02 MB

1 KB = 1.000 bytes; un mes son 30 días. Los acks se calculan en su forma mínima de 4 bytes (en MQTT 5, un ack de éxito sin propiedades puede omitir el reason code). Las entregas a suscriptores asumen el mismo topic y la misma QoS. No se incluyen las tramas TCP/IP, TLS ni WebSocket: consulta las notas más abajo.

Anatomía de un paquete MQTT PUBLISH

Todo paquete MQTT empieza con una cabecera fija: un byte con el tipo de paquete y los flags (en PUBLISH: DUP, QoS y RETAIN), seguido del Remaining Length, es decir, el número de bytes que vienen a continuación, codificado como entero de longitud variable. Los valores hasta 127 ocupan un byte; hasta 16.383, dos bytes; hasta 2.097.151, tres bytes, y hasta 268.435.455, cuatro bytes.

La cabecera variable de un PUBLISH contiene el nombre del topic, precedido de una longitud de 2 bytes, y, solo en QoS 1 y 2, un identificador de paquete de 2 bytes. En MQTT 5 también incluye la longitud de las propiedades (otro entero de longitud variable, de al menos un byte aunque no haya propiedades) y las propias propiedades, como Message Expiry Interval, Content Type o User Properties. Todo lo que viene después es payload: MQTT no le añade un prefijo de longitud, porque su tamaño se deduce del Remaining Length.

Por qué los nombres de topic importan para el ancho de banda

El nombre del topic se envía completo con cada mensaje. Un topic como factory/line-1/sensor-042/telemetry cuesta 35 bytes, a menudo más que el payload compacto de un sensor. En una flota que envía datos cada pocos segundos, acortar los topics es una de las optimizaciones más baratas que existen. MQTT 5 también ofrece topic aliases: después del primer mensaje, el cliente puede enviar un número de alias de 2 bytes (una propiedad de 3 bytes) en lugar de la cadena del topic. Aprende más sobre cómo estructurar topics en la guía de topics y comodines MQTT.

QoS y acuses de recibo

QoS 0 es «dispara y olvida»: sin identificador de paquete ni acuse de recibo. QoS 1 añade un identificador de 2 bytes y un PUBACK de 4 bytes. QoS 2 usa un intercambio en cuatro pasos (PUBLISH, PUBREC, PUBREL, PUBCOMP) que añade 14 bytes y un viaje de ida y vuelta adicional por mensaje. Los acuses se producen en cada salto: entre el publicador y el broker, y de nuevo entre el broker y cada suscriptor, usando la menor entre la QoS de publicación y la QoS de la suscripción. La guía de niveles de QoS explica cuándo compensa el coste adicional.

Lo que la calculadora no cuenta

El uso real de la red es mayor que el recuento de bytes MQTT. Cada segmento TCP lleva 40 bytes de cabeceras IPv4 + TCP (60 con IPv6), y más con opciones TCP. TLS añade una cabecera de registro, MAC/tag y relleno de unos 22–29 bytes por registro, además de unos cuantos kilobytes por cada handshake. MQTT sobre WebSockets añade una cabecera de trama de 2–14 bytes por mensaje. Además, las conexiones inactivas intercambian paquetes PINGREQ/PINGRESP de 2 bytes en cada intervalo de keep alive: consulta keep alive en MQTT.

¿Quieres verificar las cifras? Publica el mismo mensaje en el cliente MQTT online e inspecciónalo. ¿Eres nuevo en el protocolo? Empieza por qué es MQTT. Si tu broker rechaza mensajes grandes con el reason code 0x95, compara el tamaño del paquete con su ajuste de tamaño máximo de paquete.

Preguntas frecuentes sobre el tamaño de paquete

¿Cuál es el tamaño mínimo de un mensaje MQTT?

Un PUBLISH QoS 0 en MQTT 3.1.1 con un topic de un carácter y un payload vacío ocupa 5 bytes: 1 byte de cabecera fija, 1 byte de remaining length, 2 bytes de longitud del topic y 1 byte de topic. MQTT 5 añade al menos un byte para la longitud de las propiedades.

¿Cuál es el tamaño máximo de un mensaje MQTT?

El campo Remaining Length puede codificar hasta 268.435.455 bytes (unos 256 MB), así que ese es el límite del protocolo. En la práctica, los brokers fijan límites mucho más bajos (a menudo desde unos cientos de kilobytes hasta unos pocos megabytes), y en MQTT 5 clientes y brokers pueden anunciar un Maximum Packet Size.

¿Cuánto ancho de banda añaden QoS 1 o QoS 2?

QoS 1 añade un identificador de paquete de 2 bytes al PUBLISH más un PUBACK de 4 bytes, es decir, 6 bytes por mensaje. QoS 2 añade el mismo identificador más PUBREC, PUBREL y PUBCOMP, en total 14 bytes por mensaje, y un viaje de ida y vuelta adicional.

¿Incluye la sobrecarga de TLS y TCP?

No. La calculadora cuenta solo bytes MQTT. Las cabeceras TCP/IP añaden unos 40–52 bytes por segmento, TLS unos 22–29 bytes por registro y WebSockets 2–14 bytes por trama. En mensajes pequeños, esta sobrecarga puede ser mayor que el propio paquete MQTT.

De los creadores de TestMQTT

¿Conoces tu tráfico? Elige un broker a su medida

Los brokers públicos de prueba se comparten con miles de desconocidos. ConnectMQ te da un broker MQTT privado en el que puedes confiar para dispositivos reales, listo en minutos.

  • Tu propio broker aislado: nadie más puede leer tus topics
  • Autenticación con usuario y contraseña y control de acceso por topic
  • TLS y WebSocket seguro, MQTT 3.1.1 y MQTT 5
  • El mismo código de cliente desde la primera prueba hasta producción