IP w wersji 6

IPv6 – następca IPv4!

Dlaczego w ogóle potrzebujemy nowego standardu adresacji sieciowej? Dla przypomnienia,  adres IPv4 zawiera 32 bity co pozwala na adresację kilku miliardów hostów. Pomimo, że jest to naprawdę spora liczba, warto sobie uzmysłowić, że od 2011 nie ma już żadnego wolnego bloku adresowego pozwalającego na dalszy wzrost liczby publicznie dostępnych urządzeń. Oczywiście, możemy z powodzeniem stosować NAT (network address translation) i CIDR ( Classless Inter domain routing), jednakże są to rozwiązania tymczasowe. IPv6 jest ogólnie przyjętym i ogłoszonym w RFC 2460 standardem będącym następcą dobrze znanego już 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 się stało z IPv5?

Logicznym wydawałoby się, że skoro mamy protokół który ma być następcą IPv4 to powinien on nosić numer 5. Niestety ten numer został wykorzystany przy okazji eksperymentalnego protokołu Internet Stream Protocol (w zamierzeniu mającego przenosić treści audio i wideo). Protokół ten nie był nigdy używany na szeroką skalę, ale jego rozwiązania zostały zaimplementowane w 6 wersji protokołu IP.

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

Nagłówek IPv6

Tak jak w IPv4, tak i w IP w wersji 6 mamy zdefiniowany nagłówek który zawiera adresy nadawcy i odbiorcy. Pomimo faktu, że te adresy są dłuższe, to sam nagłówek zawiera mniej pól i jest łatwiejszy do przetworzenia dla routera, co było zabiegiem celowym. Dobrze znane pole TTL zostało zastąpione  polem Hop Limit.

  • Version – czyli wersja protokołu IP, jak łatwo się domyślić wartość tego pola wynosi 6.
  • Class – Pole klasa ruchu znakuje  pakiet IPv6 znacznikiem DSCP (and. Differential Services Code Point), który określa metodę obsługi pakietu. Ma to zastosowanie dla QoS.
  • Flow Label – jest to 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 typ informacji znajdujących się za podstawowym nagłówkiem. Informacja ta może określać protokół warstwy wyższej TCP/UDP, bądź też może być nowym opcjonalnym nagłówkiem rozszerzeń. Obsługiwane protokoły zostały określone przez IANA.
  • Hop Limit – Liczba przeskoków, odpowiednikiem tego pola w nagłówku pakiety IPv4 jest TTL (Time to Live).
  • Source Address – 128-bitowe pole określające adres IP nadawcy.
  • Destination Address – 128-bitowe pole określające adres docelowy pakietu.

Adresacja IPv6

Posługiwanie się 128 bitowym adresem było by wyjątkowo problematyczne, jak również trudne w zapisie. Dlatego IPv6 definiuje krótszy heksadecymalny format, któy 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 posługiwanie się 32 znakowymi adresami może również być uciążliwe, dlatego przewidziano szereg metod na skrócenie takiego zapisu do minimum. Jedną z takich możliwości jest usuwanie zer wiodących. Co to oznacza? Najlepiej będzie to widać na przykładzie:

FE00:0000:0000:0000:0001:0000:0000:0056 możemy zapisać jako FE00:0:0:0:1:0:0:56. W każdym kwartecie usuneliśmy wszystkie zera które znajdowały się z lewej strony, pozostawiając co najmniej jeden znak w każdym hekstecie ( inna nazwa na kwartety). Co jednak gdybyśmy chcieli skrócić ten zapis jeszcze bardziej? Proszę bardzo!

FE00:0:0:0:1:0:0:56 skrócimy do FE00::1:0:0:56. Korzystając z zasady usuwania zer wiodących, dołożyliśmy usunięcie największego zbioru kwartetów składających się z samych zer i zamiast tego wstawiliśmy dwa dwukropki. Taką podmianę możemy wykonać tylko raz, ponieważ w innym przypadklu router nie będzie wiedział ile hekstetów należy dopełnić zerami w którym miejscu.

FE00::1::56 Taki zapis jest nieprawidłowy i nie da się jednoznacznie wskazać liczbę 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ę od 
Global Unicast 2 lub 3 (oryginalnie); obecnie każdy nie rezerwowany do innego użytku
Unique local FD
Multicast FF
Link Local FE80
  • Global unicast – Adresy podobnie jak w IPv4 ogólnie przyjęte jako routowalne w Internecie. Po otrzymaniu prefixu IPv6 tylko jedna organizacja może się nim posługiwać. W odróżniu od zastępowanego standaru nie ma tutaj pojęcia klasowości, pierwsze 64 bity tworzą adres sieci ( w tym 16 bitów na podsieci) oraz pozostałe 64 odpowiadają za adres hosta.
  • Unique local –  Adresy podobnie jak prywatne adresy IPv4 (nie routowalne w Internecie) mogą być wykorzystywane wewnątrz każdej dowolnej, prywatnej sieci lokalnej. Zasada tworzenia adresu uniqe local jest prosta:
    • Piersze 8 bitów adresu to FD
    • Kolejne 40 bitów adresu to dowolne wybrany adres
    • Następne 16 bitów pozostawiamy na stworzenie podsieci
    • Ostatnie 64 bity określają adres hosta
  • Multicast – Adresy działają podobnie jak adresy multicast 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 odróżnieniu od innych adresów nie jest wykorzystywany do przenoszenia danych użytkowników, a wykorzystywany jest 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.

Protokół Neighbor Discovery

Protokół Neighbor Discovery Protocol (NDP lub ND) który zastępuje dobrze znany z IPv6 ARP oraz definiuje pakiety ICMPv6 – router solicitation, router advertisement, neighbor solicitation, neighbor advertisement.   Pakiety ND są wykorzystywany między innymi do Duplicate address detection (DAD) czy Neighbor unreachability detection (NUD).

  • Router Solicitation (Type 133)
    Host wysyła pakiet 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 rozgł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 Neighbor Solicitation (NS) są stosowane przez urządzenie do poznania adresy warsty łą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ę wiele od tej dla IP w 4 i tak mamy możliwość podania pełnego adresu 128 bitowego zakończonego maska (najpopularniejsza to /64). Możemy również podać skrócową wersję tego adresu, oczywiście z zachowaniem zasad pomijania zer wiodących oraz możliwością zastąpienia ciągu zer podwójnym znakiem dwukropka.

Konfiguracja adresacji IP z zastosowaniem serwerów DHCP tak zwane statefull adress configuration nie różni się niczym od tej w wersji IPv4. Czymś całkowicie nowym jest stosowanie Stateless Address Auto Configuration (SLAAC).  Metoda ta polega dostarczeniu przez router prefixu który ma być używany na interfejsie. Pozostała cześć jest tworzona na podstawie zasady 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 który otrzymujemy od routera w naszej sieci w celu uzsykania pełnego, funkcjonalnego 128 bitowego adresu IP. Adres MAC składa się z 48 bitów, tak więc w celu utworzenia poprawnego adresu musimy uzupełnić go o brakujące 16 bitów. W tym celu dzielimy taki adres na pół (dwie połowy po 8 znaków zapisane w heksie) i dodajemy w środku FFFE, jak również 7 bit pierwszej połowy zostaje zamieniony, jeśli wcześniej było 0 to zapisujemy 1 i na odwrót. Jeśli wcześniej 7 bitem było 1 to teraz wpisujemy 0.

Prefix uzyskany od routera Pierwsza połowa MAC FFFE Druga połowa MAC

Jeśli nie chcesz za każdym razem zamieniać adresu MAC na wersję binarną możesz skorzystać z poniższej tabelki. Pamiętając, że interesuje nas 7 bit już wiemy, że zmianie ulegnie drugi znak w zapisie heksalnym (każdy znak heksalny odpowiada wartości zapisanej za pomocą 4 bitów).

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

Solicited-Node Multicast Address

Jak już wiesz, adresy multicast służą do komunikacji wyłącznie w grupie urządzeń które do takiej grupy dołączyły. I właśnie w tym celu wykorzystywany jest Solicited-Node Multicast Address (SNMA). Kiedy dynamicznie utworzymy adres IPv6 (istnieje znikoma, w końcu masz adres MAC powinien być unikalny) warto by było sprawdzić czy jakiś inny host w naszej sieci nie posiada już takiego adresu. W tym celu 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) bierzemy z adresu unicast., ale co ważne nie podajemy adresu źródła. Jeśli nie otrzymamy odpowiedzi to znaczy, że adres jest wolny i może być wykorzystywany.

Adres Anycast

Jest to dowolny adres unicastowy który może zostać skonfigurowany na dowolnej liczbie urządzeń. Kiedy host wyśle pakiet na taki adres router przekaże go wyłącznie do najbliższego routera obsługującego dany adres.

  1. Co najmniej dwa routery konfigurują ten sam adres IPv6 oznaczając go jak anycast.
  2. Kiedy inny router otrzyma pakiet zaadresowany na ten adres przekaże go tylko do nabliższego routera.

Poniżej przykładowa konfiguracja i weryfikacja.

Pozostałe adresy IPv6

Na koniec pozostały nam jeszcze dwa rodzaje adresów – adres pętli zwrotnej oraz nieokreślony. Loopback 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 w skrócie ::/0.

IPv4 IPv6
Loopback Address 127.0.0.0/8 ::1/128
Unspecified Address 0.0.0.0/0 ::/0
O mnie

O mnie

Cześć! Nazywam się Rafał i jestem sieciowcem pasjonatem. Na blogu chciałbym podzielić się z Tobą swoimi przemyśleniami na temat sieci komputerowych.

Więcej o mnie…