Bosh sahifa Wiki MQTT

MQTT

MQTT — kichik xabarlarni kam bandwidthli yoki beqaror tarmoqlarda uzatishga mo‘ljallangan publish/subscribe protokoli. U IoT qurilmalari, sensorlar, mobil ilovalar va telemetriya tizimlarida keng qo‘llanadi.

MQTTda xabar yuboruvchi va qabul qiluvchi bir-biriga bevosita ulanmaydi. Ular markaziy broker orqali muloqot qiladi.

Protokol sarlavhasi kichik bo‘lib, resursi cheklangan qurilmalarga mos. MQTT odatda TCP ustida ishlaydi.

Publish/subscribe modeli

MQTTda uchta asosiy rol mavjud.

Publisher

Xabar yaratadi va ma’lum topicga yuboradi.

Subscriber

Bir yoki bir nechta topicga obuna bo‘ladi va mos xabarlarni oladi.

Broker

Client ulanishlarini qabul qiladi, topic obunalarini saqlaydi va xabarlarni kerakli subscriberlarga tarqatadi.

Publisher subscriberning IP manzilini bilishi shart emas. Subscriber ham publisherni bevosita bilmaydi.

Topic

Topic xabarning mantiqiy yo‘lini bildiradi.

Misollar:

building/office/temperature
building/office/humidity
factory/line1/motor/status
uzbekdevs/server/cpu

Topiclar / belgisi bilan darajalarga bo‘linadi.

Topic case-sensitive bo‘lishi mumkin:

Sensor/Temp
sensor/temp

ular ikki xil topic hisoblanadi.

Wildcard

Subscriber bir nechta topicni wildcard bilan qamrab olishi mumkin.

+

Bitta darajani almashtiradi.

building/+/temperature

Quyidagilarga mos keladi:

building/office/temperature
building/lab/temperature

#

Qolgan barcha darajalarni qamrab oladi.

building/#

building/ ostidagi barcha topiclarga mos keladi.

Publisher wildcard bilan publish qilmaydi. Wildcard odatda faqat subscriptionda ishlatiladi.

Brokerga ulanish

MQTT client brokerga ulanishda CONNECT paket yuboradi.

CONNECT ichida:

  • protocol version;
  • client ID;
  • clean start yoki session flag;
  • keep alive;
  • username;
  • password;
  • Will message;
  • boshqa propertylar

bo‘lishi mumkin.

Broker CONNACK bilan ulanish qabul qilinganini yoki rad etilganini bildiradi.

Client ID

Client ID broker ichida clientni aniqlaydi.

Ikki faol client bir xil Client ID bilan ulansa, broker avvalgi ulanishni uzishi mumkin.

Client ID quyidagilar uchun muhim:

Random Client ID har ulanishda yangi sessiya yaratishi mumkin.

QoS

MQTT uchta yetkazish darajasiga ega.

QoS 0 — at most once

Xabar bir marta yuboriladi, tasdiq talab qilinmaydi.

Xususiyatlari:

  • eng kichik overhead;
  • eng past kechikish;
  • xabar yo‘qolishi mumkin;
  • takror yetkazish protokol tomonidan qilinmaydi.

Tez-tez yangilanadigan sensor ma’lumoti uchun mos bo‘lishi mumkin.

QoS 1 — at least once

Broker yoki subscriber PUBACK bilan tasdiqlaydi.

Tasdiq kelmasa, xabar qayta yuboriladi. Natijada bir xabar bir necha marta kelishi mumkin.

Consumer duplicate xabarni xavfsiz qayta ishlashi kerak.

QoS 2 — exactly once

To‘rt bosqichli almashinuv ishlatiladi:

PUBLISH → PUBREC → PUBREL → PUBCOMP

Bu QoS protokol darajasida xabarni aynan bir marta yetkazishga qaratilgan, lekin ko‘proq trafik va holat talab qiladi.

Ilovadagi biznes amal aynan bir marta bajarilishi uchun qo‘shimcha idempotency kerak bo‘lishi mumkin.

Retained message

Publisher xabarni retain flag bilan yuborsa, broker shu topic uchun oxirgi retained xabarni saqlaydi.

Yangi subscriber obuna bo‘lganda oxirgi qiymatni darhol oladi.

Masalan:

home/livingroom/temperature = 24.3

Sensor keyingi o‘lchovni bir daqiqadan keyin yuborsa ham, yangi client joriy qiymatni kutmasdan ko‘radi.

Bo‘sh payloadli retained publish ayrim holatda retained qiymatni o‘chirish uchun ishlatiladi.

Last Will and Testament

Client CONNECT vaqtida Will message belgilashi mumkin.

Agar client tartibsiz uzilsa, broker Will xabarini e’lon qiladi.

Misol:

devices/sensor-17/status = offline

Client normal DISCONNECT yuborsa, Will chiqarilmaydi.

Will qurilmaning kutilmaganda yo‘qolganini aniqlash uchun ishlatiladi.

Keep Alive

Keep Alive client va broker o‘rtasida uzoq vaqt trafik bo‘lmasa ham ulanish tirikligini tekshiradi.

Client ma’lum vaqt ichida paket yubormasa, PINGREQ yuboradi. Broker PINGRESP qaytaradi.

Broker clientdan belgilangan vaqtdan ancha uzoq paket olmasa, ulanishni uzishi va Will xabarini chiqarishi mumkin.

Persistent session

Session brokerda quyidagilarni saqlashi mumkin:

  • subscriptions;
  • yetkazilmagan QoS 1 yoki QoS 2 xabarlar;
  • in-flight holat;
  • Client ID bilan bog‘liq ma’lumot.

Client vaqtincha offline bo‘lsa, broker mos xabarlarni queuega yig‘ishi mumkin.

MQTT 5da session expiry interval orqali sessiya qancha saqlanishi boshqariladi.

Subscription

Client SUBSCRIBE paketida topic filter va kerakli QoSni bildiradi.

Broker SUBACK bilan natijani qaytaradi.

Yetkaziladigan QoS publisher QoS va subscription QoSning mos qiymatiga bog‘liq. Subscriber publisherdan yuqoriroq kafolat ola olmaydi.

Shared subscription

Bir nechta consumer bitta shared subscription guruhiga qo‘shilsa, broker har xabarni guruhdagi faqat bitta consumerga beradi.

Bu workerlar orasida yuk taqsimlash uchun ishlatiladi.

Misol:

$share/processors/orders/created

Aniq sintaksis broker va standart versiyasiga bog‘liq.

MQTT portlari

Port Vazifasi
1883 Oddiy MQTT TCP
8883 TLS bilan MQTT
turli portlar WebSocket yoki brokerga xos listener

WebSocket orqali MQTT brauzer ilovalarida ishlatilishi mumkin.

MQTT 3.1.1 va MQTT 5

MQTT 5 quyidagi imkoniyatlarni kengaytiradi:

  • reason code;
  • user properties;
  • message expiry;
  • session expiry;
  • response topic;
  • correlation data;
  • server redirect;
  • topic alias;
  • flow control;
  • subscription identifier;
  • shared subscriptionni standartlashtirish.

Eski client va broker versiya mosligini tekshiradi.

Xavfsizlik

MQTTning oddiy username va password maydoni o‘zi shifrlanmaydi. TLSsiz credential tarmoqda ko‘rinishi mumkin.

Himoya:

Har client faqat kerakli topicga publish va subscribe qila olishi kerak.

Topic dizayni

Yaxshi topic tuzilishi:

  • tushunarli;
  • barqaror;
  • ortiqcha chuqur emas;
  • qurilma va joylashuvni ajratadi;
  • versiyani boshqaradi;
  • maxfiy ma’lumotni topic nomiga yozmaydi.

Masalan:

v1/buildings/tashkent/rooms/12/temperature

Topic nomi broker loglarida va ACLda ko‘rinishi mumkin. Token yoki parol topic ichiga yozilmaydi.

Diagnostika

MQTT muammosida:

tekshiriladi.

Client ulangan bo‘lib, xabar olmasa, subscription topic filter va ACL birinchi tekshiriladigan joylardir.

Bog‘liq tushunchalar

IoT, Broker, Publisher, Subscriber, Topic, QoS, Retained message, Last Will, Keep Alive, Persistent session, TLS, AMQP