9.1. Miksi verkkoja¶
Laitteiston ohjaus antoi kameralle keinoja puhua tietylle toiselle laitteelle tietyssä toisessa johdossa. UART kameran ja yhden seuralaiskortin välillä. I2C kameran ja samaan lyhyeen väylään kiinnitettyjen sensorien välillä. CAN pienen, yhtä vankkaa väylää jakavan moduulijoukon välillä. Jokainen tapaus noudattaa samaa muotoa: kaksi osapuolta (tai pieni tunnettu ryhmä), yksi jaettu väliaine ja niiden välinen sopimus siitä, mitä kyseisen väliaineen tavut tarkoittavat.
9.1.1. Tämä muoto lakkaa skaalautumasta¶
Pisteestä pisteeseen -malli toimii niin kauan kuin molemmat päät ovat lähellä, molemmat päät ovat ennalta tiedossa ja skripti saa valita, mitä johtoa pitkin se puhuu. Heti kun jokin näistä rajoitteista rikkoutuu, johdotus lakkaa riittämästä.
Monta vastapuolta. Viidenkymmenen yhdelle palvelimelle raportoivan kameran verkkoa ei voi johdottaa yksi yhteen; palvelimella ei ole tarpeeksi UART-väyliä, ja kaapelivedot olisivat mahdottomia.
Vastapuolet eivät ole samassa johdossa. Tehtaassa oleva kamera ja toisella puolen kaupunkia toimistossa oleva kojelauta eivät voi jakaa sarjakaapelia. Niiden välillä on oltava jokin reitti sen infrastruktuurin läpi, joka jo kulkee kahden rakennuksen välillä.
Vastapuolet eivät ole ennalta tiedossa. Kamera, joka julkaisee tuloksensa pilveen, ei valitse johdotuskaaviossa mille palvelimelle se puhuu; pilven osoite on jotain, jonka skripti hakee ajon aikana ja jolle se reitittää dataa.
Monta ohjelmaa yhdessä kaapelissa. Kannettava ajaa nykyään selainta, chat-sovellusta, videopuhelua ja varmuuskopiointia, kaikki puhuvat saman verkkoliitännän läpi samaan aikaan. Johtoa ei voi ”omistaa” yhdelle keskustelulle samalla tavalla kuin UART:ia.
Kukin näistä epäonnistumisista on erilainen laji osoiteongelmaa. Niiden kaikkien ratkaiseminen yhdessä vaatii enemmän kuin johdon ja siirtonopeuden.
9.1.2. Mikä verkko on¶
Verkko on infrastruktuuri, jonka avulla mikä tahansa suuresta joukosta tietokoneita voi vaihtaa viestejä minkä tahansa toisen kanssa ilman, että jokainen pari tarvitsee oman omistetun yhteytensä. Kolme ominaisuutta tekee verkosta jotain enemmän kuin ison sarjakaapelin:
Jaettu väliaine. Monta laitetta kiinnittyy samaan kaapeliin, kytkimeen tai radiokanavaan. Ne vuorottelevat tai multipleksaavat, jotta useampi kuin yksi keskustelu mahtuu samaan fyysiseen yhteyteen.
Loogiset osoitteet. Kullakin laitteella on numero, joka tunnistaa sen riippumatta siitä, mihin kaapeliin se on kytketty. Viestin lähettäminen tarkoittaa kyseisen numeron kirjoittamista viestiin, ei tietyn johdon kytkemistä.
Reititys. Kun lähettäjä ja vastaanottaja eivät ole samalla paikallissegmentillä, niiden välissä oleva infrastruktuuri kuljettaa viestin hyppy hypyltä. Päätepisteet eivät tunne reittiä; ne tuntevat vain toistensa osoitteet.
Toimiston Wi-Fi-verkossa oleva kannettava, joka tavoittaa kaukaisessa datakeskuksessa olevan palvelimen, käyttää kaikkia kolmea. Wi-Fi-linkki on jaettu radioväliaine; kannettavalla ja palvelimella on kummallakin oma looginen osoitteensa; viesti pujottautuu sen infrastruktuurin läpi, joka sijaitsee niiden kahden välissä, välittyen hyppy kerrallaan. Käyttäjä napsauttaa linkkiä, kannettava lähettää paketin, ja verkko hoitaa loput.
9.1.3. Entäpä kamera?¶
Kamera näyttelee verkossa täsmälleen samaa roolia kuin kannettava. Se poimii loogisen osoitteen liittyessään verkkoon, osoittaa lähtevät viestit muiden laitteiden loogisiin osoitteisiin ja antaa infrastruktuurin reitittää ne.
Mikä muuttuu laitteiston ohjauksen luvuista, on rajapinta. UART-instanssin avaamisen ja tavujen siihen kirjoittamisen sijaan skripti avaa soketin ja kirjoittaa tavuja siihen. Soketti on päätepiste verkkoon samalla tavalla kuin UART-instanssi on päätepiste johtoon. Soketin ja johdon väliset osat – kehykset, paketit, reititystaulut, kytkimet, radiot – ovat kaikki alapuolella ja enimmäkseen näkymättömiä Python-koodille.
Edessä olevat sivut erittelevät nämä osat kerros kerrokselta, jotta abstraktio ”avaa soketti ja lähetä tavuja” tuntuu väistämättömältä eikä taikuudelta.