Potřebu protokolu IPv6 primárně vyvolal strach z nedostatku IPv4 adres. Čas ukázal, že adresy ještě nějakou tu dobu vydrží, takže bylo dost času na specifikaci protokolu. Při vývoji se kladl důraz na tři vlastnosti:
Adresa v IPv6 je 128 bitová. Zapisuje se ve tvaru X:X:X:X:X:X:X:X
,
kde X
je
šestnáctkovým zápisem 16 bitů. Když se v adrese vyskytuje dlouhá posloupnost nul,
může se nahradit ::
, kvůli jednoznačnosti však pouze na jednom místě. Lze
kombinovat zápis IPv6 a IPv4, výsledkem je adresa tvaru X:X:X:X:X:X:D.D.D.D
,
kde D.D.D.D
je adresa v IPv4.
EUI-64 token formát adresy se používá při autokonfiguraci. Začátek adresy
tvoří maska sítě (její adresu musí stanice znát), konec se pak vezme z MAC
adresy tímto způsobem: doprostřed MAC
adresy vložíme FFFE
, negujeme 7. bit zleva. Tím dostaneme posledních
64 bitů adresy.
Adresy se dělí na:
Typy adres jsou:
DNS záznamy se zapisují stejně, používá se typ AAAA. Reverzní zóna v pseudodoméně
ip6.arpa.
a ip6.int.
.
erigona AAAA fec0:0:0:0:0:0:0:1Pro
8.2.0.0.0.0.0.0.0.0.0.0.0.c.e.f.ip6.arpa
1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0 PTR speo-alpha.lab.fi.muni.cz. 2.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0 PTR speo-beta.lab.fi.muni.cz.
Jedná se o protokol k zjištění konfigurace sítě a dostupnosti sousedů.
Posílá se pět typů packetů:
RADVD (Router ADVertisement Daemon) je implementací uvedéného protokolu.
Musí běžet na každém směrovači, přijímá od stanic RS a odpovídá jim svým RA.
Konfiguračním souborem je /etc/radvd.conf
interface eth0 { AdvSendAdvert on; MinRtrAdvInterval 3; MaxRtrAdvInterval 10; prefix 3ffe:ffff:0100:f101::/64 { AdvOnLink on; AdvAutonomous on; AdvRouterAddr on; }; };
Jádro linuxu musí být kompilováno s podporou IPv6. Poznáme to z existence souboru
/proc/net/if_inet6
.
Přidělené adresy: # /sbin/ip -6 addr show dev eth0 nebo # /sbin/ifconfig eth0 |grep "inet6 addr:" Přidávání IPv6 adresy: # /sbin/ip -6 addr add fec0:0:0:28::1/64 dev eth0 nebo # /sbin/ifconfig eth0 inet6 add fec0:0:0:28::1/64 Mazání IPv6 adresy: # /sbin/ip -6 addr del fec0:0:0:28::1/64 dev eth0 nebo # /sbin/ifconfig eth0 inet6 del fec0:0:0:28::1/64 Zobrazení IPv6 sousedů: # ip -6 neigh show dev eth0 Přidání souseda: # ip -6 neigh add fec0::1 lladdr 02:01:02:03:04:05 dev eth0 Vymazání souseda: # ip -6 neigh del fec0::1 lladdr 02:01:02:03:04:05 dev eth0
Výpis tunelů: # /sbin/ip -6 tunnel show nebo # /sbin/route -A inet6 | grep "\Wsit0\W*$
Pro psaní kompatibilních aplikací musíme správně použít funkci
int getaddrinfo(const char *node, const char *service, const struct addrinfo *hints, struct addrinfo **res); struct addrinfo { int ai_flags; int ai_family; int ai_socktype; int ai_protocol; size_t ai_addrlen; struct sockaddr *ai_addr; char *ai_canonname; struct addrinfo *ai_next; };a
ai_family
nastavit na nespecifikovanou hodnotu (PF_UNSPEC
).