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.
PUBLISH paketi dökümü
| Alan | Byte |
|---|---|
| Fixed header (paket türü + bayraklar) | 1 |
| Remaining Length — variable byte integer, 1–4 byte | 1 |
| Topic uzunluk öneki | 2 |
| Topic adı (UTF-8) | 35 |
| Packet identifier — yalnızca QoS 1 ve 2 | 2 |
| Property length — MQTT 5 variable byte integer | 1 |
| Property’ler | 0 |
| Payload | 47 |
| PUBLISH toplamı | 89 |
| PUBACK — onay | 4 |
| Onaylar dahil toplam | 93 |
Filo bant genişliği
| Trafik | Günlük | Aylık |
|---|---|---|
| Cihazlar → broker PUBLISH gelir, onaylar gider | 134 MB | 4,02 GB |
| Broker → aboneler (×1) her teslimat yeni bir PUBLISH’tir | 134 MB | 4,02 GB |
| Toplam MQTT trafiği | 268 MB | 8,04 GB |
| Tek cihaz → broker | 134 KB | 4,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.