IPv6
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ą RFC 2460 ↓ oraz RFC 4291 ↓.
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[potrzebny przypis], ż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 Flow Label |
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 Neighbor Solicitation, brak ARP |
zarządzania grupami multicastowymi | IGMP | MLD (ang. Multicast Listener Discovery Protocol) |
protokół komunikatów kontrolnych | ICMP | ICMPv6, wymagany |
adresy transmisji | do wysyłania danych do wszystkich węzłów w podsieci | zastąpione przez grupowy adres typu link-local , 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 Router Discovery i Neighbor Solicitation |
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[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 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 (link-local address) – 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[2] .
- unikatowe adresy lokalne (unique local address) – 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[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 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 (RFC 4193 ↓), 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. 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].
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[5]:
- 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[6]. 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[7][8][9][10][11].
Zobacz też
Przypisy
- ↑ RFC 2460 ↓.
- ↑ a b c RFC 4291 ↓.
- ↑ RFC 4193 ↓.
- ↑ RFC 3879 ↓.
- ↑ a b c Silvia Hagen: IPv6 Essentials, Second Editin. O’Reilly, 2006. ISBN 0-596-10058-2.
- ↑ Identyfikatory interfejsów IPv6. Microsoft. [dostęp 2012-11-04].
- ↑ RFC 3041 ↓.
- ↑ Statement on IPv6 Address Privacy, Steve Deering & Bob Hinden, Co-Chairs of the IETF’s IP Next Generation Working Group, 1999-11-06.
- ↑ IPv6: Privacy Extensions einschalten, Reiko Kaps, 2011-04-13.
- ↑ Privacy Extensions (IPv6), Elektronik Kompendium.
- ↑ Neues Internet-Protokoll erschwert anonymes Surfen, Konrad Lischka, Spiegel Online, 2010-11-18.
Bibliografia
- S. Deering , R. Hinden , Internet Protocol, Version 6 (IPv6) Specification, RFC 2460, IETF, grudzień 1998, DOI: 10.17487/RFC2460, ISSN 2070-1721, OCLC 943595667 (ang.).
- T. Narten , R. Draves , Privacy Extensions for Stateless Address Autoconfiguration in IPv6, RFC 3041, IETF, styczeń 2001, DOI: 10.17487/RFC3041, ISSN 2070-1721, OCLC 943595667 (ang.).
- C. Huitema , B. Carpenter , Deprecating Site Local Addresses, RFC 3879, IETF, wrzesień 2004, DOI: 10.17487/RFC3879, ISSN 2070-1721, OCLC 943595667 (ang.).
- R. Hinden , B. Haberman , Unique Local IPv6 Unicast Addresses, RFC 4193, IETF, październik 2005, DOI: 10.17487/RFC4193, ISSN 2070-1721, OCLC 943595667 (ang.).
- R. Hinden , S. Deering , IP Version 6 Addressing Architecture, RFC 4291, IETF, luty 2006, DOI: 10.17487/RFC4291, ISSN 2070-1721, OCLC 943595667 (ang.).