9.2. Rétegelt protokollok¶
Egy képkocka elküldése a kameráról egy másik városban lévő szerverre több probléma egyidejű megoldását jelenti. Az elektromos jelnek át kell jutnia az első vezetéken. Az adott vezetéken lévő bájtoknak meg kell találniuk az utat egy helyi switchen keresztül. A helyi hálózatnak át kell adnia az üzenetet annak, ami közte és az internet többi része között helyezkedik el. Az utat túlélő csomagokat sorrendben újra össze kell állítani. A fogadónak tudnia kell, melyik programjának adja át őket. És maguknak a bájtoknak olyat kell jelenteniük, amiben mindkét fél megegyezik.
Mindezt egyetlen kódblokkban megoldani kezelhetetlen lenne. A szokásos válasz az, hogy a feladatot rétegekre bontjuk. Minden réteg egyetlen jól definiált problémát old meg, és egy egyszerű szolgáltatást nyújt a felette lévő rétegnek. Egy program mindig csak a közvetlenül alatta lévő réteggel beszél; az az alatti rétegek láthatatlanok.
Egy hálózati halmaz minden rétege egy problémát old meg, és egy tiszta absztrakciót ad át a következőnek.¶
9.2.1. Az öt réteg¶
Az alábbi nevek azok, amelyeket ennek a szakasznak a többi része használ. A szabványos modellből származnak, amely köré a hálózatokat tervezték. A rétegek közötti pontos határok néha elmosódottak, de az egyes rétegek által betöltött szerep stabil.
Fizikai réteg. Bitek mozgatása két, ugyanazon a vezetéken vagy rádión lévő eszköz között. Feszültségszintek, fényimpulzusok, RF moduláció. A kamera feladata itt többnyire az, hogy a megfelelő kábelt csatlakoztassa vagy a megfelelő vezeték nélküli hálózathoz csatlakozzon; a többit a szilícium végzi.
Adatkapcsolati réteg. Képkockák (bájtok kis darabjai) mozgatása két olyan eszköz között, amelyek egy helyi szegmensen osztoznak. Hardvercímeket ad hozzá, hogy minden képkocka egy adott szomszédhoz legyen irányítható. Az Ethernet és a Wi-Fi az a két adatkapcsolati technológia, amellyel a kamera a gyakorlatban találkozik.
Hálózati réteg. Csomagok mozgatása az interneten lévő bármely két eszköz között, nem csak ugyanazon a helyi szegmensen. Hozzáad egy szoftverszintű címet, amely egy hosztot attól függetlenül azonosít, hogy melyik kábelen van, valamint egy útválasztási mechanizmust, amely egy csomagot egyik helyi szegmensről a következőre továbbít, amíg meg nem érkezik. Ez az első réteg, ahol a kamera Python kódjának kezd lenni mondanivalója.
Szállítási réteg. A csomagok tetején ül, és kézbesítést kínál két hoszton lévő programok között, nem csak maguk a hosztok között. Két fajta gyakori: az egyik egy kapcsolt, rendezett bájtfolyamot kézbesít (a legtöbb forgalom igáslova), a másik önálló üzeneteket kézbesít, amelyek egymástól függetlenül utaznak (akkor használatos, amikor az alacsony többletköltség fontosabb a garanciáknál). Portszámokat ad hozzá, hogy ugyanazon a hoszton több program is párhuzamosan folytathasson beszélgetéseket.
Alkalmazási réteg. Minden, ami a szállítás felett van: a protokollok, amelyek értelmet adnak a bájtoknak. Azok, amelyeket egy webböngésző beszél az oldalak betöltéséhez – és azok, amelyek szinte minden más internetes szolgáltatás mögött állnak, amelyet az olvasó már nap mint nap használ – itt élnek. A tutorial mélyrehatóan tárgyalja a szállítást; ez a réteg saját, követő szakaszt kap.
9.2.2. Hogyan halmozódnak a rétegek futás közben¶
Amikor a kamera bájtokat küld a hálózaton, minden réteg hozzáadja a saját fejlécét az adatok elé, mintha egy borítékot egy másik borítékba ágyaznánk:
Az alkalmazás bájtjai kerülnek be először.
A szállítási réteg egy kis fejléccel csomagolja be őket, amely megmondja, melyik programhoz tartoznak (a portszám).
A hálózati réteg azt csomagolja be egy fejléccel, amely megmondja, melyik hosztnak szánták őket (a szoftverszintű cím).
Az adatkapcsolati réteg azt csomagolja be egy fejléccel, amely megmondja, a helyi szegmens melyik eszközének kell őket következőként átadni (a hardvercím).
A fizikai réteg az egész köteget bitekké alakítja egy vezetéken.
A másik végen minden réteg lefejti a saját fejlécét, és a többit feljebb adja. A fogadó alkalmazás úgy kapja vissza a bájtjait, hogy nincs tudomása arról, hogy a hálózati, adatkapcsolati és fizikai rétegek valaha is léteztek.
Ez az egymásba ágyazás az oka annak, hogy a tutorial alulról felfelé halad. Az alatta lévő réteg működésének megértése elkerülhetetlenné teszi a felette lévő réteget. Az alsó két réteget egy-egy oldal tárgyalja, mert szinte semmit sem kell Python kódból konfigurálni. A hálózati rétegtől felfelé a tempó lassul, ahogy a Python szerepe egyre nagyobb lesz.