ťařina
Obsah Soubory
markdown

Cesta-paketu.md

5.7 kB 100 řádků Změněno Zobrazit na GitHubu Stáhnout
markdown
# Cesta paketu Napíšeš do prohlížeče `seznam.cz`, zmáčkneš Enter a za půl vteřiny máš stránku. Mezi tím se stane překvapivě hodně věcí. Tahle stránka je projde všechny popořadě, protože skoro každý problém se sítí je ve skutečnosti problém v jednom z těchto kroků — a když víš, které kroky existují, umíš problém zúžit místo hádání. Detaily každého kroku mají vlastní stránky. Tady jde o celkový obraz. ## 0. Ještě než něco pošleš Aby počítač mohl komunikovat, potřebuje čtyři informace. Buď je dostal od [DHCP](DHCP-a-DNS), nebo mu je někdo nastavil ručně: - vlastní IP adresu, například `192.168.1.10`- masku sítě, například `/24` — viz [prefixy a masky](Prefixy-a-masky)- výchozí bránu, například `192.168.1.1`, což je router- adresu DNS serveru Když kterákoliv z nich chybí nebo je špatně, projeví se to jinak. To je později užitečné při [diagnostice](Diagnostika). ## 1. Ze jména na číslo Počítač neumí nic poslat na `seznam.cz`. Potřebuje IP adresu. Zeptá se tedy DNS serveru a dostane odpověď, třeba `77.75.79.222`. Tenhle dotaz je sám o sobě síťová komunikace, takže se pro něj musí odehrát celý zbytek téhle stránky ještě předtím, než se odehraje pro tvůj skutečný požadavek. Proto se výsledky kešují — jinak by každé kliknutí trvalo dvakrát tak dlouho. Podrobněji v [DHCP a DNS](DHCP-a-DNS). ## 2. Je to soused, nebo cizinec? Teď počítač ví, kam chce. Udělá jedinou operaci: porovná svoji masku s cílovou adresou. Moje adresa je `192.168.1.10/24`, takže moje síť je `192.168.1.x`. Cíl je `77.75.79.222`. Nesedí. Cíl tedy není v mé síti a musí jít přes bránu. Kdyby cíl byl `192.168.1.50`, sedělo by to a paket by šel přímo, bez routeru. Tohle rozhodnutí je celá podstata [směrování](Smerovani) a dělá ho každé zařízení pro každý paket. ## 3. Jak se dostat k bráně Počítač ví, že paket má jít na `192.168.1.1`. Jenže na drátě se nedoručuje podle IP adres, ale podle [MAC adres](MAC-ARP-a-prepinani). A MAC adresu routeru počítač možná nezná. Zeptá se tedy celé sítě naráz: „kdo má 192.168.1.1?" Tomu se říká ARP. Router se ozve, počítač si jeho MAC adresu na pár minut uloží a jde se dál. Tenhle krok se odehrává jen uvnitř tvé sítě. Ven z ní se ARP nikdy nedostane. ## 4. Zabalení Teď se skládá vlastní zásilka. Tvoje data se obalí několika hlavičkami, každá pro jinou vrstvu: <img src="zapouzdreni.svg" alt="Zapouzdření dat do vrstev"> TCP hlavička nese [čísla portů](Porty-a-spojeni) a informace o pořadí. IP hlavička nese zdrojovou a cílovou adresu. Ethernetová hlavička nese MAC adresy pro tenhle konkrétní skok. Detailněji ve [vrstvách a zapouzdření](Vrstvy-a-zapouzdreni). ## 5. Přes switch k routeru Rámec vyleze z kabelu do switche. Switch se podívá na cílovou MAC adresu, najde si ji ve své tabulce a pošle rámec na ten jediný port, kde daná MAC adresa je. Switch se na IP adresy vůbec nedívá. Nezajímají ho. Pro switch je paket jen náklad. Kdyby MAC adresu ve své tabulce neměl, pošle rámec na všechny porty a poslechne si, odkud přijde odpověď. Tím se to naučí. ## 6. Router a NAT Router rámec rozbalí, podívá se na IP adresu uvnitř a rozhodne, kudy dál. Pak provede dvě věci, které jsou zásadní: Přepíše **zdrojovou IP adresu** ze soukromé `192.168.1.10` na svoji veřejnou, protože soukromé adresy na internetu neexistují. Tomu se říká [NAT](NAT-a-port-forwarding) a je to důvod, proč tě zvenku nikdo neuvidí, dokud si to výslovně nenastavíš. Zabalí paket do **nového rámce** s novými MAC adresami — svojí a svého protějšku u poskytovatele. Původní ethernetová hlavička zaniká. <img src="cesta-paketu.svg" alt="Co se cestou mění a co zůstává"> Tohle je nejdůležitější věc na celé stránce: **MAC adresy se mění na každém skoku, IP adresy zůstávají celou cestu.** MAC je „další zastávka", IP je „konečná destinace". Až tohle jednou přijmeš, dává celá síťařina najednou smysl. ## 7. Přes internet Paket teď skáče z routeru na router. Každý z nich udělá totéž co tvůj: rozbalí rámec, podívá se na cílovou IP, najde si ve své tabulce nejlepší cestu, zabalí do nového rámce a pošle dál. Takových skoků bývá k českému serveru pět až patnáct, přes oceán klidně dvacet pět. Vidíš je, když pustíš `traceroute` — viz [nástroje](Nastroje). Každý skok sníží v IP hlavičce hodnotu TTL o jedna. Když dojde na nulu, paket se zahodí. Je to pojistka proti smyčkám, aby se ztracený paket netočil v kruhu donekonečna. ## 8. Server odpoví Na cílovém serveru se vše rozbalí v opačném pořadí. TCP hlavička řekne, na kterém portu (obvykle 443) služba poslouchá, aplikace dostane data a vygeneruje odpověď. Odpověď putuje zpátky stejným postupem. Když dorazí na tvůj router, ten se podívá do své NAT tabulky, zjistí, že tohle konkrétní spojení patří `192.168.1.10`, přepíše cílovou adresu zpátky a pošle to tobě. ## Proč tohle vědět Protože každý typický problém sedí v jednom konkrétním kroku: | Příznak | Kde je problém ||---|---|| Nemám vůbec žádnou IP adresu | krok 0, DHCP || `ping 8.8.8.8` funguje, ale weby se nenačítají | krok 1, DNS || Nedostanu se na nic mimo svou síť | krok 2 nebo 6, brána nebo NAT || Nevidím zařízení ve stejné síti | krok 3 nebo 5, ARP nebo switch || Všechno funguje, ale pomalu | krok 7, cesta po internetu | Právě proto má [diagnostika](Diagnostika) smysl dělat po vrstvách odspodu. Nemá cenu řešit DNS, když ti nechodí ARP.