Č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 vrstvaZodpovedajúce OSI vrstvyPrí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 rozhraniaLinková, 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).

Zapamätaj si

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):

  1. Zariadenie A pošle broadcast otázku: „Kto má IP adresu 192.168.1.1? Pošli mi svoju MAC adresu."
  2. Zariadenie s touto IP adresou (napr. router) odpovie unicastom so svojou MAC adresou.
  3. 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.

CIDRMaskaPočet adriesPoužiteľných hostov
/24255.255.255.0256254
/16255.255.0.065 53665 534
/30255.255.255.25242 (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čkyVeľkosťÚčel
Version4 bityVerzia protokolu (4 pre IPv4)
TTL8 bitovMaximálny počet skokov pred zahodením
Protocol8 bitovČíslo protokolu vyššej vrstvy (6 = TCP, 17 = UDP)
Source / Destination Address32 bitov každéZdrojová a cieľová IP adresa
Header Checksum16 bitovKontrola integrity samotnej hlavičky
Flags / Fragment Offset3 + 13 bitovRiadenie fragmentácie príliš veľkých paketov
A čo IPv6?

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 portovTypPríklad
0–1023Well-known (systémové)80 (HTTP), 443 (HTTPS), 22 (SSH), 53 (DNS)
1024–49151Registered3306 (MySQL), 3389 (RDP)
49152–65535Dynamic / privatedoč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:

  1. 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".
  2. SYN-ACK — server odpovie vlastným SYN (svoje sekvenčné číslo) a ACK (potvrdenie klientovho SYN).
  3. 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.

TCPUDP
SpojenieSpojovo 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žitieHTTP/S, SSH, email, prenos súborovDNS, 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:

  1. Prehliadač (aplikačná vrstva) požiada o DNS preklad domény na IP adresu.
  2. Vytvorí sa TCP spojenie na port 443 pomocou three-way handshake.
  3. 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).
  4. TCP segment sa zabalí do IP paketu (pridá sa zdrojová/cieľová IP adresa a TTL).
  5. IP paket sa zabalí do Ethernet rámca (pridá sa zdrojová/cieľová MAC adresa najbližšieho skoku, zistená cez ARP).
  6. 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).
  7. 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.
Prečo je toto dôležité

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.