Kontroll ta' ESP8266 mingħajr port forwarding: passaġġ MQTT ħiereġ
Broker li jista' jintlaħaq mill-internet iħalli apparat tad-dar jiġi kkontrollat permezz ta' konnessjoni li fetaħ hu stess. X'jinbidel dan għall-memorja TLS, is-suġġetti u r-ripetizzjoni.
L-apparat joqgħod wara router tad-dar mingħajr port forwarding u mingħajr indirizz pubbliku, u xorta għandu jirċievi l-konfigurazzjoni fi ftit sekondi. L-ingann mhuwiex toqba fil-firewall. Hija konnessjoni li l-apparat jiftaħ 'il barra lejn broker li jista' jasal għalih, li mbagħad jibgħat il-messaġġi lura tul dik it-triq stabbilita. Kull proprjetà li n-nies jħobbu f'dan id-disinn, u kull nassa fih, ġejja minn din l-inverżjoni.
X'jgħaddi tassew min-NAT
Meta l-apparat jiftaħ konnessjoni TCP mal-broker, ir-router tad-dar joħloq mapping u jżommha ħajja għall-ħajja kollha tal-fluss. It-tweġibiet fuq dak il-fluss jerġgħu lura lejn l-apparat għax il-mapping diġà teżisti. Il-broker qatt ma jibda xejn lejn id-dar, għalhekk m'hemmx pakkett dieħel mhux mitlub li r-router għandu jirrifjuta. Dan huwa l-argument kollu tan-netwerk, u għalhekk dan il-metodu jaħdem fuq netwerks li ma tikkontrollax.
L-apparat irid iżomm il-konnessjoni ħajja jew jerġa' jistabbilixxiha, u dan isir il-kwistjoni tal-affidabbiltà ladarba l-arkitettura tiġi stabbilita.
Il-broker jgħaddi s-suġġetti, ma jagħmilx proxy tal-HTTP
MQTT jiddefinixxi skambji ta' pubblikazzjoni u abbonament: l-apparat jabbona ma' filtru tas-suġġett li jitħalla jaqra, u kontrollur awtorizzat jippubblika fuq suġġett li jaqbel. Il-broker iqabbel il-pubblikazzjonijiet mal-abbonamenti u jwassal kopji. Ma jafx x'inhi talba tal-browser, u mhux se jgħaddi HTTP GET lis-server web tal-apparat. Jekk il-firmware eżistenti jitkellem biss HTTP, id-disinn tal-broker jeħtieġ bidla fl-applikazzjoni jew komponent tat-traduzzjoni maħsub.
Ismijiet tas-suġġetti lanqas mhumiex awtorizzazzjoni. Il-biċċa l-kbira tal-brokers jappoġġjaw listi tal-kontroll tal-aċċess għal kull klijent, u l-apparati għandhom ikunu ristretti għas-siġar tal-pubblikazzjoni u l-abbonament tagħhom stess minflok ma jaqsmu spazju tal-ismijiet globali wieħed.
Ir-riżorsi tal-apparat jiddeterminaw il-forma tat-TLS
L-ESP8266 għandu RAM limitata, u l-handshake TLS huwa l-iktar ħaġa għalja li jagħmel. Il-qalba Arduino tforni BearSSL proprju għal dan il-limitazzjoni, u l-għażla bejn li tivverifika CA u li twaħħal impronta tas-swaba' tibdel kemm l-impronta tal-memorja kif ukoll dak li jista' jagħmel attakkant b'ċertifikat validu għal isem ieħor. Li tivverifika s-CA tal-broker hija l-għażla l-aktar b'saħħitha meta l-heap jippermettiha. Id-daqs tal-payload huwa importanti wkoll: il-klijent MQTT iżomm buffer, u messaġġi akbar minnu jinqatgħu bil-kwiet sakemm il-buffer ma jitkabbarx b'mod maħsub.
Keepalive u timeouts tas-socket huma parti mill-istess baġit, għax klijent li qatt ma jinnota konnessjoni mejta jieqaf jirċievi kmandi mingħajr ma jirrapporta żball.
Is-semantika tal-messaġġi li tgiddem
Messaġġ miżmum jinħażen mill-broker u jitwassal lil abbonati li jaqblu aktar tard, li huwa eċċellenti għall-istat attwali u perikoluż għall-kmandi ta' darba: apparat li jerġa' jikkonnettja jista' jirċievi l-kmand ta' bieraħ bħallikieku ġdid. QoS 1 jiggarantixxi twassil mill-inqas darba, għalhekk id-duplikati huma normali u l-applikazzjoni trid tkun sigura mill-ripetizzjoni, idealment b'identifikatur jew timestamp li jista' jirrifjuta. L-aħħar rieda tagħtik sinjal tal-istat meta l-apparat jaqa', iżda biss jekk il-konnessjoni tfalli tassew minflok ma tibqa' mdendla.
L-imġiba tas-sessjoni nadifa tiddetermina jekk il-broker iżommx l-abbonamenti tiegħek waqt li tkun 'il bogħod, u li tagħmel dan ħażin huwa r-raġuni għaliex xi apparati jitilfu l-ewwel messaġġ wara kull konnessjoni mill-ġdid.
TLS jipproteġi s-sezzjoni sal-broker. Mhuwiex encryption tal-payload minn tarf għal tarf kontra l-operatur tal-broker, li jista' jaqra kull ma tippubblika permezz tiegħu.
Illimita ċ-ċiklu tal-ħajja u ttestsjah b'data li ma tagħmilx ħsara
Ippjana konnessjoni mill-ġdid b'irtirar minflok loop ta' tentattivi mill-ġdid iebsa, erġa' abbona b'mod espliċitu jekk is-sessjoni mhijiex persistenti, u rreġistra r-riżultat tal-konnessjoni sabiex apparat sieket offline iħalli evidenza. Ittestja t-triq tal-konnessjoni mill-ġdid b'payloads ta' kampjun li ma jagħmlu xejn, għax l-ewwel test tal-produzzjoni ta' kanal ta' kmandi m'għandux ikun kmand veru. Imbagħad ikkonferma x'jagħmel messaġġ miżmum antik waqt il-konnessjoni mill-ġdid, u tiddeċiedi jekk dik l-imġiba hijiex aċċettabbli għal kull suġġett.
Magħmul hekk, id-disinn ineħħi rekwiżit wieħed tan-netwerk dieħel u jħalli s-software tal-apparat, il-politika tal-broker u s-semantika tal-messaġġi bħala xogħol viżibbli minflok suppożizzjonijiet moħbija.