La aparato staras malantaŭ hejma enkursigilo sen porda plusendo kaj sen publika adreso, kaj ĝi tamen devas ricevi agordojn ene de sekundoj. La artifiko ne estas truo en la fajroŝirmilo. Ĝi estas konekto, kiun la aparato malfermas eksteren al broker, kiun ĝi povas atingi, kaj tiu poste redonas mesaĝojn laŭ la sama establita vojo. Ĉiu eco, kiun homoj ŝatas en ĉi tiu dezajno, kaj ĉiu kaptilo en ĝi, venas el tiu inversigo.

Kio efektive trapasas la NAT

Kiam la aparato malfermas TCP-konekton al la broker, la hejma enkursigilo kreas mapadon kaj tenas ĝin viva dum la tuta daŭro de la fluo. Respondoj sur tiu fluo revenas al la aparato ĉar la mapado jam ekzistas. La broker neniam iniciatas ion ajn al la domo, do ne estas nepetita envena paketo, kiun la enkursigilo rifuzu. Tio estas la tuta reta argumento, kaj tial la aliro funkcias en retoj, kiujn vi ne kontrolas.

La aparato devas teni la konekton viva aŭ restarigi ĝin, kio fariĝas la fidindeca demando, post kiam la arkitekturo fiksiĝas.

La brokero enkursigas temojn, ĝi ne prokuroras HTTP

MQTT difinas interŝanĝojn de publikigo kaj abono: la aparato abonas temfiltron, kiun ĝi rajtas legi, kaj rajtigita regilo publikigas al kongrua temo. La brokero kongruigas publikigojn kun abonoj kaj liveras kopiojn. Ĝi ne scias, kio estas peto de retumilo, kaj ĝi ne plusendos HTTP GET al la retservilo de la aparato. Se la ekzistanta firmvaro parolas nur HTTP, la broker-dezajno bezonas aplikaĵan ŝanĝon aŭ konscian tradukan komponanton.

Ankaŭ temnomoj ne estas rajtigo. Plej multaj brokeroj subtenas alirkontrolajn listojn por ĉiu kliento, kaj aparatoj devus esti limigitaj al siaj propraj publikigaj kaj abonaj arboj anstataŭ kunhavigi unu tutmondan nomspacon.

La rimedoj de la aparato decidas la formon de TLS

ESP8266 havas limigitan RAM, kaj TLS-manpremo estas la plej multekosta afero, kiun ĝi faras. La Arduino-kerno liveras BearSSL ĝuste pro ĉi tiu limigo, kaj la elekto inter kontroli CA kaj fiksi fingrospuron ŝanĝas kaj la memorspuron kaj tion, kion atakanto kun valida atestilo por alia nomo povas fari. Kontroli la CA de la broker estas la pli forta opcio, kiam la amaso permesas. Ankaŭ la grandeco de la utila ŝarĝo gravas: la MQTT-kliento tenas bufron, kaj mesaĝoj pli grandaj ol ĝi estas silenteme tranĉitaj, se la bufro ne estas konscie pligrandigita.

Keepalive kaj soketaj tempolimoj estas parto de la sama buĝeto, ĉar kliento, kiu neniam rimarkas mortan konekton, ĉesas ricevi komandojn sen raporti eraron.

La mesaĝa semantiko, kiu mordas

Retenitan mesaĝon la brokero konservas kaj liveras al postaj kongruaj abonantoj, kio estas bonega por nuna stato kaj danĝera por unufojaj komandoj: aparato, kiu rekonektiĝas, povas ricevi la komandon de hieraŭ kvazaŭ ĝi estus nova. QoS 1 garantias liveron almenaŭ unufoje, do duoblaĵoj estas normalaj kaj la aplikaĵo devas esti ripetsekura, ideale kun identigilo aŭ tempomarko, kiun ĝi povas malakcepti. La lasta volo donas al vi statussignalon, kiam la aparato falas, sed nur se la konekto vere malsukcesas anstataŭ pendi.

La konduto de pura sesio decidas, ĉu la brokero konservas viajn abonojn dum vi forestas, kaj erari pri tio estas la kialo, kial iuj aparatoj maltrafas la unuan mesaĝon post ĉiu rekonekto.

TLS protektas la etapon ĝis la brokero. Ĝi ne estas finfina ĉifrado de la utila ŝarĝo kontraŭ la broker-operaciisto, kiu povas legi ĉion, kion vi publikigas tra ĝi.

Limigi la vivociklon kaj testi ĝin per senriskaj datumoj

Planu rekonekton kun retiriĝo anstataŭ streĉa ripeta buklo, reabonu eksplicite se la sesio ne estas persista, kaj registru la rezulton de la konekto, por ke silenta sendrata aparato lasu pruvon. Testu la rekonektan vojon per specimenaj utilaj ŝarĝoj, kiuj faras nenion, ĉar la unua produktada testo de komanda kanalo ne devus esti vera komando. Poste konfirmu, kion malnova retenita mesaĝo faras ĉe rekonekto, kaj decidu, ĉu tiu konduto estas akceptebla por ĉiu temo.

Farite tiel, la dezajno forigas unu envenan retan postulon kaj lasas la aparatan programaron, la brokeran politikon kaj la mesaĝan semantikon kiel videblan laboron anstataŭ kaŝitajn supozojn.

Rilataj artikoloj