IPv6

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 .

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

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 point-to-point. 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) 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).
 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 link-local 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 site-local 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.

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ę Type of Service, 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ę time to live 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 
Nagłówki rozszerzające służą do zwiększania możliwości protokołu IPv6. W chwili obecnej zdefiniowanych jest sześć rozszerzeń protokołu:
 Hop-by-Hop Options
 nagłówek routingu
 nagłówek fragmentacji
 nagłówek opcji docelowych
 nagłówek uwierzytelniania
 Encrypted Security Payload.

Autokonfiguracja 
Dla podsieci będących LAN-em przydzielana jest pula adresów z maską /64, co umożliwia tworzenie unikatowych adresów lokalnych dla łącza w oparciu o (niepowtarzalne) numery sprzętowe MAC (IEEE 802). Adres taki (dla adresu MAC 10:22:33:44:55:66) będzie miał postać: 64bitowy_prefiks_sieci:1022:33FF:FE44:5566. Trzy najbardziej znaczące oktety identyfikatora MAC (IEEE 802), to identyfikator firmy. Dwa najmłodsze bity najbardziej znaczącego oktetu adresu MAC (IEEE 802) są znacznikami, dla identyfikatorów nadanych globalnie (fabrycznie) są równe 0. Drugi z tych bitów jest zmieniany na przeciwny. Powiększono o 16 bitów 24-bitowy identyfikator karty, dla kart posługujących się adresem MAC (IEEE 802) brakujące bity uzupełnia się wartością FFFE. 64-bitowy prefiks sieci jest informacją rozgłaszaną przy pomocy ICMPv6 przez routery; natomiast jeżeli host nie uzyskał wspomnianego prefiksu, w jego miejsce wstawiane jest fe80:: (czyli fe80:0000:0000:0000) – taki adres nazywa się „link-local” (nie jest on rutowany do sieci zewnętrznych, jednak zawsze (także gdy prefiks został uzyskany) może być używany wewnątrz sieci lokalnej). Oczywiście nadal możemy korzystać z przydziału IP przez DHCP oraz ręcznych ustawień IP.

DNS 
Obsługa adresacji IPv6 w systemie DNS została zaprojektowana jako rozszerzenie systemu DNS, które jest całkowicie zgodne wstecz z IPv4, co nie wprowadza żadnych problemów implementacyjnych w tym zakresie. Nazwy hostów w DNS zawierają adres IPv4 w rekordzie ‘A’, adresy IPv6 umieszcza się w rekordzie ‘AAAA’ – taka konstrukcja powoduje, że dany host może mieć jednocześnie adres IPv4 i IPv6 w DNS. Odwrotny DNS wprowadza kilka różnic: adres IPv4 postaci 123.45.67.89 jest mapowany na rekord 89.67.45.123.in-addr.arpa, natomiast adres IPv6 postaci 2001:db8::1428:57ab mapowany jest na rekord b.a.7.5.8.2.4.1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.8.b.d.0.1.0.0.2.ip6.arpa (kiedyś w tym celu wykorzystywano domenę ip6.int). W przypadku obu rodzajów adresacji wykorzystuje się ten sam typ rekordu – ‘PTR’.

Kontrowersje 
W adresach IPv6 unikatowy adres MAC komputera (przypisany do sprzętu) jest widoczny dla całego Internetu.
Dwa działania są konieczne, aby zapewnić prywatność taką samą jak przy obecnych sieciach IPv4: klient musi mieć włączone rozszerzenia prywatności i ISP musi dynamicznie przydzielać adres do urządzenia klienta.

Zobacz też 
 World IPv6 Day

Przypisy

Bibliografia

Linki zewnętrzne 
 Strona grupy roboczej 
 Polska Grupa Robocza IPv6 (Polish IPv6 Task Force)