Poznámky z PVT 7. prosince 2010

Motivace

Síť zajišťuje spojení mezi dvěma programy, ať už jsou kdekoli a aniž bychom se o ně museli moc starat. Protože se s ní snadno pracuje, občas se používá i v situacích, kde vůbec není potřeba.

Pro přehlednost se veškerá práce se sítí v rámci jednoho počítače dělí do čtyř vrstev, do velké míry nezávislých.

Linková vrstva

Zajišťuje samotné přenesení dat z počítače k nějakému sousedovi, který přijímá. Též vrstva síťového rozhraní. Patří sem převážně síťové karty a jejich náležitosti.

Spojení může být realizováno spoustou způsobů. Klasicky Ethernet přes UTP, jinak též přes optické vlákno nebo kdysi přes koaxiální kabel. Nebo vzduchem: WiFi, Ronja, poštovní holubi.

Síťová karta data různými způsoby upravuje, například aby zlepšila kvalitu přenosu. V drátové síti odstraňuje stejnosměrnou složku (různými způsoby). Je toho spousta, ale díkybohu se to děje ve vrstvě, o kterou se nemusíme starat.

Síťová vrstva

Též internetová nebo vrstva protokolu IP. Dělí data na kousky - pakety - a ty se snaží nějakým způsobem dostat k jejich adresátovi.

Paket (za určitých okolností též datagram) je zhruba kilo- až megabytový cucek dat opatřený hlavičkou. V hlavičce je uveden odesilatel, adresát, velikost samotných dat, použitý protokol a spousta dalšího balastu podle potřeby. Dělení toku dat na pakety je běžné, dělá to třeba i USB.

Adresa v protokolu IP verze 4 (v dnešní době na tom běží Internet) má 32 bitů. Obvykle se zapisuje čtveřicí čísel 0..255. Jednoznačně popisuje každý počítač, kterému můžete něco poslat (tzn. ne úplně každý).

Každý počítač, na který data po své cestě netem narazí, musí rozhodnout, kam je poslat dál: směrovat je. Aby se rozhodl nějak rozumně rychle, dělí se celá síť (třeba Internet) na podsítě, které jsou si nějakým způsobem (stromovitě) podřazené. IP adresu kvůli tomu rozštípneme na dvě části: označení podsítě, do které počítač spadá, a adresu počítače v rámci ní. Tyhle části můžou být různě dlouhé, což popisuje maska podsítě. Maska se obvykle zapisuje zase čtveřice hodnot 0..255; tam, kde je v binárním zápise jednička, je část označující podsíť. Například adresa 192.168.2.15 s maskou 255.255.255.0 spadá do podsítě 192.168.2.0 a počítač má číslo 15. Stručněji stačí zapsat, kolik bitů popisuje podsíť; v tomhle případě by to byly první tři čtvrtiny adresy, tedy 24 bitů. Pak se to celé zapíše jako 192.168.2.15/24.

Nejvyšší adresa je broadcast, totiž posílání všem příjemcům v podsíti. Často je to užitečné, často je to z bezpečnostních důvodů zakázané. V případě z minulého odstavce by broadcast adresa byla 192.168.2.255. Nejnižší adresa (v našem případě 192.168.2.0) označuje podsíť jako takovou a žádnému počítači se nepřiřazuje.

Některé adresy podsítí jsou v Internetu vyhrazené k libovolnému použití, pokud se smíříte s tím, že se k vám nikdo zvenčí nechce připojovat. Měly by se používat v domácích sítích, je dobrým zvykem je zvolit, i když daná síť k netu připojená vůbec není. Jsou to: 10.0.0.0 - 10.255.255.255, 192.168.0.0 - 192.168.255.255 a 172.16.0.0 - 172.31.255.255.

K protokolu IP patří (do této vrstvy) ještě ICMP. Ten se chová ve většině ohledů podobně, ale neslouží (nemá sloužit) k přenosu dat, nýbrž ke sledování sítě samotné. Používá jej třeba příkaz ping, nástroj k měření času odezvy od daného serveru (odešle paket, pustí stopky a čeká na odpověď od serveru).

Transportní vrstva

Tady se může uplatnit Transmission Control Protocol, který zajišťuje přehlednější a spolehlivější přenos dat. Protokol IP (síťová vrstva) nezaručuje, že se data adresátovi skutečně dostanou. Také by bylo možné, že se po cestě rozdělí a přijdou dvakrát, nebo po kouskách a ješte ve špatném pořadí.

Aby tyhle problémy řešil, vyžaduje protokol TCP, aby před odesláním jakýchkoli dat oba počítače navázaly spojení. To působí jako značně byrokratická záležitost. Během události zvané TCP handshake si počítače střídavě pošlou tři pakety (tam-zpátky-tam) aby se oba ujistily, že komunikace vůbec funguje. Pak se spojení naváže - můžou si toho povšimnout i počítače po cestě, pokud se jich to týká, a usnadnit si tak směrování. Nezbytné je to, pokud jeden z počítačů má neveřejnou IP adresu; nebýt TCP spojení, data by se k němu vůbec nedostala.

Ke každému odeslanému paketu se přiloží kontrolní součet. Když příjemce zjistí, že kontrolní součet nesedí, paket zahodí jako porušený a požádá o něj znovu. Když jsou data v pořádku, příjemce to odesilateli potvrdí a zažádá o další paket. Každý paket má v rámci jednoho spojení svoje číslo, takže si příjemce může být jistý, že je dostává ve správném pořadí.

Místo TCP se v této vrstvě často používá User Datagram Protocol. Ten je rychlejší, protože nic z výše uvedeného neřeší. Kontrolní součet používá (pokud vůbec) krátký a jednoduchý, jak jen to jde. Užije se velmi často - například hrám po místní síti záleží především na rychlosti a kontrolu dat, pokud ji potřebují, si zajistí samy.

Oba protokoly zavádí na straně příjemce i odesilatele porty. Port, přesněji číslo portu, označuje v operačním systému program, který si přeje komunikovat po síti. Když na to přijde, zažádá program o číslo, které by se mu líbilo, pokud je volné, operační systém mu to číslo přidělí. Každému, kdo chce s tímto programem komunikovat, pak stačí vyplnit správné číslo cílového portu. Porty mají čísla v rozsahu 0..65535, některá z nich (v první stovce) je zakázané používat a některé je hloupé používat, protože na nich obvykle sídlí nějaký jiný běžný program.

Aplikační vrstva

Tahle vrstva už není součástí operačního systému. Patří sem komunikační protokoly, které si může vlastně každý program libovolně vymyslet. Popis takového protokolu pak zveřejňujete proto, aby odeslaným datům mohl (třeba někdy v budoucnu) rozumět i nějaký další program. To se často hodí.

Tady je namátkový seznam běžných programů. Pokud není řečeno jinak, používají na transportní vrstvě protokol TCP. Naprostá většina jich si nechá nastavit libovolné číslo portu.