IPv6

Skocz do: nawigacji, szukaj

IPv6 (ang. Internet Protocol version 6) – 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 IP Next Generation oraz IPng[1]. Głównymi dokumentami opisującymi protokół są RFC2460 oraz RFC4291.

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 jednak 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 szacowanopotrzebne źródło, ż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 ilość komputerów w Internecie i jego zastosowania uniemożliwiają zamianę protokołu IPv4 na IPv6 i jednocześnie oba protokoły muszą być używane przez urządzenia sieciowe, które przez to będą mieć faktycznie połą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.

Zazwyczaj adres składa się z ośmiu 16-bitowych bloków złożonych z cyfr szesnastkowych i oddzielonych dwukropkiem. Dozwolone jest pomijanie początkowych zer w bloku, a także pominięcie ciągu bloków składających się wyłącznie z zer. Pomijając bloki zer dubluje się separator bloków (dwukropek). W tym miejscu należy zauważyć, że dopuszczalny jest tylko jeden podwójny dwukropek :: w adresie[2]. 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 adresów

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ą one 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ół rutingu)

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 (link-local address) - są to adresy wykorzystywane tylko do komunikacji w jednym segmencie sieci lokalnej lub przy połączeniu typu point-to-point. Rutery 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 unikalny adres lokalny[2].
  • unikalne adresy lokalne (unique local adress) - 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 rutingu.[3].
  • adresy globalne (global unicast address) - 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[2].

Przez pewien czas, protokół definiował adresy site-local address, identyfikowane przez prefiks FEC0/10, jednak, ze względu na wiele kontrowersji zostały uznane za przestarzałe[4]

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).
  • ::ffff:0:0/64 - jw., ale pozwala wykorzystywać komunikację według protokołu IPv6 w sieci IPv4.
  • 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 unikalnych adresów IPv6 typu unicast (RFC 4193), będąca odpowiednikiem adresów prywatnych IPv4, choć, zgodnie z nazwą, powinny być unikalne 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. extension headers), 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[5].

Podstawowy nagłówek protokołu składa się z następujących pól[5]:

  • Wersja (4 bity) - definiująca wersję protokołu, w przypadku IPv6 pole te zawiera wartosć 6 (bitowo 0110)
  • Klasa ruchu (8 bitów) - określa sposób w jaki ma zostać potraktowany pakiet danych. W poprzedniej wersji protokoły pole te 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 te 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ść protokołu IPv6. W chwili obecnej zdefiniowanych jest sześć rozszerzeń protokołu:

  • Hop-by-Hop Options
  • nagłówek rutingu
  • 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 unikalnych numerów IP w oparciu o (niepowtarzalne) numery sprzętowe MAC; adres taki (dla adresu MAC 11:22:33:44:55:66) będzie miał postać: 64bitowy_prefiks_sieci:1322:33FF:FE44:5566 (pierwszy bajt adresu MAC zwiększany jest o 2, w środku wstawiane jest FFFE). 64-bitowy prefiks sieci jest informacją rozgłaszaną przy pomocy ICMPv6 przez rutery; 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 unikalny 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. [6][7][8][9][10]

Zobacz też

Przypisy

  1. Internet Protocol, Version 6 (IPv6) Specification.
  2. 2,0 2,1 2,2 Internet Protocol Version 6 (IPv6) Addressing Architecture (ang.). [dostęp 2011-09-10].
  3. Unique Local IPv6 Unicast Addresses (ang.). [dostęp 2011-02-10].
  4. Deprecating Site Local Addresses (ang.). [dostęp 2011-02-10].
  5. 5,0 5,1 5,2 Silvia Hagen: "IPv6 Essentials, Second Editin". O'Reilly, 2006. ISBN 0-596-10058-2. 
  6. T. Narten, R. Draves: Privacy Extensions for Stateless Address Autoconfiguration in IPv6. 2001-01.
  7. Statement on IPv6 Address Privacy, Steve Deering & Bob Hinden, Co-Chairs of the IETF's IP Next Generation Working Group , 1999-11-06.
  8. IPv6: Privacy Extensions einschalten, Reiko Kaps, 2011-04-13
  9. Privacy Extensions (IPv6), Elektronik Kompendium.
  10. Neues Internet-Protokoll erschwert anonymes Surfen, Konrad Lischka, Spiegel Online, 2010-11-18.

Linki zewnętrzne