# 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.
