Dieses Dokuwiki verwendet ein von Anymorphic Webdesign erstelltes Thema.
Prijevodi ove stranice:

MQTT protokol

Sažetak

Živimo u vremenu kada nastojimo sve uređaje povezati na internet i integrirati u jednu cjelinu koju je onda lagano kontrolirati od bilo gdje na svijetu. Kako bi se to moglo postići treba međusobno povezati razne uređaje, a tu do izražaja dolazi MQTT (Message Queue Telemetry Transport) protokol koji je osmišljen sa idejama da bude jednostavan za implementaciju, troši malo energije i da bude izrazito efikasan. U ovom je radu detaljno objašnjen način rada protokola, a napravljen je i kratki osvrt na sigurnost ovog protokola što je bitna stavka pošto je danas toliko rasprostranjen.

Keywords: MQTT, Internet of Things

Uvod

Napretkom tehnologije svijet teži tome da se svi uređaji u nečijem posjedu međusobno povežu na internet kako bi se omogućila kontrola i nadzor svih tih uređaja od bilo gdje na svijetu, to je osnovna ideja iza tzv. Internet of Things. Kod takvih se mreža javlja potreba za komunikacijom između uređaja koja je u pravilu bežična, a dimenzije čim manje zbog čega je svako iole kompliciranije rješenje teško izvedivo. Upravo radi takvih situacija je osmišljen MQTT (MQ Telemetry Transport) koji je prvotno bio namijenjen za specifični problem nadziranja naftovoda u pustinji gdje je bio potreban način prijenosa podataka koji će biti efikasan, jednostavan i koristiti čim manje električne energije. Ovaj komunikacijski protokol funkcionira na principu Publish/Subscribe, a zbog jednostavnosti implementacije postao je iznimno popularan pogotovo pri izradi raznih Home Automation sustava, a s druge strane radi tih karakteristika ga koristi i primjerice Facebook Messenger.

Način povezivanja

MQTT protokol prema OSI mrežnom modelu koristi aplikacijski sloj, prezentacijski sloj i sloj sesije, što ujedno odgovara aplikacijskom sloju prema TCP/IP modelu. Za sam prijenos podataka se tako prema modelu koristi već postojeći TCP transportni protokol. Princip rada MQTT protokola je prikazan na slici ispod.

Vidimo da je u sredini broker preko kojega sve poruke prolaze od izvora do odredišta. Kako protokol koristi metodu Publish/Subscribe tako se zapravo svaka poruka objavljuje na zadanu temu, a tu poruku onda broker šalje pretplatnicima.

Klijent

Pod ovim se pojmom u MQTT protokolu smatraju svi uređaji koji su pretplaćeni ili objavljuju u određenu temu. Uređaji koji objavljuju su u sutavima automatizacije najčešće cijeline napravljene od mikrokontrolera i neke vrste senzora koje onda šalju te podatke na određenu temu.

Broker/Server

To je centralni uređaj na koji se spajaju svi klijenti koji žele komunicirati s ostalim klijentima. Broker se ponaša poput poštanske službe koja primi neki paket te ga onda pošalje svim pretplatnicima. Primarne zadaće MQTT brokera su primanje poruka od svih klijenata koji su spojeni na broker, filtriranje tih poruka te slanje tih poruka pretplaćenim klijentima. Uz to je bitna zadaća i ovjeravanje autentičnosti o kojem će više riječi biti u sljedećim poglavljima. Broker se u principu može pokrenuti na svakom računalo sa internet vezom i dovoljno moćnim karakteristima da vrti taj program. Neki od danas često korištenih MQTT brokera su navedeni u tablici ispod uz programski jezik kojim su napisani.

Ime brokeraProgramski jezik
MosquittoC
Hive MQJava
MoscaNode.js
MoquetteJava

Također je moguće koristiti gotove i javno dostupne MQTT brokere od kojih se informacije o nekima od njih nalaze na sljedećim web stranicama: Eclipse IoT, Mosquitto, MQTT Dashboard

Osnovni koncepti

Teme i pretplate

Svaka poruka unutar MQTT protokola se šalje na određenu temu. Klijenti se onda pretplaćuju na te teme i dobivaju poruke koje su objavljene u tim temama. Teme nije potrebno konfigurirati na brokeru već se one same kreiraju ako ne postoje. Teme mogu (ali ne trebaju) biti hijerarhijski organizirane pa tema može glasiti npr. /home/livingroom/temperature. Također se mogu koristiti i zamjenski znakovi kod pretplata kada se npr. klijent želi pretplatiti na sve teme ili na jednu razinu hijerarhije.

Quality of Service

U ovom se protokolu definiraju tri razine kvalitete usluge (Quality of Service, QoS) koje definiraju da li se i koliko provjerava da li će poruka biti dostavljena. Ukoliko klijent i broker imaju namještene različite QoS, komunikacija se odvija po nižoj razini od dvije. Razine i opis kako se odvija komunikacija kod koje je opisano u tablici ispod.

QoSNačin komunikacije
0Poruka se šalje jednom bez potvrde
1Poruka se šalje barem jednom s potvrdom o privitku
2Poruka se šalje jednom, ali koristeći četverostruko rukovanje

Čista sesija

Prilikom povezivanja klijent može postaviti zastavicu za čistu sesiju koja označava da se u slučaju odspajanja klijenta sve pretplate brišu. U suprotnom će prije ponovnog spajanja broker spremati sve poruke razine QoS 1 i 2 da bi one mogle biti ponovno poslane prilikom ponovnog spajanja.

Oporuka

Ova funkcija omogućava da klijent napiše poruku koja će biti objavljena (broker će objaviti) u predviđenu temu ukoliko se dogodi nenadani prekid veze. Ova mogućnost je veoma korisna jer je moguće obavijestiti korisnika o prestanku rada čvora što se zna dosta često dogoditi.

Struktura MQTT paketa

MQTT paket se u osnovi sastoji od tri dijela:

  • fiksno zaglavlje
  • varijabilno zaglavlje
  • sadržaj (payload)

Fiksno zaglavlje

Ovaj dio paketa sadržava tip paketa za čiju se identifikaciju koriste 4 bita te polje koje sadrži specifične zastavice za što se također koriste 4 bita.

Tip paketa

ImeVrijednost (dec)SmjerOpis
Rezervirano0zabranarezervirano
CONNECT1klijent → brokerzahtjev za spajanje
CONNACK2broker → klijentpotvrda spajanja
PUBLISH3dvosmjernoobjava poruke
PUBACK4dvosmjernopotvrda objave
PUBREC5dvosmjernoobjavljivanje primljeno
PUBREL6dvosmjernopuštanje objave
PUBCOMP7dvosmjernoobjava je kompletna
SUBSCRIBE8klijent → brokerzahtjev klijenta za pretplatu
SUBBACK9broker → klijentpotvrda pretplate
UNSUBSCRIBE10klijent → brokerzahtjev za otkazivanje pretplate
UNSUBACK11broker → klijentpotvrda za otkazivanje pretplate
PINGREQ12klijent → brokerzahtjev za odaziv
PINGRESP13broker → klijentodgovor na odaziv
DISCONNECT14klijent → brokerklijent prekida vezu
Rezervirano15zabranarezervirano


Varijabilno zaglavlje

Nalazi se (nekad) između fiksnog zaglavlja i sadržaja. Sadrži sljedeća polja:

  • ime protokola
  • verzija protokola
  • Keep Alive Timer - definira dopušteno vrijeme između slanja i primanja MQTT paketa
  • povratni kod - kod poslan prilikom povezivanja
  • naziv teme

Specifične zastavice

  • zastavica čiste sesije - broker mora pohraniti pretplate klijenta
  • zastavica oporuke - zastavica koja definira da je poruka objavljena od strane brokera zapravo oporuka jednog od klijenata
  • QoS zastavica za oporuku - navodi se da se definira način komunikacije između brokera i klijenta za oporuku
  • zastavica zadržavanja oporuke - definira da li broker treba zadržati poruku oporuke
  • zastavica za korisničko ime i lozinku - znači da su korisničko ime i lozinka uključeni u sadržaju (Payload)

Sadržaj ( Payload )

Samo neki MQTT paketi sadrže sadržaj. Znamo da očito sadržaj sadrži PUBLISH tip poruke u kojem se nalazi sam sadržaj koji klijent želi objaviti u neku temu. Osim njega, sadržaj sadrži i CONNECT paket kojemu se u sadržaju mogu nalaziti: jedinstveni ID, tema oporuke, poruka oporuke, korisničko ime i lozinka. Također sadržaj ima i SUBSCRIBE poruka koja na taj način prenosi teme na koje se želi klijent pretplatiti i QoS kojim želi komunicirati sa brokerom.

Sigurnost

Što se tiče sigurnosti MQTT sam po sebi nema neku zaštitu. Kako se poruke u takvom načinu prenose kao običan tekst (čak i korisničko ime i lozinka!) veoma je lagano presresti te podatke. Takvo presretanje podataka bi se moglo izvesti Man in the middle napadom.

Kako bi se takve situacije izbjegle preporuča se korištenje sigurnosnog TLS/SSL protokola. TLS i SSL su kriptografski protokoli koji omogućavaju sigurnu komunikaciju pomoću hash funkcija. Hash funkcija koja će se koristiti se dogovori na početku pomoću rukovanja.

Takvom zaštitom se štite poruke i unatoč npr. Man in the middle napada podaci štite jer nitko bez ključa ne može pročitati podatke tj. sigurnost ovisi o samoj sigurnosti TLS/SSL protokola.

Izvori

racfor_wiki/mrezna_forenzika/mqtt_protokol.txt · Zadnja izmjena: 2023/06/19 18:17 (vanjsko uređivanje)
Dieses Dokuwiki verwendet ein von Anymorphic Webdesign erstelltes Thema.
CC Attribution-Share Alike 4.0 International
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0