9.2. Protocoale stratificate¶
Trimiterea unui cadru de la cameră la un server din alt oraș înseamnă rezolvarea simultană a mai multor probleme. Semnalul electric trebuie să străbată primul fir. Octeții de pe acel fir trebuie să își găsească drumul printr-un switch local. Rețeaua locală trebuie să predea mesajul către ceea ce se află între ea și restul internetului. Pachetele care supraviețuiesc traseului trebuie reasamblate în ordine. Receptorul trebuie să știe căruia dintre programele sale să le predea. Iar octeții înșiși trebuie să însemne ceva asupra căruia ambele capete sunt de acord.
Încercarea de a rezolva toate acestea într-un singur bloc de cod ar fi imposibil de gestionat. Răspunsul standard este împărțirea sarcinii în straturi. Fiecare strat rezolvă o problemă bine definită și expune un serviciu simplu stratului de deasupra. Un program comunică întotdeauna doar cu stratul aflat imediat sub el; straturile de sub acela sunt invizibile.
Fiecare strat al unei stive de rețea rezolvă o problemă și predă o abstracție curată către următorul.¶
9.2.1. Cele cinci straturi¶
Denumirile de mai jos sunt cele folosite de restul acestei secțiuni. Ele provin din modelul standard în jurul căruia au fost proiectate rețelele. Granițele exacte dintre straturi sunt uneori neclare, dar rolul jucat de fiecare este stabil.
Stratul fizic. Mută biți între două dispozitive de pe același fir sau aceeași undă radio. Niveluri de tensiune, impulsuri de lumină, modulație RF. Sarcina camerei aici se rezumă în mare parte la conectarea cablului potrivit sau alăturarea rețelei wireless potrivite; siliciul face restul.
Stratul de legătură. Mută cadre (mici fragmente de octeți) între două dispozitive care împart un segment local. Adaugă adrese hardware astfel încât fiecare cadru să poată fi direcționat către un anumit vecin. Ethernet și Wi-Fi sunt cele două tehnologii de legătură pe care camera le întâlnește în practică.
Stratul de rețea. Mută pachete între oricare două dispozitive de pe internet, nu doar de pe același segment local. Adaugă o adresă la nivel software care identifică o gazdă independent de cablul pe care se află și un mecanism de rutare care transmite un pachet de la un segment local la următorul până ajunge. Acesta este primul strat în care codul Python al camerei începe să aibă un cuvânt de spus.
Stratul de transport. Se așază peste pachete și oferă livrare între programe aflate pe două gazde, nu doar între gazdele în sine. Sunt frecvente două variante: una livrează un flux de octeți conectat și ordonat (calul de bătaie pentru majoritatea traficului), cealaltă livrează mesaje de sine stătătoare care călătoresc independent unele de altele (folosite când suprasarcina redusă contează mai mult decât garanțiile). Adaugă numere de port astfel încât mai multe programe de pe aceeași gazdă să poată purta conversații în paralel.
Stratul de aplicație. Tot ce este deasupra transportului: protocoalele care dau sens octeților. Cele pe care un browser web le vorbește pentru a încărca pagini – și cele din spatele aproape oricărui alt serviciu de internet pe care cititorul îl folosește deja zilnic – se află aici. Tutorialul acoperă transportul în profunzime; acest strat primește o secțiune ulterioară proprie.
9.2.2. Cum se stivuiesc straturile în timpul execuției¶
Când camera trimite octeți prin rețea, fiecare strat adaugă propriul antet în fața datelor, ca și cum ai cuibări un plic în interiorul altui plic:
Octeții aplicației intră primii.
Stratul de transport îi împachetează cu un mic antet care indică programul căruia îi aparțin (numărul de port).
Stratul de rețea împachetează aceasta cu un antet care indică gazda către care sunt destinați (adresa la nivel software).
Stratul de legătură împachetează aceasta cu un antet care indică dispozitivul de pe segmentul local căruia trebuie predați în continuare (adresa hardware).
Stratul fizic transformă întregul pachet în biți pe un fir.
La celălalt capăt, fiecare strat își desprinde propriul antet și predă restul mai sus. Aplicația receptoare își primește înapoi octeții, neștiind că straturile de rețea, de legătură și fizic au existat vreodată.
Această cuibărire este motivul pentru care tutorialul parcurge lucrurile de jos în sus. Înțelegerea a ceea ce face stratul de dedesubt face ca stratul de deasupra să pară inevitabil. Cele două straturi de la bază sunt tratate într-o singură pagină fiecare, deoarece nu există aproape nimic de configurat din Python. De la stratul de rețea în sus, ritmul încetinește pe măsură ce rolul Python crește.