IPv6 () – protokół komunikacyjny, będący następcą protokołu IPv4, do którego opracowania przyczynił się w głównej mierze problem małej, kończącej się liczby adresów IPv4. Podstawowymi zadaniami nowej wersji protokołu jest zwiększenie przestrzeni dostępnych adresów poprzez zwiększenie długości adresu z 32 bitów do 128 bitów, uproszczenie nagłówka protokołu oraz zapewnienie jego elastyczności poprzez wprowadzenie rozszerzeń, a także wprowadzenie wsparcia dla klas usług, uwierzytelniania oraz spójności danych. Protokół jest znany także jako oraz . Głównymi dokumentami opisującymi protokół są oraz .

Według Google, dostęp do IPv6 przez ich użytkowników wynosił we wrześniu 2025 roku 46,45%Jest to średnia wartość z danych z dni od 1 do 30 września 2025. Wartość maksymalna to 49,82% (13 września, sobota), a minimalna to 44,51% (3 września, środa).. .

Wdrażanie IPv6 Pierwsze dokumenty RFC opisujące protokół IPv6 powstały w 1995 roku. W latach 1996–2006 w infrastrukturę Internetu wdrażany był projekt 6bone w formie eksperymentalnej sieci działającej w oparciu o IPv6. Po zamknięciu tego projektu niektórzy dostawcy usług internetowych (ISP) rozpoczęli produkcyjne dostarczanie IPv6 tak samo jak obecnie IPv4; spora część użytkowników IPv6 korzysta z tego protokołu za pomocą tuneli wykorzystujących poprzednią wersję protokołu (tzw. tunelowanie IPv6-in-IPv4). Najprostszą metodą zestawienia takiego tunelu jest obecnie mechanizm 6to4.

Powody powstania IPv6 i brak kompatybilności z IPv4 Powszechnie stosowany obecnie protokół IPv4 ma pojemność około 4 miliardów adresów (232). W czasach gdy powstawał protokół IP (lata siedemdziesiąte), wydawało się to wystarczające – wtedy nikt nie przewidywał takiej popularności komputerów i Internetu. Jednakże już w pierwszych latach użytkowania IP podjęto prace mające na celu zaoszczędzenie adresów – wprowadzono wtedy adresowanie bezklasowe. Na początku lat dziewięćdziesiątych było jednak już jasne, że adresy IP wkrótce ulegną wyczerpaniu, więc w 1992 rozpoczęto prace nad stworzeniem IPNG – protokołu internetowego nowej generacji, co doprowadziło do pełnej definicji nowego protokołu w roku 1996. Nowy protokół nie mógł nosić numeru wersji 5, ponieważ numer ten został już wcześniej użyty dla eksperymentalnego protokołu Internet Streaming Protocol (w zamierzeniu mającego przenosić treści audio i wideo), dlatego też użyto kolejnego numeru – 6.

Przy tworzeniu nowych technologii i protokołów projektanci często stają przed dylematem stworzenia całkiem nowej jakości, czy też utrzymywania zgodności wstecz, często kosztem pewnych ograniczeń lub wprowadzenia znacznej komplikacji. W czasach tworzenia IPv6 Internet nie był tak popularny jak teraz i szacowano, że zamiana protokołu na IPv6 będzie możliwa bez utrzymania zgodności między nowszą i starszą wersją protokołu IP, dlatego też zaprojektowano całkowicie nowy protokół, bez obciążenia balastem koniecznej zgodności z IPv4. Prace nad projektowaniem IPv6 trwały dość długo, a po ich zakończeniu wizja końca adresacji IPv4 była wciąż dość odległa w czasie, dlatego też nowy protokół nie został wdrożony produkcyjnie. W tej chwili jednak liczba komputerów w Internecie i jego zastosowania uniemożliwiają zamianę protokołu IPv4 na IPv6 i oba protokoły jednocześnie muszą być używane przez urządzenia sieciowe, które przez to mają faktycznie podłączenie do dwóch rozłącznych sieci.

Różnice między protokołem IPv6 a IPv4 kategoria IPv4 IPv6 długość adresów 32 bity 128 bitów wsparcie dla IPsec implementacja zewnętrzna implementacja rodzima identyfikacja ruchu dla QoS tak: pole ToS tak: pole fragmentacja przez nadającego hosta i routery jedynie przez nadającego hosta suma kontrolna w nagłówku obecna brak opcje w nagłówku przeniesione do nagłówków dodatkowych ramki zgłoszeń ARP wielopoziomowe wiadomości typu , brak ARP zarządzania grupami multicastowymi IGMP (ang. ) protokół komunikatów kontrolnych ICMP ICMPv6, wymaganyadresy transmisji do wysyłania danych do wszystkich węzłów w podsieci zastąpione przez grupowy , brak ruchu typu broadcast przydzielanie adresu wymagana konfiguracja ręczna, przez DHCP lub APIPA nie wymaga konfiguracji ręcznej ani DHCP, konfiguracja przez ogłoszenia i mapowanie nazw hostów w DNS używa rekordów A oraz PTR w domenie IN-ADDR.ARPA używa rekordów AAAA oraz PTR w domenie IP6.ARPA

Adresacja W protokole IPv6 adres zapisany jest w 128-bitowej liczbie i może identyfikować jeden bądź wiele interfejsów. W przypadku tego protokołu adres jest bardziej przejrzysty niż adres w poprzedniej wersji protokołu. W przeciwieństwie do poprzedniej wersji protokołu, zakres adresu, czyli obszar jego widoczności, jest ograniczony przez odpowiedni prefiks.

Adres zazwyczaj zapisuje się jako osiem 16-bitowych bloków zapisanych w systemie szesnastkowym oddzielonych dwukropkiem. Dozwolone jest pomijanie początkowych zer w bloku, a także pominięcie jednego ciągu bloków składających się wyłącznie z zer. Pominięte bloki zer oznacza się podwójnym separatorem bloków (dwukropek). Dopuszczalny jest tylko jeden podwójny dwukropek „::” w adresie. Poniższe adresy są równoznaczne: 2001:0db8:0000:0000:0000:0000:1428:57ab 2001:0db8:0:0:0:0:1428:57ab 2001:0db8:0:0::1428:57ab 2001:0db8::1428:57ab 2001:db8::1428:57ab

Typy rozgłoszeń W adresacji wykorzystywanej w protokole IPv6 używane są trzy typy adresów: adresy unicast – identyfikujące pojedynczy interfejs; pakiety, które są kierowane na ten typ adresu dostarczane są tylko do odbiorcy adresy multicast – identyfikujące grupę interfejsów (mogą one należeć do różnych węzłów), pakiety wysyłane na ten adres dostarczane są do wszystkich członków grupy adresy anycast – podobnie jak adresy multicast, identyfikują grupę interfejsów, jednak pakiet wysyłany na ten adres dostarczany jest tylko do najbliższego węzła (węzeł ten jest wyznaczany przez protokół routingu)

W przeciwieństwie do poprzedniej wersji protokołu, IPv6 nie definiuje adresów typu broadcast. Jednym z powodów jest fakt, że pakiety wysyłane na ten adres odbierane były przez wszystkie węzły w sieci, nawet takie, które nie potrafiły danych pakietów zinterpretować.

Zakresy adresów Charakterystyczną cechą protokołu jest fakt, że zostały zdefiniowane zakresy adresów. W przypadku adresów unicastowych wyróżniane są następujące zakresy: adresy lokalne dla łącza () – są to adresy wykorzystywane tylko do komunikacji w jednym segmencie sieci lokalnej lub przy połączeniu typu . Routery nie przekazują pakietów z tego rodzaju adresem. Z puli pozostałych adresów wyróżniane są przez prefiks FE80::/10. Każdy interfejs musi mieć przydzielony co najmniej jeden adres lokalny dla łącza, nawet jeżeli posiada adres globalny lub unikatowy adres lokalny. () – są to adresy będące odpowiednikami adresów prywatnych wykorzystywanych w protokole IPv4. Z puli pozostałych adresów wyróżniane są przez prefiks FC00::/7. Od adresów lokalnych łącza odróżnia je także prefiks routingu. adresy globalne () – widoczne w całym internecie, są odpowiednikami adresów publicznych stosowanych w IPv4; do adresów tego typu należą adresy nie wymienione w pozostałych punktach.

Przez pewien czas protokół definiował adresy , identyfikowane przez prefiks FEC0::/10, jednak ze względu na wiele kontrowersji zostały uznane za przestarzałe.

Mapowanie adresów IPv4 na IPv6 Możliwe jest reprezentowanie adresów protokołu IPv4 jako adresów IPv6. Jedną z możliwości jest stworzenie adresu IPv6, którego młodsze 32 bity zawierają adres IPv4, natomiast starsze 96 bitów jest wypełniona specjalnym wzorcem bitów (::ffff). Tak skonstruowany adres ma postać ::ffff:127.0.0.1 (za 127.0.0.1 można podstawić dowolny adres IP) i umożliwia normalną komunikację w sieci.

Adresy specjalne Następujące adresy i grupy adresów posiadają specjalne, zarezerwowane znaczenie:

::/128 adres nieokreślony (zawierający same zera). ::1/128 loopback, adres wskazujący na host lokalny. ::/96 pula zarezerwowana dla zachowania kompatybilności z protokołem IPv4 (pierwsze 96 bitów stanowią 0, pozostają 32 bity na adresy w formacie IPv4 np. ::192.0.2.128 tożsame z ::C000:280) wersja przestarzała. ::ffff:0:0/64 jw., ale pozwala wykorzystywać komunikację według protokołu IPv6 w sieci IPv4 (np. ::ffff:192.0.2.128 tożsame z ::ffff:c000:280). 2001:7f8::/32 pula zarezerwowana dla punktów wymiany ruchu, każdy z nich dostaje jedną podsieć /48. 2001:db8::/32 pula wykorzystywana w przykładach i dokumentacji – nigdy nie będzie wykorzystywana produkcyjnie. 2002::/24 adresy typu 6to4. Są to adresy wygenerowane na podstawie istniejących, publicznych adresów IPv4, dostępne dla każdego użytkownika. 3ffe::/16 adresy testowej sieci 6bone (adresy zostały wycofane 6 czerwca 2006 w związku z zakończeniem działania 6bone). fc00::/7 pula lokalnych unikatowych adresów IPv6 typu unicast (), będąca odpowiednikiem adresów prywatnych IPv4, choć zgodnie z nazwą, powinny być unikatowe na świecie. fe80::/10 pula określa adresy w obrębie jednego łącza fizycznego (np. segmentu sieci Ethernet). Pakiety z tej puli nie są przekazywane poza podsieć, jej działanie jest analogiczne do automatycznie konfigurowanych adresów z puli 169.254.0.0/16 w IPv4. fec0::/10 pula określa adresy w obrębie jednej lokalnej organizacji. Obecnie nie zaleca się wykorzystywania tej puli; przyszłe implementacje IPv6 nie będą musiały obsługiwać tej puli. ff00::/8 pula multicastowa używana do komunikacji multicast.

W protokole IPv6 nie występuje pojęcie komunikacji broadcastowej (dane rozsyłane do wszystkich węzłów w danej podsieci). Aby wysyłać dane do wielu odbiorców jednocześnie, należy korzystać z komunikacji multicastowej.

Nagłówek i jego rozszerzenie W przeciwieństwie do protokołu IPv4, którego długość nagłówka wynosi od 20 do 60 bajtów, długość nagłówka protokołu IPv6 jest stała i wynosi 40 bajtów. Jego znaczną część zajmują adresy źródłowy oraz docelowy – 32 bajty, łatwo więc obliczyć, że na pozostałe dane pozostaje tylko 8 bajtów. Dzięki stałej długości nagłówek IPv6 jest dużo prostszy niż nagłówek poprzedniej wersji protokołu, a zarazem dużo łatwiejszy w przetwarzaniu. Jest także dużo bardziej elastyczny – dodatkowe opcje protokołu mogą być umieszczane w opcjonalnych nagłówkach rozszerzających (ang. ), następujących po nagłówku głównym IPv6. Takie rozwiązanie umożliwia zwiększenie możliwości protokołu bez wprowadzania zmian do podstawowego nagłówka. + Opis pól nagłówka protokołu IPv6 Bity 0-3 4-7 8-11 12-15 16-19 20-23 24-27 28-31 0 Wersja Klasa ruchu Etykieta przepływu 32 Długość danych Następny nagłówek Limit przeskoków 64  Adres źródłowy (128 bitów)  96 128 160 192  Adres docelowy (128 bitów)  224 256 288 Podstawowy nagłówek protokołu składa się z następujących pól: Wersja (4 bity) – definiująca wersję protokołu, w przypadku IPv6 pole to zawiera wartość 6 (bitowo 0110) Klasa ruchu (8 bitów) – określa sposób w jaki ma zostać potraktowany pakiet danych. W poprzedniej wersji protokołu pole to nazywało się , jednak ze względu na to, że w IPv6 stosowane są inne mechanizmy priorytetowania danych, nazwę tego pola zmieniono Etykieta przepływu (20 bitów) – pomagające odróżnić pakiety, które wymagają takiego samego traktowania (ich pole klasy ruchu ma tę samą wartość) Długość danych (16 bitów) – wielkość pakietu, nie wliczając długości podstawowego nagłówka (wliczając jednak nagłówki rozszerzające) Następny nagłówek (8 bitów) – identyfikuje typ następnego nagłówka, pozwalając określić, czy jest to nagłówek rozszerzający, czy nagłówek warstwy wyższej. W przypadku tego drugiego, wartość pola jest identyczna z wartością pola w protokole IPv4 Limit przeskoków (8 bitów) – określa ilość węzłów, po odwiedzeniu których pakiet zostaje porzucony. W poprzedniej wersji protokołu pole to nosiło nazwę i zawierało liczbę skoków, która była zmniejszana przez każdy odwiedzony węzeł Adres źródłowy (128 bitów) – adres węzła, który wysłał pakiet Adres docelowy (128 bitów) – adres węzła, do którego adresowany jest pakiet

Nagłówki rozszerzające