Sieci komputerowe

IPv6

IPv6 porządkuje adresację 128-bitową, zapis szesnastkowy, skracanie, prefiksy, typy adresów, SLAAC, Router Advertisement, NDP, DHCPv6 i podstawową diagnostykę.

128 bitówhextetySLAACNDPICMPv6

Adres

128 bitów

Pełny zapis

8 hextetów

LAN/SLAAC

zwykle /64

Broadcast

brak

Podstawy

Po co IPv6

IPv6 oznacza Internet Protocol version 6. Powstał, ponieważ pula adresów IPv4 jest zbyt mała dla skali współczesnych sieci. IPv6 nie jest tylko dłuższym zapisem adresu: zmienia także mechanizmy autokonfiguracji, wykrywania sąsiadów i sposób pracy z ruchem rozgłoszeniowym.

Do przykładów publicznie wyglądających adresów w tym materiale używamy prefiksu dokumentacyjnego 2001:db8::/32, a nie losowych rzeczywistych adresów z Internetu.

01

Budowa adresu IPv6

Standardowy pełny zapis IPv6 składa się z 8 grup po 16 bitów. Jedna taka 16-bitowa grupa jest często nazywana hextetem. Każdy hextet zapisujemy jako 4 cyfry szesnastkowe.

2001:0db8:0000:0000:0000:ff00:0042:8329 8 x 16 bitów = 128 bitów
Tabela: Element, Wartość, Znaczenie
ElementWartośćZnaczenie
Długość128 bitówcztery razy więcej bitów niż IPv4
Pełny zapis8 hextetówkażdy hextet ma 16 bitów
Hextet4 cyfry hexjedna cyfra hex reprezentuje 4 bity
Razem8 x 16 bitów128 bitów adresu IPv6
Pełny adres IPv6 ma 8 grup po 16 bitów, czyli razem 128 bitów.

Hex

System szesnastkowy

IPv6 używa zapisu szesnastkowego: cyfry 0-9 oraz litery A-F. Jedna cyfra hex odpowiada 4 bitom, dlatego 4 cyfry hex tworzą jeden 16-bitowy hextet.

Tabela: Hex, Binarnie
HexBinarnie
00000
10001
A1010
F1111
00FF0000000011111111

Nie trzeba zamieniać całego adresu IPv6 na zapis binarny przy każdym zadaniu. Wystarczy rozumieć związek zapisu szesnastkowego z binarnym.

02

Skracanie adresu IPv6

Pierwsza reguła: zera wiodące w pojedynczym hekscie można pominąć. Druga reguła: ciąg kolejnych hekstetów równych 0000 może zostać zastąpiony przez ::.

Tabela: Przed, Po, Uwagi
PrzedPoUwagi
0db8db8zera wiodące w hextet można pominąć
004242zostaje wartość bez zer wiodących
00000pojedynczy zerowy hextet zapisujemy jako 0
2001:0db8:0000:0001:0000:0000:0042:83292001:db8:0:1:0:0:42:8329najpierw usuwamy zera wiodące

W jednym adresie zapis :: może wystąpić tylko raz, bo inaczej rozwinięcie adresu byłoby niejednoznaczne. W zapisie kanonicznym/preferowanym kompresuje się najdłuższy ciąg zer, a przy remisie preferuje się pierwszy. Nie traktuj skracania pojedynczego hextetu 0 przez :: jako preferowanego zapisu.

2001:0db8:0000:0000:0000:0000:0000:0010 2001:db8:0:0:0:0:0:10 2001:db8::10
Najpierw usuwa się zera wiodące w hextetach, a potem można skompresować najdłuższy ciąg zer przez ::.

8 hextetów

Rozwijanie skróconego adresu

Po rozwinięciu adres IPv6 musi mieć 8 hextetów. Dla 2001:db8::10 przed :: mamy dwa hextety: 2001 i db8. Po :: mamy jeden hextet: 10. Brakuje więc 5 hextetów zerowych.

Tabela: Skrócony, Brakujące zera, Pełny zapis
SkróconyBrakujące zeraPełny zapis
2001:db8::10brakuje 5 hextetów zerowych2001:0db8:0000:0000:0000:0000:0000:0010
fe80::1brakuje 6 hextetów zerowychfe80:0000:0000:0000:0000:0000:0000:0001
03

Typy adresów IPv6

Global Unicast Address jest przeznaczony do globalnego routingu. Ogólny zakres global unicast to 2000::/3. W materiałach dydaktycznych używamy 2001:db8::/32, np. 2001:db8:10:1::25.

Tabela: Typ, Prefiks / adres, Znaczenie
TypPrefiks / adresZnaczenie
Global Unicast2000::/3adresy przeznaczone do globalnego routingu
Dokumentacja2001:db8::/32prefiks do przykładów i materiałów dydaktycznych
Link-localfe80::/10adres lokalnego łącza, nieroutowany poza link
Unique Localfc00::/7komunikacja lokalna/prywatna, nie globalny routing Internetu
Multicastff00::/8komunikacja jeden do grupy odbiorców
Loopback::1/128lokalny host
Unspecified::/128brak określonego adresu

Unique Local Addresses z fc00::/7 są przeznaczone do komunikacji lokalnej lub prywatnej i nie do globalnego routingu w Internecie. W praktycznych lokalnie generowanych prefiksach często spotyka się fd00::/8. ULA nie jest dokladnym odpowiednikiem NAT-owanego RFC 1918 i nie oznacza, że wymagany jest NAT do Internetu.

IPv6 rozróżnia m.in. global unicast, link-local, unique local, multicast, loopback i unspecified.

fe80::/10

Link-local i scope ID

Adresy link-local z zakresu fe80::/10 są używane na lokalnym łączu i nie są normalnie routowane poza ten link. Interfejs IPv6 zazwyczaj posiada adres link-local niezaleznie od tego, czy ma global unicast. Link-local jest ważny m.in. dla Neighbor Discovery i komunikacji z routerami.

Przy adresie link-local system może wymagać wskazania interfejsu: Windows może zapisać to jako fe80::1%12, a Linux jako fe80::1%eth0. Część po % identyfikuje lokalny interfejs lub scope; %12 nie jest uniwersalnym numerem interfejsu.

Adresy specjalne

Loopback i unspecified

Loopback ::1/128 pełni funkcjonalną rolę lokalnego hosta, podobną do idei 127.0.0.1 w IPv4. Unspecified ::/128 oznacza brak określonego adresu. Nie należy mylić :: z ::1.

ff00::/8

Multicast i brak broadcastu

IPv6 multicast z ff00::/8 służy do komunikacji jeden do grupy odbiorców. IPv6 nie posiada broadcastu w takim znaczeniu jak IPv4. Funkcje, które w IPv4 często korzystają z broadcastu, w IPv6 są realizowane m.in. z wykorzystaniem multicastu.

Tabela: Adres / zakres, Nazwa, Znaczenie
Adres / zakresNazwaZnaczenie
ff02::1all nodeswszystkie węzły na lokalnym linku
ff02::2all routerswszystkie routery na lokalnym linku
ff02link-local scoperuch pozostaje w zasięgu lokalnego linku
IPv4: 255.255.255.255 -> broadcast IPv6: brak broadcast address -> odpowiednie grupy multicast

Pojęcie uzupełniające

Anycast

Anycast oznacza, że ten sam adres może być przypisany do wielu urządzeń lub lokalizacji, a routing kieruje ruch do odpowiedniej, często najblizszej topologicznie instancji. Nie wchodzimy tutaj w szczegóły protokołów routingu.

04

Prefiks IPv6

Zapis 2001:db8:1234:10::/64 oznacza, że 64 pierwsze bity stanowią prefiks sieci. W tym przykładzie pierwsze cztery hextety tworzą część sieciowa.

2001:db8:1234:0010 = 64 bity prefiksu pozostałe 64 bity = identyfikacja interfejsu/adresu w podsieci

/64 jest standardowym rozmiarem dla większości zwykłych podsieci LAN IPv6 i jest wymagany dla typowego SLAAC. Istnieją jednak zastosowania z innymi prefiksami, np. /127 na wybranych łączach punkt-punkt lub /128 dla pojedynczego adresu.

/64 jest standardowe dla wielu zwykłych podsieci LAN i typowego SLAAC, ale nie jest jedynym możliwym prefiksem IPv6.
05

SLAAC i Router Advertisement

SLAAC oznacza Stateless Address Autoconfiguration. Host może skonfigurować adres IPv6 na podstawie informacji otrzymanych od routera. SLAAC nie wymaga DHCPv6.

Tabela: Krok, Zdarzenie, Znaczenie
KrokZdarzenieZnaczenie
1Host może wysłać Router SolicitationRS jest opcjonalnym przyspieszeniem
2Router wysyła Router AdvertisementRA jest częścią ICMPv6 Neighbor Discovery
3Host poznaje prefiks i informacje konfiguracyjnedomyślny router pochodzi z RA
4Host tworzy adres IPv6identyfikator interfejsu zależy od systemu i polityki

Router Advertisement jest częścią ICMPv6 Neighbor Discovery. RA może informować hosta m.in. o prefiksach, routerze domyślnym i parametrach związanych z autokonfiguracją.

Host musi utworzyć część adresu w obrębie danego prefiksu. Współczesne systemy mogą używać stabilnych identyfikatorów, adresów privacy/temporary albo innych metod. EUI-64 można traktować jako mechanizm historyczny lub edukacyjny, a nie jedyną metodę.

SLAAC korzysta z Router Advertisement; domyślny router IPv6 pochodzi z RA, nie z DHCPv6 jako odpowiednik IPv4 Option 3.

Autokonfiguracja

DHCPv6 i DNS

RFC 9915, Internet Standard STD 102, zastępuje RFC 8415 i opisuje DHCPv6. Stateful DHCPv6 może przydzielać adresy IPv6, a stateless DHCPv6 przekazywać dodatkowe parametry, podczas gdy adres powstaje np. przez SLAAC. Prefix Delegation przydziela prefiks routerowi i nie jest zwykłym przydziałem adresu hosta.

Tabela: Mechanizm, Adres, Informacje od, Default router
MechanizmAdresInformacje odDefault router
SLAACtakRouter Advertisementz RA
Stateful DHCPv6możliwy z DHCPv6DHCPv6 i RAz RA, nie z odpowiednika IPv4 Option 3
Stateless DHCPv6np. SLAACDHCPv6 przekazuje dodatkowe parametryz RA

Rzeczywiste zachowanie hosta zależy również od flag RA, systemu operacyjnego i implementacji. Adresy serwerów DNS mogą być przekazywane m.in. przez DHCPv6 albo RDNSS w Router Advertisement. DHCPv6 nie jest jedynym sposobem przekazywania DNS w IPv6.

06

NDP zamiast ARP

NDP, czyli Neighbor Discovery Protocol, jest częścią ICMPv6. Realizuje funkcje związane m.in. z wykrywaniem sąsiadów, rozpoznawaniem adresów warstwy 2, wykrywaniem routerów, sprawdzaniem osiągalności sąsiadów i autokonfiguracją.

Tabela: Komunikat, Rola, Uwagi
KomunikatRolaUwagi
Neighbor Solicitationpytanie o sąsiadanie jest ARP Request
Neighbor Advertisementodpowiedź sąsiadanie jest ARP Reply
Router Solicitationhost szuka routerówczęść mechanizmów NDP
Router Advertisementrouter ogłasza informacjeprefiksy, router domyślny i autokonfiguracja
DADDuplicate Address Detectionsprawdza, czy adres nie jest już używany na linku

Przykład: Host A 2001:db8:10::10 chce poznać informacje L2 dla sąsiada 2001:db8:10::20. W IPv6 używa Neighbor Solicitation, a sąsiad może odpowiedzieć komunikatem Neighbor Advertisement. Nie nazywamy tego ARP Request ani ARP Reply, bo IPv6 nie używa ARP.

NDP jest częścią ICMPv6 i realizuje więcej funkcji niż proste mapowanie adresu na warstwę 2.

Dla zainteresowanych

Solicited-node multicast i DAD

NDP nie musi wysyłać zapytania do wszystkich hostów jak klasyczny broadcast ARP. Neighbor Solicitation wykorzystuje odpowiednie adresy multicast, m.in. solicited-node multicast. Początkujący student nie musi ręcznie obliczać tych adresów.

DAD, czyli Duplicate Address Detection, pomaga sprawdzić, czy tworzony adres IPv6 nie jest już używany na lokalnym łączu. Ten mechanizm jest powiązany z NDP.

Nie tylko ping

ICMPv6

ICMPv6 jest ważną częścią działania IPv6. Obsługuje m.in. błędy, ping, Neighbor Discovery, Router Solicitation, Router Advertisement i Path MTU Discovery.

Blokowanie całego ICMPv6 może powodować poważne problemy z działaniem IPv6. Nie traktuj ICMPv6 jako opcjonalnego dodatku wyłącznie do ping.

07

IPv4 a IPv6

Tabela: Cecha, IPv4, IPv6
CechaIPv4IPv6
Adres32 bity128 bitów
Zapisdecimal dottedhexadecimal
Rozgłoszeniebroadcastbrak broadcastu
Mapowanie L2ARPNDP
Loopback127.0.0.1::1
Default route0.0.0.0/0::/0
Link-local169.254.0.0/16fe80::/10 jako link-local, bez pełnej funkcjonalnej identyczności
AutokonfiguracjaDHCPSLAAC, DHCPv6 i RA zależnie od konfiguracji

Routing IPv6 działa na podobnej ogólnej zasadzie: adres docelowy IPv6 prowadzi do tablicy routingu, a router wybiera najlepiej pasujący prefiks. Default route IPv6 to ::/0, podobnie jak 0.0.0.0/0 w IPv4.

IPv6 zachowuje idee routingu IP, ale zmienia adresację, autokonfigurację i mechanizmy lokalnego odkrywania.

Routing

Longest Prefix Match IPv6

Dla celu 2001:db8:10:20::1234 router wybierze najbardziej szczegółowa pasująca trasa. Z poniższej listy będzie to 2001:db8:10:20::/64.

Tabela: Trasa, Czy pasuje, Uwagi
TrasaCzy pasujeUwagi
2001:db8::/32pasujeogólna trasa dokumentacyjnego prefiksu
2001:db8:10::/48pasujebardziej szczegółowa
2001:db8:10:20::/64pasujenajbardziej szczegółową pasującą trasę
::/0pasuje do wszystkiegotrasa domyślna
08

Diagnostyka IPv6

W Windows przydatne są ipconfig /all, ping -6 ::1 oraz polecenia zależne od Internetu: ping -6 example.com i tracert -6 example.com. Brak odpowiedzi ICMP nie przesądza o braku łączności. Polecenia PowerShell: Get-NetIPAddress -AddressFamily IPv6, Get-NetRoute -AddressFamily IPv6 i Get-NetNeighbor -AddressFamily IPv6.

W Linux przydatne są ip -6 address show, ip -6 route show, ip -6 neigh show, ip -6 route show default i ping -6 ::1. Zależne od dostępu do Internetu są ping -6 -c 4 example.com oraz traceroute -6 example.com. Dostępność traceroute zależy od zainstalowanych narzędzi; w niektórych systemach spotkasz też ping6, ale nie należy zakładać, że istnieje wszędzie.

Tabela: System, Polecenie, Co sprawdza
SystemPolecenieCo sprawdza
Windowsipconfig /alladresy, DNS i parametry interfejsów
WindowsGet-NetIPAddress -AddressFamily IPv6adresy IPv6 w PowerShell
WindowsGet-NetRoute -AddressFamily IPv6trasy IPv6
WindowsGet-NetNeighbor -AddressFamily IPv6sąsiedzi IPv6, nie tablica ARP
Linuxip -6 address showadresy IPv6
Linuxip -6 route showrouting IPv6
Linuxip -6 neigh showneighbor cache IPv6
Linuxip -6 route show defaultodczyt domyślnej trasy IPv6
Diagnostyka IPv6 obejmuje adresy, trasy, sąsiadów, ping, traceroute oraz poprawną interpretację RA, NDP i ICMPv6.

Nie ARP IPv6

Tablica sąsiadów

W IPv4 często sprawdzamy arp -a lub ip neigh. W IPv6 mówimy o Neighbor Discovery i neighbor cache. W systemie Linux użyj ip -6 neigh, a w Windows Get-NetNeighbor -AddressFamily IPv6. Nie nazywaj tego tablica ARP IPv6.

Troubleshooting

Najczęstsze błędy IPv6

  • - błędne skracanie ::
  • - użycie :: więcej niż raz
  • - zła liczba hextetów po rozwinięciu
  • - mylenie link-local z global unicast
  • - próba używania ARP w IPv6
  • - zakładanie broadcastu
  • - brak Router Advertisement
  • - zbyt agresywne blokowanie ICMPv6
  • - błędny prefiks
  • - brak default route
  • - brak scope ID przy wymaganym link-local
  • - zakładanie, że DHCPv6 przekazuje bramę domyślną

Kontekst

Powiązania z poprzednimi tematami

IPv6 łączy się z materiałami o routingu, DHCP oraz DNS. Najważniejsza różnica dla początkującego: IPv6 nie korzysta z ARP ani broadcastu, a default router poznawany jest przez RA.

Ćwiczenia

Sprawdź samodzielnie

Odpowiedzi ukryte

Najpierw wykonaj obliczenia samodzielnie. Odpowiedzi rozwiń dopiero wtedy, gdy masz własny wynik.

Zadanie 1łatwyIle bitów ma adres IPv6?
Sprawdź odpowiedź: Adres IPv6 ma 128 bitów.
Zadanie 2łatwyIle hextetów ma pełny adres IPv6?
Sprawdź odpowiedź: Pełny adres IPv6 ma 8 hextetów po 16 bitów.
Zadanie 3łatwySkróć 2001:0db8:0000:0000:0000:0000:0000:0010.
Sprawdź odpowiedź: Preferowany zapis to 2001:db8::10.
Zadanie 4łatwyRozwiń 2001:db8::10 do pełnego zapisu.
Sprawdź odpowiedź: 2001:0db8:0000:0000:0000:0000:0000:0010.
Zadanie 5łatwyRozpoznaj adres fe80::1.
Sprawdź odpowiedź: To adres link-local z zakresu fe80::/10.
Zadanie 6łatwyRozpoznaj adres ::1.
Sprawdź odpowiedź: To loopback IPv6, czyli lokalny host.
Zadanie 7łatwyRozpoznaj adres ff02::1.
Sprawdź odpowiedź: To multicast all nodes w zasięgu link-local.
Zadanie 8łatwyCzy IPv6 posiada broadcast address?
Sprawdź odpowiedź: Nie. IPv6 nie posiada broadcastu w znaczeniu IPv4; używa m.in. multicastu.
Zadanie 9średniCzym w IPv6 zastapiono ARP?
Sprawdź odpowiedź: IPv6 nie używa ARP. Funkcje rozpoznawania sąsiadów realizuje NDP jako część ICMPv6.
Zadanie 10średniSkąd host IPv6 może poznać default router?
Sprawdź odpowiedź: Z Router Advertisement w ramach Neighbor Discovery, nie z klasycznej opcji DHCPv6 odpowiadającej IPv4 Option 3.
Zadanie 11średniCo oznacza /64 w adresie 2001:db8:1234:10::/64?
Sprawdź odpowiedź: 64 pierwsze bity stanowią prefiks sieci. /64 jest typowe dla LAN i SLAAC, ale nie jest jedynym możliwym prefiksem IPv6.
Zadanie 12trudniejszyWybierz najlepszą trasę dla celu 2001:db8:10:20::1234 z listy: 2001:db8::/32, 2001:db8:10::/48, 2001:db8:10:20::/64, ::/0.
Sprawdź odpowiedź: Wybrana zostanie 2001:db8:10:20::/64, bo to najbardziej szczegółowy pasujący prefiks.

Pytania kontrolne

Zatrzymaj się i odpowiedz

  1. 1Ile bitów ma IPv6?
  2. 2Czym jest hextet?
  3. 3Jak działa zapis :: i dlaczego może wystąpić tylko raz?
  4. 4Czym jest global unicast?
  5. 5Czym jest link-local?
  6. 6Czy IPv6 posiada broadcast?
  7. 7Czym jest SLAAC?
  8. 8Czym jest Router Advertisement?
  9. 9Czym jest NDP?
  10. 10Czym różni się rola DHCPv6 od IPv4 DHCP w kontekście bramy domyślnej?