Kontrolli i ESP8266 pa përcjellje portash: një rrugë dalëse MQTT
Një broker i arritshëm nga interneti lejon kontrollimin e një pajisjeje shtëpiake përmes një lidhjeje që ajo vetë hapi. Çfarë ndryshon kjo për memorien TLS, temat dhe përsëritjen.
Pajisja qëndron pas një routeri shtëpiak pa përcjellje portash dhe pa adresë publike, dhe gjithsesi duhet të marrë konfigurimin brenda sekondave. Truku nuk është një vrimë në firewall. Është një lidhje që pajisja hap nga jashtë drejt një brokeri që mund ta arrijë, dhe ai më pas i kthen mesazhet në të njëjtën rrugë tashmë të vendosur. Çdo veti që njerëzve u pëlqen në këtë dizajn, dhe çdo kurth në të, vjen nga ky përmbysje.
Çfarë kalon në të vërtetë përmes NAT
Kur pajisja hap një lidhje TCP drejt brokerit, routeri i shtëpisë krijon një hartëzim dhe e mban gjallë për gjithë kohëzgjatjen e rrjedhës. Përgjigjet në atë rrjedhë kthehen te pajisja sepse hartëzimi ekziston tashmë. Brokeri nuk nis kurrë asgjë drejt shtëpisë, prandaj nuk ka paketë hyrëse të pakërkuar që routeri duhet të refuzojë. Ky është i gjithë argumenti i rrjetit, dhe për këtë arsye kjo qasje funksionon në rrjete që nuk i kontrolloni.
Pajisja duhet ta mbajë lidhjen gjallë ose ta rivendosë atë, gjë që bëhet çështja e besueshmërisë pasi arkitektura të jetë caktuar.
Brokeri i drejton temat, nuk bën proxy HTTP
MQTT përcakton shkëmbimet e publikimit dhe abonimit: pajisja abonohet në një filtër temash që i lejohet të lexojë, dhe një kontrollues i autorizuar publikon në një temë përkatëse. Brokeri përputh publikimet me abonimet dhe dërgon kopje. Nuk e di çfarë është një kërkesë shfletuesi dhe nuk do të përcjellë një HTTP GET te serveri web i pajisjes. Nëse firmware-i ekzistues flet vetëm HTTP, dizajni me broker kërkon një ndryshim aplikacioni ose një komponent përkthimi të qëllimshëm.
Edhe emrat e temave nuk janë autorizim. Shumica e brokerëve mbështesin lista të kontrollit të aksesit për çdo klient, dhe pajisjet duhet të kufizohen në pemët e tyre të publikimit dhe abonimit në vend që të ndajnë një hapësirë të vetme globale emrash.
Burimet e pajisjes përcaktojnë formën e TLS
ESP8266 ka RAM të kufizuar, dhe shtrëngimi i duarve TLS është gjëja më e shtrenjtë që bën. Bërthama Arduino e furnizon BearSSL pikërisht për këtë kufizim, dhe zgjedhja midis verifikimit të një CA dhe fiksimit të një gjurmë gishti ndryshon si gjurmën e memories ashtu edhe atë që mund të bëjë një sulmues me një certifikatë të vlefshme për një emër tjetër. Verifikimi i CA-së së brokerit është opsioni më i fortë kur heap-i e lejon. Edhe madhësia e ngarkesës ka rëndësi: klienti MQTT mban një buffer, dhe mesazhet më të mëdha se ai shkurtohen në heshtje nëse buffer-i nuk rritet me qëllim.
Keepalive dhe afatet e socket-it janë pjesë e të njëjtit buxhet, sepse një klient që nuk e vëren kurrë një lidhje të vdekur ndalon së marri komanda pa raportuar gabim.
Semantika e mesazheve që kafshon
Një mesazh i mbajtur ruhet nga brokeri dhe dërgohet te abonentët përkatës të mëvonshëm, gjë që është e shkëlqyer për gjendjen aktuale dhe e rrezikshme për komandat njëherësh: një pajisje që rilidhet mund të marrë komandën e djeshme sikur të ishte e re. QoS 1 garanton dërgimin të paktën një herë, prandaj dublikatat janë normale dhe aplikacioni duhet të jetë i sigurt ndaj përsëritjes, idealisht me një identifikues ose një vulë kohe që mund ta refuzojë. Vullneti i fundit ju jep një sinjal statusi kur pajisja bie, por vetëm nëse lidhja dështon vërtet në vend që të varet.
Sjellja e sesionit të pastër vendos nëse brokeri i mban abonimet tuaja sa kohë që ju mungoni, dhe gabimi aty është arsyeja pse disa pajisje humbin mesazhin e parë pas çdo rilidhjeje.
TLS mbron pjesën deri te brokeri. Nuk është enkriptim i ngarkesës nga skaji në skaj kundrejt operatorit të brokerit, i cili mund të lexojë gjithçka që publikoni përmes tij.
Kufizoni ciklin e jetës dhe provojeni me të dhëna të padëmshme
Planifikoni rilidhjen me tërheqje prapa në vend të një cikli të shtrënguar ripërpjekjesh, riabonohuni në mënyrë eksplicite nëse sesioni nuk është i vazhdueshëm, dhe regjistroni rezultatin e lidhjes që një pajisje e qetë jashtë linje të lërë prova. Provoni rrugën e rilidhjes me ngarkesa shembull që nuk bëjnë asgjë, sepse testi i parë i prodhimit i një kanali komandash nuk duhet të jetë një komandë e vërtetë. Më pas konfirmoni çfarë bën një mesazh i mbajtur i vjetëruar gjatë rilidhjes, dhe vendosni nëse ajo sjellje është e pranueshme për çdo temë.
I bërë kështu, dizajni heq një kërkesë rrjeti hyrëse dhe lë softuerin e pajisjes, politikën e brokerit dhe semantikën e mesazheve si punë të dukshme në vend të supozimeve të fshehura.