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.

Odhadovaná délka studia: 60 minut · Stav: nehotovo

Technologie: Sítě (TCP/IP)

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

  1. Vrstva síťového rozhraní (Ethernet, Wi-Fi) — přenos rámců po
    fyzickém/lokálním médiu, adresace pomocí MAC adres.
  2. Síťová vrstva (IP) — směrování paketů mezi sítěmi pomocí IP adres.
  3. 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í.
  4. 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)
  • Loopback127.0.0.1 označ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 — SSH
  • 80 — HTTP
  • 443 — HTTPS
  • 53 — DNS
  • 5432 — PostgreSQL
  • 3306 — 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

  1. Jaký je rozdíl mezi IP adresou a portem a proč potřebujeme obojí?
  2. Kolik použitelných adres pro hosty poskytuje síť s maskou /28?
  3. Vysvětlete rozdíl mezi TCP a UDP a uveďte pro každý protokol jeden
    typický případ použití.
  4. Server má v ss -tulpn uvedeno, ž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í.