9.3. Cablul și cadrul¶
Cele mai de jos două straturi ale stivei sunt cele mai ușor de luat de bune pe cameră, deoarece tot ceea ce fac se petrece în interiorul cipului, iar camera le gestionează fără să fie nevoie de cod Python. Merită totuși o scurtă trecere în revistă, fiindcă explică ce înseamnă „rețea locală” și unde începe granița spre restul infrastructurii.
9.3.1. Stratul fizic¶
Stratul de bază este semnalizarea propriu-zisă – firele, fibrele optice sau undele radio care transportă biți între două dispozitive. Ethernet peste cabluri torsadate codifică fiecare bit ca o tranziție de tensiune la o rată fixă. Wi-Fi modulează aceiași biți pe o purtătoare radio în banda de 2.4 GHz sau 5 GHz. Ambele produc un flux de cifre binare între două componente hardware; ambele sunt genul de detaliu pe care siliciul camerei îl gestionează fără ca software-ul să fie nevoit să se gândească la el.
Din perspectiva unui script Python, stratul fizic este „legătura este activă” sau „legătura este inactivă”. Modulul network raportează această stare prin metoda sa isconnected() pe interfața Wi-Fi și prin starea legăturii pe o interfață Ethernet cablată. Dincolo de asta, tot ce face acest strat rămâne ascuns.
9.3.2. Stratul de legătură¶
Cu un pas mai sus se află stratul de legătură – regulile pentru trimiterea unui grup de octeți (un cadru) între două dispozitive care împart același segment fizic. Stratul de legătură adaugă două lucruri peste semnalizarea brută:
Adresare hardware. Fiecare interfață de rețea vine cu un identificator unic de 48 de biți numit adresă MAC (Media Access Control). Pe Ethernet este înscrisă în cip; pe Wi-Fi este același tip de identificator înscris în modulul wireless. Adresele MAC sunt cele pe care un switch – cutia cu mai multe porturi Ethernet în care se conectează dispozitivele din apropiere – le folosește pentru a decide pe ce port trebuie să iasă un anumit cadru. Un punct de acces Wi-Fi joacă același rol pentru dispozitivele wireless de pe canalul său.
Încadrare. Octeții pe care îi predă un strat superior sunt împachetați într-un cadru cu un mic antet, sarcina utilă și o sumă de control la final. Antetul transportă adresele MAC sursă și destinație; suma de control îi permite receptorului să detecteze un cadru ai cărui octeți au fost corupți în tranzit. Cadrele care nu trec verificarea sunt eliminate silențios – cine îi pasă de fiabilitate trebuie să o reintroducă la un strat superior.
Un segment local este orice grup de dispozitive care își pot vedea direct cadrele reciproc – porturile cablate de pe un switch, toate dispozitivele asociate cu un punct de acces Wi-Fi sau o mică plasă de switch-uri interconectate. Stratul de legătură nu poate ajunge dincolo de acel segment. De îndată ce destinația se află pe un segment diferit, mesajul trebuie predat stratului de deasupra.
9.3.3. Ce expune camera¶
Camera are o adresă MAC pentru fiecare interfață de rețea pe care o are – una Wi-Fi dacă aceasta are suport wireless, una Ethernet dacă placa are portul corespunzător. Modulul network oferă acces la ea prin network_interface.config("mac") pe oricare obiect de interfață pe care îl folosește aplicația, atunci când are nevoie să citească adresa. Unele aplicații au nevoie de asta, de exemplu pentru a înregistra dispozitivul într-un sistem de management al flotei. În rest, acesta este singurul reglaj pe care stratul de legătură îl predă Python-ului.
Tot restul – încadrarea, traficul MAC propriu-zis pe fir sau prin aer, negocierea dintre cameră și punctul de acces privind canalul și rata de folosit – se petrece în întregime în interiorul hardware-ului wireless sau Ethernet. Pagina următoare acoperă singurul loc în care un script Python chiar are un cuvânt de spus în stratul de legătură: să-i indice camerei la ce rețea să se alăture.