Įrenginys stovi už namų maršrutizatoriaus be prievado peradresavimo ir be viešojo adreso, o vis tiek turi gauti konfigūraciją per kelias sekundes. Gudrybė nėra skylė ugniasienėje. Tai ryšys, kurį įrenginys atidaro į išorę link broker, kurį gali pasiekti, o tas vėliau grąžina pranešimus tuo pačiu jau nustatytu keliu. Kiekviena savybė, kuri šiame dizaine patinka, ir kiekvienas jame esantis spąstas kyla iš šio apsivertimo.

Kas iš tikrųjų praeina per NAT

Kai įrenginys atidaro TCP ryšį su broker, namų maršrutizatorius sukuria susiejimą ir palaiko jį gyvą visą srauto gyvavimo laiką. Atsakymai tame sraute grįžta įrenginiui, nes susiejimas jau egzistuoja. Broker niekada nieko nepradeda namo link, todėl nėra neprašyto gaunamojo paketo, kurį maršrutizatorius turėtų atmesti. Tai yra visas tinklo argumentas, ir todėl šis metodas veikia tinkluose, kurių nevaldote.

Įrenginys turi palaikyti ryšį gyvą arba jį atkurti, ir tai tampa patikimumo klausimu, kai architektūra nusistovi.

Broker maršrutizuoja temas, jis neproxyina HTTP

MQTT apibrėžia publikavimo ir prenumeratos mainus: įrenginys prenumeruoja temų filtrą, kurį jam leidžiama skaityti, o įgaliotas valdiklis publikuoja į atitinkamą temą. Broker suderina publikacijas su prenumeratomis ir pristato kopijas. Jis nežino, kas yra naršyklės užklausa, ir nepersiųs HTTP GET į įrenginio žiniatinklio serverį. Jei esama programinė įranga kalba tik HTTP, broker dizainui reikia programos pakeitimo arba sąmoningo vertimo komponento.

Temų pavadinimai taip pat nėra autorizacija. Dauguma broker palaiko prieigos kontrolės sąrašus kiekvienam klientui, o įrenginiai turėtų būti apriboti savo publikavimo ir prenumeratos medžiais, o ne dalytis viena globalia vardų erdve.

Įrenginio ištekliai nulemia TLS formą

ESP8266 turi ribotą RAM, o TLS rankos paspaudimas yra pats brangiausias jo veiksmas. Arduino branduolys tiekia BearSSL būtent dėl šio apribojimo, o pasirinkimas tarp CA tikrinimo ir piršto atspaudo prisegimo keičia ir atminties pėdsaką, ir tai, ką gali padaryti užpuolikas su galiojančiu kitu vardu išduotu sertifikatu. Broker CA tikrinimas yra stipresnis variantas, kai krūva leidžia. Naudingosios apkrovos dydis taip pat svarbus: MQTT klientas laiko buferį, o didesni pranešimai tyliai nukerpami, jei buferis sąmoningai nepadidinamas.

Keepalive ir lizdo skirtieji laikai yra to paties biudžeto dalis, nes klientas, kuris niekada nepastebi negyvo ryšio, nustoja gauti komandas nepranešęs apie klaidą.

Pranešimų semantika, kuri kandžiojasi

Išlaikytą pranešimą broker saugo ir pristato vėlesniems atitinkamiems prenumeratoriams, o tai puiku dabartinei būsenai ir pavojinga vienkartinėms komandoms: iš naujo prisijungęs įrenginys gali gauti vakarykštę komandą lyg ji būtų nauja. QoS 1 garantuoja pristatymą bent kartą, todėl dublikatai yra normalūs, o programa turi būti atspari kartojimui, idealu su identifikatoriumi ar laiko žyma, kurią ji gali atmesti. Paskutinė valia duoda būsenos signalą, kai įrenginys iškrenta, bet tik jei ryšys tikrai nepavyksta, o ne pakimba.

Švarios sesijos elgsena nusprendžia, ar broker laiko jūsų prenumeratas, kol jūsų nėra, ir čia suklysti yra priežastis, kodėl kai kurie įrenginiai praleidžia pirmąjį pranešimą po kiekvieno prisijungimo iš naujo.

TLS saugo atkarpą iki broker. Tai nėra naudingosios apkrovos šifravimas nuo galo iki galo prieš broker operatorių, kuris gali skaityti viską, ką per jį publikuojate.

Apribokite gyvavimo ciklą ir išbandykite jį nekenksmingais duomenimis

Planuokite prisijungimą iš naujo su atsitraukimu, o ne su tankia kartojimo kilpa, aiškiai prenumeruokite iš naujo, jei sesija nėra nuolatinė, ir registruokite prisijungimo rezultatą, kad tylus neprisijungęs įrenginys paliktų įrodymų. Išbandykite prisijungimo iš naujo kelią pavyzdinėmis naudingosiomis apkrovomis, kurios nieko nedaro, nes pirmasis gamybinis komandų kanalo testas neturėtų būti tikra komanda. Tada patvirtinkite, ką pasenęs išlaikytas pranešimas daro prisijungus iš naujo, ir nuspręskite, ar tokia elgsena priimtina kiekvienai temai.

Taip padarytas dizainas pašalina vieną įeinančio tinklo reikalavimą ir palieka įrenginio programinę įrangą, broker politiką ir pranešimų semantiką kaip matomą darbą, o ne paslėptas prielaidas.

Susiję straipsniai