Č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ú, routujú 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 layered systém.

Kľúčová myšlienka je layering: každý layer rieši jeden konkrétny problém a spolieha sa na to, že layer pod ním 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žšiemu layeru. 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.

Layer model: TCP/IP vs. OSI

V škole sa zvyčajne najprv učí 7-layer OSI model. Reálne siete ale bežia na o niečo jednoduchšom 4-layer modeli TCP/IP. Oba modely opisujú tú istú realitu, len s inou granularitou:

TCP/IP layerZodpovedajúce OSI layersPrí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í (encapsulation) a zdola nahor pri prijímaní (de-encapsulation). Každý layer pridá k dátam z layeru nad ním vlastný header — výsledný „balík v balíku" sa označuje ako PDU (Protocol Data Unit) a mení názov podľa layeru: segment (TCP) → packet (IP) → rámec/frame (Ethernet).

Zapamätaj si

Encapsulation znamená, že Ethernet rámec v sebe nesie IP packet, ktorý v sebe nesie TCP segment, ktorý v sebe nesie vaše HTTP dáta. Každý layer „nevidí" dovnútra toho vyššieho — router sa pozerá len na IP header, switch len na Ethernet header.

Layer sieťového rozhrania: MAC adresy a ARP

Najnižší layer 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 packete.

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.

Internet layer: IPv4 adresácia a routing

IP protokol rieši doručenie dát medzi zariadeniami, ktoré nemusia byť v rovnakej lokálnej sieti — teda routing 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á časť a host časť, subnet mask

IP adresa sa delí na časť identifikujúcu sieť a časť identifikujúcu konkrétny host v tejto sieti. Kde presne je hranica, určuje 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 hosts v rozsahu .0–.255. Z toho .0 je adresa siete a .255 je broadcast adresa daného subnetu — 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ú routovateľ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 packetov na svoju verejnú adresu a udržiava tabuľku prekladov pre návratovú cestu.

Routing

Keď packet opúšťa lokálnu sieť, router sa rozhoduje na základe routing table — porovnáva cieľovú IP adresu s uloženými sieťovými prefixmi a vyberá najkonkrétnejšiu zhodu (longest prefix match). Packet takto putuje „skok po skoku" (hop-by-hop) cez viacero routerov, kým nedorazí do cieľovej siete.

Každý IP packet obsahuje pole TTL (Time To Live), ktoré sa pri prechode každým routerom zníži o 1. Ak klesne na 0, packet sa zahodí a odošlú sa späť ICMP správa „Time Exceeded". Tento mechanizmus zabraňuje nekonečnému kolovaniu packetov pri chybe v routingu a zároveň je základom nástroja traceroute.

Pole IPv4 headerVeľkosťÚčel
Version4 bityVerzia protokolu (4 pre IPv4)
TTL8 bitovMaximálny počet skokov pred zahodením
Protocol8 bitovČíslo protokolu vyššieho layeru (6 = TCP, 17 = UDP)
Source / Destination Address32 bitov každéZdrojová a cieľová IP adresa
Header Checksum16 bitovKontrola integrity samotného headera
Flags / Fragment Offset3 + 13 bitovRiadenie fragmentácie príliš veľkých packetov
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 layeringu, portov aj TCP handshake ostávajú identické — mení sa najmä formát adresy a headera, NAT prestáva byť nutnosťou.

Transport layer: TCP a UDP

Transport layer 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 packet 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 packetov.

UDP: rýchlosť za cenu garancií

UDP (User Datagram Protocol) je opakom TCP — je bezspojový, negarantuje doručenie, poradie ani opravu chýb. Header 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

Application layer: 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é transport layer len prepravuje bez toho, aby im rozumela.

Životný cyklus jedného packetu: príklad

Keď v prehliadači zadáte adresu webstránky, deje sa približne toto:

  1. Prehliadač (application layer) 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 header so zdrojovým/cieľovým portom a sekvenčným číslom).
  4. TCP segment sa zabalí do IP packetu (pridá sa zdrojová/cieľová IP adresa a TTL).
  5. IP packet 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 packet 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 headeri 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 preroutovať tak prevádzku cez seba (klasický Man-in-the-Middle).
  • SYN flood — útočník posiela masívne množstvo SYN packetov 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ššom layeri (TLS) je obsah packetov č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 4-layer 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 routing medzi sieťami, TCP/UDP pre komunikáciu medzi konkrétnymi aplikáciami a aplikačné protokoly ako HTTP či DNS navrchu. Každý layer pridáva vlastný header a spolieha sa na ten pod sebou — a práve v princípe encapsulation 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.