fbpx
mqtt nedir

MQTT (MQ Telemetri Aktarımı), kaynakları kısıtlı ağ istemcilerine telemetri bilgilerini dağıtmanın basit bir yolunu sağlayan lightweight bir mesajlaşma protokolüdür. Bir publish(yayımlama) / subscribe (abone olma) iletişim modeli kullanan protokol, genellikle makineden makineye (M2M) iletişim için kullanırz. Ayrıca, nesnelerin internetinde (IoT) önemli bir rol oynar.

MQTT protokolü, kısıtlı bant genişliği sebebiyle gecikmeler yaşanan ve kararlı olmayan kablosuz ağlar için iyi bir seçimdir.

MQTT protokolü iki temel bileşenden oluşur. Bunlar;  bir client(istemci) ve bir broker (aracı). MQTT broker bir sunucudur. clientlar ise sisteme bağlı aygıtlardır. Bir aygıt veya client bir sunucuya veya brokera veri göndermek istediğinde buna publish (yayımlama) denir. İşlem tersine çevrildiğinde buna subscribe (abone) denir.

Abone olan bir istemciden bir brokera olan bağlantı kesilirse, broker, iletileri arabelleğe alacak ve tekrar çevrimiçi olduğunda aboneye gönderecektir. Yayıncı istemciden brokera olan bağlantı önceden haber verilmeksizin kesilirse, broker bağlantıyı kapatma ihimtali verd. Ayrıca, abonelere yayıncının talimatlarını içeren önbelleğe alınmış bir mesaj gönderebilir.

MQTT’deki TT, Telemetri Aktarımı anlamına gelirken, MQ, IBM MQ adlı bir ürüne atıfta bulunur.

MQTT Nasıl Çalışır?

Bir MQTT oturumu dört aşamadan oluşur: connection (bağlantı), authentication (kimlik doğrulama), communication (iletişim) ve termination (sonlandırma). İstemci, brokera standart bir bağlantı noktası veya brokerın operatörleri tarafından tanımlanan özel bir bağlantı noktası kullanarak bir Transmission Control Protocol/Internet Protocol (TCP / IP) bağlantısı oluşturarak başlar. Bağlantı oluştururken, sunucunun yeniden kullanılan bir istemci kimliği sağlanmışsa eski bir oturuma devam edebileceğinin bilinmesi önemlidir.

Standart bağlantı portu, şifrelenmemiş iletişim için 1883 ve şifreli iletişim için Secure Sockets Layer (SSL)/Transport Layer Security (TLS) kullanılarak 8883 portu kullanır.  SSL / TLS handshake sırasında, istemci, sunucu sertifikasını doğrular ve sunucunun kimliğini doğrular. İstemci, handshake sırasında brokera bir istemci sertifikası da sağlar. Broker, istemcinin kimliğini doğrulamak için bunu kullanır. Yalnızca MQTT protokolüne özel bir durum olmasa da, brokerların SSL / TLS istemci tarafı sertifikalarıyla istemci kimlik doğrulamasını desteklemesi geleneksel hale gelmiştir.

MQTT protokolü, kısıtlı kaynak ve IoT cihazları için bir protokol olmayı amaçladığından, SSL / TLS her zaman iyi bir seçenek olmaz. Hatta, bazı durumlarda istenmeyebilir. Bu tür durumlarda, kimlik doğrulama, istemci tarafından sunucuya gönderilen CONNECT / CONNACK paket dizisinin bir parçası olarak açık metin kullanıcı adı ve şifre olarak sunar. Ayrıca bazı brokerler, özellikle internette yayınlanan açık brokerler anonim aygıtları kabul etmektedir. Bu gibi durumlarda, kullanıcı adı ve şifre boş bırakılmalıdır.

MQTT’ye lightweight bir protokoldür. Bunun sebebi tüm mesajlarının küçük bir kod alanı vardır. Her mesajın sabit bir header’ı vardır (2 bayt). İletilmek istenen mesaj ise 256mb bilgi ve bir hizmet kalitesi (QoS) seviyesi ile sınırlıdır.

İletişim Aşaması

İletişim (communication) aşamasında, bir client yayınlama, abone olma, abonelikten çıkma ve ping işlemlerini gerçekleştirebilir. Yayınlama işlemi, yayıncı tarafından tanımlanan bir konuya ikili bir veri bloğu (içerik) gönderir.

MQTT

MQTT Nedir? Nasıl Çalışır?

MQTT, 256 MB boyuta kadar binary large objectsi (BLOB’lar) destekler. İçeriğin biçimi uygulamaya özel olacaktır. Konu abonelikleri bir SUBSCRIBE/SUBACK paket çifti kullanarak yapar. Abonelikten çıkma benzer şekilde bir UNSUBSCRIBE / UNSUBACK paket çifti kullanarak gerçekleştirir.

Konu dizeleri, özel bir sınırlayıcı karakter olan eğik çizgi(/) kullanılarak doğal bir konu ağacı oluşturur. Bir client, özel joker karakterleri kullanarak konu ağacındaki tüm dallara abone olabilir ve abonelikten çıkabilir. İki joker karakter vardır: tek seviyeli bir joker karakter, artı karakteri (+); ve çok düzeyli bir joker karakter, karma karakter (#). Dolar karakteri($) olan özel konu karakteri, konuyu herhangi bir kök joker karakter aboneliğinden hariç tutar. Tipik olarak $, sunucuya özgü veya sistem mesajlarını taşımak için kullanır.

İletişim aşamasında bir istemcinin gerçekleştirebileceği başka bir işlem, bir PINGREQ / PINGRESP paket dizisi kullanarak broker sunucusuna ping göndermektir. Bu paket dizisi, kabaca YOU ALIVE / YES I AM ALIVE anlamına gelir. Bu işlemin canlı bir bağlantıyı sürdürmekten ve TCP bağlantısının bir ağ geçidi veya yönlendirici tarafından kapatılmamasını sağlamaktan başka bir işlevi yoktur.

Bir yayıncı veya abone, biroturumunu sonlandırmak istediğinde, aracıya bir DISCONNECT mesajı gönderir ve ardından bağlantıyı kapatır. Buna zarif bir kapatma denir. Çünkü istemciye, istemci kimliğini sağlayarak ve kaldığı yerden devam ederek kolayca yeniden bağlanma yeteneği sağlar.

Bağlantının kesilmesi, bir yayıncının DISCONNECT mesajı göndermesine fırsat kalmadan aniden meydana gelirse, broker abonelere yayıncıdan brokerın önceden önbelleğe aldığı bir mesaj gönderebilir. Bu mesajda bağlantının beklenmedik bir şekilde kesilmesi durumunda ne yapacaklarına dair talimatlar sağlanır.

MQTT/QoS Nedir?

QoS, bir mesajın göndereni ile mesajın alıcısı arasındaki bir anlaşmayı ifade eder. Yani, belirli bir mesaja atıfta bulunarak teslimat garantisini tanımlayacaktır. QoS, MQTT’de temel özellik olarak hareket ederek istemciye üç hizmet seviyesi arasında seçim yapma olanağı sağlar.

Üç farklı QoS seviyesi, içeriğin MQTT protokolü tarafından nasıl yönetildiğini belirler. Daha yüksek QoS seviyeleri daha güvenilir olmasına rağmen, daha fazla gecikme ve bant genişliği gereksinimine sahiptirler. Bu nedenle abone olan istemciler almak istedikleri en yüksek QoS seviyesini belirleyebilirler.

MQTT Protokolünün Tarihçesi

Protokolün genel çalışma yapısına göz attıktan sonra biraz da tarihçesine bakalım.

Ne kadar nesnelerin interneti konusu ile birlikte popüler olsada MQTT’nin tarihi biraz daha eskiye dayanıyor.

MQTT, IBM’den Dr. Andy Stanford-Clark ve şimdiki Eurotech olan Arcom’dan Arlen Nipper tarafından 1999’da geliştirildi. Petrol ve gaz endüstrilerinde kullanılan izleme cihazlarını uzaktaki serverlara bağlamanın uygun maliyetli ve güvenilir bir yolu olarak ortaya çıktı. Çöldeki boru hattı sensörlerinden saha dışı denetim kontrolü ve veri toplama (SCADA) sistemlerine veri aktarmanın bir yolunu bulmakta zorlandıklarında, uydu bağlantısı maliyetlerini en düşük seviyede tutmak için event-driven olan ve TCP/IP tabanlı bir publish/subscribe topolojisine karar verdiler.

MQTT hala IBM ile yakından ilişkili olsa da, şu anda Organization for the Advancement of Structured Information Standards (OASIS) tarafından denetlenen açık kaynak bir protokoldür.

Protokol Uygulamaları ve Örnek Kullanımlar

Facebook şu anda Messenger uygulaması için MQTT’yi kullanıyor.  Yalnızca cep telefonundan telefona mesajlaşma sırasında pil gücünü koruduğu için değildir. Aynı zamanda MQTT protokolü, mesajların dünya genelinde rağmen milisaniyeler içinde verimli şekilde teslim edilmesini sağlıyor.

Amazon Web Services (AWS), Google Cloud, IBM Cloud ve Microsoft Azure dahil olmak üzere çoğu büyük bulut hizmeti sağlayıcısı MQTT’yi destekler.

MQTT, akıllı evler, sağlık hizmetleri, lojistik, endüstri ve üretim dahil olmak üzere ortamlarda gerçek zamanlı analitik, önleyici bakım ve izleme gibi amaçlar için M2M ve IoT cihazları kullanan uygulamalar için çok uygundur.

IoT’de MQTT (Nesnelerin İnternetinde MQTT)

MQTT, IoT ile ilgili en yaygın kullanılan protokollerden biridir. MQTT, kaynakları kısıtlı IoT cihazlarının, belirli bir konu hakkındaki bilgileri MQTT mesaj brokerı olarak işlev gören bir sunucuya göndermesini veya yayınlamasını sağlar. Broker daha sonra bilgileri konuya daha önce abone olan istemcilere gönderir. MQTT konu yapısı bir insana hiyerarşik bir dosya yolu gibi görünür. İstemciler, bir konunun hiyerarşisinin belirli bir seviyesine abone olma ihtimali var. Ayrıca, birden fazla seviyeye abone olmak için bir joker karakter kullanır.

Örnek olarak Roltek Fast IoT Platform MQTT protokolünü destekler.

MQTT vs Rakip Protokoller

MQTT ile rekabet eden diğer aktarım protokolleri şunlardır:

  • Constrained Application Protocol (CoAP): IoT için çok uygun başka bir protokoldür. CoAP ayrıca bir request / response iletişim modeli kullanır. MQTT gibi TCP üzerinden değil UDP üzerinden çalışır. Roltek Fast IoT Platform CoAP protokolünü destekler.
  • Advanced Message Queuing Protocol (AMQP): MQTT gibi, bir publish /subscribe iletişim modeli kullanır.
  • Simple/Streaming Text Oriented Messaging Protocol (STOMP):  Metin tabanlı bir protokoldür. Ancak, STOMP MQTT gibi kuyruklar ve konularla ilgilenmez; bir hedef dizeyi göndermek için semantik kullanır.
  • Simple Media Control Protocol (SMCP): Gömülü ortamlarda kullanılan bir CoAP yığınıdır. SMCP ayrıca C tabanlıdır.
  • SSI (Simple Sensor Interface): Bilgisayar ve sensör kombinasyonu arasında veri aktarımı için bir iletişim protokolüdür.
  • Data Distribution Service (DDS): yerleşik sistemlerde gerçek zamanlı olarak iletişimleri doğrudan yayınlayabilen veya bunlara abone olabilen bir ara yazılım standardıdır.

MQTT’nin Avantaj ve Dezavantajları

MQTT’nin rakip protokollerle karşılaştırıldığında birkaç belirgin avantajı ve dezavantajı vardır. Avantajları ile başlayalım;

  • verimli veri iletimi ve hafif bir protokol olması nedeniyle uygulaması hızlı;
  • en aza indirgenmiş veri paketleri nedeniyle düşük ağ kullanımı;
  • verilerin verimli dağıtımı;
  • uzaktan algılama ve kontrolün başarılı bir şekilde uygulanması;
  • hızlı ve verimli mesaj teslimi;
  • bağlı cihazlar için önemli olan düşük miktarlarda güç kullanımı ve ağ bant genişliğinde azalma

MQTT’nin olası dezavantajları ise şunlardır;

  • MQTT, CoAP’ye kıyasla daha yavaş iletim döngülerine sahiptir.
  • MQTT’nin kaynak keşfi esnek konu aboneliği üzerinde çalışırken, CoAP kararlı bir kaynak keşif sistemi kullanır.
  • MQTT şifrelenmemiş. Bunun yerine, güvenlik şifrelemesi için TLS / SSL kullanır.
  • Küresel olarak ölçeklenebilir bir MQTT ağı oluşturmak zordur.

MQTT hakkında daha detaylı bilgi için: https://mqtt.org

Ücretsiz MQTT Broker: https://mosquitto.org

Bu yazımızda genel hatlarıyla MQTT protokolünü inceledik. MQTT Gateway ürünlerimiz hakkında detaylı bilgi almak ya da mevcut MQTT desteği olan ürünlerinizi Fast IoT Platform’a nasıl bağlayacağınız konusunda destek almak için hemen bize ulaşın.

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir