ARP, NDP e default gateway

// obiettivi di apprendimento
Spiegare il ruolo di ARP nella risoluzione indirizzo IP → MAC e descriverne il funzionamento con Request e Reply
Comprendere il formato del pacchetto ARP e le varianti (Gratuitous ARP, Proxy ARP)
Descrivere NDP come sostituto di ARP in IPv6 e il meccanismo Neighbor Solicitation/Advertisement
Spiegare il ruolo del default gateway nella comunicazione inter-subnet
📄
Slides
Schema ARP, NDP e tabella gateway

Il problema: da IP a MAC

Quando un host vuole inviare un pacchetto IP a un altro host nella stessa subnet, lo stack di rete si trova di fronte a un problema: conosce l’indirizzo IP della destinazione (livello 3), ma il livello 2 (Ethernet) ha bisogno dell’indirizzo MAC per costruire il frame.

Chi fornisce questo “traduttore”? Per IPv4 ci pensa ARP. Per IPv6, un meccanismo più moderno integrato in NDP.

// definizione formale
ARP (Address Resolution Protocol) — RFC 826 (1982) — è il protocollo che permette di scoprire l’indirizzo MAC associato a un indirizzo IP nella stessa rete locale. Opera tra livello 2 e livello 3 e lavora esclusivamente all’interno di un singolo segmento di rete (broadcast domain).

Come funziona ARP

Il meccanismo è semplice: l’host che vuole conoscere il MAC corrispondente a un IP fa una domanda a tutti sul segmento (broadcast), e l’host con quell’IP risponde direttamente (unicast).

// flusso ARP — esempio
Host A (192.168.1.10)                 Host B (192.168.1.20)
        |                                      |
        |--- ARP Request (broadcast) --------->|  "Chi ha 192.168.1.20?
        |    Dest MAC: FF:FF:FF:FF:FF:FF        |   Rispondimi ad AA:BB:CC:11:22:33"
        |                                      |
        |<-- ARP Reply (unicast) --------------|  "Sono io! Il mio MAC è
        |    Dest MAC: AA:BB:CC:11:22:33        |   DD:EE:FF:44:55:66"
        |                                      |
   [salva in ARP cache]                        |
        |                                      |
        |=== Frame Ethernet con MAC corretto ==>|

Formato del pacchetto ARP

ARP è incapsulato direttamente in un frame Ethernet con EtherType = 0x0806.

CampoByteValore tipico / Significato
Hardware Type (HTYPE)20x0001 = Ethernet
Protocol Type (PTYPE)20x0800 = IPv4
Hardware Address Length (HLEN)16 (byte MAC address)
Protocol Address Length (PLEN)14 (byte IPv4 address)
Operation (OPER)21 = Request, 2 = Reply
Sender Hardware Address (SHA)6MAC del mittente
Sender Protocol Address (SPA)4IP del mittente
Target Hardware Address (THA)6MAC del destinatario (00:00:00:00:00:00 nella Request)
Target Protocol Address (TPA)4IP del destinatario (quello che vogliamo risolvere)

La ARP cache

Fare un broadcast per ogni pacchetto sarebbe inefficiente. Ogni host mantiene una ARP cache (o ARP table): un dizionario temporaneo che associa IP → MAC. Le voci hanno un TTL (tipicamente 10–20 minuti su Windows/Linux, variabile per sistema).

# Linux — visualizzare la ARP cache
ip neigh show
# oppure (legacy)
arp -a

# Output tipico:
# 192.168.1.1 dev eth0 lladdr aa:bb:cc:dd:ee:ff REACHABLE
# 192.168.1.20 dev eth0 lladdr 11:22:33:44:55:66 STALE

Lo stato REACHABLE indica che il MAC è stato confermato di recente; STALE significa che la voce è scaduta e verrà riconfermata al prossimo utilizzo.

Varianti di ARP

GRATUITOUS ARP

Un host invia una ARP Request dove TPA = SPA (chiede il MAC del proprio stesso IP). Nessuno risponde, ma tutti aggiornano la propria ARP cache con il nuovo MAC. Usato al boot, dopo failover, per aggiornare le cache dei vicini. Purtroppo è anche la base dell’ARP poisoning.

PROXY ARP

Un router risponde a una ARP Request per conto di un host che si trova su una subnet diversa, usando il proprio MAC. Il mittente pensa di comunicare direttamente con la destinazione, mentre in realtà il traffico passa per il router. Soluzione legacy, oggi raramente usata.

// sicurezza — ARP poisoning / ARP spoofing

ARP non ha nessun meccanismo di autenticazione. Un attaccante può inviare risposte ARP false (Gratuitous ARP malevoli) per associare il proprio MAC all’IP del gateway o di un altro host. Tutto il traffico viene così dirottato attraverso l’attaccante: Man-in-the-Middle attack. Contromisure: Dynamic ARP Inspection (DAI) sugli switch managed, ARP static entries per i dispositivi critici.

NDP — Neighbor Discovery Protocol (IPv6)

In IPv6, ARP non esiste. Le sue funzioni sono svolte da NDP (Neighbor Discovery Protocol), definito da RFC 4861. NDP è più sofisticato: usa messaggi ICMPv6 (non pacchetti ARP separati) e sfrutta il multicast invece del broadcast, riducendo significativamente il traffico sulla rete.

// definizione formale
NDP (RFC 4861) è un protocollo IPv6 che, usando messaggi ICMPv6, svolge le funzioni di: risoluzione indirizzo (ARP in IPv4), scoperta dei router, autoconfigurazione degli indirizzi (SLAAC), rilevamento di indirizzi duplicati (DAD) e rilevamento di router irraggiungibili.

I 5 tipi di messaggi NDP

MessaggioICMPv6 TypeFunzione
Router Solicitation (RS)133Un host appena connesso chiede ai router del segmento di annunciarsi. Inviato a FF02::2 (all-routers).
Router Advertisement (RA)134Il router si annuncia periodicamente (o in risposta a RS). Contiene: prefisso di rete, flag SLAAC/DHCPv6, MTU, hop limit predefinito, lifetime del router.
Neighbor Solicitation (NS)135Equivalente di ARP Request. “Chi ha questo IPv6? Dimmi il tuo MAC.” Inviato all’indirizzo solicited-node multicast della destinazione.
Neighbor Advertisement (NA)136Equivalente di ARP Reply. Risposta unicast (o multicast) con il proprio MAC address.
Redirect137Un router informa un host che esiste un percorso migliore per una destinazione (come ICMP Redirect in IPv4).

Solicited-Node Multicast Address

Il vantaggio chiave di NDP rispetto ad ARP è l’uso del solicited-node multicast invece del broadcast. Invece di disturbare tutti i dispositivi sulla rete, un NS raggiunge solo i nodi che condividono gli stessi ultimi 24 bit dell’indirizzo IP.

// calcolo solicited-node multicast

Prefisso fisso: FF02::1:FF00:0000/104

Si aggiungono gli ultimi 24 bit (6 cifre hex) dell’indirizzo IPv6 di destinazione.

Esempio: Target = 2001:DB8::1:A2B3:C4D5

→ Solicited-node multicast = FF02::1:FFB3:C4D5

DAD — Duplicate Address Detection

Prima di usare un nuovo indirizzo IPv6 (globale o link-local), un host invia un NS con Source Address = :: (non specificato) verso il solicited-node multicast del proprio indirizzo. Se nessuno risponde entro il timeout, l’indirizzo è libero. Se arriva un NA, l’indirizzo è già in uso → l’host lo segna come TENTATIVE → FAILED.

Il Default Gateway

Tutti i meccanismi che abbiamo visto (ARP, NDP) funzionano solo all’interno della stessa subnet. Ma cosa succede quando un host vuole comunicare con un indirizzo IP che appartiene a una rete diversa?

// definizione formale
Il default gateway è l’indirizzo IP di un router che ha un’interfaccia nella stessa subnet dell’host. Quando la destinazione non appartiene alla rete locale, l’host invia il pacchetto al default gateway, che si occuperà di instradarlo verso la destinazione.

Il processo di decisione dell’host

Quando un host deve inviare un pacchetto a IP_destinazione, esegue questa logica:

// algoritmo di forwarding dell’host
  SE (IP_destinazione AND subnet_mask) == (IP_mio AND subnet_mask)
      ALLORA → destinazione nella mia subnet
               → usa ARP per trovare il MAC di IP_destinazione
               → invia il frame direttamente

  ALTRIMENTI → destinazione fuori dalla mia subnet
               → usa ARP per trovare il MAC del DEFAULT GATEWAY
               → invia il frame al gateway (che poi instrada in avanti)

Nota bene: l’indirizzo IP nel pacchetto rimane quello della destinazione finale (non cambia mai attraverso la rete, salvo NAT). Quello che cambia ad ogni hop è il MAC address di destinazione nel frame Ethernet: ogni router riscrive i MAC per il segmento successivo.

Configurazione del default gateway

SistemaComando
Linux (visualizza)ip route show oppure ip route | grep default
Linux (imposta)ip route add default via 192.168.1.1
Windows (visualizza)ipconfig /all o route print
Windows (imposta)route add 0.0.0.0 mask 0.0.0.0 192.168.1.1
Cisco IOSip default-gateway 192.168.1.1 (su switch L2)
// default gateway in IPv6

In IPv6 il default gateway viene comunicato automaticamente dai Router Advertisement (NDP). Ogni RA contiene il Router Lifetime e il prefisso: se il lifetime è > 0, il router che ha inviato l’RA diventa un candidato default gateway. L’host può avere più default gateway e sceglie in base alle preferenze annunciate.

Riepilogo ARP vs NDP

CaratteristicaARP (IPv4)NDP (IPv6)
Protocollo baseProtocollo indipendente (EtherType 0x0806)ICMPv6 (integrato in IPv6)
Meccanismo di scopertaBroadcastMulticast solicited-node (solo i nodi interessati)
Risoluzione indirizzoARP Request / ARP ReplyNS / NA (ICMPv6 type 135/136)
Scoperta routerNon prevista (usa ICMP Router Discovery)RS / RA (ICMPv6 type 133/134)
Indirizzi duplicatiNon rilevati automaticamenteDAD (NS con source ::)
SicurezzaNessuna (vulnerabile a spoofing)SEcure ND (SEND, RFC 3971) opzionale
📌 Riepilogo — Punti chiave
  • ARP (RFC 826) risolve IP → MAC con un broadcast (Request) e una risposta unicast (Reply). Funziona solo nella stessa subnet.
  • La ARP cache memorizza temporaneamente le associazioni IP/MAC per evitare broadcast ripetuti. Visualizzabile con ip neigh show.
  • Gratuitous ARP aggiorna la cache dei vicini, ma è anche la base dell’ARP poisoning (MITM attack).
  • NDP (RFC 4861) sostituisce ARP in IPv6 usando ICMPv6. Usa il multicast solicited-node invece del broadcast: molto più efficiente.
  • NDP include anche: scoperta router (RS/RA), rilevamento indirizzi duplicati (DAD) e redirect.
  • Il default gateway è il router a cui l’host invia i pacchetti destinati a reti esterne alla propria subnet. L’host decide confrontando IP destinazione e subnet mask.
  • L’indirizzo IP nel pacchetto non cambia attraverso la rete; cambiano i MAC address di destinazione a ogni hop.

Lascia un commento