Andrea Beggi

To a man with a hammer, everything looks like a nail.

TCP in pillole: ARP

A T T E N Z I O N E ! Questo post ha piu' di sei mesi. Le informazioni contenute potrebbero non essere aggiornate.

Le informazioni su di una rete viaggiano sotto forma di pacchetti; per essere recapitato, ciascun pacchetto deve avere un indirizzo di destinazione fisica (MAC).
Il Media Access Control address è un codice a 48 bit che viene assegnato in maniera univoca a ciascuna scheda di rete prodotta. Dovrebbe essere unico, ma mi è già capitato di trovare due schede con lo stesso indirizzo, cosa che in teoria dovrebbe essere impossibile.
Il MAC address viene usato per identificare gli host nello strato di collegamento (layer 2) dello stack TCP/IP, ed è l’ultimo dato “logico”, subito prima dello strato del collegamento fisico/elettrico, cioè il cavo ed il connettore (layer 1).
In pratica, nella “cascata” della comunicazione TCP/IP, prima un nome host viene convertito in un indirizzo IP dal servizio DNS, successivamente l’IP viene convertito in un indirizzo MAC dal servizio ARP (Address Resolution Protocol), per identificare “fisicamente” l’host di destinazione.
ARP è definito nella RFC 826, ed è un processo concettualmente molto semplice.

Per instaurare la comunicazione l’host deve stabilire come prima cosa se il destinatario si trova sulla stessa rete (locale) o è su una rete remota. Questo viene determinato dall’accoppiamento della propria subnet mask con l’indirizzo dell’host di destinazione. (Si tratta di capire la logica delle maschere di sottorete, che non viene trattata qui.)

Quando un host deve comunicare con un altro host su un segmento di rete locale, avvengono i seguenti passaggi:

  1. L’host chiamante controlla la propria cache ARP per controllare se dispone già del dato.
  2. Se la voce non viene trovata, il chiamante prepara un pacchetto ARP con cui chiede all’host destinatario di fornirgli il suo indirizzo IP. Già che c’è ci mette dentro anche i suoi indirizzi IP e MAC, in modo che il ricevente possa aggiornare la propria cache. Questo pacchetto viene inviato all’indirizzo di broadcast, quindi tutti gli host della rete lo esamineranno.
  3. Ciascun host controlla il pacchetto per vedere se il destinatario corrisponde al proprio indirizzo IP; in caso negativo il pacchetto viene ignorato. Se corrisponde, il destinatario aggiorna i dati della propria cache e prepara a sua volta un pacchetto di risposta con i propri IP e MAC e lo manda al mittente.
  4. L’host che ha chiamato aggiorna la cache e a questo punto l’IP è risolto e le comunicazioni possono iniziare.

Se il destinatario si trova sui di una rete remota il processo è diverso.

  1. Il mittente controlla la propria configurazione TCP/IP e ne ricava l’indirizzo del proprio default gateway. (Ammesso che sia definito, ma delle route statiche non parliamo).
  2. Con lo stesso metodo visto prima ARP risolve l’indirizzo IP del gateway, e gli manda il pacchetto per il destinatario.
  3. Il gateway esamina il pacchetto. Se “conosce” la rete verso la quale il pacchetto è destinato (cioè una delle sue interfacce è attestata su quella rete), controlla la sua cache ARP per risolvere l’IP di destinazione. In caso diverso, controlla la sua tabella di routing per determinare a quale router passare i dati, ed anche in questo caso risolve l’IP del router via ARP.
  4. La catena si propaga attraverso i router finché uno di questi non scopre che il destinatario si trova sulla sua rete locale.
  5. Finalmente il vero destinatario del pacchetto restituisce all’ultimo router il pacchetto con il proprio IP e MAC, e la catena ritorna al mittente originale, che è in grado di avviare la comunicazione.

Tutto il processo è detto di “proxy ARP” perché ciascun router fa da proxy per le richieste.

In pratica quando si risolve un indirizzo IP locale si ottiene il vero MAC del destinatario, se invece l’indirizzo è remoto, si ottiene il MAC del gateway. Sarà cura dei router lungo la strada modificare il pacchetto sostituendo di volta in volta il MAC di destinazione con il proprio.

Potete esaminare la cache ARP del vostro computer con il comando arp -a, e verificate come essa si aggiorni se pingate un host che non appare.
Il comando arp viene usato ormai solo per scopi diagnostici o, in rari casi, per settare l’indirizzo IP di dispositivi di cui sia noto solo il MAC address, vediamo come si fa:
Cancellate la cache ARP con arp -d, aggiungete una voce statica alla cache con arp -s ind_IP MAC_address, pingate per parecchio tempo ind_IP. Questo dovrebbe assegnare al dispositivo l’IP specificato.

Riferimenti:

5 Commenti

fullo | #

sono un po’ OT.. come mai questa devolution alla vecchia versione tecnica del blog? stanco del cazzeggio? 😉

bob desnos | #

nn sono un tecnico del ramo
ogni volta che cmq rileggo queste cose penso
che quando furono ideate il mondo aveva in se qualcosa
buono e semplice tutto funziona come alla citt dei balocchi
forse aumentata la complessit
ma ora lo percepisco tenuto insieme da dello scoch
di infima marca
schede con lo stesso mac nn fanno che aumentare l idea
che dietro a tutte queste regole ci sia tanto pressapoco
termometro della vera realt umana
tutto apparenza

Andrea | #

Bob, il TCP/IP una delle creazioni pi belle ed eleganti dell’ingegno umano. Poi che due schede possano avere un MAC sbagliato ci sta, nell’ordine delle cose.