Eininga står bak ein heimeruter utan port forwarding og utan offentleg adresse, og ho må likevel ta imot konfigurasjon innan sekund. Trikset er ikkje eit hol i brannmuren. Det er ei tilkopling som eininga opnar utover mot ein broker ho kan nå, og som så sender meldingane tilbake langs den same etablerte vegen. Kvar eigenskap folk likar ved dette designet, og kvar felle i det, kjem frå denne inverteringa.

Kva som faktisk kjem gjennom NAT

Når eininga opnar ei TCP-tilkopling til brokeren, lagar heimeruteren ei kartlegging og held ho i live så lenge straumen varer. Svar på den straumen kjem tilbake til eininga fordi kartlegginga alt finst. Brokeren startar aldri noko mot huset, så det finst ingen uoppfordra inngåande pakke som ruteren må avvise. Det er heile nettverksargumentet, og difor fungerer tilnærminga på nettverk du ikkje kontrollerer.

Eininga må halde tilkoplinga i live eller gjenopprette ho, noko som blir pålitelegheitsspørsmålet når arkitekturen er fastlagd.

Brokeren rutar emne, han proxyar ikkje HTTP

MQTT definerer utvekslingar for publisering og abonnement: eininga abonnerer på eit emnefilter ho har lov til å lese, og ein autorisert kontrollør publiserer til eit samsvarande emne. Brokeren matchar publiseringar mot abonnement og leverer kopiar. Han veit ikkje kva ein nettlesarførespurnad er, og han vil ikkje videresende ein HTTP GET til nettservern til eininga. Viss den eksisterande fastvaren berre snakkar HTTP, treng brokerdesignet ei endring i applikasjonen eller ein medviten omsetjingskomponent.

Emnenamn er heller ikkje autorisasjon. Dei fleste brokerar støttar tilgangskontrollistar per klient, og einingar bør avgrensast til sine eigne publiserings- og abonnementstre i staden for å dele eitt globalt namnerom.

Ressursane til eininga avgjer TLS-forma

Ein ESP8266 har avgrensa RAM, og eit TLS-handtrykk er det dyraste han gjer. Arduino-kjernen leverer BearSSL nettopp på grunn av denne avgrensinga, og valet mellom å stadfeste ein CA og å pinne eit fingeravtrykk endrar både minneavtrykket og kva ein angripar med eit gyldig sertifikat for eit anna namn kan gjere. Å stadfeste CA-en til brokeren er det sterkare alternativet når heapen tillèt det. Storleiken på nyttelasta betyr òg noko: MQTT-klienten held ein buffer, og meldingar som er større enn han, blir stille kutta med mindre bufferen blir auka medvite.

Keepalive og socket-tidsavbrot er ein del av same budsjett, fordi ein klient som aldri merkar ei død tilkopling, sluttar å ta imot kommandoar utan å rapportere ein feil.

Meldingssemantikken som bit

Ei halden melding blir lagra av brokeren og levert til seinare samsvarande abonnentar, noko som er framifrå for gjeldande tilstand og farleg for eingongskommandoar: ei eining som koplar til på nytt, kan ta imot gårsdagens kommando som om han var ny. QoS 1 garanterer levering minst éin gong, så duplikat er normale, og applikasjonen må vere trygg mot atttaking, ideelt med ein identifikator eller eit tidsstempel han kan avvise. Den siste viljen gir deg eit statussignal når eininga fell ut, men berre viss tilkoplinga faktisk feilar i staden for å henge.

Åtferda til ein rein sesjon avgjer om brokeren held på abonnementa dine medan du er borte, og å gjere det feil er grunnen til at nokre einingar mistar den første meldinga etter kvar gjenoppkopling.

TLS vernar strekninga til brokeren. Det er ikkje ende-til-ende-kryptering av nyttelasta mot brokeroperatøren, som kan lese alt du publiserer gjennom han.

Avgrens livssyklusen og test han med ufarlege data

Planlegg gjenoppkopling med backoff i staden for ei tett atttakingsløkke, abonner eksplisitt på nytt viss sesjonen ikkje er varig, og logg tilkoplingsresultatet slik at ei stille fråkopla eining etterlèt bevis. Test gjenoppkoplingsvegen med døme på nyttelaster som ikkje gjer noko, fordi den første produksjonstesten av ein kommandokanal ikkje bør vere ein ekte kommando. Stadfest deretter kva ei utdatert halden melding gjer ved gjenoppkopling, og avgjer om den åtferda er akseptabel for kvart emne.

Gjort på denne måten fjernar designet eitt inngåande nettverkskrav og lèt einingprogramvaren, brokerpolicyen og meldingssemantikken stå att som synleg arbeid i staden for skjulte føresetnader.

Relaterte artiklar