9.2. Vrstvené protokoly

Odeslání snímku z kamery na server v jiném městě znamená vyřešit několik problémů najednou. Elektrický signál musí projít prvním vodičem. Bajty na tomto vodiči si musí najít cestu skrz lokální přepínač. Lokální síť musí předat zprávu tomu, co se nachází mezi ní a zbytkem internetu. Pakety, které cestu přežijí, musí být znovu sestaveny ve správném pořadí. Příjemce musí vědět, kterému ze svých programů je předat. A samotné bajty musí znamenat něco, na čem se obě strany shodnou.

Pokus vyřešit to vše v jednom bloku kódu by byl nezvladatelný. Standardní odpovědí je rozdělit úlohu do vrstev. Každá vrstva řeší jeden dobře definovaný problém a vrstvě nad sebou poskytuje jednoduchou službu. Program vždy komunikuje pouze s vrstvou přímo pod sebou; vrstvy pod touto vrstvou jsou neviditelné.

Svislý zásobník pěti rámečků označených zdola nahoru: fyzická, linková, síťová, transportní, aplikační. Šipka vpravo ukazuje nahoru po zásobníku s popiskem "co budujeme". Šipka vlevo ukazuje dolů po zásobníku s popiskem "co je poskytováno".

Každá vrstva síťového zásobníku řeší jeden problém a předává čistou abstrakci nahoru další vrstvě.

9.2.1. Pět vrstev

Názvy uvedené níže jsou ty, které používá zbytek této sekce. Pocházejí ze standardního modelu, kolem kterého byly sítě navrženy. Přesné hranice mezi vrstvami jsou někdy neostré, ale role, kterou každá z nich hraje, je stabilní.

Fyzická vrstva. Přesouvá bity mezi dvěma zařízeními na stejném vodiči nebo rádiu. Úrovně napětí, světelné pulzy, RF modulace. Úkolem kamery je zde většinou jen zapojit správný kabel nebo se připojit ke správné bezdrátové síti; zbytek obstará křemík.

Linková vrstva. Přesouvá rámce (malé kusy bajtů) mezi dvěma zařízeními, která sdílejí lokální segment. Přidává hardwarové adresy, aby každý rámec mohl být nasměrován na jednoho konkrétního souseda. Ethernet a Wi-Fi jsou dvě linkové technologie, se kterými se kamera v praxi setkává.

Síťová vrstva. Přesouvá pakety mezi libovolnými dvěma zařízeními na internetu, nejen na stejném lokálním segmentu. Přidává adresu na softwarové úrovni, která identifikuje hostitele nezávisle na tom, na kterém kabelu se nachází, a mechanismus směrování, který přeskakuje paket z jednoho lokálního segmentu na další, dokud nedorazí. Toto je první vrstva, kde kód kamery v jazyce Python začíná mít co říct.

Transportní vrstva. Sedí nad pakety a nabízí doručování mezi programy na dvou hostitelích, nejen mezi hostiteli samotnými. Běžné jsou dvě varianty: jedna doručuje propojený, uspořádaný proud bajtů (tahoun pro většinu provozu), druhá doručuje samostatné zprávy, které cestují nezávisle na sobě (používá se, když na nízké režii záleží více než na zárukách). Přidává čísla portů, aby více programů na stejném hostiteli mohlo vést konverzace paralelně.

Aplikační vrstva. Vše nad transportem: protokoly, které dávají bajtům význam. Ty, kterými mluví webový prohlížeč při načítání stránek – a ty, jež stojí za téměř každou další internetovou službou, kterou čtenář už denně používá – žijí zde. Tutoriál pokrývá transport do hloubky; této vrstvě je věnována vlastní navazující sekce.

9.2.2. Jak se vrstvy skládají za běhu

Když kamera odesílá bajty po síti, každá vrstva přidá před data svou vlastní hlavičku, jako když vnoříte obálku do jiné obálky:

  • Bajty aplikace jdou dovnitř jako první.

  • Transportní vrstva je zabalí malou hlavičkou, která říká, kterému programu patří (číslo portu).

  • Síťová vrstva zabalí to hlavičkou, která říká, kterému hostiteli jsou určeny (adresa na softwarové úrovni).

  • Linková vrstva zabalí to hlavičkou, která říká, kterému zařízení na lokálním segmentu je předat jako dalšímu (hardwarová adresa).

  • Fyzická vrstva změní celý balík na bity na vodiči.

Na druhém konci každá vrstva oloupe svou vlastní hlavičku a zbytek předá nahoru. Přijímající aplikace dostane své bajty zpět, aniž by tušila, že síťová, linková a fyzická vrstva kdy existovaly.

Toto vnořování je důvod, proč tutoriál postupuje zdola nahoru. Pochopení toho, co dělá vrstva pod ní, činí vrstvu nad ní nevyhnutelnou. Spodní dvě vrstvy jsou pokryty jednou stránkou každá, protože z jazyka Python téměř není co konfigurovat. Od síťové vrstvy výše se tempo zpomaluje, jak role jazyka Python roste.