Routing & Switching

IPv6 następca protokołu IPv4

IPv6 następca protokołu IPv4
W: Routing & Switching

Dlaczego potrzebujemy nowego standardu adresacji sieciowej?

Adres IPv4 składa się z 32 bitów, co pozwala na adresowanie kilku miliardów hostów. Mimo że to duża liczba, od 2011 roku nie ma już wolnych bloków adresowych umożliwiających dalszy wzrost liczby publicznie dostępnych urządzeń. Mimo że można stosować NAT (tłumaczenie adresów sieciowych) i CIDR (bezklasowe routowanie między domenami), są to rozwiązania tymczasowe.

IPv6 jest powszechnie akceptowanym i opisanym w standardzie RFC 2460 następcą dobrze znanego już protokołu IP w wersji 4. IPv6 używa adresów zapisanych za pomocą 128 bitów, co daje 10 000 000 000 000 000 000 000 000 000 razy więcej adresów niż w IPv4.

Co stało się z IPv5?

Logiczne wydawałoby się, że protokół, który miałby być następcą IPv4, nosiłby numer 5. Niestety ten numer został wykorzystany dla eksperymentalnego protokołu Internet Stream Protocol, który miał przekazywać treści audio i wideo. Protokół ten nigdy nie był szeroko stosowany, ale jego rozwiązania zostały wdrożone w 6 wersji protokołu IP.

IPv5 nigdy nie miał zastąpić IPv4, lecz miał funkcjonować równolegle.

Nagłówek IPv6

Podobnie jak w przypadku IPv4, w protokole IP w wersji 6 mamy zdefiniowany nagłówek zawierający adresy nadawcy i odbiorcy. Mimo że adresy te są dłuższe, sam nagłówek zawiera mniej pól i jest łatwiejszy w przetwarzaniu dla routera, co było zamierzoną decyzją. Dobrze znane pole TTL zostało zastąpione polem Limit Skoku.

💡
Nagłówek IPv6 o stałej długości 40 bitów jest łatwiejszy do przetworzenia niż mniejszy nagłówek IPv4 o zmiennej długości (ok. 20 bitów).

Nagłówek składa się z następujących pól

  • Version: Określa wersję protokołu IP; wartość tego pola wynosi 6.
  • Class : Pole Klasy służy do oznaczenia ruchu pakietu IPv6 za pomocą DSCP (Differentiated Services Code Point), który określa sposób obsługi pakietu i ma zastosowanie w QoS.
  • Flow Label: 20-bitowe pole służące do oznaczania strumienia pakietów IPv6.
  • Payload Lenght: Określa długość danych zawartych w pakiecie.
  • Next Header: 8-bitowe pole określające rodzaj informacji znajdującej się za podstawowym nagłówkiem. Ta informacja może określać protokół warstwy wyższej, takie jak TCP/UDP, lub być nowym opcjonalnym nagłówkiem rozszerzeń. Obsługiwane protokoły zostały zdefiniowane przez IANA.
  • Hop Limit: Liczba przeskoków, odpowiednik pola TTL (Time to Live) w nagłówku pakietów IPv4.
  • Source Address: 128-bitowe pole określające adres IP nadawcy.
  • Destination Address: 128-bitowe pole określające adres docelowy pakietu.
Schemat nagłówka IPv6

Adresacja IPv6

Posługiwanie się 128-bitowym adresem byłoby wyjątkowo problematyczne, jak również trudne w zapisie. Dlatego IPv6 definiuje krótszy heksadecymalny format, który wymaga maksymalnie 32 znaków z zakresu 0-F (1 heks = 4 bity).

Heks Binarnie Heks Binarnie
0 0000 8 1000
1 0001 9 1001
2 0010 A 1010
3 0011 B 1011
4 0100 C 1100
5 0101 D 1101
6 0110 E 1110
7 0111 F 1111

Jednakże posługiwanie się 32-znakowymi adresami może być uciążliwe, dlatego istnieje kilka sposobów na skrócenie takiego zapisu do minimum.

Jedną z możliwości jest usuwanie zer wiodących. Co to oznacza? Najlepiej to zobaczyć na przykładzie:

FE00:0000:0000:0000:0001:0000:0000:0056 można zapisać jako FE00:0:0:0:1:0:0:56. W każdym kwartecie usunięto wszystkie zera znajdujące się z lewej strony, pozostawiając co najmniej jeden znak w każdym hekstecie (inna nazwa na kwartety).

Jednak co, jeśli chcielibyśmy jeszcze bardziej skrócić ten zapis? Proszę bardzo!

FE00:0:0:0:1:0:0:56 można skrócić do FE00::1:0:0:56. Korzystając z zasady usuwania zer wiodących, zastąpiono największy zestaw kwartetów składających się z samych zer dwukropkami. Tego rodzaju podmianę można przeprowadzić tylko raz, gdyż w innym przypadku router nie będzie wiedział, ile hekstetów trzeba uzupełnić zerami i w jakim miejscu.

FE00::1::56 Taki zapis jest niepoprawny. Niemożliwe jest jednoznaczne określenie liczby hekstetów składających się z zer, które należy wstawić w miejsce ::.

Rodzaje adresów IPv6

Rodzaj adresu Pierwszy Hekstet zaczyna się do
Global Unicast 2 lub 3 (oryginalnie); obecnie każdy nie rezerwowany do innego użytku
Unique local FD
Multicast FF
Link Local FE80

Globalny unicast - Adresy, podobnie jak w IPv4, są ogólnie uważane za routowalne w Internecie. Po otrzymaniu prefixu IPv6 tylko jedna organizacja może z niego korzystać. W przeciwieństwie do zastępowanego standardu, tutaj nie ma pojęcia klasowości; pierwsze 64 bity tworzą adres sieci (w tym 16 bitów na podsieć), a pozostałe 64 bity odpowiadają za adres hosta.

Unique local - Adresy, podobnie jak prywatne adresy IPv4 (nie routowalne w Internecie), mogą być wykorzystywane wewnątrz każdej prywatnej sieci lokalnej. Zasada tworzenia adresu unique local jest prosta: Pierwsze 8 bitów adresu to FD, kolejne 40 bitów adresu to dowolnie wybrany adres, następne 16 bitów pozostawiamy na stworzenie podsieci, a ostatnie 64 bity określają adres hosta.

Multicast - Adresy działają podobnie jak adresy multicast w IPv4. Pakiet jest wysyłany tylko do konkretnej grupy odbiorców. Poniżej lista najczęściej spotykanych adresów multicast w IPv6: Wszystkie urządzenia FF02::1, Wszystkie routery FF02::2, OSPF FF02::5 oraz FF02::6, RIPng FF02::9, EIGRP FF02::A.

Link Local - W IPv6 zaimplementowano dodatkowy unicastowy adres zawarty w puli FE80::/10, gdzie następne 54 bity to zera. Taki adres funkcjonuje tylko wewnątrz jednej podsieci. W przeciwieństwie do innych adresów, nie jest wykorzystywany do przenoszenia danych użytkowników, lecz jest używany przez protokoły IPv6, np. routingu, NDP (Neighbor Discovery Protocol). Routery z włączonym IPv6 jako adres next hop zawsze podają adres link-local drugiego routera.

Przykład wykorzystania adresacji link-local
💡
W protokole IPv6 nie ma adresów typu broadcast. Ten rodzaj komunikacji został zastąpiony bardziej wydajną komunikacją multicastową.

Protokół Neighbor Discovery

Protokół Neighbor Discovery (NDP lub ND) zastępuje dobrze znanego protokołu ARP w IPv6 i definiuje pakiety ICMPv6, takie jak Router Solicitation, Router Advertisement, Neighbor Solicitation oraz Neighbor Advertisement. Pakiety NDP są wykorzystywane między innymi do wykrywania zduplikowanych adresów (Duplicate Address Detection - DAD) oraz do wykrywania niedostępności sąsiada (Neighbor Unreachability Detection - NUD).

  • Router Solicitation - Type 133 – Host wysyła pakiet żądania routera (Router Solicitation - RS), aby odnaleźć wszystkie dostępne routery w sieci. Każdy router obsługujący IPv6 odpowiada pakietem Router Advertisement - RA.
  • Router Advertisement - Type 134 – Router ogłasza swoją obecność w danej sieci w określonych odstępach czasu lub w odpowiedzi na pakiet RS. W pakiecie RA zawarte są między innymi dane potrzebne do samodzielnego wygenerowania adresu IPv6 przez hosta.
  • Neighbor Solicitation - Type 135 – Pakiety NS są stosowane przez urządzenie do poznania adresu warstwy łącza danych (MAC address) oraz zweryfikowania, czy dany host jest nadal dostępny pod zapisanym adresem.

Neighbor Advertisement - Type 136 – Host wysyła pakiet Neighbor Advertisement - NA w odpowiedzi na pakiety NS.

Przyznawanie adresów IPv6

Konfiguracja statycznego adresu IP w wersji 6 nie różni się znacznie od tej dla IP w wersji 4. Mamy możliwość podania pełnego adresu 128-bitowego z maską końcową (najczęściej /64). Możemy również użyć skróconej wersji adresu, pamiętając o zasadach pomijania zer wiodących oraz możliwości zastąpienia ciągu zer podwójnym dwukropkiem.

Konfiguracja adresacji IP z użyciem serwerów DHCP, tzw. stateful address configuration, nie różni się od tej stosowanej w IPv4.

Nowością jest natomiast metoda Stateless Address Auto Configuration (SLAAC). Polega ona na dostarczeniu przez router prefiksu, który ma być używany na interfejsie. Pozostała część adresu jest generowana na podstawie reguły zwanej EUI-64.

Stateless Address Auto Configuration (SLAAC) i EUI-64

Metoda EUI-64 polega na dodaniu adresu MAC (z pewnymi modyfikacjami) do 64-bitowego prefiksu otrzymanego od routera w naszej sieci w celu uzyskania pełnego, funkcjonalnego adresu IP o długości 128 bitów. Adres MAC składa się z 48 bitów, więc aby utworzyć poprawny adres, musimy uzupełnić go o brakujące 16 bitów.

Dla tego celu dzielimy adres na pół (dwie połowy po 8 znaków zapisane w heksadecymalnym formacie) i dodajemy w środku FFFE. Dodatkowo, 7 bit z pierwszej połowy zostaje zamieniony - jeśli był on wcześniej równy 0, teraz zapisujemy 1, a jeśli był równy 1, teraz zapisujemy 0.

Prefiks otrzymany od routera + Pierwsza połowa MAC + FFFE + Druga połowa MAC

Jeśli nie chcesz konwertować adresu MAC na postać binarną za każdym razem, możesz skorzystać z poniższej tabeli. Należy pamiętać, że interesuje nas 7 bit - wiemy już, że zmiana nastąpi w drugim znaku zapisanym w formacie heksadecymalnym (każdy znak heksadecymalny odpowiada wartości reprezentowanej przez 4 bity).

Heks Heks
0 <-> 2
1 <-> 3
4 <-> 6
7 <-> 9
8 <-> A
9 <-> B
C <-> E
D <-> F

Adres multicast "Solicited-Node"

Jak już wiesz, adresy multicast służą do komunikacji wyłącznie w grupie urządzeń, które dołączyły do danej grupy. W tym celu wykorzystywany jest adres multicast "Solicited-Node" (SNMA).

Kiedy dynamicznie tworzymy adres IPv6 (który powinien być unikalny, biorąc pod uwagę, że adres MAC powinien być unikalny), warto sprawdzić, czy inny host w naszej sieci nie używa już tego adresu. Aby to zrobić, wysyłamy pakiet do grupy multicastowej o adresie FF02:0000:0000:0000:0000:001:FF__:_ _ _ _ (lub w skrócie FF02::1F), gdzie ostatnie 6 znaków (24 bity) pochodzą z adresu unicast. Ważne jest, aby nie podawać adresu źródłowego. Brak odpowiedzi oznacza, że adres jest wolny i można go wykorzystać.

Adres Anycast

To dowolny adres unicastowy, który może być skonfigurowany na wielu urządzeniach. Kiedy host wysyła pakiet na taki adres, router przekazuje go jedynie do najbliższego routera obsługującego dany adres.

Co najmniej dwa routery mogą skonfigurować ten sam adres IPv6, oznaczając go jako anycast. Gdy inny router otrzyma pakiet skierowany na ten adres, przekaże go tylko do najbliższego routera.

Routery z adresem anycast

Poniżej przykładowa konfiguracja i weryfikacja.

R1#configure terminal
R1(config)#interface gigabitethernet 0/0
R1(config-if)#ipv6 address 2001:1:1:1:2::99/128 anycast
R1(config-if)#ipv6 address 2001:1:1:1::11/64
R1#show ipv6 interface gigabitethernet0/0
 Global unicast address)es:
 2001:1:1:1::11, subnet is 2001:1:1:1::/64
 2001:1:1:1:2::99, subnet is 2001:1:1:1:2::99/128 [ANY]

Pozostałe adresy IPv6

Na zakończenie pozostały nam jeszcze dwa rodzaje adresów – adres pętli zwrotnej oraz nieokreślony.

Pętla zwrotna w IPv6 wykorzystuje adres 0000:0000:0000:0000:0000:0000:0000:0001/128, który można skrócić do ::1/128.

Adres nieokreślony w IPv6 to 0000:0000:0000:0000:0000:0000:0000:0000/0, a w skrócie ::/0.

Napisane przez
Rafał Rudewicz
Pasjonat sieci komputerowych i automatyzacji. CCNP Enterprise & DevNet Specialist. IP/MPLS SME. Dołącz do mnie, aby razem odkrywać fascynujący świat technologii!
Komentarze
Spis treści
Świetnie! Udało ci się pomyślnie zarejestrować.
Witaj z powrotem! Zalogowałeś się pomyślnie.
Pomyślnie subskrybowałeś Inna Sieć.
Twój link wygasł.
Sukces! Sprawdź swoją skrzynkę e-mailową, aby uzyskać magiczny link do logowania.
Sukces! Twoje informacje rozliczeniowe zostały zaktualizowane.
Twoje informacje rozliczeniowe nie zostały zaktualizowane.