Wszystko, co chcielibyście wiedzieć o IPv6, ale baliście się zapytać cz. 3

Posted on wto 07 grudzień 2010 in Routing

Kontynuujemy nasze badania nad IPv6. W dwóch poprzednich częściach sprawdziliśmy jak wygląda adresowanie w nowej wersji protokołu - zarówno unicast jak i multicast. Zanim przejdziemy do obiecanej autokonfiguracji zerkniemy w nagłówek IPv6, a nieco się tam zmieniło od czasów "czwórki". Nagłówek IPv6 wygląda tak:

IPv6
Header

No to lecimy po kolei:

  • Version: wersja protokołu :P w tym przypadku... 6 (lub inaczej 0110)
  • Traffic Class: pole używane do priorytetyzacji
  • Flow Label: używany do identyfikowania sekwencji pakietów, router może identyfikować pakiety przypisywane do tej samej sekwencji i traktować je w podobny sposób
  • Payload Length: liczba oktetów zajmowanych przez zawartość pakietu
  • Next Header: wskazuje na kolejny nagłówek - najczęściej jest to protokół warstwy wyżeszej (UDP, TPC, ICMP6 itd.) enkapsulowany w pakiecie IP (odpowiednik pola Protocol w IPv4)
  • Hop Limit: odpowiednik TTL z IPv4
  • I oczywiście dwa 128-bitowe adresy :)

Od razu powinno się rzucić w oczy to czego nie ma: suma kontrolna. Twórcy protokołu doszli do wniosku, że skoro protokoły warstw niższych i wyższych sprawdzają poprawność przesyłanych danych, to nie ma sensu zrzucać też tej roboty na warstwę trzecią. Niech się zajmie routowaniem ;) Podobnie sprawa wygląda z polem opcji - jeśli dodatkowe opcje mają znaleźć się w pakiecie "doklejane" są specyficzne nagłówki odpowiednie dla danej opcji.

Stateless autoconfiguration

Dynamiczna adresacja w IPv6 nie wymaga DHCP (choć oczywiście jak najbardziej można z niego korzystać). Protokół sam w sobie zapewnia automatyczne adresowanie hostów. Wszystko czego potrzebujemy to hosta gadającego w IPv6 i router, który ma skonfigurowany globalny prefix IPv6.

Automatyczna konfiguracja w skrócie przebiega następująco:

  1. Host po uruchomieniu musi skonfigurować adres link-local
  2. W następnym kroku upewnia się, że w sieci nie ma drugiego hosta, który ma taki sam adres
  3. Host wysyła zapytanie o obecność routera
  4. Router odpowiada jednocześnie informując o prefiksie globalnym i pozostałych niezbędnych opcjach
  5. Host generuje interface id (podobnie jak w link-local) po czym "dokleja" go do prefiksu, który otrzymał w odpowiedzi routera
  6. Ponownie sprawdza czy jego adres (tym razem globalny) nie istnieje już w sieci

Proste, prawda? No to skomplikujmy to trochę :D

Deep into Stateless Autoconfiguration (i nie tylko)

Neighbor
solicitation

Krok 1 - Host po uruchomieniu generuje adres link-local (pamiętamy metodę z poprzedniego wpisu?) i wysyła pakiet Neighbor Solicitation by upewnić się, że takiego adresu nie ma już w sieci. Ponieważ host nie ma jeszcze adresu adresem źródłowy NS jest ::/0 czyli adres "unspecified". Adresem docelowym jest tzw. Solicited-Node Multicast address, czyli adres gdzie do prefiksu ff02::1 dołączone są ostatnie 24 bity adresu, który jest weryfikowany (w naszym przypadku: ff:02::1:ffa4:a61f). W pakiecie ICMP zawarta jest także informacja o weryfikowanym adresie (fe80::20f:eaff:fea4:a61f)

Router
solicitation

Krok 2 - Host upewnił się, że taki adres link-local jest niepowtarzalny. Następnym krokiem będzie próba pozyskania globalnego adresu. W tym celu host musi wykryć router i uzyskać od niego niezbędne informacje. W tym celu wysyłany jest komunikat Router Solicitation. Adresem źródłowym pakietu jest już skonfigurowany w poprzednim kroku adres link-local. Adresem docelowym z kolei jest adres multicastowy ff02::2 co, jak pamiętamy z poprzedniego artykułu, oznacza "wszystkie routery na linku".

Router
advertisement

Krok 3 - W odpowiedzi na otrzymany RS router odpowiada komunikatem Router Advertisement. RA wysyłany jest okresowo przez router dodatkowo wysyłany jest w odpowiedzi na RS. Adresem źródłowym RA jest adres link-local routera. W komunikacie zawarty jest między innymi czas życia routera domyślnego (1800), Reachable time i Retransmit time. W opcjach komunikatu zawarte są prefiksy skonfigurowane na linku i używane przez hosty w procesie autokonfiguracji (w naszym przykładzie 2001:6a0:176:4::) oraz ich czas życia.

Neighbor
solicitation

Krok 4 - Na koniec host ponownie upewnia się, że skonfigurowany przez niego adres nie jest już przypadkiem używany w sieci. Tym razem komunikat zawiera prefiks globalny.

Powyżej opisane procedury i komunikaty ICMPv6 należą do tzw. NDP (Neighbor Discovery Protocol). Poza tymi, którymi się zajęliśmy używane są jeszcze dwa:

  • Neighbor Advertisement - najczęściej wysyłany przez hosta w odpowiedzi na komunikat NS. Taki komunikat może być także użyty w przypadku zmiany adresu przez hosta do poinformowania pozostałych o tym fakcie.
  • Redirect - działanie identyczne jak w przypadku ICMP4 redirect. Wysyłany przez router najczęściej gdy router jest pewny, że inny router ma lepszą trasę dla danego adresu docelowego i to właśnie tego routera a nie domyślnego host powinien użyć.

Na dziś to chyba tyle...

FIN