9.1. Zašto mreže¶
Hardverska kontrola dala je kameri načine za razgovor s jednim određenim drugim uređajem na jednoj određenoj drugoj žici. UART između kamere i jedne pridružene pločice. I2C između kamere i senzora koji vise na istoj kratkoj sabirnici. CAN između manjeg skupa modula koji dijele jednu robusnu sabirnicu. Svaki slučaj prati isti obrazac: dvije strane (ili manja poznata skupina), jedan zajednički medij, dogovor među njima o tome što bajtovi na tom mediju znače.
9.1.1. Taj obrazac prestaje skalirati¶
Obrazac od točke do točke radi sve dok su oba kraja blizu, oba kraja poznata unaprijed i dok skripta bira kojom žicom razgovara. Čim se bilo koje od tih ograničenja prekrši, ožičenje prestaje biti dovoljno.
Mnogo sugovornika. Mreža od pedeset kamera koje izvještavaju jedan poslužitelj ne može biti ožičena jedan-na-jedan; nema dovoljno UART-ova na poslužitelju, a duljine kabela bile bi nemoguće.
Sugovornici koji nisu na istoj žici. Kamera u tvornici i nadzorna ploča u uredu na drugom kraju grada ne mogu dijeliti serijski kabel. Neki put mora postojati između njih kroz bilo koju infrastrukturu koja već postoji između dviju zgrada.
Sugovornici koji nisu poznati unaprijed. Kamera koja objavljuje svoje rezultate u oblak ne bira u shemi ožičenja s kojim poslužiteljem razgovara; adresu oblaka skripta pronalazi tijekom izvođenja i prema njoj usmjerava podatke.
Mnogo programa na jednom kabelu. Prijenosno računalo danas pokreće preglednik, aplikaciju za razgovor, videopoziv i sigurnosnu kopiju, sve istovremeno komunicirajući kroz isto mrežno sučelje. Žicu ne može „posjedovati” jedan razgovor onako kako je to slučaj s UART-om.
Svaki od tih neuspjeha drugačija je vrsta problema adresiranja. Rješavanje svih njih zajedno zahtijeva više od žice i brzine prijenosa.
9.1.2. Što je mreža¶
Mreža je infrastruktura koja omogućuje bilo kojem od velikog broja računala razmjenu poruka s bilo kojim drugim, bez potrebe da svaki par ima vlastitu namjensku vezu. Tri svojstva čine mrežu nečim više od velikog serijskog kabela:
Zajednički medij. Mnogo uređaja priključuje se na isti kabel, preklopnik ili radiokanal. Izmjenjuju se ili multipleksiraju tako da se više od jednog razgovora može smjestiti na istu fizičku vezu.
Logičke adrese. Svaki uređaj ima broj koji ga identificira neovisno o tome u koji je kabel uključen. Slanje poruke znači zapisivanje tog broja na poruku, a ne spajanje određene žice.
Usmjeravanje. Kada pošiljatelj i primatelj nisu na istom lokalnom segmentu, infrastruktura između njih prenosi poruku skok po skok. Krajnje točke ne poznaju rutu; znaju samo adrese jedna druge.
Prijenosno računalo na uredskom Wi-Fiju koje dosegne poslužitelj u udaljenom podatkovnom centru koristi sva tri. Wi-Fi veza je zajednički radiomedij; prijenosno računalo i poslužitelj svaki imaju svoju logičku adresu; poruka se provlači kroz bilo koju infrastrukturu između njih dvoje, prosljeđivana jedan skok po jedan. Korisnik klikne poveznicu, prijenosno računalo pošalje paket, a mreža obavi ostalo.
9.1.3. A što s kamerom?¶
Kamera igra potpuno istu ulogu na mreži kao prijenosno računalo. Preuzima logičku adresu kada se pridruži mreži, adresira odlazne poruke na logičke adrese drugih uređaja i prepušta infrastrukturi da ih usmjeri.
Ono što se mijenja u odnosu na poglavlja o hardverskoj kontroli jest sučelje. Umjesto otvaranja UART instance i pisanja bajtova u nju, skripta otvara socket i piše bajtove u njega. Socket je krajnja točka u mrežu, na isti način na koji je UART instanca krajnja točka u žicu. Dijelovi između socketa i žice – sličice, paketi, tablice usmjeravanja, preklopnici, radioveze – svi leže ispod i uglavnom su nevidljivi Python kodu.
Stranice koje slijede iznose te dijelove, sloj po sloj, tako da apstrakcija „otvori socket i pošalji bajtove” djeluje neizbježno umjesto kao čarolija.