9.20. Yhteenveto¶
Olet käynyt läpi kerrokset, jotka verkkoviesti ylittää matkallaan kamerasta muuhun maailmaan:
Lähtökohta – verkkoja on olemassa, koska piste piste-johdotus lakkaa skaalautumasta heti, kun useamman kuin parin laitteen on kommunikoitava, tai vastapuoli ei ole samassa johdossa, tai monta ohjelmaa jakaa saman linkin yhtä aikaa. Vastauksena ovat jaetut siirtotiet, loogiset osoitteet ja reititys.
Kerrosmalli – viisi kerrosta, joista kukin ratkaisee yhden ongelman ja tarjoaa puhtaan rajapinnan seuraavalle. Fyysinen ja linkkikerros käsittelevät bittejä ja kehyksiä välittömien naapureiden välillä, verkkokerros käsittelee osoittamista ja reititystä internetin yli, kuljetuskerros käsittelee ohjelmasta ohjelmaan -toimitusta, ja sovellusprotokollat rakentuvat kaiken tämän päälle.
Alimmat kerrokset – Ethernet ja Wi-Fi käytännön linkkitekniikoina; MAC-osoitteet tunnistavat laitteiston paikallisessa segmentissä. Kameran
network-moduuli paljastaa yhden tietämisen arvoisen säätimen: mihin Wi-Fi-verkkoon liitytään. Sen jälkeen kaikki alapuolella tapahtuu automaattisesti.Verkkokerros (IP) – IPv4- ja IPv6-osoitteet tunnistavat koneet riippumatta siitä, mihin kaapeliin ne on kytketty. Reitittimet hyppyttävät paketteja paikallisten segmenttien välillä, kunnes ne saapuvat perille. Yksityiset osoitealueet ja NAT ovat syy siihen, miksi koti- ja toimistoverkoilla on oma sisäinen osoiteavaruutensa ja yksi jaettu julkinen osoite reunalla; ulospäin suuntautuva liikenne toimii vapaasti, sisäänpäin tuleva tarvitsee apua.
Kuljetuskerros – portit tunnistavat ohjelmat koneen sisällä; koko
(IP, port)-pari tunnistaa yhden tietyn socketin. UDP on ohut kerros, joka lähettää yhden itsessään täydellisen datagrammin kerrallaan ilman takeita – nopea, edullinen ja oikea työkalu, kun häviö on hyväksyttävää. TCP on yhteyssuuntautunut, luotettava, järjestetty tavuvirta – valtaosan internetliikenteestä työjuhta, joka maksetaan yhden edestakaisen matkan kättelyviiveellä.Python-API –
socket.socketon molemmille protokollille yksi ja sama luokka.sendto()/recvfrom()UDP:lle; connect- tai listen-mallit sekäsend()/recv()TCP:lle. Socketit sopivat siististi yhteenasyncio:n kanssa:asyncio.open_connection()jaasyncio.start_server()antavat jokaiselle TCP-yhteydelle reader/writer-parin, joten monta samanaikaista keskustelua jakaa yhden tapahtumasilmukan ilman säikeitä.Nimet ja aika –
socket.getaddrinfo()muuntaa nimen kutenexample.comIP-osoitteeksi, joka on valmis annettavaksi socketille.network.hostname()asettaa kameran oman nimen, jonka reitittimet rekisteröivät paikalliseen DNS:äänsä ja johon kameran sisäänrakennettu mDNS-vastaaja vastaa muodossa<name>.local.ntptime.settime()on sama ”hae jokin asia verkosta” -idea sovellettuna seinäkellon aikaan, asettaen kortin kellon UTC-aikaan julkiselta NTP-palvelimelta.Salaus –
sslkääräisee socketin TLS:ään. Kamera toimitetaan ilman varmenneviranomaisvarastoa, joten oletuksena saat vain salauksen – keskustelu ei ole enää selkokielistä, mutta kamera ei varmista, kuka vastasi. Todellista todennusta varten – julkisten HTTPS-palvelimien varmentaminen, kameran ajaminen TLS-palvelimena, molemminpuolinen TLS – varmenteisiin perustuva työnkulku käsitellään sivulla TLS-varmenteiden kanssa työskentely. DTLS (TLS UDP:n yli) käyttää samaa moduulia samalla tavalla.Todellinen sovellusprotokolla – MQTT esimerkkinä siitä, miten jokainen sen alla oleva kerros kytkeytyy yhteen. 1-tavuinen tyyppi-ja-liput-tavu, vaihtuvanmittainen jäljellä oleva pituus -kenttä, pituusetuliitteinen UTF-8-aihe ja hyötykuorma, kaikki kulkien TCP:n yli (ja valinnaisesti TLS:n sisällä) brokerille, joka levittää viestin jokaiselle aiheeseen tilatulle. Mukana tuleva
mqtt-client kääräisee siirtomuodonconnect/publish/subscribe-API:in, joka on niin pieni, että sen voi lukea yhdeltä istumalta.
Tämä riittää sellaisten kamerasovellusten kirjoittamiseen, jotka keskustelevat muiden koneiden kanssa, julkaisevat dataa etäpalveluihin, hyväksyvät yhteyksiä clienteiltä paikallisverkossa ja tekevät kaiken tämän samanaikaisesti kameran muun työn kanssa.
9.20.1. Tämän lähteen käyttäminen myöhemmin¶
Käsittele verkkolukuja viiteaineistona; palaaminen UDP-kuuntelijan tarkkaan muotoon tai TLS-asyncio-malliin on tarkoitettu käyttötapa. Viitesivut network — verkkomääritykset, socket — socket-moduuli, ssl — SSL/TLS-moduuli ja ntptime — yksinkertainen NTP-asiakas luettelevat jokaisen metodin, lipun ja vakion yhdessä paikassa, kun kysymys on vain ”mikä on tämän kutsun tarkka nimi”.
9.20.2. Mihin tästä edetä¶
Verkkopalvelimet on seuraava suuri aihe. Kun socketit toimivat ja TLS on saatavilla, luonnollinen seuraava kerros ylöspäin ovat niiden päälle rakentuvat protokollat: HTTP sisällön ja API:en tarjoamiseen, WebSocketit yhteyksien pitämiseen auki molempiin suuntiin, ja pienet kehykset, jotka piilottavat toistuvan rutiinikoodin. Kaikki tämän osion sisältö siirtyy mukana – verkkopalvelin on loppujen lopuksi vain TCP-palvelin, joka puhuu HTTP:tä hyväksymillään socketeilla, usein TLS:n kääriessä koko homman.