# 🌐 Síťová architektura ## Referenční model (TCP/IP) | Vrstva | Protokoly | Zařízení | |--------|-----------|----------| | Aplikační | HTTP/HTTPS, DNS, SMTP, SSH | — | | Transportní | TCP, UDP | — | | Síťová | IP, ICMP, BGP | Routery | | Linková | Ethernet, ARP, VLAN | Switche | ## TCP detail ### 3-way handshake ``` Client Server | | | SYN (seq=x) | |──────────────────────────────>| | | | SYN+ACK (seq=y, ack=x+1) | |<──────────────────────────────| | | | ACK (seq=x+1, ack=y+1) | |──────────────────────────────>| | | | << established >> | ``` - **SYN** — client odešle segment s příznakem SYN (Synchronize Sequence Number) - **SYN-ACK** — server odpoví vlastním SYN + potvrzením clientova seq čísla - **ACK** — client potvrdí, spojení je navázáno - TCP Fast Open (TFO) — data v SYN paketu pro 0-RTT u opakovaných spojení ### Flow control (sliding window) - **Receiver Window (rwnd)** — kolik dat je receiver ochoten přijmout - **Sliding window** — sender udržuje okno nepotvrzených paketů - Window scaling (RFC 1323) — umožňuje okno až 1 GB (místo 64 KB) - Zero Window — receiver oznámí 0, sender zastaví, persist timer periodicky testuje ### Congestion control | Algoritmus | Popis | Use case | |-----------|-------|----------| | **Cubic** | Výchozí v Linuxu (od kernel 2.6.19), kubická growth funkce | Obecné sítě, výchozí pro Internet | | **BBR** (Bottleneck Bandwidth and RTT) | Model-based, měří bandwidth a RTT, ne packet loss | Vysokorychlostní sítě, YouTube, Google | | **Reno** | Classic AIMD (Additive Increase Multiplicative Decrease) | Legacy, reference | | **CDG** (CAIA Delay Gradient) | Delay-based, detekce congeste podle RTT gradientu | Videostreaming, real-time | BBRv2 (2024+) — zahrnuje ECN signalizaci, koexistenci s Cubic, lepší handling při loss. ## DNS (Domain Name System) - **Record typy**: A, AAAA, CNAME, MX, TXT, NS, SRV, PTR, CAA, DS, DNSKEY, RRSIG, NSEC - **DNS resolver**: rekurzivní dotaz přes hierarchii (root → TLD → authoritative) - **Anycast DNS** — stejná IP z více lokací, směrování k nejbližší - **DNS caching** — TTL řízení, cache poisoning ochrana (DNSSEC) - **Cloud DNS** — Route53, Azure DNS, Cloud DNS ### DNS lookup flow (krok za krokem) ``` 1. Uživatel zadá "api.example.com" do prohlížeče 2. OS stub resolver zkontroluje lokální cache (/etc/hosts, systemd-resolved) 3. Pokud není v cache → dotaz na rekurzivní resolver (ISP / 8.8.8.8 / 1.1.1.1) 4. Resolver zkontroluje svou cache 5. Nenalezeno → resolver začne rekurzivní lookup: a. Dotaz na root nameserver (.) → vrátí NS pro .com b. Dotaz na .com TLD nameserver → vrátí NS pro example.com c. Dotaz na autoritativní NS pro example.com → vrátí A záznam (IP) 6. Resolver uloží do cache (TTL), vrátí IP clientu 7. Client naváže TCP spojení na získanou IP ``` Celý proces typicky trvá 10–200 ms (s cache < 1 ms). ### DNSSEC detail - **RRSIG** — digitální podpis pro každý RRset (Resource Record Set) - **DNSKEY** — veřejný klíč zóny (ZSK = Zone Signing Key, KSK = Key Signing Key) - **DS** (Delegation Signer) — hash DNSKEY předávaný do parent zóny (řetěz důvěry) - **NSEC / NSEC3** — authenticated denial of existence (důkaz, že záznam neexistuje) - **Chain of trust**: root → .com → example.com (cesta od trust anchor přes DS recordy) ``` Root DS → .com DNSKEY → .com DS → example.com DNSKEY → example.com RRSIG(A) ``` - Validace: resolver zkontroluje podpisy přes celý řetěz až k trust anchor ### DNS-based service discovery | Mechanismus | Popis | Příklad | |------------|-------|---------| | **SRV record** | Service location (priority, weight, port, target) | `_http._tcp.example.com` | | **Consul DNS** | Service discovery přes DNS rozhraní | `web.service.consul` | | **CoreDNS** | Kubernetes DNS, plugin-based | `my-svc.my-namespace.svc.cluster.local` | | **Kubernetes DNS** | Service discovery uvnitř clusteru (kube-dns / CoreDNS) | `svc.cluster.local` | | **mDNS** (Multicast DNS) | Zero-config, lokální síť (Bonjour/Avahi) | `myprinter.local` | ## Load Balancing | Typ | Vrstva (OSI) | Popis | |-----|-------------|-------| | L4 (NLB) | 4 | TCP/UDP, rychlý, nižší latence | | L7 (ALB) | 7 | HTTP/HTTPS, path-based routing, sticky sessions | | Global | DNS | Geo-routing, latency-based, weighted | ### Algoritmy - Round Robin / Weighted RR - Least Connections - IP Hash (session persistence) - Random ### Health check typy | Typ | Popis | Vhodné pro | |-----|-------|-----------| | **TCP health check** | TCP handshake na cílový port | L4 NLB, základní check | | **HTTP health check** | HTTP GET na URL, očekává 200 OK | L7 ALB, webové služby | | **HTTPS health check** | HTTP + TLS handshake | Služby s TLS terminací | | **gRPC health check** | gRPC Health/Check RPC (gRPC specific) | Microservices, gRPC služby | | **ICMP ping** | Ping na cílovou IP | Základní konektivita | ### Connection draining - **Connection draining** (AWS) / **Deregistration delay** — při odebrání targetu z ASG/LB se počká, až existující spojení skončí (configurable: 1-3600 s) - **Slow start** — nový target dostává postupně více requestů (zabrání přetížení cold cache) ### Cross-zone load balancing - **Enabled**: LB rovnoměrně rozděluje traffic napříč všemi AZ (i nerovnoměrný počet instancí) - **Disabled**: traffic rozdělen rovnoměrně mezi AZ, pak v rámci AZ mezi instance - AWS ALB/NLB: enabled by default (2022+), bez dalších poplatků ## Firewally a bezpečnost - **Stateful firewall** — sleduje stav spojení (AWS Security Groups, Azure NSG) - **Stateless firewall** — ACL (Network ACLs) - **NGFW** — aplikační vrstva, IPS/IDS (Palo Alto, Fortinet) - **WAF** — ochrana web aplikací (Cloudflare, AWS WAF, Azure WAF) ## Network segmentation — Security Groups vs Network ACLs | Vlastnost | Security Group (SG) | Network ACL (NACL) | |-----------|-------------------|-------------------| | **State** | Stateful (automaticky povoluje return traffic) | Stateless (nutné explicitní pravidlo pro oba směry) | | **Úroveň** | Instance / ENI | Subnet | | **Pravidla** | Povolující (allow only) | Povolující i zakazující (allow + deny) | | **Vyhodnocení** | Všechna pravidla se vyhodnotí (OR) | Pravidla od nejnižšího čísla (first match) | | **Default** | All traffic denied (inbound), all traffic allowed (outbound) | All traffic denied (inbound i outbound) | | **Podpora** | AWS, GCP (firewall rules), Azure (NSG) | AWS (NACL), GCP (firewall rules na subnet), Azure (NSG) | ### Mikrosegmentace - **Zero Trust networking** — každý workload má vlastní security group / NGFW policy - **Service mesh** — Istio, Linkerd, Consul Connect pro L7 mikrosegmentaci (mTLS, authorization policies) - **Network policies** — Kubernetes NetworkPolicy pro segmentaci pod-to-pod trafficu - **Tanzu / NSX** — micro-segmentation na hypervisor úrovni ## VPN - **Site-to-Site** — IPSec, trvalé spojení mezi lokalitami - **Client-to-Site** — OpenVPN, WireGuard, AnyConnect - **Cloud VPN** — AWS VPN, Azure VPN Gateway, GCP Cloud VPN ## CDN (Content Delivery Network) - Edge lokace pro cachování statického obsahu - DDoS ochrana - SSL/TLS termination na edge - Poskytovatelé: CloudFront, Cloudflare, Akamai, Fastly ## BGP a routing - **BGP** — protokol pro výměnu rout mezi AS (autonomními systémy) - **ASN** — unikátní identifikátor sítě - **iBGP** — interní BGP (uvnitř AS) - **eBGP** — externí BGP (mezi AS) ### BGP path selection algoritmus BGP router vybírá jedinou nejlepší cestu podle následujících kriterií (v pořadí priority): 1. **WEIGHT** (Cisco-specific) — nejvyšší weight (local to router) 2. **LOCAL_PREF** — nejvyšší local preference (v rámci AS) 3. **Originate** — preferuje route originovanou lokálním routerem 4. **AS_PATH** — nejkratší AS_PATH length 5. **ORIGIN** — IGP < EGP < INCOMPLETE 6. **MED** (Multi-Exit Discriminator) — nejnižší MED (při stejném AS souseda) 7. **eBGP > iBGP** — preferuje externí BGP před interním 8. **Next-hop reachable** — cesta k next-hop musí být dosažitelná 9. **Neighbor IP** — preferuje cestu od routeru s nejnižší IP 10. **Router ID** — preferuje cestu s nejnižším Router ID ### iBGP full mesh vs Route Reflectors | Aspekt | Full mesh | Route reflectors | |--------|-----------|-----------------| | **Počet session** | n(n-1)/2 | n (každý peer k RR) | | **Při 100 routerech** | 4 950 session | 100 (při 1 RR) | | **Škálování** | Špatné (kvadratické) | Lineární | | **Redundance** | Přirozená | Nutné multi-RR + cluster | | **Konfigurace** | Jednoduchá logika | RR pravidel (non-transitive) | BGP nutné znát pro: Cloud interconnects, MPLS L3VPN, SD-WAN, Data center fabrics (VXLAN + BGP EVPN) ## Architektura VPC / Virtual Network ``` Internet ──┬── Internet Gateway (IGW) │ ┌──────▼──────┐ │ Public Subnet │ │ ┌──────────┐ │ │ │ ALB/NAT │ │ │ └────┬─────┘ │ └───────┼────────┘ │ ┌───────▼────────┐ │ Private Subnet │ │ ┌──────────┐ │ │ │ App │ │ │ └────┬─────┘ │ └───────┼─────────┘ │ ┌───────▼─────────┐ │ Data Subnet │ │ ┌────────────┐ │ │ │ Database │ │ │ └────────────┘ │ └──────────────────┘ ``` ### VPC design patterns **Three-tier architecture** - Web tier (public subnets) → ALB - App tier (private subnets) → auto-scaling - Data tier (private subnets) → RDS / self-managed DB - NAT Gateway / Instance v public subnet pro outbound traffic z app/data tier **VPC Peering** - Přímé spojení mezi dvěma VPC (same nebo cross-account) - Transitive peering **není** podporován (A→B, B→C neznamená A→C) - Případy: sharing resources (LDAP, monitoring), service endpoints **Transit Gateway** - Hub-and-spoke topologie, transitive routing - Podporuje: VPC, VPN, Direct Connect, peering mezi TGW - Route tables per attachment — izolace environmentů - AWS TGW: 50 Gbps per attachment, až 5000 attachments **PrivateLink / VPC Endpoint** - Privátní přístup k službám bez IGW, NAT, VPC peering - **Interface Endpoint** (ENI v subnet) — pro AWS services, SaaS - **Gateway Endpoint** (S3, DynamoDB) — route table entry, zdarma - **AWS PrivateLink** — Service Consumer ↔ NLB/ENI ↔ Service Provider ## MTU, jumbo frames, PMTUD | Síť | Standardní MTU | Jumbo frames | |-----|---------------|--------------| | Ethernet | 1500 B | 9001 B (AWS: 9001, Azure: 1400→9000) | | GRE tunel | 1476 B | — | | PPPoE | 1492 B | — | | VLAN (802.1Q) | 1496 B | — | | VXLAN | N/A (inner 1500 + 50) | 8950 B | **PMTUD** (Path MTU Discovery) - Nastaví DF (Don't Fragment) bit v IP hlavičce - Pokud cesta vyžaduje fragmentaci → ICMP "Fragmentation Needed" (Type 3, Code 4) - Snižuje MTU, dokud paket neprojde - Častý problém: ICMP blokovaný firewallem → black hole (TCP connection hangs) - **Workaround**: MSS clamping (TCP MSS = MTU - 40) **Jumbo frames use cases** - NFS / SMB (NAS) - iSCSI / NVMe-oF (SAN) - HPC / MPI workloads - Data replication (DB, DRBD) - Amazon EFS, AWS Managed Streaming pro Kafka ## Anycast vs Unicast vs Multicast | Typ | Popis | Příklad | |-----|-------|---------| | **Unicast** | 1:1 — jeden source, jeden destination | Běžný TCP/IP provoz | | **Multicast** | 1:N — jeden source, skupina receiverů | IPTV, mDNS, VXLAN BUM traffic | | **Anycast** | 1:1 z nejbližšího — stejná IP z více lokací | DNS (8.8.8.8, 1.1.1.1), Cloudflare | | **Broadcast** | 1:VŠICHNI — všechna zařízení v síti | ARP, DHCP (omezeno na L2 broadcast doménu) | Anycast detail: - Stejná IP prefix je anunciována z více lokací (BGP) - Traffic jde k topologicky nejbližšímu uzlu (BGP path selection) - **Výhody**: jednoduchá redundance, DDoS absorpce, nižší latence - **Výzvy**: connection persistence (TCP), stateful anycast, routing convergence - **Cloud**: Route53, CloudFront, Cloudflare, Google DNS ## Cloud networking resilience (2026) Viz také: [CLOUD.md](CLOUD.md) — cloud architektura, multi-AZ, hybrid cloud konektivita. ### Cell-based architektury - Izolace fault domain do "cell" (skupina AZ + services) - Každá cell samostatně deploysovatelná, vlastní DB, vlastní LB - Limit blast radius: selhání jedné cell neovlivní ostatní - Implementace: AWS Cell-based architecture, Azure STAG (Scale Tier Availability Group) ### DNS resilience - **Anycast DNS** — stejná IP z více regionů, směrování k nejbližšímu - **DNS failover** — health checky automaticky odstraňují nedostupné endpointy - **Multi-DNS provider** — Route53 + Cloudflare + UltraDNS pro eliminaci SPOF ### Traffic engineering - **BGP optimization** — AS path prepend, MED, local pref pro řízení vstupního/výstupního trafficu - **Global Load Balancing** — GSLB na DNS úrovni (latency-based, geo-proximity, weighted) - **AIOps** — ML-based predikce traffic patternů a automatické škálování ### Nové trendy - **Path Aware Networking** — aplikace si vybírá cestu sítí podle aktuálních podmínek - **Segment Routing (SR-MPLS / SRv6)** — zjednodušení MPLS, programovatelné cesty - **Zero Trust Networking** — mikrosegmentace, identity-based access, never trust / always verify ## Best practices - **Segmentace sítě** — oddělení environmentů (dev/staging/prod), vrstev (web/app/db) - **Least privilege access** — security groups povolují jen nutný provoz - **Monitoring** — VPC Flow Logs, netflow, sFlow - **Redundance** — multi-AZ, multi-region pro kritické služby - **Encryption in transit** — TLS všude, mTLS pro service-to-service - **DDoS protection** — AWS Shield, Azure DDoS Protection, Cloudflare ## Zdroje Odkazy, knihy a standardy: [sources/networking/sources.md](sources/networking/sources.md) - **MTU alignment** — konzistentní MTU napříč celou cestou, kontrola ICMP blokování pro PMTUD - **IP planning** — RFC 1918 (10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16), vyhnout se překryvům pro peering ## TLS detail ### TLS 1.3 handshake (1-RTT) ``` Client Server | | | ClientHello (key_share, sig_algs) | |─────────────────────────────────────────>| | | | ServerHello + EncryptedExtensions | | + Certificate + CertificateVerify | | + Finished | |<─────────────────────────────────────────| | | | Finished | |─────────────────────────────────────────>| | | | << Application Data >> | ``` - **0-RTT** (early data) — client posílá data ihned s první zprávou (při opakovaném spojení s PSK) - Riziko 0-RTT: replay attacks (HTTP GET je bezpečný, POST vyžaduje ochranu) - Oproti TLS 1.2: odstraněny zastaralé ciphery, AEAD required, faster handshake (2 RTT → 1 RTT) ### Cipher suites | Suite | Key exchange | Auth | Encryption | MAC | Status | |-------|-------------|------|-----------|-----|--------| | `TLS_AES_128_GCM_SHA256` | (EC)DHE | (EC)DHE | AES-128-GCM | AEAD | TLS 1.3 default | | `TLS_AES_256_GCM_SHA384` | (EC)DHE | (EC)DHE | AES-256-GCM | AEAD | Vyšší bezpečnost | | `TLS_CHACHA20_POLY1305_SHA256` | (EC)DHE | (EC)DHE | ChaCha20-Poly1305 | AEAD | Mobilní / bez AES-NI | | `ECDHE-ECDSA-AES128-GCM-SHA256` | ECDHE | ECDSA | AES-128-GCM | AEAD | TLS 1.2 (PFS) | | `ECDHE-RSA-AES128-GCM-SHA256` | ECDHE | RSA | AES-128-GCM | AEAD | TLS 1.2 (PFS) | PFS (Perfect Forward Secrecy) — při kompromitaci privátního klíče nelze dešifrovat dříve zachycený provoz (ECDHE + ephemeral klíče). ### Certificate chain validation ``` 1. Client obdrží certificate chain od serveru 2. Validace: a. Datum: certifikát není expirovaný a je platný (notBefore, notAfter) b. CRL / OCSP: certifikát není revokován (OCSP stapling pro snížení latence) c. Signature chain: podpis každého certu v řetězu je ověřen veřejným klíčem vydavatele d. Root CA: poslední cert v řetězu je důvěryhodný (v trust store klienta) 3. CN / SAN: doménové jméno v certifikátu musí odpovídat cílové doméně ``` Typický řetěz: `Leaf Cert → Intermediate CA → Root CA` (self-signed, v trust store).