arp(7) Miscellaneous Information Manual arp(7) NAZWA arp - modul ARP jadra Linuksa OPIS Ten modul protokolu w jadrze zawiera implementacje protokolu rozpoznawania adresow (ang. Address Resolution Protocol) zdefiniowanego w RFC 826. Sluzy do przeksztalcania adresow sprzetowych warstwy 2 na adresy protokolu IPv4 w sieciach o bezposrednim polaczeniu. Normalnie uzytkownik nie korzysta bezposrednio z tego modulu, z wyjatkiem konfigurowania go; sluzy on innym protokolom w jadrze. Proces uzytkownika moze odbierac pakiety ARP za pomoca gniazd packet(7). Istnieje takze mechanizm zarzadzania pamiecia podreczna ARP w przestrzeni uzytkownika za pomoca gniazd netlink(7). Tabela ARP mozna rowniez zarzadzac za pomoca ioctl(2) lub dowolnego gniazda AF_INET. Modul ARP zarzadza pamiecia podreczna odwzorowan pomiedzy adresami sprzetowymi i adresami protokolu. Pamiec podreczna ma ograniczony rozmiar, wiec stare i rzadko uzywane wpisy sa usuwane. Wpisy oznaczone jako trwale nie sa nigdy usuwane podczas procesu czyszczenia. Mozna manipulowac bezposrednio ta pamiecia podreczna za pomoca kontrolek wejscia/wyjscia (ang. ioctls) a jej zachowanie mozna dostrajac za pomoca opisanych ponizej interfejsow /proc. Gdy dla istniejacego odwzorowania nie ma pozytywnych odpowiedzi, po pewnym czasie (patrz interfejsy /proc ponizej) wpis w pamieci podrecznej dla danego adresu jest uwazany za przestarzaly. Pozytywna odpowiedz moze zostac odebrana od wyzszej warstwy; na przyklad jako pozytywne potwierdzenie TCP. Inne protokoly moga sygnalizowac postepy w polaczeniu za pomoca znacznika MSG_CONFIRM w sendmsg(2). Gdy nie ma postepow w polaczeniu, ARP probuje probkowac ponownie. Najpierw probuje odpytac o zaktualizowany adres MAC app_solicit razy lokalnego demona ARP. Gdy to sie nie powiedzie, a stary adres jest znany, to dokonywane jest ucast_solicit razy probkowanie pojedyncze. Gdy to sie rowniez nie powiedzie, wysylane jest w siec nowe zapytanie rozgloszeniowe ARP. Zapytania sa wysylane jedynie wtedy, gdy w kolejce do wyslania czekaja jakies dane. Linux automatycznie dodaje nietrwale wpisy proxy arp po otrzymaniu zapytania dotyczacego adresu, dla ktorego sa przekazywane pakiety, o ile dla interfejsu odbierajacego dany pakiet wlaczono proxy arp. Gdy dla danego celu ustawiona jest droga odrzucajaca pakiety (ang. reject route), wpis proxy arp nie jest dodawany. Kontrolki systemowe (ioctl) Dla wszystkich gniazd AF_INET dostepne sa trzy kontrolki wejscia/wyjscia. Pobieraja one jako argument wskaznik do struktury struct arpreq. struct arpreq { struct sockaddr arp_pa; /* adres protokolu */ struct sockaddr arp_ha; /* addres sprzetowy */ int arp_flags; /* znaczniki */ struct sockaddr arp_netmask; /* maska sieciowa adresu protokolu */ char arp_dev[16]; }; SIOCSARP, SIOCDARP i SIOCGARP odpowiednio ustawiaja, usuwaja i pobieraja odwzorowanie ARP. Ustawianie i usuwanie odwzorowan ARP jest operacja uprzywilejowana i moze zostac wykonane jedynie przez proces z ustawionym znacznikiem CAP_NET_ADMIN lub posiadajacy efektywny UID rowny 0. arp_pa musi byc adresem AF_INET, a arp_ha musi byc tego samego typu, co urzadzenie podane w arp_dev. arp_dev jest zakonczonym znakiem NULL lancuchem stanowiacym nazwe urzadzenia. +----------------------------------------------------------+ | arp_flags | +----------------------------+-----------------------------+ |znacznik | znaczenie | +----------------------------+-----------------------------+ |ATF_COM | Zapytanie zakonczone | +----------------------------+-----------------------------+ |ATF_PERM | Wpis trwaly | +----------------------------+-----------------------------+ |ATF_PUBL | Wpis publikacji | +----------------------------+-----------------------------+ |Zazadano danych koncowych | Zazadano danych koncowych | +----------------------------+-----------------------------+ |ATF_NETMASK | Uzywanie maski sieci | +----------------------------+-----------------------------+ |ATF_DONTPUB | Nie odpowiadac | +----------------------------+-----------------------------+ Gdy ustawiony jest znacznik ATF_NETMASK, to arp_netmask powinno byc prawidlowe. Linux 2.2 nie wspiera wpisow proxy ARP dla sieci, wiec nalezy to ustawic na 0xffffffff lub 0, aby usunac istniejacy wpis ARP. ATF_USETRAILERS jest przestarzale i nie powinno byc uzywane. Interfejsy /proc ARP wspiera interfejsy /proc, pozwalajace konfigurowac parametry globalne lub lokalne - dla podanego interfejsu. Dostep do tych interfejsow mozna uzyskac odczytujac i zapisujac pliki /proc/sys/net/ipv4/neigh/*/*. Kazdy interfejs w systemie ma swoj wlasny katalog w /proc/sys/net/ipv4/neigh/. Ustawienia w katalogu "default" sa uzywane dla wszystkich nowo tworzonych urzadzen. Jesli nie podano inaczej, wszystkie wartosci interfejsow zwiazanych z czasem sa podawane w sekundach. anycast_delay (od Linuksa 2.2) Maksymalna liczba jiffies oczekiwania przed odpowiedzeniem na komunikat zaproszenia sasiada IPv6. Obsluga anycast nie jest jeszcze zaimplementowana. Domyslnie 1 sekunda. app_solicit (od Linuksa 2.2) Maksymalna liczba prob wysylania demonowi ARP przestrzeni uzytkownika poprzez netlink przed przejsciem do prob multicast (patrz mcast_solicit). Domyslnie 0. base_reachable_time (od Linuksa 2.2) Kiedy tylko sasiad zostanie znaleziony, wpis jest uwazany za wazny przez co najmniej losowa wartosc czasu pomiedzy base_reachable_time/2 a 3*base_reachable_time/2. Waznosc wpisu moze byc przedluzona, jezeli otrzyma on takie wskazowki z protokolow wyzszego poziomu. Domyslnie 30 sekund. Plik jest obecnie przestarzaly, zamiast niego prosimy uzywac base_reachable_time_ms. base_reachable_time_ms (od Linuksa 2.6.12) Tak jak base_reachable_time, ale czas jest wyrazany w milisekundach. Domyslna wartoscia jest 30000 milisekund. delay_first_probe_time (od Linuksa 2.2) Oczekiwanie przed pierwsza proba po tym, jak sasiad zostal uznany za niedostepny. Domyslnie 5 sekund. gc_interval (od Linuksa 2.2) Jak czesto powinien sie uruchamiac proces oczyszczania smieci z listy wpisow o sasiadach. Domyslnie 30 sekund. gc_stale_time (od Linuksa 2.2) Okresla, jak czesto nalezy sprawdzac wpisy o niedostepnych sasiadach. Kiedy sasiad zostanie uznany za niedostepnego, jest on ponownie sprawdzany przed proba wyslania danych do niego. Domyslnie 60 sekund. gc_thresh1 (od Linuksa 2.2) Minimalna liczba wpisow przechowywanych w buforze ARP. Proces czyszczenia starych wpisow nie uruchomi sie, jezeli bufor zawiera mniej wpisow niz podana tutaj wartosc. Domyslnie 128. gc_thresh2 (od Linuksa 2.2) Miekka maksymalna liczba wpisow trzymanych w buforze ARP. Proces czyszczenia smieci pozwoli przekroczyc te liczbe wpisow na 5 sekund przed rozpoczeciem czyszczenia. Domyslnie 512. gc_thresh3 (od Linuksa 2.2) Twarda maksymalna liczba wpisow przechowywanych w buforze ARP. Proces czyszczenia smieci zawsze sie uruchomi, jesli bufor zawiera wiecej wpisow niz wynosi ta liczba. Domyslnie 1024. locktime (od Linuksa 2.2) Minimalna liczba jiffies, przez ktora wpis ARP bedzie przechowywany w buforze. Zabezpiecza to bufor ARP przed zabiciem, jezeli jest wiecej niz jedno mozliwe mapowanie (z powodu zlej konfiguracji sieci). Domyslnie 1 sekunda. mcast_solicit (od Linuksa 2.2) Maksymalna liczba prob rozwiazywania adresu za pomoca multicast/broadcast przed zaznaczeniem wpisu jako niedostepny. Domyslnie 3. proxy_delay (od Linuksa 2.2) Kiedy otrzymano zadanie ATP dla znanego adresu proxy-ARP, to poczekaj proxy_delay jiffies przed wyslaniem odpowiedzi. Jest to uzywane, aby zapobiec zalaniu sieci zadaniami w pewnych przypadkach. Domyslnie 0.8 sekundy. proxy_qlen (od Linuksa 2.2) Maksymalna liczba pakietow, ktore moga byc zakolejkowane w adresie proxy-ARP. Wartosc domyslna to 64. retrans_time (od Linuksa 2.2) Liczba jiffies oczekiwania przed ponowna transmisja zadania. Domyslnie 1 sekunda. Plik jest obecnie przestarzaly, zamiast niego prosimy uzywac retrans_time_ms. retrans_time_ms (od Linuksa 2.6.12) Liczba milisekund oczekiwania przed ponowna transmisja zadania. Domyslnie 1000 milisekund. ucast_solicit (od Linuksa 2.2) Maksymalna liczba prob wyslania zadan unicast przed zapytaniem demona ARP (patrz app_solicit). Domyslnie 3. unres_qlen (od Linuksa 2.2) Maksymalna liczba pakietow, ktore moga byc kolejkowane przez inne warstwy sieci dla kazdego nierozwiazanego adresu. Domyslnie 3. WERSJE W Linuksie 2.0 zmieniono struct arpreq, dodajac pole arp_dev oraz jednoczesnie zmieniono numery kontrolek wejscia/wyjscia. W Linuksie 2.2 porzucono wsparcie dla starych kontrolek wejscia/wyjscia. W Linuksie 2.2 porzucono wsparcie dla wpisow proxy ARP dla sieci (maska sieci inna niz 0xffffffff). Zostalo ono zastapione przez automatyczna konfiguracje proxy ARP w jadrze dla wszystkich komputerow osiagalnych na innych interfejsach (gdy dla danego interfejsu wlaczone sa przekazywanie pakietow i proxy ARP). Interfejsy neigh/* nie istnialy w Linuksie przed wersja 2.2. USTERKI Niektore ustawienia timera sa podawane w jednostkach jiffy, ktore sa zalezne od architektury i wersji jadra; patrz takze time(7). Nie ma mozliwosci zasygnalizowania postepow w polaczeniu z przestrzeni uzytkownika. Oznacza to, ze protokoly polaczeniowe zaimplementowane w przestrzeni uzytkownika beda generowac nadmierny ruch ARP, gdyz ndisc bedzie dokonywal regularnego probkowania adresow MAC. Ten sam problem dotyczy niektorych protokolow jadra (np. NFS-u po UDP). Ta strona podrecznika miesza ze soba funkcje charakterystyczne dla IPv4 z funkcjami wspolnymi dla IPv4 i IPv6. ZOBACZ TAKZE capabilities(7), ip(7), arpd(8) RFC 826 do opisu ARP. RFC 2461 dla opisu znajdywania sasiadow w IPv6 oraz podstawowych stosowanych w tym celu algorytmow. ARP IPv4 w Linuksie 2.2+ uzywa algorytmow IPv6 tam gdzie jest to celowe. TLUMACZENIE Autorami polskiego tlumaczenia niniejszej strony podrecznika sa: Andrzej Krzysztofowicz , Robert Luberda i Michal Kulach Niniejsze tlumaczenie jest wolna dokumentacja. Blizsze informacje o warunkach licencji mozna uzyskac zapoznajac sie z GNU General Public License w wersji 3 lub nowszej. Nie przyjmuje sie ZADNEJ ODPOWIEDZIALNOSCI. Bledy w tlumaczeniu strony podrecznika prosimy zglaszac na adres listy dyskusyjnej . Linux man-pages 6.06 31 pazdziernika 2023 r. arp(7)