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.
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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |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
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.
V IPv6 jsou celkem 3 hlavní druhy druhy adres. Jsou to:
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
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 radvdPo 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
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 je síť, která provozuje IPv6. Slouží jako testovací prostředí pro implementaci standardu IPv6. Víc informací zde
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.