MQTT paket boyutu ve bant genişliği hesaplayıcı

Bir MQTT PUBLISH’in hatta tam olarak kaç byte tuttuğunu — header, topic, property’ler, payload ve QoS onayları — ve tüm filonuzun günde ve ayda ne kadar veri gönderdiğini görün.

Protokol sürümü
QoS
Payload
UTF-8 olarak 47 byte
PUBLISH paketi89 B42 B protokol ek yükü (47%)
Onaylar dahil mesaj başına93 Btek atlama, 4 B onay
Filo, aylık8,04 GB43.200.000 mesaj yayınlandı

PUBLISH paketi dökümü

AlanByte
Fixed header (paket türü + bayraklar)1
Remaining Length — variable byte integer, 1–4 byte1
Topic uzunluk öneki2
Topic adı (UTF-8)35
Packet identifier — yalnızca QoS 1 ve 22
Property length — MQTT 5 variable byte integer1
Property’ler0
Payload47
PUBLISH toplamı89
PUBACK — onay4
Onaylar dahil toplam93

Filo bant genişliği

TrafikGünlükAylık
Cihazlar → broker
PUBLISH gelir, onaylar gider
134 MB4,02 GB
Broker → aboneler (×1)
her teslimat yeni bir PUBLISH’tir
134 MB4,02 GB
Toplam MQTT trafiği268 MB8,04 GB
Tek cihaz → broker134 KB4,02 MB

1 KB = 1.000 byte; bir ay 30 gündür. Onaylar minimum 4 byte’lık biçimde varsayılır (MQTT 5’te property içermeyen başarılı bir onay reason code’u atlayabilir). Abone teslimatlarında aynı topic ve QoS varsayılır. TCP/IP, TLS ve WebSocket çerçeveleme dahil değildir — aşağıdaki notlara bakın.

Bir MQTT PUBLISH paketinin anatomisi

Her MQTT paketi bir fixed header ile başlar: paket türünü ve bayrakları (PUBLISH için DUP, QoS ve RETAIN) tutan bir byte, ardından Remaining Length — sonrasında gelen byte sayısı, variable byte integer olarak kodlanır. 127’ye kadar olan değerler bir byte, 16.383’e kadar iki byte, 2.097.151’e kadar üç byte ve 268.435.455’e kadar dört byte kaplar.

Bir PUBLISH’in variable header’ı, 2 byte’lık uzunluk önekine sahip topic adını ve — yalnızca QoS 1 ve 2 için — 2 byte’lık bir packet identifier içerir. MQTT 5’te ayrıca bir property length (yine bir variable byte integer; hiç property olmasa bile en az bir byte) ve Message Expiry Interval, Content Type veya User Properties gibi property’lerin kendisi bulunur. Bundan sonra gelen her şey payload’dır: MQTT payload’a uzunluk öneki eklemez, çünkü boyutu Remaining Length’ten anlaşılır.

Topic adları bant genişliği için neden önemlidir?

Topic adı her mesajla birlikte eksiksiz gönderilir. factory/line-1/sensor-042/telemetry gibi bir topic 35 byte tutar — çoğu zaman kompakt bir sensör payload’ından fazladır. Birkaç saniyede bir veri gönderen bir filo için topic’leri kısaltmak, en ucuz optimizasyonlardan biridir. MQTT 5 ayrıca topic alias’lar sunar: ilk mesajdan sonra client, topic string’i yerine 2 byte’lık bir alias numarası (3 byte’lık bir property) gönderebilir. Topic yapılandırması hakkında daha fazlası için MQTT topic’leri ve wildcard’lar rehberini okuyun.

QoS ve onaylar

QoS 0 “gönder ve unut” mantığıyla çalışır: packet identifier ve onay yoktur. QoS 1, 2 byte’lık bir tanımlayıcı ve 4 byte’lık bir PUBACK ekler. QoS 2 dört adımlı bir el sıkışma kullanır — PUBLISH, PUBREC, PUBREL, PUBCOMP — ve mesaj başına 14 byte ile tam bir ek gidiş-dönüş ekler. Onaylar her atlamada gerçekleşir: publisher ile broker arasında ve yine broker ile her abone arasında; publish QoS’u ile abonelik QoS’undan düşük olanı kullanılır. QoS seviyeleri rehberi, ek maliyetin ne zaman buna değdiğini açıklar.

Hesaplayıcının saymadıkları

Gerçek ağ kullanımı MQTT byte sayısından yüksektir. Her TCP segmenti 40 byte IPv4 + TCP header’ı (IPv6 ile 60) taşır, TCP seçenekleriyle daha fazlası eklenir. TLS, kayıt başına yaklaşık 22–29 byte’lık bir record header, MAC/tag ve padding ile her handshake için birkaç kilobyte ekler. WebSocket üzerinden MQTT, mesaj başına 2–14 byte’lık bir frame header ekler. Bunun üzerine boştaki bağlantılar her keep alive aralığında 2 byte’lık PINGREQ/PINGRESP paketleri alışverişi yapar — bkz. MQTT keep alive.

Rakamları doğrulamak mı istiyorsunuz? Aynı mesajı online MQTT client’ta yayınlayıp inceleyin; protokolde yeni misiniz? MQTT nedir ile başlayın. Broker’ınız büyük mesajları reason code 0x95 ile reddediyorsa paket boyutunu broker’ın maksimum paket boyutu ayarıyla karşılaştırın.

Paket boyutu SSS

Bir MQTT mesajının minimum boyutu nedir?

MQTT 3.1.1’de tek karakterli bir topic ve boş payload ile QoS 0 bir PUBLISH 5 byte’tır: 1 byte fixed header, 1 byte remaining length, 2 byte topic uzunluğu ve 1 byte topic. MQTT 5, property length için en az bir byte ekler.

Maksimum MQTT mesaj boyutu nedir?

Remaining Length alanı 268.435.455 byte’a (yaklaşık 256 MB) kadar kodlayabilir; protokol limiti budur. Pratikte broker’lar çok daha düşük limitler belirler — çoğunlukla birkaç yüz kilobyte ile birkaç megabyte arası — ve MQTT 5 client’ları ile broker’ları bir Maximum Packet Size bildirebilir.

QoS 1 veya QoS 2 ne kadar bant genişliği ekler?

QoS 1, PUBLISH’e 2 byte’lık bir packet identifier ve 4 byte’lık bir PUBACK ekler; yani mesaj başına 6 byte. QoS 2 aynı tanımlayıcının yanı sıra PUBREC, PUBREL ve PUBCOMP ekler; mesaj başına 14 byte ve fazladan bir gidiş-dönüş demektir.

Buna TLS ve TCP ek yükü dahil mi?

Hayır. Hesaplayıcı yalnızca MQTT byte’larını sayar. TCP/IP header’ları segment başına yaklaşık 40–52 byte, TLS kayıt başına yaklaşık 22–29 byte, WebSocket ise frame başına 2–14 byte ekler. Küçük mesajlarda bu ek yük, MQTT paketinin kendisinden büyük olabilir.

TestMQTT’nin yapımcılarından

Trafiğinizi biliyor musunuz? Ona uygun bir broker seçin

Genel test broker’ları binlerce yabancıyla paylaşılır. ConnectMQ, gerçek cihazlarınızla güvenle kullanabileceğiniz özel bir MQTT broker sunar — dakikalar içinde hazır.

  • Size özel, izole broker — topic’lerinizi başka kimse okuyamaz
  • Kullanıcı adı / şifre ile kimlik doğrulama ve topic bazlı erişim kontrolü
  • TLS ve güvenli WebSocket, MQTT 3.1.1 ve MQTT 5
  • İlk testten üretime kadar aynı istemci kodu