Čo je TCP/IP a prečo na ňom stojí celý internet
TCP/IP nie je jeden protokol, ale sada protokolov (protocol suite), ktorá definuje, ako sa dáta balia, adresujú, smerujú a doručujú medzi zariadeniami. Meno dostal podľa dvoch najdôležitejších protokolov — TCP (Transmission Control Protocol) a IP (Internet Protocol) — no v skutočnosti zahŕňa desiatky ďalších (UDP, ICMP, ARP, DNS, HTTP a ďalšie), ktoré spolu tvoria vrstvený systém.
Kľúčová myšlienka je vrstvenie (layering): každá vrstva rieši jeden konkrétny problém a spolieha sa na to, že vrstva pod ňou funguje. Aplikácia sa nemusí starať o to, ako presne elektrické signály putujú káblom — stará sa iba o svoje dáta a odovzdá ich nižšej vrstve. Tento princíp je dôvod, prečo môže rovnaký webový prehliadač fungovať cez Wi-Fi, mobilné dáta aj optiku bez akejkoľvek zmeny kódu.
Vrstvový model: TCP/IP vs. OSI
V škole sa zvyčajne najprv učí 7-vrstvový OSI model. Reálne siete ale bežia na o niečo jednoduchšom 4-vrstvovom modeli TCP/IP. Oba modely opisujú tú istú realitu, len s inou granularitou:
| TCP/IP vrstva | Zodpovedajúce OSI vrstvy | Príklady protokolov |
|---|---|---|
| Aplikačná | Aplikačná, prezentačná, relačná (5–7) | HTTP, DNS, SMTP, SSH, TLS |
| Transportná | Transportná (4) | TCP, UDP |
| Internetová | Sieťová (3) | IP, ICMP, IPsec |
| Sieťového rozhrania | Linková, fyzická (1–2) | Ethernet, Wi-Fi (802.11), ARP |
Dáta putujú zhora nadol pri odosielaní (zapuzdrovanie, encapsulation) a zdola nahor pri prijímaní (rozbaľovanie, de-encapsulation). Každá vrstva pridá k dátam z vrstvy nad ňou vlastnú hlavičku — výsledný „balík v balíku" sa označuje ako PDU (Protocol Data Unit) a mení názov podľa vrstvy: segment (TCP) → paket (IP) → rámec/frame (Ethernet).
Zapuzdrovanie znamená, že Ethernet rámec v sebe nesie IP paket, ktorý v sebe nesie TCP segment, ktorý v sebe nesie vaše HTTP dáta. Každá vrstva „nevidí" dovnútra tej vyššej — router sa pozerá len na IP hlavičku, switch len na Ethernet hlavičku.
Vrstva sieťového rozhrania: MAC adresy a ARP
Najnižšia vrstva rieši doručenie dát v rámci jedného lokálneho segmentu siete (napr. vašej domácej Wi-Fi). Každé sieťové zariadenie má fyzicky priradenú MAC adresu (Media Access Control) — 48-bitové číslo zapísané ako šesť hexadecimálnych párov, napríklad 3C:22:FB:A1:9B:04. Prvá polovica identifikuje výrobcu zariadenia (OUI), druhá je jedinečné sériové číslo.
Problém: aplikácia pozná cieľovú IP adresu, ale switch a sieťová karta potrebujú vedieť MAC adresu. Preklad medzi nimi rieši protokol ARP (Address Resolution Protocol):
- Zariadenie A pošle broadcast otázku: „Kto má IP adresu 192.168.1.1? Pošli mi svoju MAC adresu."
- Zariadenie s touto IP adresou (napr. router) odpovie unicastom so svojou MAC adresou.
- Zariadenie A si výsledok uloží do ARP cache na obmedzený čas, aby nemuselo pýtať znova pri každom pakete.
Práve táto dôverčivosť ARP protokolu (žiadna adresa nie je autentifikovaná) je základom útoku ARP poisoning / ARP spoofing, ktorému sa venujeme nižšie v sekcii o bezpečnosti.
Internetová vrstva: IPv4 adresácia a smerovanie
IP protokol rieši doručenie dát medzi zariadeniami, ktoré nemusia byť v rovnakej lokálnej sieti — teda smerovanie cez internet. IPv4 adresa má 32 bitov, zapisovaných ako štyri desiatkové čísla oddelené bodkami (napr. 192.168.1.25), z ktorých každé predstavuje jeden bajt (0–255).
Sieťová a hostiteľská časť, maska podsiete
IP adresa sa delí na časť identifikujúcu sieť a časť identifikujúcu konkrétny hostiteľ (host) v tejto sieti. Kde presne je hranica, určuje maska podsiete (subnet mask), dnes najčastejšie zapisovaná v CIDR notácii — počet bitov vyhradených pre sieťovú časť, napr. /24.
| CIDR | Maska | Počet adries | Použiteľných hostov |
|---|---|---|---|
| /24 | 255.255.255.0 | 256 | 254 |
| /16 | 255.255.0.0 | 65 536 | 65 534 |
| /30 | 255.255.255.252 | 4 | 2 (typicky point-to-point linka) |
Napríklad adresa 192.168.1.25/24 znamená: prvých 24 bitov (192.168.1) je sieťová časť, posledných 8 bitov je pre hostiteľov v rozsahu .0–.255. Z toho .0 je adresa siete a .255 je broadcast adresa danej podsiete — obe sa nesmú prideliť konkrétnemu zariadeniu, takže reálne použiteľných je 254 adries.
Verejné, súkromné a špeciálne adresy
Nie všetky adresy sú smerovateľné na verejnom internete. RFC 1918 vyhradzuje rozsahy pre súkromné siete:
- 10.0.0.0/8 — najväčší súkromný rozsah, bežný vo veľkých firemných sieťach
- 172.16.0.0/12 — stredne veľké siete
- 192.168.0.0/16 — najčastejšie v domácich routeroch
- 127.0.0.0/8 — loopback, komunikácia zariadenia samého so sebou (
127.0.0.1)
Aby zariadenia so súkromnou adresou mohli komunikovať s internetom, router vykonáva NAT (Network Address Translation) — prepisuje zdrojovú IP adresu odchádzajúcich paketov na svoju verejnú adresu a udržiava tabuľku prekladov pre návratovú cestu.
Smerovanie (routing)
Keď paket opúšťa lokálnu sieť, router sa rozhoduje na základe smerovacej tabuľky — porovnáva cieľovú IP adresu s uloženými sieťovými prefixmi a vyberá najkonkrétnejšiu zhodu (longest prefix match). Paket takto putuje „skok po skoku" (hop-by-hop) cez viacero routerov, kým nedorazí do cieľovej siete.
Každý IP paket obsahuje pole TTL (Time To Live), ktoré sa pri prechode každým routerom zníži o 1. Ak klesne na 0, paket sa zahodí a odošlú sa späť ICMP správa „Time Exceeded". Tento mechanizmus zabraňuje nekonečnému kolovaniu paketov pri chybe v smerovaní a zároveň je základom nástroja traceroute.
| Pole IPv4 hlavičky | Veľkosť | Účel |
|---|---|---|
| Version | 4 bity | Verzia protokolu (4 pre IPv4) |
| TTL | 8 bitov | Maximálny počet skokov pred zahodením |
| Protocol | 8 bitov | Číslo protokolu vyššej vrstvy (6 = TCP, 17 = UDP) |
| Source / Destination Address | 32 bitov každé | Zdrojová a cieľová IP adresa |
| Header Checksum | 16 bitov | Kontrola integrity samotnej hlavičky |
| Flags / Fragment Offset | 3 + 13 bitov | Riadenie fragmentácie príliš veľkých paketov |
IPv6 rieši vyčerpanie adresného priestoru IPv4 (len ~4,3 miliardy adries) pomocou 128-bitových adries — astronomicky väčšieho priestoru. Zápis je hexadecimálny, oddelený dvojbodkami, napr. 2001:0db8:85a3::8a2e:0370:7334. Princípy vrstvenia, portov aj TCP handshake ostávajú identické — mení sa najmä formát adresy a hlavičky, NAT prestáva byť nutnosťou.
Transportná vrstva: TCP a UDP
Transportná vrstva rieši, ako presne majú dáta „doraziť" medzi dvoma konkrétnymi aplikáciami (nie len zariadeniami) a či má komunikácia byť spoľahlivá. Na to slúžia dva zásadne odlišné protokoly.
Porty: ako si vybrať správnu aplikáciu
IP adresa identifikuje zariadenie, ale na jednom zariadení beží súčasne veľa aplikácií (webový server, mail server, SSH...). Rozlíšenie zabezpečuje port — 16-bitové číslo (0–65 535). Kombinácia IP adresy a portu sa nazýva socket a jednoznačne identifikuje konkrétne spojenie.
| Rozsah portov | Typ | Príklad |
|---|---|---|
| 0–1023 | Well-known (systémové) | 80 (HTTP), 443 (HTTPS), 22 (SSH), 53 (DNS) |
| 1024–49151 | Registered | 3306 (MySQL), 3389 (RDP) |
| 49152–65535 | Dynamic / private | dočasné zdrojové porty klienta |
TCP: spoľahlivosť za cenu réžie
TCP je spojovo orientovaný protokol — pred prenosom dát sa musí najprv nadviazať spojenie. Garantuje doručenie dát v správnom poradí, deteguje straty a poškodenia a automaticky ich rieši opätovným odoslaním. Túto spoľahlivosť platíte réžiou navyše (viac hlavičiek, potvrdenia, pomalší štart).
Nadviazanie spojenia prebieha cez známy three-way handshake:
- SYN — klient pošle serveru paket s príznakom SYN a náhodným počiatočným sekvenčným číslom, čím signalizuje „chcem nadviazať spojenie".
- SYN-ACK — server odpovie vlastným SYN (svoje sekvenčné číslo) a ACK (potvrdenie klientovho SYN).
- ACK — klient potvrdí serverov SYN. Spojenie je nadviazané a môže začať prenos dát.
Klient Server
|----------- SYN seq=x -------->|
|<------ SYN-ACK seq=y,ack=x+1--|
|----------- ACK ack=y+1 ------>|
| |
|<====== prenos dát (TCP) ======>|
Vďaka sekvenčným číslam vie prijímajúca strana zoradiť segmenty, ktoré mohli po sieti prísť v inom poradí, a odhaliť chýbajúce časti. Flow control (riadenie toku, pomocou window size) zabraňuje tomu, aby odosielateľ zahltil pomalšieho príjemcu. Congestion control naopak reaguje na preťaženie samotnej siete a dynamicky spomaľuje rýchlosť odosielania pri detekcii strát paketov.
UDP: rýchlosť za cenu garancií
UDP (User Datagram Protocol) je opakom TCP — je bezspojový, negarantuje doručenie, poradie ani opravu chýb. Hlavička má len 8 bajtov (oproti minimálne 20 pri TCP), takže réžia je minimálna. Hodí sa všade tam, kde je rýchlosť dôležitejšia než dokonalá spoľahlivosť, alebo kde si aplikácia rieši spoľahlivosť sama.
| TCP | UDP | |
|---|---|---|
| Spojenie | Spojovo orientovaný (handshake) | Bezspojový |
| Spoľahlivosť | Garantované doručenie a poradie | Žiadna garancia |
| Rýchlosť | Pomalší (réžia, potvrdenia) | Rýchlejší, minimálna réžia |
| Typické využitie | HTTP/S, SSH, email, prenos súborov | DNS, VoIP, video streaming, online hry |
Aplikačná vrstva: kde žijú vaše dáta
Na vrchole modelu sedia protokoly, s ktorými sa reálne stretávate — HTTP/HTTPS pre web, DNS pre preklad doménových mien na IP adresy, SMTP/IMAP pre email, SSH pre bezpečný vzdialený prístup. Tieto protokoly definujú formát a význam dát, ktoré transportná vrstva len prepravuje bez toho, aby im rozumela.
Životný cyklus jedného paketu: príklad
Keď v prehliadači zadáte adresu webstránky, deje sa približne toto:
- Prehliadač (aplikačná vrstva) požiada o DNS preklad domény na IP adresu.
- Vytvorí sa TCP spojenie na port 443 pomocou three-way handshake.
- Dáta HTTP požiadavky sa zabalia do TCP segmentu (pridá sa TCP hlavička so zdrojovým/cieľovým portom a sekvenčným číslom).
- TCP segment sa zabalí do IP paketu (pridá sa zdrojová/cieľová IP adresa a TTL).
- IP paket sa zabalí do Ethernet rámca (pridá sa zdrojová/cieľová MAC adresa najbližšieho skoku, zistená cez ARP).
- Rámec putuje fyzickým médiom cez switche a routery — každý router odbalí a znova zabalí rámec, ale IP paket vnútri necháva netknutý (mení len TTL).
- Na cieľovom serveri sa proces vykoná opačne (de-encapsulation), až kým aplikácia nedostane pôvodnú HTTP požiadavku.
Bezpečnostné dôsledky návrhu TCP/IP
TCP/IP vznikol v 70. rokoch pre dôveryhodné akademické prostredie — bezpečnosť nebola súčasťou pôvodného návrhu. Preto z jeho princípov priamo vyplýva rad útokov, ktoré sa v sieťovej bezpečnosti riešia dodnes:
- IP spoofing — zdrojová IP adresa v hlavičke sa dá jednoducho sfalšovať, pretože protokol ju nijako neoveruje. Útočník tak môže vystupovať pod cudzou adresou.
- ARP spoofing / poisoning — keďže ARP odpovede sa neoverujú, útočník v lokálnej sieti môže presvedčiť ostatné zariadenia, že jeho MAC adresa patrí napríklad routeru, a presmerovať tak prevádzku cez seba (klasický Man-in-the-Middle).
- SYN flood — útočník posiela masívne množstvo SYN paketov bez toho, aby dokončil handshake. Server alokuje zdroje na polovičné spojenia (half-open) a pri dostatočnom objeme mu dôjde pamäť — forma DoS útoku priamo využívajúca mechaniku TCP handshake.
- Session hijacking — ak útočník uhádne alebo odchytí sekvenčné čísla prebiehajúceho TCP spojenia, môže sa doň vložiť a vydávať sa za jednu zo strán.
- Packet sniffing — bez šifrovania na vyššej vrstve (TLS) je obsah paketov čitateľný pre kohokoľvek s prístupom k prenosovej ceste, napr. v zdieľanej Wi-Fi sieti.
Väčšina moderných obrán — TLS/HTTPS, DHCP snooping, dynamic ARP inspection, SYN cookies, segmentácia siete pomocou VLAN a firewallov — existuje presne preto, lebo samotný TCP/IP tieto veci neriešil. Rozumieť protokolu teda znamená rozumieť aj tomu, prečo tieto ochrany vôbec existujú.
Zhrnutie
TCP/IP je štvorvrstvový model, ktorý rieši doručenie dát od fyzického kábla až po aplikáciu: MAC adresy a ARP na lokálnej úrovni, IP adresácia a smerovanie medzi sieťami, TCP/UDP pre komunikáciu medzi konkrétnymi aplikáciami a aplikačné protokoly ako HTTP či DNS navrchu. Každá vrstva pridáva vlastnú hlavičku a spolieha sa na tú pod sebou — a práve v tomto zapuzdrení a v dôverčivosti pôvodného návrhu sa skrýva väčšina sieťových bezpečnostných rizík, ktorým sa budeme venovať v ďalších článkoch.