9.1. De ce rețele¶
Controlul hardware a oferit camerei modalități de a comunica cu un anumit alt dispozitiv aflat pe un anumit alt fir. UART între cameră și o singură placă însoțitoare. I2C între cameră și senzorii atârnați de aceeași magistrală scurtă. CAN între un set mic de module care împart o magistrală robustă. Fiecare caz urmează aceeași formă: două părți (sau un grup mic și cunoscut), un mediu comun, un acord între ele asupra a ceea ce înseamnă octeții de pe acel mediu.
9.1.1. Acea formă nu mai este scalabilă¶
Modelul punct-la-punct funcționează atât timp cât ambele capete sunt apropiate, ambele capete sunt cunoscute dinainte și scriptul poate alege firul pe care comunică. De îndată ce oricare dintre aceste constrângeri cedează, cablajul nu mai este suficient.
Mulți corespondenți. O rețea de cincizeci de camere care raportează către un singur server nu poate fi cablată unul-la-unul; nu există suficiente porturi UART pe server, iar traseele de cabluri ar fi imposibile.
Corespondenți care nu sunt pe același fir. O cameră dintr-o fabrică și un panou de bord dintr-un birou aflat în celălalt capăt al orașului nu pot împărți un cablu serial. Trebuie să existe o cale între ele prin orice infrastructură rulează deja între cele două clădiri.
Corespondenți necunoscuți dinainte. O cameră care își publică rezultatele în cloud nu alege serverul cu care comunică în schema de cablaj; adresa cloudului este ceva ce scriptul caută la momentul execuției și către care rutează datele.
Multe programe pe un singur cablu. Un laptop rulează astăzi un browser, o aplicație de chat, un apel video și o copie de rezervă, toate comunicând prin aceeași interfață de rețea în același timp. Firul nu poate fi „deținut” de o singură conversație așa cum este un UART.
Fiecare dintre aceste eșecuri reprezintă un tip diferit de problemă de adresare. Rezolvarea lor împreună necesită mai mult decât un fir și o rată baud.
9.1.2. Ce este o rețea¶
O rețea este infrastructura care permite oricăruia dintr-un număr mare de calculatoare să schimbe mesaje cu oricare altul, fără ca fiecare pereche să aibă nevoie de propria legătură dedicată. Trei proprietăți fac dintr-o rețea ceva mai mult decât un cablu serial mare:
Mediu comun. Multe dispozitive se conectează la același cablu, switch sau canal radio. Acestea se alternează sau multiplexează astfel încât mai mult de o conversație să încapă pe aceeași legătură fizică.
Adrese logice. Fiecare dispozitiv are un număr care îl identifică independent de cablul în care este conectat. Trimiterea unui mesaj înseamnă scrierea acelui număr pe mesaj, nu conectarea unui anumit fir.
Rutare. Când expeditorul și receptorul nu sunt pe același segment local, infrastructura dintre ei transportă mesajul salt cu salt. Punctele terminale nu cunosc ruta; ele cunosc doar adresa celuilalt.
Un laptop conectat la Wi-Fi-ul biroului care ajunge la un server dintr-un centru de date îndepărtat folosește toate cele trei. Legătura Wi-Fi este un mediu radio comun; laptopul și serverul au fiecare propria adresă logică; mesajul se strecoară prin orice infrastructură se află între cele două, înaintat câte un salt o dată. Utilizatorul dă clic pe un link, laptopul trimite un pachet, iar rețeaua se ocupă de rest.
9.1.3. Dar camera?¶
Camera joacă exact același rol într-o rețea ca laptopul. Ea preia o adresă logică atunci când se alătură rețelei, adresează mesajele de ieșire către adresele logice ale altor dispozitive și lasă infrastructura să le ruteze.
Ceea ce se schimbă față de capitolele despre controlul hardware este interfața. În loc să deschidă o instanță UART și să îi scrie octeți, scriptul deschide un socket și scrie octeți în acesta. Socketul este un punct terminal în rețea, la fel cum o instanță UART este un punct terminal într-un fir. Componentele dintre socket și fir – cadre, pachete, tabele de rutare, switch-uri, dispozitive radio – se află toate dedesubt și sunt în mare parte invizibile pentru codul Python.
Paginile care urmează detaliază aceste componente, strat cu strat, astfel încât abstracția „deschide un socket și trimite octeți” să pară inevitabilă în loc de magie.