MQTT Protokolü

IoT cihazları arasında hafif, verimli ve güvenilir mesajlaşma sağlayan protokol

MQTT Nedir?

MQTT (Message Queuing Telemetry Transport), IoT (Nesnelerin İnterneti) cihazları için tasarlanmış hafif, açık kaynaklı bir mesajlaşma protokolüdür. 1999 yılında IBM tarafından geliştirilen MQTT, düşük bant genişliği, yüksek gecikme ve sınırlı işlem gücüne sahip ortamlarda çalışmak üzere tasarlanmıştır.

MQTT, yayıncı/abone (publish/subscribe) modeli üzerine kurulmuştur ve cihazlar arasında verimli bir şekilde veri alışverişi yapılmasını sağlar. Bu model, geleneksel istemci/sunucu modelinden farklı olarak, mesaj gönderen (yayıncı) ve mesaj alan (abone) tarafların birbirlerini doğrudan tanımasını gerektirmez. Bunun yerine, bir aracı (broker) üzerinden iletişim kurulur.

MQTT'nin Temel Özellikleri

  • Hafif ve düşük bant genişliği
  • Düşük güç tüketimi
  • Farklı güvenilirlik seviyeleri (QoS)
  • Güvenlik özellikleri
  • Ölçeklenebilirlik

MQTT Mimarisi

Yayıncı/Abone Modeli

MQTT, yayıncı/abone (publish/subscribe) modelini kullanır. Bu modelde, mesaj gönderen (yayıncı) ve mesaj alan (abone) taraflar birbirlerini doğrudan tanımazlar. Bunun yerine, bir aracı (broker) üzerinden iletişim kurarlar.

Temel Bileşenler:

  • Yayıncı (Publisher): Belirli bir konuda (topic) mesaj yayınlayan cihaz veya uygulama
  • Abone (Subscriber): Belirli bir konuya abone olan ve bu konuda yayınlanan mesajları alan cihaz veya uygulama
  • Broker: Yayıncılardan gelen mesajları alıp ilgili abonelere ileten merkezi sunucu
  • Konu (Topic): Mesajların kategorize edildiği hiyerarşik yapı (örn. "ev/salon/sıcaklık")
  • Mesaj: Yayıncıdan abonelere iletilen veri paketi

MQTT Mesaj Akışı

MQTT protokolünde mesaj akışı şu şekilde gerçekleşir:

  1. Bağlantı Kurma: İstemciler (yayıncılar ve aboneler) MQTT broker'a bağlanır
  2. Abonelik: İstemciler ilgilendikleri konulara abone olur
  3. Yayınlama: Yayıncılar belirli bir konuda mesaj yayınlar
  4. Dağıtım: Broker, mesajı ilgili konuya abone olan tüm istemcilere iletir
  5. Bağlantı Sonlandırma: İstemciler işleri bittiğinde bağlantıyı sonlandırabilir

Bu akış, cihazların birbirlerini doğrudan tanımasını gerektirmez ve ağ bant genişliğini verimli kullanır. Ayrıca, cihazların aynı anda çevrimiçi olması gerekmez; broker, çevrimdışı aboneler için mesajları saklayabilir.

MQTT Kalite Seviyeleri (QoS)

QoS 0: En Fazla Bir Kez

En temel seviye olan QoS 0, "ateşle ve unut" prensibiyle çalışır. Mesaj bir kez gönderilir ve teslim edilip edilmediği kontrol edilmez.

Özellikler:

  • En düşük ağ trafiği
  • En yüksek performans
  • Mesaj kaybı olabilir
  • Mesaj tekrarı olmaz

Veri kaybının önemli olmadığı, düzenli veri akışı olan senaryolarda kullanılır (örn. periyodik sensör okumaları).

QoS 1: En Az Bir Kez

QoS 1, mesajın en az bir kez teslim edilmesini garanti eder. Yayıncı, broker'dan PUBACK (onay) mesajı alana kadar mesajı saklar ve gerekirse yeniden gönderir.

Özellikler:

  • Orta düzeyde ağ trafiği
  • İyi performans
  • Mesaj kaybı olmaz
  • Mesaj tekrarı olabilir

Mesajın mutlaka iletilmesi gereken, ancak tekrar edilmesinin büyük sorun olmadığı senaryolarda kullanılır (örn. alarm bildirimleri).

QoS 2: Tam Olarak Bir Kez

En yüksek seviye olan QoS 2, mesajın tam olarak bir kez teslim edilmesini garanti eder. Dört aşamalı bir el sıkışma protokolü kullanır.

Özellikler:

  • En yüksek ağ trafiği
  • En düşük performans
  • Mesaj kaybı olmaz
  • Mesaj tekrarı olmaz

Mesajın hem kaybolmaması hem de tekrarlanmaması gereken kritik senaryolarda kullanılır (örn. ödeme işlemleri, kritik komutlar).

MQTT Konuları ve Abonelikler

Konu Yapısı

MQTT konuları (topics), mesajların kategorize edildiği hiyerarşik yapılardır. Konular, eğik çizgi (/) ile ayrılan seviyelerden oluşur ve UTF-8 karakter dizileri olarak tanımlanır.

Konu Örnekleri:

  • ev/salon/sicaklik - Salondaki sıcaklık sensörü
  • ev/salon/nem - Salondaki nem sensörü
  • ev/mutfak/sicaklik - Mutfaktaki sıcaklık sensörü
  • arac/motor/sicaklik - Araç motor sıcaklığı
  • arac/yakit/seviye - Araç yakıt seviyesi

Bu hiyerarşik yapı, mesajların organize edilmesini ve filtrelenmesini kolaylaştırır.

Joker Karakterler

MQTT, abonelerin birden fazla konuya tek bir abonelikle abone olmasını sağlayan joker karakterler sunar:

  • Tek Seviye Joker Karakteri (+): Tek bir seviyeyi temsil eder
  • Çok Seviye Joker Karakteri (#): Birden fazla seviyeyi temsil eder ve konu dizisinin sonunda olmalıdır

Joker Karakter Örnekleri:

  • ev/+/sicaklik - Evdeki tüm odaların sıcaklık sensörleri
  • ev/salon/+ - Salondaki tüm sensörler
  • ev/# - Evdeki tüm sensörler ve cihazlar
  • +/+/sicaklik - Tüm lokasyonlardaki tüm odaların sıcaklık sensörleri

Joker karakterler, özellikle çok sayıda cihazın bulunduğu sistemlerde abonelik yönetimini kolaylaştırır.

MQTT Güvenliği

Güvenlik Zorlukları

  • Kimlik Doğrulama: Yetkisiz cihazların broker'a bağlanması
  • Yetkilendirme: Cihazların yetkisiz konulara erişimi
  • Veri Gizliliği: İletim sırasında verilerin dinlenmesi
  • Veri Bütünlüğü: İletim sırasında verilerin değiştirilmesi
  • DoS Saldırıları: Hizmet engelleme saldırıları

Güvenlik Çözümleri

  • TLS/SSL: İletişimin şifrelenmesi
  • Kullanıcı Adı/Şifre: Temel kimlik doğrulama
  • X.509 Sertifikaları: Güçlü kimlik doğrulama
  • ACL (Erişim Kontrol Listeleri): Konu bazlı yetkilendirme
  • Payload Şifreleme: Mesaj içeriğinin uçtan uca şifrelenmesi

IoT Bültenimize Abone Olun

MQTT ve diğer IoT protokolleri hakkında en son gelişmeler için güncel kalın.