Přesto nás i ve světě IPv6 pronásledují špatné zvyky ze světa IPv4, se kterými jsme si za poslední dvě desetiletí zvykli žít. Jedním z takových zvyků je i šetření adresami. V článku si shrneme, proč je takové šetření špatné.
Na nedávném Semináři IPv6, pořádaném organizací CESNET, se během programu i po něm několikrát strhla vášnivá debata na téma, jaké jsou z pohledu počtu přiřazených IPv6 adres, nebo spíše velikosti přiřazených adresních bloků (síťových prefixů), potřeby domácností a malých zákazníků obecně.
IPv6 je protokol, který pro adresování uzlů využívá adresní prostor o velikosti 128 bitů. Každá IPv6 adresa je tak 128 bitů dlouhá.
Pro tzv. globální unicastové adresy je ovšem organizací IANA vyhrazeno jen 125 bitů z tohoto prostoru, konkrétně síťový blok adres 2000::/3. To znamená, že první tři bity jsou zafixovány na konkrétní hodnotu, a zbývající bity lze použít pro další distribuci.
V dnešním IPv6 Internetu tak můžete teoreticky potkat adresy začínající dvojkou nebo trojkou, například 2001:db8:dead:beef::1, prakticky pouze ty s dvojkou na začátku. Z prefixu 2000::/3 jsou distribuovány adresní bloky jednotlivým regionálním registrům (tzv. RIR; například evropskému RIPE NCC, severoamerickému ARIN, a dalším). Velká část adres je zatím stále rezervována pro budoucí distribuci a není přiřazena žádnému regionálnímu registru.
Regionální registry pak distribuují ze svých bloků menší bloky jednotlivým členům, lokálním registrům (LIR) – často koncovým poskytovatelům služby přístupu k síti Internet. V evropském regionu je běžné, že i nejmenší LIR dostane adresní blok o velikosti /29. Větší organizace samozřejmě mohou na základě počtu svých uživatelů požádat o větší příděly. Největší evropští poskytovatelé konektivity (Deutsche Telekom, France Telecom) pak dnes mají k dispozici bloky o velikosti /19.
Velikost bloku říká, kolik bitů z globální adresy je stanoveno RIR, a kolik bitů může využít poskytovatel přístupu pro přiřazování uživatelům sítě – v případě bloku o velikosti /29 lze uživatelům přidělit 2(128–29) adres, tedy teoreticky až 299, u zmíněných největších ISP je pak pro uživatele dostupných až 2109 adres.
To je na první, ale i druhý pohled obrovské číslo – vždyť dnes běžná síť v domácnosti a menší firmě pracuje s bloky IPv4 adres o velikosti /24, tedy 256 adres (z nichž jsou navíc dvě rezervované). Po bližším prozkoumání se ale ukazuje, že v IPv6 je situace jiná.
Původní návrh architektury IPv6 adres v RFC 4291 pracuje s předpokladem, že je unicastová adresa rozdělena na dvě poloviny: prvních n bitů je tzv. síťový prefix a zbytek (128-n) se používá pro tzv. identifikátory rozhraní koncových uzlů v síti, které je prefix přiřazen.
Současně s touto definicí se v odkazovaném RFC zároveň objevují identifikátory rozhraní koncového uzlu v podobě modifikovaného EUI-64, kdy je z MAC adresy (o velikosti 48 bitů) doplněním sekvence bitů ff:fe doprostřed MAC adresy a invertováním sedmého bitu MAC adresy vygenerován identifikátor o velikosti 64 bitů, např.:
I další metody generování identifikátorů rozhraní (privacy extensions, stabilní neprůhledné adresy a další) předpokládají, že velikost identifikátoru rozhraní je 64 bitů. Jedinou výjimkou je standard DHCPv6, který přiděluje celých 128 bitů a přidělené adresy jsou pak na síťovém rozhraní v operačním systému konfigurovány s maskou sítě /128. DHCPv6 není ale ani zdaleka podporováno všemi implementacemi protokolu IPv6: největší ostudou je Android, do kterého Google implementovat DHCPv6 z ideologických důvodů odmítá. RFC 7421 tedy na základě stávající podoby standardů a stavu implementací konstatuje, že délka identifikátoru rozhraní je de facto 64 bitů.
Ze 128 bitů adresního prostoru IPv6 je tak pro síťový prefixde facto vyhrazeno prvních 64 bitů IPv6 adresy – a zbylých 64 bitů, teoreticky až 18 446 744 073 709 551 616 adres, je vyhrazeno pro adresování koncových uzlů v rámci jednoho koncového segmentu sítě, kterému je takový síťový prefix přidělen. I standard pro automatickou konfiguraci (SLAAC) na základě oznamování směrovače (router advertisement) s informací o síťovém prefixu ostatně počítá s tím, že velikost síťového prefixu je právě 64 bitů – a pro jiné velikosti síťového prefixu není chování klientských implementací IPv6 definováno. To samozřejmě neznamená, že by se v koncovém segmentu sítě běžně vyskytovalo takové množství adres. Většina adresního prostoru ze síťového prefixu je obvykle nevyužita. Rozdělení bitů IPv6 adresy pak znázorňuje obrázek:
Z výše uvedeného vyplývá, že 18 trilionů IPv6 adres je ve skutečnosti právě jeden segment sítě, tedy síťový prefix o velikosti 64 bitů (/64). Už dnes existuje mnoho scénářů, kdy může uživatel chtít mít více oddělených síťových segmentů – ať už jde o sdílené přípojky při spolubydlení, bezdrátovou síť pro návštěvy, speciální oddělenou síť pro M2M bez přístupu k Internetu, síťové segmenty pro virtualizační nástroje (např. VirtualBox na koncovém počítači s vlastním /64 prefixem), síťový segment s vlastními pravidly shapingu rychlosti, demilitarizovanou zónu se speciálními pravidly firewallu, nebo například využití globálních unicastových adres pro vlastní NAT64 bránu, či připojení dalšího routeru do sítě (zřetězení routerů).
Ve všech uvedených případech je velikost adresního prostoru jednoho síťového segmentu, tedy 18 446 744 073 709 551 616 adres, nedostačující a omezující. Ačkoli existují obezličky, jak si s adresním prostorem pro jeden segment vystačit (například použití DHCPv6, nebo ručně konfigurované adresy a masky sítě), standardně se prostor jednoho segmentu nedá dále rozdělit – základní mechanismy IPv6 jako automatická konfigurace by přestaly fungovat.
V ideálním případě by každá koncová lokalita (End Site) měla mít k dispozici takové množství koncových segmentů, které ji nebude omezovat (a to ani při rozvoji do budoucna). V počátcích IPv6 bylo předpokládáno, že koncovým lokalitám bude automaticky přidělován síťový prefix o velikosti alespoň /48, tedy až 65536 síťových segmentů. Toto pravidlo bylo později zmírněno, a tak dnes některá pravidla (např. ripe-699) uvádějí, že koncová lokalita musí obdržet adresy alespoň pro jeden síťový segment (tedy prefix /64), RFC 6177 doporučuje přidělovat alespoň /56 (tedy 256 síťových segmentů) a ripe-690 dokonce důrazně odrazuje od přidělování síťových prefixů o velikosti /57 až /64. To znamená, že by každá koncová lokalita měla mít k dispozici alespoň 8 bitů pro sítě uživatele:
Ačkoli se může zdát, že jde o plýtvání, není tomu tak: například největší český poskytovatel přístupu k síti Internet, O2 Czech Republic, má přidělen adresní blok 2a00:1028::/29, ze kterého by svým zákazníkům mohl alokovat až 134 217 728 síťových prefixů o velikosti /56 – a přesto přiděluje adresy pro právě jeden síťový segment (tedy /64, přesně nula bitů pro sítě uživatele). Takových segmentů dokáže ze svého přídělu obsloužit 34 359 738 368 – tolik rezidentních zákazníků ale nikdy mít nebude. Obrovská část z pětatřicetibitového adresního prostoru spravovaného LIRem O2 – a podobně i dalšími poskytovateli konektivity, kteří přidělují zákazníkům adresy právě pro jeden síťový segment – tak zůstává zbytečně nevyužita.
Existují sice aplikace, kdy je přidělení jednoho síťového prefixu /64 ospravedlnitelné (například mobilní sítě, ve kterých každý připojený telefon obdrží svůj /64 prefix), ale ve většině běžných případů (a to platí pro firemní i domácí koncové lokality) přidělování adresního prostoru pro právě jeden síťový segment omezuje uživatele, brání budoucímu rozvoji, přičemž nepřináší operátorovi žádnou výhodu. Přidělování adres pro právě jeden segment sítě nejen neposkytuje prostor pro růst do budoucna, ale zároveň škodí IPv6 jako celku.
Obrázky v tomto článku byly generovány nástrojem shaky.