IPv6

Marek Hulán, xhulan (a) fi.muni.cz

Obsah

Historie

Počátkem devadesátých let bylo zřejmé, že beztřídní adresace IPv4 protokolu nebude dostatečná. Roku 1996 byla vydána série RFC, definující novou verzi IP. Původně šlo o IPng (next generation), který byl později přejmenován na IPv6. (IPv5 byl jen experimentální protokol na multimediální proudy). Mezi novinky oproti IPv4 patří

Cílem IPv6 je nahradit IPv4. Není stanoven žádný termín, kdy se IPv4 přestane používat, postupně se ale nasazuje, a to zejména v akademických sítích.

Terminologie

uzel (node) - zařízení implementující IPv6

směrovač (router) - uzel, který přeposíla IPv6 packety, které nejsou adresováný explicitně jemu

host - uzel, který není router

rozhraní (interface) - připojení jednoho uzlu k médiu

Hlavička IPv6 paketu

+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|Version| Traffic Class |           Flow Label                  |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|         Payload Length        |  Next Header  |   Hop Limit   |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                                                               |
+                         Source Address                        +
|                                                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                                                               |
+                      Destination Address                      +
|                                                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Version - 4-bity verze IP (6)

Traffic Class - 8-bitů druh komunikace, používá se k rozlišení paketů, což je potřeba k prioritizaci (ToS v IPv4)

Flow Label - 20-bitů popis komunikace, používá se k předávání řídících informací pro směrovače (nevýchozí QoS nebo "real-time" služby) Pokud uzel Flow Label nepodporuje, nastaví 0, jestliže paket pochází od něj, jinak nechá pole nezměněné.

Payload Length - 16-bitů unsigned integer, délka dat

Next Header - 8-bitů identifikátor bezprostředně následující hlavičky (stejně jako v IPv4 viz RFC 1700)

Hop Limit - 8-bitů unsigned integer, každý uzel sniží číslo o 1, pokud limit klesne na 0, paket je zahozen.

Source Address - 128-bitů adresy odesílatele

Destination Address - 128-bitů adresy příjemce

Adresace v IPv6

Adresy jsou přiřazovány rozhraní. Každé rozhraní může mít víc adres. Jak již bylo řečeno, adresa je dlouhá 16 bajtů, tj. 128 bitů. Celkem tedy v IPv6 existuje 2128 adres. Celkem je to 340 282 366 920 938 463 463 374 607 431 768 211 456 adres. Na metr čtvereční naší planety připadá asi 6,67 * 1027 adres. Adresy se zapisují jako 8 hexadecimálních čtveřic oddělených dvojtečkou.

Příklad adresy

FF01:0000:0000:0000:0000:0000:0020:0101

V zápisu lze vypouštět "levé" nuly v libovolné čtveřici. Pokud je nějaká čtveřice složená pouze z nul, lze ji vypustit, místo jedné dvojtečky se pak použijí dvě.

Vypuštění úvodních nul

FF01:0:0:0:0:0:20:101

Vypuštění nulových čtveřic

FF01::20:101

V IPv6 se používá beztřídní adresace, tzv. CIDR. Za adresou se uvádí lomítko a délka prefixu v bitech.

Kategorie adres

V IPv6 jsou celkem 3 hlavní druhy druhy adres. Jsou to:

Identifikátor rozhrazní

Rozhraní s globální unicastovou adresou mají spodních 64 bitů tvořených z EUI64 s univerzálním bitem (6tý bit) nastaveným na 1 pro zařízení s hw adresou. EUI64 lze získat z MAC (48 bitů) vložením FFFE do jejího středu. Z takto definovaných identifikátorů zpětně zjistíte MAC adresu, což by mohlo vést ke ztrátě anonymity. Náhodnost přidává dodatek k IPv6 definovaný v RFC 4941

Konfigurace v Linuxu (debian)

Základním předpokladem je jádro, které má zakompilovanou podporu pro IPv6. Pak lze rozhraní konfigurovat klasickými nástroji jako ifconfig, route, ip (iptunnel)...

příklad konfigurace:

ifconfig eth0 inet6 add fec0::40 #přidá IPv6 adresu (del smaže)
route -A inet6 add default fec0::1 # výchozí cesta skrz erigonu

Na routerech musí běžet program, který odpovídá na autokonfigurační požadavky hostů. V Linuxu se tento program jmenuje radvd (Router ADVertisement Daemon). Tento démno poslouchá "router solicitations" a odpovídá tzv. "router advertisement". V debianu nainstalujeme radvd pomocí

apt-get install radvd
Po instalaci musíme vytvořit konfigurační soubor /etc/radvd.conf, do kterého můžeme umístit následující.
interface eth0                       # démon bude sídlit na eth0
{
        AdvSendAdvert on;            # chceme, aby odpovídal na dotazy
        prefix 5f15:9100:c2dd:1400:8000::0/80     # prefix zasílaný jako odpověď
        {
                AdvAutonomous on;    # prefix může být použit pro autokonfiguraci.
                AdvOnLink     on;    # všechna zařízení s tímto prefixem jsou dostupná skrz toto rozhrazní
        };
};
Po uložení souboru démona spustíme pomocí
/etc/init.d/radvd start

Tunelování

Slouží k přenosu IPv6 paketů přes IPv4. V zásadě existují dva druhy tunelování - automatické a ručně konfigurované. Ručně kofigurované se lépe ladí.

iptunnel add nazev mode sit remote 10.0.40.1 local 10.0.40.2 ttl 10
ifconfig nazev up
ifconfig nazev add fec0:0:0:40::2/64 
route -A inet6 add fec0:0:0:40::/64 dev nazev

6bone

6bone je síť, která provozuje IPv6. Slouží jako testovací prostředí pro implementaci standardu IPv6. Víc informací zde

getaddrinfo

Funkce getaddrinfo slouží k psaní aplikací nezávislých na protokolu. Dle POSIX 1003.1g. nahrazuje gethostbyname a getservbyname.

int getaddrinfo(const char *node,              /* FQDN, textový zápis adresy IPv4 nebo IPv6 */
const char *service,           /* jméno podle /etc/services nebo číslo portu */
const struct addrinfo *hints,  /* struktura addrinfo */
struct addrinfo **res);        /* tady se uloží vysledek */
V addrinfo jsou informace o verzi, socketu atd.

Literatura