Calculadora de tamanho de pacote MQTT e banda

Veja exatamente quantos bytes um MQTT PUBLISH ocupa na rede — cabeçalho, tópico, propriedades, payload e confirmações de QoS — e quanto sua frota inteira envia por dia e por mês.

Versão do protocolo
QoS
Payload
47 bytes em UTF-8
Pacote PUBLISH89 B42 B de overhead do protocolo (47%)
Por mensagem com acks93 Bum salto, 4 B de acks
Frota por mês8,04 GB43.200.000 mensagens publicadas

Detalhamento do pacote PUBLISH

CampoBytes
Cabeçalho fixo (tipo de pacote + flags)1
Remaining Length — variable byte integer, 1–4 bytes1
Prefixo de comprimento do tópico2
Nome do tópico (UTF-8)35
Identificador de pacote — só QoS 1 e 22
Comprimento das propriedades — variable byte integer do MQTT 51
Propriedades0
Payload47
Total do PUBLISH89
PUBACK — confirmação4
Total com confirmações93

Banda da frota

TráfegoPor diaPor mês
Dispositivos → broker
PUBLISH de entrada, acks de saída
134 MB4,02 GB
Broker → assinantes (×1)
cada entrega é um novo PUBLISH
134 MB4,02 GB
Tráfego MQTT total268 MB8,04 GB
Um dispositivo → broker134 KB4,02 MB

1 KB = 1.000 bytes; um mês tem 30 dias. Os acks consideram a forma mínima de 4 bytes (no MQTT 5, um ack de sucesso sem propriedades pode omitir o reason code). As entregas aos assinantes consideram o mesmo tópico e QoS. Framing de TCP/IP, TLS e WebSocket não está incluído — veja as notas abaixo.

Anatomia de um pacote MQTT PUBLISH

Todo pacote MQTT começa com um cabeçalho fixo: um byte com o tipo de pacote e as flags (no PUBLISH: DUP, QoS e RETAIN), seguido do Remaining Length — o número de bytes que vêm depois, codificado como variable byte integer. Valores até 127 ocupam um byte, até 16.383 dois bytes, até 2.097.151 três bytes e até 268.435.455 quatro bytes.

O cabeçalho variável de um PUBLISH contém o nome do tópico, precedido de um prefixo de comprimento de 2 bytes, e — só para QoS 1 e 2 — um identificador de pacote de 2 bytes. No MQTT 5 ele também traz o comprimento das propriedades (outro variable byte integer, com pelo menos um byte mesmo quando não há propriedades) e as próprias propriedades, como Message Expiry Interval, Content Type ou User Properties. Tudo o que vem depois é payload: o MQTT não adiciona um prefixo de comprimento a ele, porque seu tamanho é deduzido do Remaining Length.

Por que nomes de tópicos importam para a banda

O nome do tópico é enviado inteiro em cada mensagem. Um tópico como factory/line-1/sensor-042/telemetry custa 35 bytes — muitas vezes mais do que um payload compacto de sensor. Para uma frota que envia dados a cada poucos segundos, encurtar tópicos é uma das otimizações mais baratas que existem. O MQTT 5 também oferece topic aliases: depois da primeira mensagem, o cliente pode enviar um número de alias de 2 bytes (uma propriedade de 3 bytes) em vez da string do tópico. Saiba mais sobre como estruturar tópicos no guia de tópicos e curingas do MQTT.

QoS e confirmações

QoS 0 é “dispare e esqueça”: sem identificador de pacote e sem confirmação. QoS 1 adiciona um identificador de 2 bytes e um PUBACK de 4 bytes. QoS 2 usa um handshake em quatro etapas — PUBLISH, PUBREC, PUBREL, PUBCOMP — que adiciona 14 bytes e uma ida e volta extra completa por mensagem. As confirmações acontecem em cada salto: entre o publicador e o broker, e de novo entre o broker e cada assinante, usando o menor entre o QoS da publicação e o QoS da assinatura. O guia de níveis de QoS explica quando o custo extra compensa.

O que a calculadora não conta

O uso real da rede é maior do que a contagem de bytes do MQTT. Cada segmento TCP carrega 40 bytes de cabeçalhos IPv4 + TCP (60 com IPv6), e mais com opções TCP. O TLS adiciona cabeçalho de registro, MAC/tag e padding de aproximadamente 22–29 bytes por registro, além de alguns kilobytes a cada handshake. MQTT sobre WebSockets adiciona um cabeçalho de frame de 2–14 bytes por mensagem. Além disso, conexões ociosas trocam pacotes PINGREQ/PINGRESP de 2 bytes a cada intervalo de keep alive — veja keep alive do MQTT.

Quer conferir os números? Publique a mesma mensagem no cliente MQTT online e inspecione-a. É novo no protocolo? Comece por o que é MQTT. Se o seu broker rejeita mensagens grandes com o reason code 0x95, compare o tamanho do pacote com a configuração de tamanho máximo de pacote dele.

Perguntas frequentes sobre tamanho de pacote

Qual é o tamanho mínimo de uma mensagem MQTT?

Um PUBLISH QoS 0 no MQTT 3.1.1 com tópico de um caractere e payload vazio tem 5 bytes: 1 byte de cabeçalho fixo, 1 byte de remaining length, 2 bytes de comprimento do tópico e 1 byte de tópico. O MQTT 5 adiciona pelo menos um byte para o comprimento das propriedades.

Qual é o tamanho máximo de uma mensagem MQTT?

O campo Remaining Length consegue codificar até 268.435.455 bytes (cerca de 256 MB), então esse é o limite do protocolo. Na prática, os brokers definem limites bem menores — geralmente de algumas centenas de kilobytes a alguns megabytes — e clientes e brokers MQTT 5 podem anunciar um Maximum Packet Size.

Quanta banda o QoS 1 ou o QoS 2 adiciona?

O QoS 1 adiciona um identificador de pacote de 2 bytes ao PUBLISH mais um PUBACK de 4 bytes, ou seja, 6 bytes por mensagem. O QoS 2 adiciona o mesmo identificador mais PUBREC, PUBREL e PUBCOMP, totalizando 14 bytes por mensagem, além de uma ida e volta extra.

Isso inclui o overhead de TLS e TCP?

Não. A calculadora conta apenas os bytes do MQTT. Os cabeçalhos TCP/IP adicionam cerca de 40–52 bytes por segmento, o TLS cerca de 22–29 bytes por registro e os WebSockets 2–14 bytes por frame. Em mensagens pequenas, esse overhead pode ser maior do que o próprio pacote MQTT.

Dos criadores do TestMQTT

Conhece seu tráfego? Escolha um broker que dê conta dele

Brokers públicos de teste são compartilhados com milhares de desconhecidos. O ConnectMQ oferece um broker MQTT privado, confiável para dispositivos reais — pronto em minutos.

  • Seu próprio broker isolado — ninguém mais lê seus tópicos
  • Autenticação por usuário e senha e controle de acesso por tópico
  • TLS e WebSocket seguro, MQTT 3.1.1 e MQTT 5
  • O mesmo código de cliente do primeiro teste até a produção