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.
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).
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.
| Campo | Byte | Valore tipico / Significato |
|---|---|---|
| Hardware Type (HTYPE) | 2 | 0x0001 = Ethernet |
| Protocol Type (PTYPE) | 2 | 0x0800 = IPv4 |
| Hardware Address Length (HLEN) | 1 | 6 (byte MAC address) |
| Protocol Address Length (PLEN) | 1 | 4 (byte IPv4 address) |
| Operation (OPER) | 2 | 1 = Request, 2 = Reply |
| Sender Hardware Address (SHA) | 6 | MAC del mittente |
| Sender Protocol Address (SPA) | 4 | IP del mittente |
| Target Hardware Address (THA) | 6 | MAC del destinatario (00:00:00:00:00:00 nella Request) |
| Target Protocol Address (TPA) | 4 | IP 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
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.
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.
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.
I 5 tipi di messaggi NDP
| Messaggio | ICMPv6 Type | Funzione |
|---|---|---|
| Router Solicitation (RS) | 133 | Un host appena connesso chiede ai router del segmento di annunciarsi. Inviato a FF02::2 (all-routers). |
| Router Advertisement (RA) | 134 | Il 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) | 135 | Equivalente di ARP Request. “Chi ha questo IPv6? Dimmi il tuo MAC.” Inviato all’indirizzo solicited-node multicast della destinazione. |
| Neighbor Advertisement (NA) | 136 | Equivalente di ARP Reply. Risposta unicast (o multicast) con il proprio MAC address. |
| Redirect | 137 | Un 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.
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?
Il processo di decisione dell’host
Quando un host deve inviare un pacchetto a IP_destinazione, esegue questa logica:
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
| Sistema | Comando |
|---|---|
| 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 IOS | ip default-gateway 192.168.1.1 (su switch L2) |
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
| Caratteristica | ARP (IPv4) | NDP (IPv6) |
|---|---|---|
| Protocollo base | Protocollo indipendente (EtherType 0x0806) | ICMPv6 (integrato in IPv6) |
| Meccanismo di scoperta | Broadcast | Multicast solicited-node (solo i nodi interessati) |
| Risoluzione indirizzo | ARP Request / ARP Reply | NS / NA (ICMPv6 type 135/136) |
| Scoperta router | Non prevista (usa ICMP Router Discovery) | RS / RA (ICMPv6 type 133/134) |
| Indirizzi duplicati | Non rilevati automaticamente | DAD (NS con source ::) |
| Sicurezza | Nessuna (vulnerabile a spoofing) | SEcure ND (SEND, RFC 3971) opzionale |
- 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.