# Vrstvy a zapouzdření

Když se někdo zeptá „jakou má to zařízení adresu", je to špatně položená otázka. Zařízení má adres několik a každá slouží k něčemu jinému. Tahle stránka vysvětluje proč.

## Problém, který vrstvy řeší

Představ si, že chceš poslat balík z Prahy do Tokia. Musíš vyřešit několik nezávislých věcí naráz: jak se balík fyzicky dostane na příští překladiště, jak se pozná konečná adresa, jak se pozná, že cestou nezmizel, a co v něm vlastně je.

Kdyby to řešil jeden systém dohromady, každá změna v přepravě by znamenala přepsat úplně všechno. Proto se to rozdělilo na vrstvy. Každá řeší svůj problém a o ostatní se nestará.

Síť funguje stejně. A protože si vrstvy nevěří ani se navzájem nezajímají, dá se vyměnit spodní vrstva (Ethernet za WiFi za optiku) a ty vyšší si toho ani nevšimnou.

## Čtyři vrstvy, které tě zajímají

Akademicky se učí sedm vrstev ISO/OSI. V praxi jsou relevantní čtyři a zbytek jsou historické rozdíly, kvůli kterým se lidi hádají na fórech.

**Vrstva 2 — spoj.** Doručuje rámce mezi dvěma zařízeními na stejném segmentu, tedy tam, kde se navzájem vidí na drátě. Adresuje se [MAC adresami](MAC-ARP-a-prepinani). Sem patří Ethernet, WiFi, switche a VLANy. Tahle vrstva nemá ponětí o tom, že existuje internet.

**Vrstva 3 — síť.** Doručuje pakety kamkoliv na světě, přes libovolný počet mezikroků. Adresuje se IP adresami. Sem patří routery, [směrování](Smerovani), NAT a IPv6. Tahle vrstva neví nic o tom, jestli data dorazila.

**Vrstva 4 — transport.** Řeší, aby data dorazila celá a ve správném pořadí, a rozlišuje, které aplikaci na daném stroji patří. Adresuje se [porty](Porty-a-spojeni). Sem patří TCP a UDP.

**Vrstva 7 — aplikace.** Vlastní obsah. HTTP, DNS, SSH, SMTP. To, co tě reálně zajímá.

Číslování skáče, protože vrstvy 5 a 6 se v praxi rozpustily do ostatních.

## Zapouzdření

Když posíláš data, každá vrstva shora dolů přidá vlastní hlavičku a ten výsledek předá níž jako obsah.

<img src="zapouzdreni.svg" alt="Zapouzdření dat do vrstev">

Na druhé straně se to odbaluje v opačném pořadí. Ethernetová karta sloupne svoji hlavičku a předá zbytek IP vrstvě, ta sloupne svoji a předá TCP, a nakonec dostane aplikace přesně to, co jsi poslal.

Tenhle mechanismus má jméno pro každou úroveň, což je zdroj zmatku v dokumentaci:

| Vrstva | Jak se tomu říká |
|---|---|
| 2 | rámec (frame) |
| 3 | paket (packet) |
| 4 | segment (TCP) nebo datagram (UDP) |
| 7 | data, zpráva |

V běžné řeči tomu všemu lidi říkají „paket" a nikdo se nezlobí. Ve chvíli, kdy čteš dokumentaci ke switchi nebo výstup z `tcpdump`, je ale dobré vědět, o čem se mluví.

## Proč to není akademická hračka

Tři praktické důsledky, které tě potkají:

**Režie roste dolů.** Každá vrstva něco přidává. Ethernetová hlavička má 14 bajtů, IP hlavička 20, TCP hlavička dalších 20. Když posíláš jeden bajt dat, po drátě jde přes padesát bajtů. Proto se hodně malých paketů přenáší mnohem hůř než málo velkých.

**MTU je limit té spodní vrstvy.** Ethernet umí v jednom rámci přenést 1500 bajtů obsahu. Když do toho zabalíš IP a TCP hlavičku, zbude na data 1460. Když k tomu přidáš [VPN](WireGuard), zbude ještě míň. Špatně nastavené MTU je klasická příčina toho, že „většina webů funguje, ale některé se načítají do půlky a pak zamrznou".

**Problém řeš na správné vrstvě.** Když ti nefunguje síť, je zbytečné ladit DNS, dokud nemáš jistotu, že funguje vrstva 2. Postup odspodu je popsaný v [diagnostice](Diagnostika).

## Kdo pracuje na které vrstvě

| Zařízení | Vrstva | Podle čeho se rozhoduje |
|---|---|---|
| Hub (dnes už jen v muzeu) | 1 | podle ničeho, kopíruje všechno všem |
| Switch | 2 | podle MAC adresy |
| Router | 3 | podle IP adresy |
| Firewall | 3 a 4 | podle IP adresy a portu |
| Reverse proxy | 7 | podle doménového jména a URL |

Tahle tabulka je užitečnější, než vypadá. Vysvětluje, proč switch nemůže filtrovat podle IP, proč router nevidí do HTTPS provozu a proč potřebuješ [reverse proxy](Vzdaleny-pristup), když chceš na jedné veřejné adrese provozovat víc webů.

Moderní domácí „router" je ve skutečnosti krabice, ve které je router, switch, [access point](WiFi) a firewall zároveň. Proto je matoucí — dělá naráz práci čtyř různých vrstev.
