W poprzednim artykule omówiliśmy, czym jest protokół IP oraz jak działa adres IPv4. Problem w tym, że wraz z ogromnym rozwojem Internetu pula adresów IPv4 zaczęła się kurczyć – i to szybciej, niż początkowo zakładano.
Już na początku lat 90. stało się jasne, że adresów IPv4 kiedyś zabraknie, dlatego rozpoczęto prace nad nowym standardem: IPv6. Pierwsze implementacje pojawiły się w 1996 roku, a komercyjne wdrożenia zaczęły nabierać tempa około 2000 roku. Z kolei IANA wyczerpała swoją centralną pulę IPv4 w 2011 roku, a kolejne regionalne rejestry (RIR) ogłaszały wyczerpanie zasobów w następnych latach (np. w Europie stało się to głośne w 2019 roku).
Czym jest IPv6?
IPv6 (Internet Protocol version 6) to następca IPv4. Największa zmiana? Zdecydowanie rozmiar przestrzeni adresowej:
- IPv4 ma 32 bity (ok. 4,3 mld adresów),
- IPv6 ma 128 bitów (ok. 3,4 × 10³⁸ adresów).
W praktyce oznacza to, że liczba dostępnych adresów w IPv6 jest wręcz astronomiczna – i dzięki temu każde urządzenie może mieć własny, unikalny adres, bez „kombinowania” z oszczędzaniem puli jak w IPv4.
Dokładna liczba możliwych adresów IPv6:
340.282.366.920.938.463.463.374.607.431.768.211.456
Ciekawostka: często spotkasz porównania, że adresów IPv6 jest „więcej niż ziaren piasku” – i to nie jest przesada.
IPv6 a NAT: dlaczego często nie jest potrzebny?
W IPv4 powszechnie stosuje się NAT (zamianę adresów prywatnych na publiczne), bo adresów było za mało. W IPv6 dzięki ogromnej puli zwykle nie ma potrzeby stosowania NAT, bo urządzenia mogą działać na unikalnych adresach routowalnych.
Warto jednak pamiętać: w praktyce niektórzy nadal stosują mechanizmy „NAT-podobne” z powodów organizacyjnych lub bezpieczeństwa, ale z punktu widzenia adresacji IPv6 nie jest to konieczność.
Jak wygląda adres IPv6?
Adres IPv6 zapisuje się jako 8 bloków w systemie szesnastkowym, oddzielonych dwukropkami. Każdy blok ma 16 bitów.
Przykład pełnego adresu IPv6:
2001:0db8:0000:1111:0000:0000:0000:0200
Na pierwszy rzut oka wygląda „strasznie”, ale da się go skrócić — i to w bardzo czytelny sposób.
Skracanie adresu IPv6 – 2 proste reguły
1) Usuwanie zer wiodących
Możesz pominąć początkowe zera w bloku:
0db8→db8
2) Zastąpienie ciągu zer „::”
Jeśli masz bloki składające się wyłącznie z zer, możesz je „zwinąć” do ::.
⚠️ Ważne: podwójny dwukropek :: może wystąpić tylko raz w adresie (żeby dało się go jednoznacznie odtworzyć).
Przykład skrócenia:2001:0db8:0000:1111:0000:0000:0000:0200 → 2001:db8:0:1111::200
Rodzaje adresów IPv6
Unicast
Adres typu 1 → 1 (jeden nadawca, jeden odbiorca). W IPv6 unicast ma kilka odmian – opisuję je niżej.
Multicast
Adres typu 1 → wielu. Urządzenia mogą dołączać do grup multicastowych i nasłuchiwać ruchu kierowanego do tej grupy.
Dwie popularne grupy:
- Multicast dla wszystkich routerów: FF02::2
Router nasłuchuje na tym adresie, co znaczy, że wszystkie urządzenia będą wysyłać pakiety w ciemno na ten adres. Jeśli taki adres istnieje to odpowie na żądanie. - Multicast dla wszystkich węzłów: FF02::1
Pakiet wysyłany do tej grupy jest odbierany przez wszystkie interfejsy IPv6 w sieci. Ma to taki sam efekt jak adres rozgłoszeniowy w IPv4.
Anycast
Adres przypisany do wielu urządzeń, ale pakiet trafia do najbliższego (z punktu widzenia routingu) odbiorcy. Czyli: 1 → (potencjalnie) wielu, ale odbiera jeden.
Rodzaje adresów unicast w IPv6
Adresy globalne (Global Unicast)
Odpowiednik publicznych adresów IPv4 – są unikalne i routowalne w Internecie. Najczęściej zaczynają się od 2 lub 3 np:
- 0010 0000 0000 0000 (2000)
- 0011 1111 1111 1111 (3fff)
Adresy łącza lokalnego (Link-local)
Tworzone automatycznie na interfejsie z IPv6. Działają tylko w obrębie jednego segmentu LAN i zaczynają się od FE80.
Najczęściej spotkasz zapis: fe80::/10.
Unikatowe adresy lokalne
Są to adresy będące odpowiednikami adresów prywatnych w IPv4, jednak nie dają możliwości uzyskania dostępu do internetu. Nie ma usługi NAT.
Zakres od fc00::/7 do fd00::/7.
Loopback
Jest to adres komputera lokalnego używanego do przekazywania pakietów wychodzących z powrotem do komputera źródłowego. W IPv6 jest to tylko jeden adres ::1/128
Adres nieokreślony
Zawiera same zera ::/128
Automatyczne tworzenie adresu IPv6: skąd host bierze unikalny adres?
Dużą zaletą IPv6 jest to, że po włączeniu protokołu na interfejsie host zwykle konfiguruje się automatycznie. Najpierw powstaje adres link-local, a dopiero potem (jeśli sieć na to pozwala) host dostaje adres globalny.
Krok 1: adres link-local i EUI-64
Najczęstszy klasyczny mechanizm to połączenie prefiksu FE80::/64 z identyfikatorem interfejsu tworzonym metodą EUI-64 (na podstawie MAC).
W skrócie EUI-64:
- bierze 48-bitowy MAC,
- odwraca 7. bit, oznacza to, że jeśli 7 bit to 0, to zostaje zamieniony na 1 i na odwrót,
- wstawia w środek FFFE, aby uzyskać 64 bity identyfikatora.

Krok 2: DAD – Duplicate Address Detection
Po utworzeniu adresu host sprawdza, czy w segmencie LAN nie ma konfliktu. Służy do tego mechanizm DAD (wykrywanie zduplikowanych adresów).
Jak powstaje globalny adres IPv6: SLAAC, RS i RA
Gdy host ma już link-local, może uzyskać adres globalny. Najczęściej dzieje się to przez SLAAC, czyli mechanizm, w którym router ogłasza prefiks sieci.
W IPv6 istnieje DHCPv6, ale wiele sieci działa bez niego, bazując na SLAAC (lub SLAAC + DHCPv6 np. dla DNS).
1) Router Solicitation (RS)
Pierwszym krokiem tego procesu jest wysłanie komunikatu ICMPv6 o nazwie Router Solicitation (RS). Komunikat ten skierowany jest do routerów i tylko one go przetwarzają. Jego celem zaś jest uzyskanie globalnego prefixu unicast. Adres docelowy tego komunikatu wysyłany jest na adres multiemisji wszystkich routerów FF02::2.
2) Router Advertisement (RA)
Router odpowiada ICMPv6 Router Advertisement (RA) i przekazuje:
- prefiks IPv6 (np.
2001:1234:A:B::/64), - długość prefiksu (/64),
- informacje o bramie domyślnej i parametrach autokonfiguracji.
RA jest zwykle wysyłany do multicastu wszystkich węzłów: FF02::1.
3) Złożenie adresu
Gdy host otrzyma komunikat RA, łączy podany prefiks 2001:1234:A:B::/64 ze swoim identyfikatorem interfejsu EUI-64 (20AC:9EFF:FE18:BE80), co daje globalny adres unicast 2001: 1234:A:B:20AC:9EFF:FE18:BE80/64. Ponieważ komunikat RA pochodzi z routera, host ustawia swoją domyślną bramę IPv6 na jego adres lokalny.
Neighbor Discovery (NDP) – następca ARP w IPv6
Neighbor Discovery Protocol (NDP) służy do wykrywania sąsiadów w sieci lokalnej. Działa podobnie do ARP w IPv4, ale jest wydajniejszy i lepiej dopasowany do IPv6.
Dużą zaletą jest to, że wysyłany komunikat nie idzie do wszystkich węzłów tylko odbiera go ten docelowy. Dzieje się to za sprawą tego, że urządzenie tworzy adres grupowego połączenia łącząc znane 24 bity ff02::1:ff z ostatnimi 24 bitami adresu IP docelowego. Dzięki mechanizmom Neighboor Discovery węzły w tym samym łączu ogłaszają swoje istnienie, dowiadują się o sąsiadach, śledzą dostępność sąsiadów itp.
NDP definiuje m.in. dwa podstawowe typy komunikatów ICMPv6:
- Neighbor Solicitation (NS)
- Neighbor Advertisement (NA)
Neighbor Solicitation (NS) – jak host „pyta” o MAC?
Gdy host chce poznać adres MAC urządzenia o znanym IPv6, wysyła Neighbor Solicitation (NS). To odpowiednik „zapytania ARP”, ale w IPv6 jest to komunikat ICMPv6.

Spójrzmy na przykład pokazany na rysunku. Gdy PC1 chce rozwiązać fizyczny adres (MAC) PC2 o adresie IPv6: FE80::20BB:9EFF:FE19:BE80, musi wysłać komunikat Neighbor Solicitation (NS), czyli pakiet ICMPv6 typu 135.
Typ 135 jednoznacznie informuje odbiorcę, że jest to NS. W polu Target Address (cel ICMPv6) PC1 umieszcza adres IPv6, dla którego chce poznać MAC – w tym przypadku: FE80::20BB:9EFF:FE19:BE80.
Enkapsulacja w IPv6: źródło i cel
Wiadomość ICMPv6 jest następnie enkapsulowana w pakiecie IPv6:
- adres źródłowy (L3): FE80::20AA:9EFF:FE18:BE80 (link-local PC1)
- adres docelowy (L3): adres multicastowy dla wszystkich urządzeń FF02::1:FF
Solicited-node multicast: dlaczego to nie trafia do wszystkich?
Dla każdego skonfigurowanego adresu IPv6 każdy host dołącza do grupy multicastowej o postaci:
FF02::1:FFXX:XXXX
gdzie XX:XXXX to ostatnie 24 bity adresu unicast IPv6 (czyli końcówka adresu). Dzięki temu host nasłuchuje „tylko swojej” grupy – jeśli coś przychodzi na ten adres, trafia bezpośrednio do niego, a nie do wszystkich urządzeń w sieci.
W naszym przykładzie PC1 chce wysłać NS do adresu:
FE80::20BB:9EFF:FE19:BE80
Końcówka (ostatnie 24 bity) to: 19:BE80, więc powstaje adres grupy multiemisji:
FF02::1:FF19:BE80
Warstwa 2 (Ethernet): jak powstaje MAC multicast 33:33…
Po wypełnieniu nagłówka IPv6 pakiet jest enkapsulowany w ramce Ethernet:
- MAC źródłowy: fizyczny adres MAC PC1
- MAC docelowy: MAC multicast wyliczony z multicast IPv6 według wzoru: 33:33:XX:XX:XX:XX
czyli ostatnie 32 bity adresu multicast IPv6.
Dla adresu docelowego FF02::1:FF19:BE80 wyjdzie więc MAC:
33:33:FF:19:BE:80
(spotykany zapis „kropkowy” w niektórych materiałach: 3333.FF19.BE80)
Neighbor Advertisement (NA) – odpowiedź z adresem MAC

Gdy PC2 odbierze wiadomość Neighbor Solicitation (NS) wysłaną przez PC1, najpierw sprawdza pole Target Address w nagłówku ICMPv6 i porównuje je ze swoimi skonfigurowanymi adresami IPv6. Jeśli adres docelowy pasuje (w naszym przykładzie jest to adres link-local PC2), komputer PC2 odsyła odpowiedź do PC1 w postaci komunikatu Neighbor Advertisement (NA).
W nagłówku IPv6 PC2 ustawia źródłowy adres IPv6 jako adres lokalny łącza, a adres docelowy jako adres lokalny łącza PC1.
W nagłówku Ethernet PC2 ustawia swój własny adres fizyczny jako źródłowy MAC i fizyczny adres PC1 jako docelowy MAC.
Komunikat NA jest w IPv6 odpowiednikiem odpowiedzi ARP w IPv4.
Warto zwrócić uwagę, że Neighbor Advertisement jest zwykle wiadomością unicast. Odpowiedź trafia bezpośrednio do nadawcy zapytania, a nie do wszystkich w sieci.
Podsumowanie
IPv6 to ogromny krok naprzód względem IPv4: przede wszystkim dzięki 128-bitowej przestrzeni adresowej, lepszym mechanizmom autokonfiguracji (SLAAC) oraz nowoczesnemu podejściu do komunikacji w sieci lokalnej (Neighbor Discovery / NDP).
Choć migracja na IPv6 przez lata postępowała wolniej, trend jest jasny: IPv6 jest fundamentem nowoczesnego Internetu i docelowo stanie się standardem dominującym.