ťařina
Obsah Soubory
markdown

Prefixy-a-masky.md

6.1 kB 91 řádků Změněno Zobrazit na GitHubu Stáhnout
markdown
# Prefixy a masky, čili co znamená to číslo za lomítkem Tohle je ta část, kterou většina lidí přeskočí a pak se diví. Přitom je za tím jediné pravidlo a jakmile ho jednou pochopíš, funguje beze změny pro IPv4, IPv6 i pro všechny ty divné případy typu `/30` na spoji k poskytovateli. ## To pravidlo IP adresa je jedno dlouhé binární číslo. Číslo za lomítkem říká, kolik bitů zleva určuje **síť**. Zbytek určuje **konkrétní zařízení** v té síti. To je celé. Vážně. Zbytek téhle stránky je jen rozvedení téhle jedné věty. ## IPv4 IPv4 adresa má 32 bitů. Zapisují se po osmi, což je důvod, proč vidíš čtyři čísla v rozsahu 0–255 — osm bitů umí právě 256 kombinací. Skupinám po osmi bitech se říká oktety. Vezmi `192.168.1.10/24`. To `/24` říká: prvních 24 bitů je síť, zbylých 8 je zařízení. <img src="prefix-ipv4.svg" alt="Rozdělení IPv4 adresy na síťovou a hostitelskou část"> Protože 24 bitů jsou přesně tři oktety, vyjde to hezky na hranici teček: `192.168.1` je síť, `.10` je zařízení. Tohle je náhoda daná tím, že `/24` je běžná volba. U `/26` už ti hranice spadne doprostřed posledního oktetu a začne to vypadat ošklivě. ## Maska je totéž, jen postaru `255.255.255.0` a `/24` nesou úplně stejnou informaci. Maska je starší způsob zápisu: napíšeš tolik jedniček, kolik má síť bitů, doplníš nulami a přeložíš zpátky do desítkové soustavy. Osm jedniček za sebou dá 255. Proto v maskách nikdy neuvidíš něco jako `255.13.7.99`. Jedničky musí být souvisle zleva, jinak by celý koncept nefungoval. Dnes se používají oba zápisy vedle sebe. Routery a starší konfigurační formuláře chtějí masku, moderní dokumentace a všechno kolem IPv6 používá lomítko. Jsou zaměnitelné. ## K čemu to router vlastně potřebuje Když tvůj notebook s adresou `192.168.1.10/24` chce něco poslat, udělá jednu jedinou operaci: porovná prvních 24 bitů cílové adresy se svými. Cíl `192.168.1.50`? Prvních 24 bitů sedí, takže je to soused ve stejné síti a data jdou přímo do kabelu. Cíl `147.32.80.5`? Nesedí, takže to není místní, a data putují na výchozí bránu, ať se s tím popere router. Tomuhle rozhodnutí se říká [směrování](Smerovani) a prefix je jediné, podle čeho se dělá. Když si na notebooku nastavíš špatnou masku, rozbiješ přesně tohle — počítač začne považovat za souseda někoho, kdo jím není, nebo naopak posílat na bránu i to, co má jít přímo. ## Menší číslo znamená větší síť Tady se to většině lidí obrátí v hlavě, protože intuice říká opak. Čím menší číslo za lomítkem, tím **víc** adres, protože tím víc bitů zbývá na zařízení. | Prefix | Maska | Adres v síti ||---|---|---|| `/8` | 255.0.0.0 | 16 777 216 || `/16` | 255.255.0.0 | 65 536 || `/24` | 255.255.255.0 | 256 || `/25` | 255.255.255.128 | 128 || `/26` | 255.255.255.192 | 64 || `/30` | 255.255.255.252 | 4 || `/32` | 255.255.255.255 | 1 | Každý krok o jedničku dolů síť zdvojnásobí, každý krok nahoru ji rozpůlí. Až narazíš na to, že někomu poskytovatel dal `/30`, teď víš, že dostal čtyři adresy — což je přesně to, co potřebuješ na spoj mezi dvěma routery. `/32` označuje jednu jedinou konkrétní adresu. Používá se ve firewallových pravidlech, když chceš mluvit o jednom stroji. ## Dvě adresy z každé IPv4 sítě odpadají Malý detail, který stojí za zmínku: z každé IPv4 sítě nemůžeš použít úplně první a úplně poslední adresu. První označuje síť jako takovou, poslední je broadcast pro všechny. Z `/24` tedy máš 256 adres, ale jen 254 použitelných pro zařízení, a z `/30` jsou použitelné jen dvě. IPv6 tuhle komplikaci nemá vůbec. Broadcast v něm neexistuje, nahradil ho multicast. ## IPv6 — přesně stejné pravidlo Nic nového se učit nemusíš. Adresa má 128 bitů místo 32 a zapisuje se po šestnácti, což vysvětluje těch osm skupin po čtyřech hexadecimálních číslicích. Dvě dvojtečky za sebou (`::`) jsou zkratka pro souvislý blok nul, aby se ty adresy daly vůbec psát. Zásadní rozdíl není v tom, jak se prefix počítá, ale v tom, co od poskytovatele dostaneš. U IPv4 ti dá **adresu**. U IPv6 ti dá **prefix**, tedy celý blok, který si dál dělíš sám. <img src="prefix-ipv6.svg" alt="Rozdělení 128 bitů při delegovaném prefixu /56"> ## Proč je v IPv6 vždycky /64 U IPv4 si velikost sítě volíš podle potřeby. Doma `/24`, na spoj `/30`, ve velké firmě `/16`. Šetří se adresami, protože jich je málo. V IPv6 se tohle nedělá. Každá koncová síť má vždycky `/64`, bez ohledu na to, jestli v ní máš tři zařízení nebo tři tisíce. Důvod je praktický: těch 64 bitů pro zařízení je přesně to, co umožňuje autokonfiguraci. Zařízení si adresu vygeneruje samo a spolehne se, že v tak obrovském prostoru s nikým nekoliduje. Kdybys dal `/80` nebo `/112`, ušetříš adresy, kterých je stejně nekonečno, a rozbiješ automatiku, která na `/64` spoléhá. Takže v IPv6 se nešetří adresami. Šetří se prefixy. ## Proč je rozdíl mezi /56 a /64 od poskytovatele zásadní Teď to dává smysl. Když ti poskytovatel dá `/64`, dostaneš přesně jednu síť a nemáš z čeho ukrojit další. Žádná oddělená [VLAN](VLANy) pro IoT, žádná síť pro hosty, nic. Zbývá ti nula bitů na dělení. Když dostaneš `/56`, jak dává [Vodafone na kabelu](Poskytovatel-CGNAT-a-verejna-IP), máš 64 − 56 = 8 volných bitů, tedy 256 samostatných sítí `/64`. To je doma číslo, které nikdy nevyčerpáš. Proto ta hodnota ve formuláři [UniFi](UniFi) není kosmetika. Když tam napíšeš `/64`, nebudeš mít co rozdělovat mezi VLANy. Když napíšeš `/48`, žádáš víc, než ti Vodafone dá, a nedostaneš vůbec nic. ## Shrnutí v jedné větě Číslo za lomítkem říká, kolik bitů zleva je zamčených. Zbytek je tvůj hrací prostor. U IPv4 z něj děláš adresy zařízení, u IPv6 z něj děláš celé sítě a adresy zařízení dostaneš zadarmo.