Skuteczna komunikacja w sieci lokalnej wymaga tłumaczenia logicznych adresów IP na fizyczne adresy MAC — to kluczowe ogniwo między rutingiem (warstwa 3) a transmisją ramek (warstwa 2). W IPv4 odpowiada za to Address Resolution Protocol (ARP), a w IPv6 — Neighbor Discovery Protocol (NDP)
Niniejszy materiał przedstawia mechanizmy ARP i NDP, ich przebieg działania, strukturę pakietów, implikacje bezpieczeństwa oraz najważniejsze różnice projektowe i operacyjne.
Podstawy adresowania w warstwie sieci i warstwie łącza danych
Dwupoziomowy system adresowania
Rodzina protokołów IP korzysta z dwóch typów adresów działających na różnych warstwach. W warstwie sieci (L3) używane są adresy IP (IPv4: 32 bity, IPv6: 128 bitów). W warstwie łącza danych (L2) używane są adresy MAC (Media Access Control) — 48‑bitowe identyfikatory interfejsów sieciowych.
Problem do rozwiązania jest prosty: jeśli host zna adres IP celu w tym samym segmencie, musi jeszcze poznać jego adres MAC, aby poprawnie zbudować ramkę L2. Bez dynamicznego mapowania IP→MAC komunikacja lokalna byłaby nieefektywna lub wymagałaby ręcznej konfiguracji na każdym urządzeniu.
Proces enkapsulacji
Aby zobaczyć, gdzie ARP i NDP są niezbędne, warto prześledzić enkapsulację danych w stosie sieciowym:
- warstwa transportowa – dodaje nagłówki (np. porty TCP/UDP) do danych aplikacji;
- warstwa sieciowa – dodaje nagłówek IP ze źródłowym i docelowym adresem IP;
- warstwa łącza danych – tworzy ramkę z adresami MAC źródła i celu; tu wymagane jest ustalenie MAC odbiorcy.
Protokół ARP w IPv4 – mechanizm i działanie
Podstawowe funkcje i przeznaczenie
ARP (RFC 826, STD 37) działa lokalnie w obrębie jednej domeny rozgłoszeniowej i służy do mapowania IPv4→MAC. Routery nie przekazują żądań ARP, a więc protokół nie wykracza poza jeden segment L2 — to zamierzona cecha projektu.
ARP jest bezstanowy (stateless): hosty nie utrzymują stanu wymian, choć prowadzą pamięć podręczną ARP dla wydajności. Ta prostota ułatwia implementację, ale tworzy również znane wektory ataków.
Proces żądania i odpowiedzi ARP
Poniżej znajduje się skrócony przebieg wymiany w ARP, gdy w pamięci ARP brak wpisu dla celu:
- host wysyła ARP Request jako rozgłoszenie na
FF:FF:FF:FF:FF:FF, zawierając własny IP i MAC oraz poszukiwany adres IPv4; - każdy węzeł odbiera ramkę, ale tylko ten, którego IP pasuje do zapytania, przygotowuje ARP Reply z własnym adresem MAC;
- odpowiedź jest wysyłana unikastowo do nadawcy żądania, który zapisuje mapowanie w pamięci ARP.
Struktura i pola pakietu ARP
Dla większej przejrzystości kluczowe pola ARP (RFC 826) zestawiono w tabeli wraz z typowymi wartościami dla Ethernet/IPv4:
| Pole | Znaczenie | Typowe wartości |
|---|---|---|
| HTYPE | typ adresowania sprzętowego | Ethernet: 1 |
| PTYPE | typ protokołu warstwy sieci | IPv4: 0x0800 |
| HLEN | długość adresu sprzętowego | 6 bajtów (MAC 48‑bit) |
| PLEN | długość adresu protokołu | 4 bajty (IPv4) |
| OPER | rodzaj operacji | 1: Request, 2: Reply |
| SHA | adres MAC nadawcy | np. 00:11:22:33:44:55 |
| SPA | adres IP nadawcy | np. 192.0.2.10 |
| THA | adres MAC celu | nieznany w Request, uzupełniany w Reply |
| TPA | adres IP celu | np. 192.0.2.20 |
Zarządzanie pamięcią podręczną ARP i działanie czasów wygasania
Pamięć ARP przyspiesza wysyłanie pakietów, eliminując konieczność ciągłych zapytań. Po wygaśnięciu wpisu host ponawia rozwiązywanie adresu. Poniżej zestawiono przykładowe wartości domyślne:
| System/Platforma | Domyślny timeout ARP | Uwagi |
|---|---|---|
| Windows | 10 minut | dynamiczne wpisy wygasają przy bezczynności |
| Cisco IOS | 240 minut (+ losowe 0–30 min) | jitter zapobiega skokowym odświeżeniom |
Wpisy statyczne ARP nie wygasają do czasu usunięcia lub restartu. Podstawowe operacje na większości systemów można wykonać następującymi poleceniami:
- arp -a – podgląd tabeli ARP;
- arp -s – dodanie wpisu statycznego;
- arp -d – usunięcie wskazanego wpisu.
Warianty protokołu ARP – kiedy i po co?
Poniżej zebrano popularne rozszerzenia ARP wraz z zastosowaniami:
- Proxy ARP – router odpowiada w imieniu hosta w innej podsieci, umożliwiając przekazywanie ruchu bez świadomości trasowania po stronie hostów;
- Gratuitous ARP (GARP) – host ogłasza własne IP→MAC, wspiera aktualizację pamięci ARP, wykrywanie duplikatów i protokoły pierwszego skoku (HSRP/VRRP);
- RARP – przestarzały mechanizm uzyskiwania adresu IP na podstawie MAC (zastąpiony przez BOOTP/DHCP);
- InARP – w technologiach takich jak Frame Relay/ATM mapuje znane identyfikatory L2 na adresy L3 (IP).
Protokół odkrywania sąsiadów (NDP) w IPv6 – rozszerzone rozwiązywanie adresów i zarządzanie siecią
Różnice architektoniczne między ARP a NDP
NDP (RFC 4861) zastępuje ARP w IPv6 i łączy w sobie więcej funkcji: rozwiązywanie adresów, odkrywanie routerów, autokonfigurację i monitorowanie osiągalności.
NDP używa adresowania multicast (zamiast broadcast) i utrzymuje stan sąsiadów (m.in. reachable, stale, probe). To podejście poprawia wydajność i niezawodność oraz ułatwia wprowadzenie kontroli bezpieczeństwa.
Typy i funkcje komunikatów NDP
NDP korzysta z pięciu komunikatów ICMPv6. Zestawienie ról i typów:
| Komunikat | Typ ICMPv6 | Rola |
|---|---|---|
| Router Solicitation (RS) | 133 | host prosi routery o natychmiastowe RA (do FF02::2) |
| Router Advertisement (RA) | 134 | router ogłasza prefiksy, parametry i bramę (do FF02::1) |
| Neighbor Solicitation (NS) | 135 | zapytanie o adres L2 celu lub sprawdzenie osiągalności (multicast solicited-node) |
| Neighbor Advertisement (NA) | 136 | odpowiedź na NS lub ogłoszenie zmiany (zwykle unicast) |
| Redirect | 137 | router wskazuje lepszy pierwszy skok dla danego celu |
Adresy multicast typu solicited-node – podstawa efektywności NDP
Adresy solicited-node multicast ograniczają „zasięg” zapytań do faktycznie zainteresowanych węzłów. Tworzy się je z prefiksu FF02::1:FF00:0/104 i ostatnich 24 bitów docelowego IPv6 (np. ff02::1:ff28:9c5a dla …:fe28:9c5a).
Na warstwie MAC używane są adresy multicast 33:33:xx:xx:xx:xx, więc ramki trafiają tylko do interfejsów subskrybujących daną grupę. W efekcie NDP jest wydajniejszy i mniej inwazyjny niż rozgłoszeniowy ARP.
Adresy link-local i automatyczna konfiguracja
Każdy interfejs IPv6 posiada adres link-local (prefiks FE80::/64) wymagany do działania NDP i odkrywania routerów. Często stosowano EUI‑64 do budowy identyfikatora interfejsu, choć obecnie preferowane są losowe identyfikatory ze względów prywatności.
Przed użyciem adresu wykonywany jest DAD (Duplicate Address Detection) z nieokreślonego źródła ::. Brak odpowiedzi NA w oknie czasowym potwierdza unikalność adresu.
Autokonfiguracja bezstanowa adresów (SLAAC)
Proces SLAAC można streścić w kilku krokach:
- host generuje adres link-local i wykonuje DAD;
- wysyła Router Solicitation do FF02::2, żądając bieżących parametrów;
- router przesyła Router Advertisement z prefiksami (zwykle /64) i flagami konfiguracji;
- host tworzy pełny adres 128‑bit, łącząc prefiks z identyfikatorem interfejsu (EUI‑64 lub losowym);
- wykonuje DAD dla nowego adresu i po potwierdzeniu zaczyna go używać.
Wykrywanie zduplikowanych adresów (DAD) i niedostępności sąsiadów (NUD)
NUD utrzymuje stan osiągalności sąsiadów i reaguje na zmiany topologii. Stany NUD:
- incomplete – oczekiwanie na rozstrzygnięcie adresu (brak kompletnego wpisu);
- reachable – sąsiad potwierdzony jako osiągalny w ostatnim interwale;
- stale – wpis istnieje, ale ostatnie potwierdzenie jest przestarzałe;
- delay – krótkie oczekiwanie na ruch potwierdzający przed sondowaniem;
- probe – aktywne sondowanie sąsiada komunikatami NS.
Analiza porównawcza – ARP w IPv4 vs. NDP w IPv6
Fundamentalne różnice filozofii projektowej
ARP jest prosty i bezstanowy, ale przez to podatny na fałszowanie (spoofing). NDP jest stanowy, korzysta z multicast i łączy dodatkowe funkcje (RA, SLAAC, NUD), co zwiększa niezawodność i efektywność.
Poniższa tabela syntetyzuje różnice operacyjne:
| Aspekt | ARP (IPv4) | NDP (IPv6) |
|---|---|---|
| Zakres działania | jedno łącze L2 (broadcast) | jedno łącze L2 (multicast) |
| Tryb dystrybucji | broadcast na FF:FF:FF:FF:FF:FF | multicast (grupy solicited-node) |
| Model stanu | bezstanowy (stateless) | stanowy (stany NUD: reachable/stale/probe…) |
| Funkcje dodatkowe | brak (tylko IP→MAC) | RA, SLAAC, DAD, Redirect, NUD |
| Bezpieczeństwo | brak wbudowanego uwierzytelniania | opcjonalne SeND, CGA |
| Wpływ na segment | obciążenie wszystkich hostów przy każdym zapytaniu | trafianie tylko zainteresowanych węzłów |
Implikacje bezpieczeństwa
Różnice projektowe przekładają się na konkretne ryzyka i metody obrony:
- ARP spoofing/poisoning – bezstanowość ARP umożliwia wstrzykiwanie fałszywych odpowiedzi, co ułatwia ataki MITM;
- NDP + SeND – podpisy kryptograficzne i Cryptographically Generated Addresses wiążą adres z kluczem publicznym i utrudniają podszywanie;
- RA/Redirect abuse – w IPv6 możliwe jest nadużycie RA/Redirect; ogranicza się to kontrolą dostępu, filtrowaniem na brzegu i wdrożeniem SeND.
Praktyczna implementacja i zarządzanie
Zarządzanie pamięcią podręczną ARP i rozwiązywanie problemów
Diagnostyka ARP zwykle zaczyna się od weryfikacji tabeli i ponownego rozwiązywania adresów. Przydatne narzędzia i polecenia:
- arp -a – podgląd bieżących mapowań IP→MAC;
- Wireshark – analiza ramek ARP (Request/Reply);
- show arp / show ip arp (Cisco) – status wpisów i ich starzenie.
Różnice w timeoutach (np. Windows: 10 min, Cisco IOS: 240 min + jitter) tłumaczą okresowe opóźnienia przy ponownym rozwiązywaniu adresów.
Monitorowanie i konfiguracja NDP w IPv6
W środowiskach IPv6 standardem jest monitoring stanu sąsiadów i parametrów RA.
- show ipv6 neighbors – przegląd wpisów NDP wraz ze stanem (incomplete/reachable/stale/delay/probe);
- konfiguracja RA – kontrola interwałów i zawartości ogłoszeń (prefiksy, flagi SLAAC/DHCPv6);
- DAD/Optimistic DAD – dostrajanie liczby prób i polityk użycia adresu przed finalnym potwierdzeniem.