Lekce 1.1

Jak funguje internet: TCP/IP, adresy a protokoly

Co se s daty děje na cestě sítí, jak se čtou IP adresy, co drží pohromadě lokální síť a čím se od sebe liší protokoly, které používáme každý den.

Cesta ven a zpátky

Počítač s lokální adresou má při dotazu ven jeden zádrhel. Kdyby do paketu napsal jako odesílatele 192.168.1.37, server by neměl kam odpovědět – takových adres jsou miliony a z internetu na žádnou z nich cesta nevede.

Řeší to router převodem adres, tzv. NAT (Network Address Translation). Odchozímu paketu vymění adresu odesílatele za svoji veřejnou a do tabulky si poznamená, komu paket doopravdy patřil. Když se odpověď vrátí, podívá se do tabulky a pošle ji tomu, kdo se ptal.

Aby si nespletl dvě zařízení, která se ptají ve stejnou chvíli, používá k tomu ještě čísla portů. Port je číslo dveří, kterými data v počítači vejdou do konkrétní aplikace: každé spojení si při navázání vybere volný port odesílatele a druhá strana ho v odpovědi vrátí. Router proto v tabulce nedrží jen adresy, ale dvojice adresa a port:

Uvnitř sítě Navenek Kam paket mířil
192.168.1.37:51314 89.24.7.130:40001 195.39.44.178:443
192.168.1.41:63870 89.24.7.130:40002 195.39.44.178:443

Notebook i mobil si otevřely stránku na tomtéž serveru a navenek vyšly pod stejnou veřejnou adresou. Liší se jen číslem portu, a to stačí: odpověď na port 40001 router pošle notebooku, odpověď na 40002 mobilu.

Sekvenční diagram se třemi svislými čarami – notebook, router a server. Shora dolů čtyři fialové šipky: od notebooku k routeru s odesílatelem 192.168.1.37, od routeru k serveru s odesílatelem 89.24.7.130, zpátky od serveru k routeru na port 40001 a od routeru k notebooku na port 51314. Dole rámeček s řádkem tabulky routeru, který obě čísla portů spojuje.

Vedlejší účinek téhle tabulky je docela zásadní. Router pustí dovnitř jen to, co má v tabulce svůj řádek, tedy odpovědi na dotazy, které někdo zevnitř položil. Paket, který přijde z internetu jen tak, nemá v tabulce co pohledávat a router ho zahodí. Proto se na domácí počítač nedá zvenčí jen tak připojit – a proto se na routeru musí zvlášť nastavit přesměrování portu, když chce mít někdo doma vlastní server.

Oťukání adresy pingem

Jestli je nějaká adresa vůbec naživu, se dá zjistit jedním příkazem. ping pošle na adresu drobný paket a druhá strana ho obratem pošle zpátky. Nic víc v tom není, ale pozná se z toho spousta věcí.

Windows
ping -n 4 8.8.8.8
Linux
ping -c 4 8.8.8.8
Mac
ping -c 4 8.8.8.8

Číslo za přepínačem říká, kolik paketů se má poslat. Windows pošlou bez přepínače čtyři a skončí, Linux a Mac by odesílaly donekonečna, dokud je nezastavíte klávesami Ctrl+C. Odpověď vypadá zhruba takhle:

Odpověď od 8.8.8.8: bajty=32 čas=14ms TTL=118
Odpověď od 8.8.8.8: bajty=32 čas=13ms TTL=118
Odpověď od 8.8.8.8: bajty=32 čas=15ms TTL=118
Odpověď od 8.8.8.8: bajty=32 čas=13ms TTL=118

Statistika ping pro 8.8.8.8:
    Pakety: Odesláno = 4, Přijato = 4, Ztraceno = 0 (ztráta 0%),

Zajímavá jsou dvě čísla. Čas je doba, za kterou paket doletěl tam a zpátky – u zařízení v místní síti to bývají jednotky milisekund, u serveru na druhé straně planety klidně dvě stě. Počet ztracených paketů zase prozradí nespolehlivou linku: když se ztrácí každý třetí, spojení sice funguje, ale bude se zadrhávat.

Nejvíc se ping hodí na postupné oťukávání, když něco nejde. Nejdřív brána (ping 192.168.1.1) – když neodpoví, je problém hned u nás v síti. Pak veřejná adresa (ping 8.8.8.8, což je jeden z veřejných DNS překladačů) – když odpoví brána a tohle ne, končí to za routerem. Nakonec jméno (ping seznam.cz) – když projde adresa, ale ne jméno, síť funguje a rozbitý je překlad jmen.

Pozor

Když adresa neodpoví, ještě to neznamená, že je počítač vypnutý. Spousta serverů i domácích routerů má odpovídání na ping schválně vypnuté, aby se nedaly tak snadno hledat. Mlčení je tedy indicie, ne důkaz.