Modul 2 — Sítě a protokoly
7. Základy TCP/IP, IP adresy, porty, subnetting
Vysvětlení modelu TCP/IP, IP adresace, portů a rozdělování sítí na podsítě (subnetting) — základ pro veškerou síťovou diagnostiku v DevOps.
Úvod a kontext
Každá aplikace, kterou DevOps inženýr provozuje, běží na síti — servery si
mezi sebou posílají data, klienti se připojují k webům, kontejnery spolu
komunikují uvnitř clusteru. Bez porozumění tomu, jak funguje TCP/IP, jak
jsou přidělovány IP adresy a k čemu slouží porty, se nedá diagnostikovat
prakticky žádný síťový problém — a síťové problémy ("aplikace neodpovídá",
"nejde se připojit k databázi", "služba není vidět zvenčí") patří mezi
nejčastější provozní incidenty. Tato lekce položí základ, na kterém stojí
všechny další lekce modulu (DNS, HTTP/TLS, SSH, firewally).
Teorie
Vrstvený model sítě
Síťová komunikace se popisuje pomocí vrstev — každá vrstva řeší jinou
část problému a stojí na té předchozí. V praxi DevOps práce vystačíte se
zjednodušeným modelem TCP/IP o čtyřech vrstvách:
- Vrstva síťového rozhraní (Ethernet, Wi-Fi) — přenos rámců po
fyzickém/lokálním médiu, adresace pomocí MAC adres. - Síťová vrstva (IP) — směrování paketů mezi sítěmi pomocí IP adres.
- Transportní vrstva (TCP/UDP) — doručení dat mezi konkrétními
procesy na strojích pomocí portů; TCP navíc garantuje spolehlivost a
pořadí, UDP je jednodušší a rychlejší, ale nezaručuje doručení. - Aplikační vrstva — protokoly, které používají samotné aplikace:
HTTP, DNS, SSH, SMTP a další (těm se budeme věnovat v dalších
lekcích).
Praktický dopad: když řešíte "nejde se připojit", je užitečné postupovat
vrstvu po vrstvě — je server vůbec dostupný po síti (IP)? Poslouchá na
daném portu (TCP)? Odpovídá aplikace správně (HTTP)?
IP adresy
IPv4 adresa je 32bitové číslo, zapisované jako čtyři osmibitové skupiny
(oktety) oddělené tečkami, např. 192.168.1.10. Každý oktet nabývá
hodnot 0–255. Adresy se dělí na:
- Veřejné adresy — jedinečné na celém internetu, přiděluje je
registr (RIPE, ARIN apod.) providerům a organizacím. - Privátní (RFC 1918) adresy — určené pro vnitřní sítě, nesměrují se
na internetu: 10.0.0.0/8(10.0.0.0 – 10.255.255.255)172.16.0.0/12(172.16.0.0 – 172.31.255.255)192.168.0.0/16(192.168.0.0 – 192.168.255.255)- Loopback —
127.0.0.1označuje "tento počítač sám sebe" (localhost).
IPv6 řeší dlouhodobý nedostatek IPv4 adres — používá 128bitové adresy
zapisované hexadecimálně, např. 2001:0db8:85a3::8a2e:0370:7334. V praxi
DevOps se s IPv6 pracuje čím dál častěji (cloudové platformy ho nabízejí
běžně), princip adresace a routování je ale koncepčně stejný.
Masky sítě a CIDR notace, subnetting
IP adresa sama o sobě neříká, která její část označuje síť a která
konkrétní zařízení (host) v ní. K tomu slouží maska sítě, dnes
nejčastěji zapisovaná v CIDR notaci — lomítko a počet bitů masky,
např. 192.168.1.0/24. Číslo /24 znamená, že prvních 24 bitů (tři
oktety) tvoří identifikátor sítě a zbylých 8 bitů je prostor pro adresy
hostů uvnitř této sítě — tedy 256 adres (0–255), z toho jedna je
síťová adresa (.0) a jedna broadcast (.255), takže reálně
254 použitelných adres pro zařízení.
Subnetting je proces rozdělení jedné větší sítě na více menších
podsítí — typicky kvůli oddělení provozu (např. produkční servery od
vývojových), omezení broadcast domény nebo kvůli požadavkům cloudového
providera (AWS VPC vyžaduje rozdělení na subnety v různých
availability zónách). Čím větší číslo za lomítkem, tím menší podsíť
(méně adres pro hosty):
| CIDR | Masla sítě | Počet adres celkem | Použitelných hostů |
|---|---|---|---|
| /24 | 255.255.255.0 | 256 | 254 |
| /25 | 255.255.255.128 | 128 | 126 |
| /28 | 255.255.255.240 | 16 | 14 |
| /30 | 255.255.255.252 | 4 | 2 (typicky point-to-point spoj) |
Porty a sokety
Port je 16bitové číslo (0–65535), které v rámci jednoho stroje
identifikuje konkrétní službu/proces naslouchající na síti. Kombinace
IP adresa : port se nazývá soket a jednoznačně identifikuje
koncový bod komunikace. Rozsahy portů:
- 0–1023 — "well-known" porty, vyžadují na Linuxu obvykle root
oprávnění pro naslouchání; standardizované služby, např.: 22— SSH80— HTTP443— HTTPS53— DNS5432— PostgreSQL3306— MySQL- 1024–49151 — registrované porty pro konkrétní aplikace.
- 49152–65535 — dynamické/efemérní porty, které si operační systém
automaticky přiděluje klientovi pro odchozí spojení.
TCP vs. UDP
- TCP (Transmission Control Protocol) — spojově orientovaný,
navazuje spojení pomocí tzv. three-way handshake (SYN → SYN-ACK →
ACK), garantuje doručení dat ve správném pořadí a řeší ztrátu paketů
opakovaným odesláním. Používá ho HTTP, SSH, databázové protokoly —
všude, kde je důležitá spolehlivost. - UDP (User Datagram Protocol) — bez navazování spojení, žádná
záruka doručení ani pořadí, ale nižší režie a latence. Používá ho
DNS (u krátkých dotazů), streamování videa, VoIP, a mnoho monitoring
protokolů.
Praktický příklad
Zjištění vlastní IP adresace a masky na Linuxu:
$ ip addr show eth0
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP
inet 10.0.2.15/24 brd 10.0.2.255 scope global dynamic eth0
Zde vidíme, že server má adresu 10.0.2.15 v síti /24 (maska
255.255.255.0), broadcast adresu 10.0.2.255.
Ověření, zda je vzdálený server dostupný po síti (vrstva IP) a zda
odpovídá na daném portu (vrstva TCP):
# Ping ověří základní dostupnost přes ICMP (vrstva IP)
$ ping -c 3 192.168.1.50
64 bytes from 192.168.1.50: icmp_seq=1 ttl=64 time=0.412 ms
64 bytes from 192.168.1.50: icmp_seq=2 ttl=64 time=0.389 ms
64 bytes from 192.168.1.50: icmp_seq=3 ttl=64 time=0.401 ms
# nc (netcat) ověří, zda někdo naslouchá na konkrétním TCP portu
$ nc -zv 192.168.1.50 443
Connection to 192.168.1.50 443 port [tcp/https] succeeded!
# ss vypíše, na kterých portech aktuálně naslouchá tento server
$ ss -tulpn
Netid State Local Address:Port Peer Address:Port Process
tcp LISTEN 0.0.0.0:22 0.0.0.0:* sshd
tcp LISTEN 0.0.0.0:80 0.0.0.0:* nginx
tcp LISTEN 127.0.0.1:5432 0.0.0.0:* postgres
Poslední výstup je typický diagnostický krok: postgres naslouchá jen
na 127.0.0.1 (localhost) — proto se k databázi nikdo zvenčí sítě
nepřipojí, což je obvykle záměrné bezpečnostní opatření.
Příklad subnettingu: potřebujete rozdělit síť 192.168.10.0/24 na čtyři
menší podsítě (např. pro čtyři oddělení). Posunete masku o 2 bity
(2² = 4 podsítě) na /26, čímž vzniknou:
192.168.10.0/26 (adresy .0 – .63, 62 použitelných hostů)
192.168.10.64/26 (adresy .64 – .127, 62 použitelných hostů)
192.168.10.128/26 (adresy .128 – .191, 62 použitelných hostů)
192.168.10.192/26 (adresy .192 – .255, 62 použitelných hostů)
Shrnutí
TCP/IP je vrstvený model, který popisuje, jak spolu komunikují zařízení
v síti: síťová vrstva (IP adresy) řeší doručení mezi stroji, transportní
vrstva (TCP/UDP a porty) doručení ke konkrétní službě na stroji. CIDR
notace (/24, /28 apod.) určuje, kolik bitů adresy tvoří síť a kolik
zbývá pro hosty, a subnetting umožňuje rozdělit velkou síť na menší,
izolované celky. Nástroje jako ip addr, ping, nc a ss jsou
základní výbavou pro diagnostiku síťové dostupnosti na jednotlivých
vrstvách.
Kontrolní otázky
- Jaký je rozdíl mezi IP adresou a portem a proč potřebujeme obojí?
- Kolik použitelných adres pro hosty poskytuje síť s maskou
/28? - Vysvětlete rozdíl mezi TCP a UDP a uveďte pro každý protokol jeden
typický případ použití. - Server má v
ss -tulpnuvedeno, že služba naslouchá na
127.0.0.1:5432. Bude se k ní moci připojit klient z jiného stroje
v síti? Zdůvodněte odpověď.
Lekce na sebe nejsou zamčené — libovolnou lekci můžete otevřít i označit jako hotovou v jakémkoliv pořadí.