Protokół ARP

Materiały edukacyjne z informatyki

Protokół ARP (Adress Resolution Protocol) umożliwia przekształcenia adresów protokołów sieciowych (np. IP) na 48-bitowe adresy ethernetowe (MAC). W przypadku pierwszej transmisji do określonej numerem IP stacji odbiorczej stacja nadawcza wysyła ethernetowy adres rozgłoszeniowy (FF-FF-FF-FF-FF-FF), wraz z numerem IP odbiorcy. Stacja lub router (Proxy-ARP), do którego podłączona jest stacja o szukanym nr IP, odpowiada przez podanie swojego adresu MAC.

Istnieje również protokół odwrotny ARP (Reverse-ARP), używany przez hosty (bezdyskowe stacje rozbocze), które nie mają przypisanych adresów IP. Taka stacja wysyła ramkę rozgłoszeniową, zawierającą jej adres MAC, rozgłoseniowy adres IP (255.255.255.255) oraz adres źródłowy IP (0.0.0.0). Serwer protokołu Reverse-ARP, dysponujący tablicą zawierającą adresy MAC i przypisane im adresy IP, podaje hostowi nr IP, który powinien sobie przydzielić.

Protokół ARP wykorzystywany jest do zapobiegania przydzielania tego samego adresu IP różnym stacjom w sieci lokalnej.

Podczas stosowania protokołu ARP jego pakiety znajdują się zaraz za nagłówkiem Ethernet w polu danych, przy czym w polu długość nagłówka ethernetowego znajduje się wartość 0x0806. W przypadku protokołu IEEE 802.2 pakiet ARP występuje po jego nagłówkach (LLC i SNAP). Protokół ARP wykorzystuje w działaniu ramki rozgłoszeniowe, rozsyłane w tzw. domenie rozgłoszeniowej, którą tworzą wszystkie komputery otrzymujące ramkę typu broadcast.

MAC header ARP header DANE
Format pakietu ARP
Nagł. Ethernet Nagł. ARP
A B C D E F G H I J K L
6B 6B 2B 2B 2B 1B 1B 2B 6B 4B 6B 4B

Pole A zawiera ethernetowy adres przeznaczenia.
Pole B – ethernetowy adres źródłowy.
Pole C określa rodzaj ramki i dla protokołu ARP ma wartość 0x0806.
Pole D dla protokołu IEEE 802.3 ma wartość 6.
Pole E zawiera wartość 0x800 oznaczającą protokół IP.
Pole F określa długość adresu MAC w bajtach, czyli 6.
Pole G określa długość adresu protokołu IP w bajtach, czyli 4.
Pole H może przybierać takie m. in. wartości, jak: 1 – zapytanie (request), 2 – odpowiedź (reply), 3 – odwrotne zapytanie (request reverse), 4 – odpowiedź odwrotna (reply reverse).
Pole I zawiera adres MAC nadawcy.
Pole J – adres IP nadawcy.
Pole K – adres MAC odbiorcy.
Pole L – adres IP odbiorcy.
Przy operacji zapytania ARP (request) pole K jest wyzerowane, w przypadku odpowiedzi (reply) pola I-L są wypełnione.

Polecenia (> – systemy windows, # – systemy Linux):

> arp -a – pokazuje aktualną tablicę translacji ARP
> arp -s 192.168.1.100 00-60-97-ad-8c-99  - ręczne dodanie adresu do tablicy translacji
> arp -d 192.168.1.100  - usunięcie adresu z tablicy
> arp -N 192.168.1.2  - określenie tablicy interfejsu, na którym będziemy dokonywali operacji
# arp -n || ip neigh show  - (zaleca się korzystanie z polecenia ip z pakietu iproute2; przełącznik -n blokuje wyszukiwanie nazw domenowych; flaga M w odpowiedzi oznacza adres dodany statycznie; polecenie ip zwraca nast. wartości w polu nud: stale (niepewny), permanent (wpisane na stałe), noarp (nie obsługuje arp), reachable (osiągalny))
# arp -s 192.168.1.100 00:60:97:ad:8c:99
# ip neigh add 192.168.1.100 lladdr 00:60:97:ad:8c:99 nud permanent dev eth1  - dodanie wpisu
# arp -d 192.168.1.100
# ip neigh del 192.168.1.100 dev eth1  - usunięcie wpisu
# arp-n -i eth1; ip neigh show dev eth1  - wskazywanie interfejsu, na którym dokonujemy operacji
# ip neigh flush dev eth1  - wyczyszczenie wszystkich wpisów w tablicy ARP.