- výstup
Sítě
Všichni víme, co je internet a zejména jeho webovou část (World Wide Web) používáme dnes a denně, jak to však všechno funguje? Pojďme se na to společně podívat.
Web
Začněme úplně od začátku, odkud se vezme v našem prohlížeči webová stránka pokud zadáme adresu do prohlížeče? Pošle ji nám server.
V momentě kdy zadáme adresu do prohlížeče, nastane bleskurychle řada věcí:
- Převod doménového jména na IP adresu
- Náš počítač vyšle požadavek DNS (Domain Name System) serveru - prozatím si takový server představme jako nějaký jiný počítač někde v internetu, který zná všechny domény a jejich korespondující IP adresy, například
seznam.cz
->77.75.75.172
. - IP adresu bychom mohli připodobnit k telefonnímu číslu nebo domovní adrese serveru, je to zkrátka adresní údaj každého počítače v internetu, kam se budou posílat další požadavy. Bývá typicky zapsaná jako čtyřce číslic od 0 do 255 oddělená tečkami, takovou IP adresu nazýváme IPv4.
- Jakmile počítač zjistí IP adresu serveru, kde běží webová stránka, může navázat spojení.
- Náš počítač vyšle požadavek DNS (Domain Name System) serveru - prozatím si takový server představme jako nějaký jiný počítač někde v internetu, který zná všechny domény a jejich korespondující IP adresy, například
- Navázání spojení
- Náš počítač oznámí serveru, že existuje a že by s ním rád komunikoval, ve vetšině případů se v této fázi také server a náš počítač (= klient) dohodnou, jaký typ šifrování použijí atp.
- Výměna/příjem dat
- Nyní když je navázáno spojení a všechno je dohodnuto, můžeme konečně požádat server o webovou stránku! Klient odešle požadavek s cookies, typem a verzí prohlížeče jaký máme a zejména adresou kterou si žádáme od serveru.
- Server nám stránku pošle v její textové reprezentaci, takové instrukce jak stránku zobrazit - HTML. Často bude mít stránka více částí než jenom čistý text - například obrázky, fonty atd. - a tak se počítač může dotazovat na různá data serveru několikrát.
- Zobrazení webové stránky
- Když už má náš prohlížeč všechna data a všechny instrukce, které potřebuje, vykreslí nám na monitor konečně onu webovou stránku.
Klient - Server
Právě jsme si zevrubně popsali, jak vypadá komunikace náš počítač (klient) -> server. Většina služeb na internetu, které znáte, funguje na této architektuře/topologii, kdy server obsluhuje a odpovídá na dotazy klientů. Nazýváme ji klient-server.
graph BT;
Klient-1---Server
Klient-2---Server
Klient-3---Server
Klient-4---Server
Žádný server? Žádný problém! aneb Peer2Peer
Jistě vás napadá, že takto jsou vyvíjeny velké nároky na server a pokud bude mít server výpadek tak celá služba bude nefunkční. Proto některé zpravidla decentralizované služby jako TOR, BitTorrent nebo kryptoměny žádný server nemají a klienti komunikují vzájemně přímo mezi sebou.
Ale nenechte se zmást, architektura peer2peer není jen pro torrent a podobné!
Hybrid
Jak to už tak bývá, ve výsledku není nic černo-bílé, většina služeb je totiž nějakým spojením obou architektur, například email používá klient-server spojení když odesíláte email z vašeho počítače na servery např. Gmailu nebo Seznamu, ale když si samotné servery předávají emaily mezi sebou dá se už mluvit o peer2peer komunikaci.
Často kombinují tyto architektury různé komunikační platformy jako Discord, Skype, Teams atd. kde vás s protější stranou server spojí ale pak už probíhá komunikace bez serveru přímo klient-klient = peer to peer.
Podsíť
Když se řekne router, pravděpodobně všem se vybaví magická krabička někde doma, díky které mají v domácnosti internet, co ale vlastně taková krabička dělá?
Počítače, mobily a jiné zařízení připojená k internetu ve vaší domácnosti jsou připojené na jeden router - tvoří jeden celek - jednu podsíť internetu.
Všechny zařízení musí mít svojí IP adresu, taková IP adresa není náhodná, podívejme se na příklad jak by mohly adresy zařízení v domácnosti vypadat:
router 192.168.1.1
domácí NAS server 192.168.1.50
stolní PC 192.168.1.100
notebook 192.168.1.101
mobil 192.168.1.105
Co mají společné? Přesně tak, všechny začínají stejná tři čísla 192.168.1..
, tak poznáme, že patří do stejné sítě. Ale do stejné sítě by mohly patřit také tyto adresy:
10.0.0.1
10.2.3.40
10.50.20.5
Ty mají společné ale jen první číslo, tak kde je ta hranice?
Maska sítě
Hranici sítě nám definuje maska sítě, nejtypičtěji se setkáme s maskou 255.255.255.0
, co to znamená? To znamená, že prefix sítě (společný začátek adres) jsou první tři oktety (to jsou ty číslice oddělené tečkou od 0 do 255 v IP adrese, oktet protože to jsou 8 bitová čísla).
Pokud máme tedy router s adresou 192.168.1.1
a maskou sítě 255.255.255.0
, pak tzv. adresa sítě je 192.168.1.0
a IP adresy zařízení v síti mohou dosahovat až 192.168.1.254
.
Proč ne .255
? Protože úplně poslední adresa v síti je rezervovaná pro tzv. broadcast - když něco pošleme na takovou adresu, dostanou náš požadavek úplně všechny zařízení v síti.
Maska sítě však nemusí být jen taková, může to být například i 255.255.0.0
- potom pokud by síť začínala na 10.1.0.0
tak zařízení budou mít IP až do 10.1.255.254
a poslední 10.1.255.255
bude broadcast adresa.
Nikoho však nebaví psát 255.255.255... a tak se masky zkracují na jednoduché číslo, například 24
. To znamená právě 255.255.255.0
(3 * 8 = 24
). Tento zápis se používá takto: 192.168.1.100/24
.
Tohle bylo hodně informací, proto si to ukažme radši přehledněji v tabulce:
Adresa sítě/počátek | Maska | Maska (zkráceně) | Rozsah IP adres | Broadcast adresa |
---|---|---|---|---|
192.168.1.0 | 255.255.255.0 | 24 | 192.168.1.1 - 192.168.1.254 | 192.168.1.255 |
10.5.0.0 | 255.255.0.0 | 16 | 10.5.0.1 - 10.5.255.254 | 10.5.255.255 |
10.0.0.0 | 255.0.0.0 | 8 | 10.0.0.1 - 10.255.255.254 | 10.255.255.255 |
Když dochází IP adresy, neboli NAT.
Určitě vás napadlo, že pokud každé zařízení musí mít IP adresu a ty jsou tvořeny čtyřmy oktety, tj. od 0.0.0.0
do 255.255.255.255
, musí adresy postupně docházet. Znamená to, že bude za chvíli internet na maximu své kapacity?
Kolik IP adres je, můžeme spočítat jednoduše jako:
$$256^4 = 2^{32} = 4\space 294\space 967\space 296$$ To jsou 4 miliardy, to není mnoho a proto ve skutečnosti IP adresy, totiž IPv4 adresy, už dávno došly. Internet ale stále funguje, jak je to možné?
Využívá se tzv. NAT = Network Address Translation - překladu IP adres.
Interní (soukromá) adresa X Externí (veřejná) adresa
IP adresu vašeho počítače ve vaší síti doma můžete zjistit příkazem ipconfig
na Windows a ifconfig
případně ip a
na Linuxu, pravděpodobně to bude něco jako 192.168.1.100
, jenže takovou IP adresu počítače mají tisíce lidí a přitom se o ní neperou, jak je to možné?
Celý adresní prostor 192.168.0.0 - 192.168.255.255
(neboli 192.168.0.0/16
) je jeden z rozsahů tzv. soukromých/interních (private) IP adres tyto adresy nejsou nikým kontrolované a může je router (tedy jeho součást DHCP server) rozdávat, jak se mu zlíbí. Je to protože na NAT serveru se tyto adresy přesměrují/přeloží na jednu společnou tzv. externí adresu, pod kterou všechny zařízení budou vystupovat v internetu.
Svojí externí IP adresu můžete zjistit např. na mojeip.cz nebo wtfismyip.com.
Bonus: Další hojně používaný rozsah soukromých adres je
10.0.0.0 - 10.255.255.255
.
ISO/OSI model zjednodušeně
Jak se tedy reálně přenášejí data v síti? Pojďme si to ukázat na referenčním ISO/OSI modelu.
7. Aplikační vrstva
Požadavek či data přímo pro aplikaci, například požadavek na konkrétní webovou stránku nebo odpověď na takový požadavek.
Protokoly
Na této vrstvě se mluví velkým počtem "jazyků" (protokolů), typicky pro webové stránky HTTP, pro přenos souborů FTP, pro vzdálené připojení k jinému počítači SSH, telnet nebo RDP, zmíněný DNS protokol pro překlad domén na IP adresy ale také všechny proprietární protokoly různých programů, multiplayer her atp.
6. Prezentační vrstva
Data ze sedmé (aplikační) vrstvy se v této vrstvě například zakódují pro lehčí přenos, zašifrují atp.
Protokoly
Typicky se zde objevuje TLS (dříve SSL), které obaluje HTTP a tvoří HTTPS - šifrované spojení pro přístup k webu, ale i již zmíněné SSH přesahuje do této vrstvy.
5. Relační vrstva
Na této vrstvě se občas navazuje spojení a provádí dodatečná synchronizace dat.
4. Transportní vrstva
Když jsou aplikační data zašifrovaná a připravená k odeslání, rozdělí se a zabalí do malý kousků a ke každému kousku se přidá jeho kontrolní součet, zdrojový port a cílový port.
Port
Port je číslo od 0 do 65 535 (16 bitové číslo), které ukazuje kam (do které aplikace nebo části aplikace) přímo v jednom počítači mají data téct. Do počítače totiž může téct hodně různých dat např. nějaké video, u toho hovor, načítající se webová stránka a ještě multiplayer hra. Jak to udělat, aby když přijdou data, aby se přesměrovaly do správné aplikace? Číslo portu. Každá aplikace totiž říkáme, že poslouchá na nějakém portu. (Může i na více portech zároveň - například prohlížeč si otevře více portů pro každou webovou stránku zvlášt, aby se data nemíchaly.)
Známé porty
Servery různých služeb typicky poslouchají na příchozí spojení na jednom známém portu, pro HTTP (webové stránky) to je 80, pro HTTPS 443, pro FTP 21, SSH 22 atd..
Protokoly
Na této vrstvě je nejčastěji velmi důležitý protokol TCP a neméně důležitý protokol UDP.
UDP
UDP je primitivní prokol, který data jen rozseká na kousky (datagramy), přidá k nim kontrolní součet, zdrojový + cílový port a vyšle je na zpracování síťové vrstvě. Díky tomu je velmi rychlý; jeho problém je, že však nezaručuje, že data vůbec přijdou a že budou celá a ještě ve správném pořadí.
TCP
TCP je komplexnější protokol který používá nejen pořadové číslo u jednotlivých kousků dat (segmentů), ale i tzv. handshake (podání rukou), kdy oveří, že připojení funguje a v průběhu přenosu ověřuje, zda všechny data přicházejí správně a úplné.
3. Síťová vrstva
Konečně se dostáváme do internetu! Síťová vrstva a její nejčastější protokol IP (Internet Protocol) obaluje TCP segmenty nebo UDP datagramy do packetů, které navíc obsahují i zdrojovou a cílovou IP adresu počítače.
IPv4
Už dost bylo řečeno o IPv4, je to nejčastější protokol a jeho adresy jsou 32 bitové a zapisují se ve čtveřici oktetů - např. 172.16.32.9
.
IPv6
Nedostatek IPv4 adres však řeší i vylepšená nejnovější verze IP protokolu IPv6, její adresy jsou 128 bitové - to je nepředstavitelně mnoho adres. Adresy se zapisují v HEX, např: 2001:db8::8a2e:370:7334
.
2. Linková vrstva
Linková vrstva je nejnižší vrstva definovaná v "Internet protocol suite", tato vrstva operuje typicky jen v rámci jedné podsítě - např. domácnost, patro kanceláří atp. Tady se data ze síťové vrstvy zabalí do tzv. rámce (frames) ke kterým se přidá MAC adresa (fyzická adresa) a předají se fyzické vrstve k odeslání.
MAC adresa
MAC adresa neboli fyzická adresa se zapisuje obvykle jako šestice dvouciferných HEX čísel, např.: 00-11-09-95-26-FE
, taková adresa je unikátní pro každou síťovou kartu na celém světě.
MAC adresu svého zařízení na Windows zjistíte příkazem ipconfig /all
, na Linuxu příkazem ip a
nebo ifconfig
Protokoly
Na této vrstvě operují protokoly jako "Ethernet" (IEEE 802 standardy včetně např. IEEE 802.11 - WiFi)
1. Fyzická vrstva
Nejnižší fyzická vrstva převádí rámce od linkové vrstvy na jednotlivé signály a "jedničky a nuly" na fyzickém kabelu (médiu).
Dost bylo už teorie, pojďme si ukázat něco praktického!
Úvod do webů
Webový prohlížeč nenahradíme, ale stáhnout soubor a volat API umíme.
Často budete potřebovat z internetu stáhnout soubor, například nějaký skript, nebo odeslat požadavek na nějakou http API, k tomu nám slouží v Linuxu dva příkazy:
WGet
wget
je příkaz který se hodí na stahování souborů z internetu, jeho užití je primitivní:
wget https://domena.com/files/skript.sh -o mujskript.sh
Jako vždy má příkaz další užitečné parametry a přepínače, dokumentaci k wget
si můžete přečíst buď pomocí wget --help
nebo man wget
.
Curl
Tento mocný nástroj velmi doporučujeme se naučit používat jelikož se Vám bude hodit snad úplně všude. Jeho základní použití je následovné:
curl https://domena.cz/
Toto vyšle jednoduchý GET požadavek na https://domena.cz/
a odpověď serveru vypíše do stdout
(do terminálu). Jedna možnost využití curl je jako náhražka wget
pro stahování souborů, a to přesměrováním výstupu do souboru:
curl https://domena.com/files/skript.sh > mujskript.sh
Místo kde však curl
vyniká je různé posílání dat a volání API, například:
curl https://wtfismyip.com/text
nám vrátí přehledně naší externí IP adresu.
Dají se posílat i POST requesty a to například následovně:
curl https://domena.cz/api/user/login -X POST --data "username=Uzivatel&password=heslo" -v
Pomocí -X POST
specifikujeme typ HTTP requestu jako POST
, a data pošleme jako parametr přepínače --data
(nebo jen -d
), dále je dobré přidat přepínač -v
, který nám ukáže blížeji, co se skutečně skrýva pod pokličkou HTTP...
HTTP
( pokračování příště... )