Protocollo ARP

Questo protocollo si colloca tra il livello di rete e il livello di collegamento (livello sottostante a quello di rete).
Gli host e i router al livello di rete sono identificati dai loro indirizzi IP. Questi ultimi sono di solito implementati a livello software, e devono essere globalmente unici su internet. A livello di collegamento le interfacce che inviano e ricevono frame sono identificati da un indirizzo fisico o indirizzo hardware. Il MAC address è l'indirizzo della scheda di rete del dispositivo. L'indirizzo IP e l'indirizzo MAC sono diversi (hanno lunghezza diversa: MAC = 48 bit, IP = 32 bit).
C'è la necessità di associare l'IP di un dispositivo con il suo indirizzo MAC. Questa operazione viene effettuata da ARP (Address Resolution Protocol). Quando ARP scopre a quale IP appartiene un certo MAC lo salva nella sua cache per un successivo utilizzo. Queste associazioni possono cambiare, dato che un indirizzo IP può essere utilizzato da un diversi host (con MAC diversi). ARP periodicamente aggiorna la sua tabella di associazioni.
Di seguito un indirizzo MAC:
Pasted image 20231011100252.png

Funzionamento di ARP
...

Vediamo come funziona ARP per associare indirizzi IPv4 con i rispettivi MAC.
Si creano 4 situazioni differenti:

  • Da host a host: chi invia richieste ARP è un host e vuole inviare un pacchetto ad un altro host nella stessa rete. In questo caso, l'IP dell'host di destinazione è noto e il suo MAC deve essere trovato.
  • Da host a router: chi invia richieste ARP è un host e vuole inviare pacchetti ad un altro host in una rete differente. Grazie alle tabelle di inoltro viene rilevato l'IP del router. In questo modo l'IP del router è noto e il suo MAC deve essere trovato.
  • Da router a router: chi invia richieste ARP è il router e vuole inoltrare un pacchetto ad un altro router nella stessa rete. Grazie alle tabelle di inoltro viene rilevato l'IP del router. In questo modo l'IP del router di destinazione è noto e il suo MAC deve essere trovato.
  • Da router a host: chi invia richieste ARP è il router e vuole inoltrare un pacchetto ad un host nella stessa rete. L'IP dell'host destinatario è noto (poiché è presente nel campo "destinatario" dell'intestazione del pacchetto IP) e il suo MAC deve essere trovato.

Pasted image 20231011100533.png
La figura illustra un esempio del funzionamento di ARP in una rete interna.
Vi è una LAN ethernet cui sono connesse diverse macchine: lnxclient, bdsserver, wincli2, ecc.
La macchina lnxclient vuole inviare un pacchetto alla macchina winserv2.
lnxclient conosce l'IP di destinazione di winserv2, ma non sa qual è il MAC della sua interfaccia.
Allora lnxclient procede con una ARP request e chiede a tutti (in broadcast) quale fosse il MAC address dell'indirizzo IP con il quale vuole comunicare: 10.10.12.52.
La richiesta (come si vede dalle frecce entranti in ogni host) raggiunge tutti gli host. Al passo 2, l'host winsrv2 riconosce il suo indirizzo IP nella richiesta ARP, allora comunica il suo MAC, ma a chi lo comunica? Lo comunica all'indirizzo sorgente della richiesta ARP. Al passo 3 winsrv2 inoltra il suo MAC address a lnxclient che al passo 4 giunge a chi ha fatto l'ARP request.
Alla fine di questo procedimento, l'host che ha fatto la richiesta salva nella cache l'associazione tra MAC address e IP address.

Altro esempio: A vuole inviare datagrammi a B. A si rende conto di non avere nella sua tabella ARP il MAC di B. A dovrà usare ARP per conoscere questa informazione.
Prima di tutto A invia in boradcast una richiesta ARP. Tale richiesta contiene:

  • l'IP di B
  • MAC di destinazione: FF-FF-FF-FF-FF-FF (tutti i nodi della LAN)
    Pasted image 20231011101448.png
    Ogni sistema periferico che riceve la query ARP si chiede se l'indirizzo IP che possiedono attualmente corrisponde con quello scritto nella query ARP. Quando il dispositivo che ha proprio quell'indirizzo si chiede se ha quell'IP, risponde restituendo il suo MAC.
    Pasted image 20231011101537.png
    A scrive nella sua tabella ARP l'associazione tra il MAC e l'IP di B.
    Pasted image 20231011101547.png
    La prossima volta che A vuole inviare datagrammi a B, non si dovrà effettuare il processo di risoluzione.
    Quindi A la prossima volta prima di inviare il datagramma controlla se i parametri di B (IP e MAC) corrispondono con quelli che ha in tabella ARP. Se tutto corrisponde, consegna il datagramma, altrimenti aggiorna la tabella ARP.
Descrizione pacchetti ARP
...

Pasted image 20231011101650.png
I pacchetti ARP vengono piazzati direttamente dentro un frame a livello di collegamento (come un frame ethernet per esempio).

  • Type of hardware: è un campo di due byte in cui viene specificato il tipo di indirizzo hardware (nella maggior parte dei casi settato a 1 (MAC address)).
  • Type of protocol: anch'esso di due byte identifica il tipo di protocollo su cui è effettuata la query (IPv4 o IPv6).
  • Hardware size: per i MAC è 6 byte.
  • Protocol size: dimensione in byte del protocollo a livello di rete (IPv4 = 4 byte).
  • Operation: identifica il tipo di operazione (1 = query, 2 = reply).
    Il resto dei campi non ha dimensione fissata e sono autoesplicativi a questo punto della trattazione.
    Dopo che l'host sorgente ha ricevuto il MAC corrispondente all'IP a cui vuole inviare il pacchetto, glielo invierà in unicast: ovverò diretto proprio a quell'host.

Come abbiamo detto prima, ci sono quattro casi. ARP è utilizzato sia dagli host che dai router.
Pasted image 20231011101854.png
Questi casi danno ci permettono di distinguere consegne dirette da consegne indirette.
Anzitutto distinguiamo tabelle di routing da tabelle di forwarding: ci sono due tipi di tabelle usate dagli host e dai router.
La tabella di routing contiene tutte le rotte conosciute dal router, ovvero i percorsi che possono essere utilizzati per raggiungere le diverse reti ad esso collegate. Questa tabella viene costruita dal router utilizzando gli algoritmi di routing, che analizzano le informazioni ricevute dai router vicini per determinare i percorsi migliori. In genere le tabelle di routing sono mantenute in un formato user-friendly, come un insieme di tabelle o anche un database.
La tabella di forwarding, invece, contiene solo le rotte che sono state scelte come preferite dagli algoritmi di routing. Questa tabella è più piccola e semplice ed è scritta in linguaggio macchina rispetto alla tabella di routing, e viene utilizzata dal router per instradare i pacchetti in modo rapido ed efficiente.
I router non sono gli unici dispositivi di rete che hanno le tabelle di routing. Anche gli host le hanno. Grazie ad esse gli host sanno quando inviare un pacchetto incapsulato dentro un frame direttamente verso la destinazione (verso un altro host, senza passare dal router) o se inviare il pacchetto (incapsulato in un frame) ad un router in modo che possa essere inoltrato verso la sua destinazione.
La consegna diretta è quel tipo di consegna che avviene senza l'utilizzo di un router.
Host invia frame ad un host che fa parte della sua stessa rete.
La consegna indiretta è quel tipo di consegna che avviene grazie all'utilizzo di un router.
Host invia frame ad un router perché l'host di destinazione non fa parte della sua stessa rete.

Come fa a sapere un host se effettuare la consegna diretta o indiretta?

Pasted image 20231011105255.png

  • Consegna diretta: l'host wincli1 vuole inviare un pacchetto nella LAN1 all'host winsrv1. Entrambi sono nella stessa LAN. Quindi il router non è necessario.
    Gli indirizzi IPv4 sono:
    10.10.11.51 per wincli1;
    10.10.11.111 per winsrv1;
    entrambi hanno a stessa maschera di sottorete: 255.255.255.0.
    Quindi entrambi gli indirizzi hanno la stessa porzione di indirizzo IPv4: 10.10.11.0/24.
    Il software nell'host sa che non è necessario un router per gestire un pacchetto inviato da un host sorgente ad un host di destinazione, poiché i loro indirizzi hanno lo stesso prefisso IP.
    Il pacchetto può essere incapsulato dentro un frame e inviato direttamente (consegna diretta) alla destinazione usando il collegamento locale.
    wincli1 conosce il suo MAC address, e se il MAC di winsrv1 non è mappato nella tabella ARP, invia un query ARP in broadcast a cui risponderà solo winsrv1, ritornando il suo MAC.
    Cosa cambia nella consegna indiretta?
  • Consegna indiretta: differentemente dalla consegna diretta dove i pacchetti sono inviati a destinatari nella stessa rete, la consegna indiretta impiega uno o più router per connettere la sorgente e destinazione. Nell'esempio sopra supponiamo che ci siano due router e che un router sia al piano di sopra e l'altro al piano inferiore e che i router siano connessi con un collegamento di tipo PPP (non importante). L'esempio è semplificato, ma vale per host sorgente e destinazione che si trovano a lunga distanza. wincli1 vuole inviare un pacchetto a winsrv2. La sorgente, una volta ottenuto l'IP di destinazione a cui inviare il pacchetto, nota che tale IP non fa parte della sua stessa rete. Il software (IP) quindi sa che l'invio di questo pacchetto deve impiegare almeno un router, e magari tanti altri. È chiamata consegna indiretta perché la destinazione nel pacchetto è l'IP di winsrv2, ma il MAC è quello del router 1 e non quello di wincli1. Come fa wincli1 a conoscere il MAC del router? wincli1 semplicemente guarda le tabelle di routing e cerca l'IP di destinazione, ma non c'è nessuna entry nella tabella che corrisponde con tale indirizzo, quindi il destinatario è esterno e il pacchetto dovrà passare prima dal router. La configurazione di TCP e IP include la configurazione di almeno un gateway (un router in questo caso). In questo esempio il gateway è impostato staticamente (ma potrebbe essere anche impostato dinamicamente DHCP). Il gateway di default è per definizione nella stessa rete. L'IP del gateway viene usato da wincli1 per effettuare la query ARP, per ottenere il suo MAC e inviargli il frame in unicast. Quando arriva il pacchetto al router 1, esso guarda il pacchetto dentro il frame e vede che la destinazione è un host che non è dentro la sua stessa rete. Il next hop è un altro router. Come lo sa router 1? Allo stesso modo di wincli1 compara l'IP di destinazione con gli IP assegnati alle sue interfacce. Esse sono 10.10.11.0/24 e 10.0.99.0./24. La destinazione (winsrv2) ha IP: 10.10.12.0/24 che non appartiene a nessuna delle interfacce assegnate al router 1. Un router può avere molte interfacce e non solo due come in questo esempio. Quale porta di output dovrebbe scegliere per inoltrare il pacchetto? La porzione di indirizzo IP è ricercata nella sua tabella di inoltro, secondo certe politiche per trovare l'IP address del next-hop router e l'interfaccia di output che conduce a questo router. Le politiche secondo cui viene cercato l'IP verranno affrontate successivamente, per adesso assumiamo che il router 1 trova che il next-hop per il pacchetto verso winsrv2 è router 2. router 1 incapsula il pacchetto in un frame PPP e lo invia sull'interfaccia appropriata. Quando il pacchetto giunge al router 2, questo sa che il next-hop per questo pacchetto non è un altro router. Quindi può essere effettuata una consegna diretta a winsrv2 (con eventuali ARP query). In questa fase di consegna da router 2 a winsrv2 il MAC sorgente è quello di router 2 e il MAC di destinazione è quello di winsrv2.
    Il motivo è che il datagramma a livello IP contiene l'IP sorgente e l'IP di destinazione, ma l'invio verso il router 1 viene fatto attraverso il livello di collegamento sotto-forma di frame fisico. Il router 1 prenderà il frame, tirerà fuori il datagramma e saprà l'IP di destinazione contenuto nell'intestazione IP, a questo punto vengono ri-effettuate le operazioni di incapsulamento in frame per inviarlo verso router 2 e dal router2 a winsrv 2.
ARP: gestione degli indirizzi duplicati
...

Cosa succede se due macchine sono configurate con lo stesso IP?
Quando una nuova macchina arriva, il protocollo IP annuncia il suo indirizzo a tutti gli altri host, l'host con lo stesso indirizzo del nuovo arrivato realizza che è stato copiato e risponde annunciando sé stesso. I due indirizzi notificano l'errore e lo riportano sulla console/schermo delle due macchine con una finestra d'errore. D'altro canto, il nuovo arrivato, quando realizza di avere un IP copiato, risponde annunciando sé stesso, ciò si ripete per entrambi gli host, ed entrambi gli host non potranno funzionare se non si interviene correggendo il conflitto di indirizzi.
Quando un host annuncia sé stesso: gratuitous ARP.