ARP, NDP e Default Gateway: dalla risoluzione locale al routing oltre la subnet
Come un host trova il MAC di un vicino in IPv4 con ARP, come lo fa in IPv6 con NDP, perché il solicited-node multicast è più efficiente del broadcast e come decide quando usare il default gateway per uscire dalla rete locale.
1. Il problema: da IP a MAC nella stessa subnet
Quando un host vuole inviare un pacchetto IP a un altro host nella stessa subnet, conosce l'IP di destinazione (L3) ma il frame Ethernet (L2) richiede un indirizzo MAC. Serve un traduttore dinamico.
ARP (Address Resolution Protocol) — RFC 826 — risolve IP → MAC con un broadcast di richiesta e una risposta unicast, esclusivamente all'interno del broadcast domain locale.
Per IPv4 ci pensa ARP. Per IPv6, un meccanismo più moderno ed efficiente integrato in NDP.
Host A 192.168.1.10 vuole parlare con 192.168.1.20. Fa AND tra IP e subnet mask /24: entrambi in 192.168.1.0/24 → stessa subnet → serve ARP. Se volesse 8.8.8.8, dopo AND capisce che è fuori subnet → userà il default gateway.
2. ARP: funzionamento, formato pacchetto, cache e varianti
Disegna sempre lo stack: IP non cambia (salvo NAT), MAC riscritto ad ogni hop. In verifica chiedono: “Chi cambia? IP o MAC?” Risposta: cambia il MAC di destinazione.
Flusso Request / Reply
Formato del pacchetto ARP
ARP è incapsulato direttamente in Ethernet con EtherType = 0x0806 — non è IP!
| Campo | Byte | Valore tipico / Significato |
|---|---|---|
| Hardware Type (HTYPE) | 2 | 0x0001 = Ethernet |
| Protocol Type (PTYPE) | 2 | 0x0800 = IPv4 |
| Hardware Length (HLEN) | 1 | 6 (byte MAC) |
| Protocol Length (PLEN) | 1 | 4 (byte IPv4) |
| Operation (OPER) | 2 | 1 = Request, 2 = Reply |
| Sender Hardware Address (SHA) | 6 | MAC mittente |
| Sender Protocol Address (SPA) | 4 | IP mittente |
| Target Hardware Address (THA) | 6 | MAC destinazione (00:00:00:00:00:00 nella Request) |
| Target Protocol Address (TPA) | 4 | IP che vogliamo risolvere |
ARP Cache
Per evitare broadcast continui, ogni host mantiene una cache temporanea IP → MAC con TTL (10–20 min tipici). Stati moderni (Linux ip neigh) : REACHABLE, STALE, DELAY, PROBE.
Gratuitous ARP
Request dove SPA = TPA. Nessuno risponde ma tutti aggiornano cache. Usato al boot, failover, IP move. Base anche per ARP poisoning se malevolo.
Proxy ARP
Router risponde per conto di host in altra subnet usando proprio MAC. Mittente crede destinazione locale, ma traffico passa per router. Legacy, oggi raro.
Perché cache?
Senza cache, ogni pacchetto = broadcast. In /24 con 200 host, 1000 pps vorrebbero dire 1000 broadcast/s: tempesta. Cache riduce a pochi broadcast/min.
ARP non autentica. Attaccante invia Reply false o Gratuitous ARP per associare proprio MAC all'IP del gateway → tutto il traffico passa dall'attaccante: Man-in-the-Middle.
Contromisure: Dynamic ARP Inspection (DAI) su switch L3 con snooping DHCP, entry statiche per gateway (arp -s), monitoraggio con Wireshark filter arp.
3. NDP in IPv6: i 5 messaggi, solicited-node multicast e DAD
NDP (RFC 4861) usando ICMPv6 sostituisce ARP in IPv6 e aggiunge: scoperta router, autoconfigurazione SLAAC, Duplicate Address Detection (DAD), redirect e NUD (Neighbor Unreachability Detection).
| Messaggio | ICMPv6 Type | Funzione e dettaglio |
|---|---|---|
| Router Solicitation (RS) | 133 | Host appena connesso chiede ai router di annunciarsi. Destinazione FF02::2 (all-routers). Simile a DHCP? No, chiede solo prefisso. |
| Router Advertisement (RA) | 134 | Annuncio periodico o su RS: prefisso, flag M/O (SLAAC vs DHCPv6), MTU, hop-limit, Router Lifetime. Se lifetime >0 → candidato default gateway. |
| Neighbor Solicitation (NS) | 135 | Equivalente ARP Request: “Chi ha 2001:db8::20?”. Inviato a solicited-node multicast, non broadcast. |
| Neighbor Advertisement (NA) | 136 | Equivalente ARP Reply: unicast (o multicast) con proprio MAC. Flag: Router, Solicited, Override. |
| Redirect | 137 | Router avvisa host che esiste next-hop migliore per destinazione (come ICMP Redirect IPv4 ma più sicuro). |
Solicited-Node Multicast
Prefisso fisso FF02::1:FF00:0000/104 + ultimi 24 bit (6 hex) dell'IPv6 target.
Esempio: Target = 2001:DB8::1:A2B3:C4D5 → solicited-node = FF02::1:FFB3:C4D5. Solo gli host con quegli ultimi 24 bit sono in ascolto → multicast selettivo, non broadcast.
DAD — Duplicate Address Detection
Prima di usare un nuovo IPv6, host invia NS con Source :: verso il solicited-node del proprio indirizzo. Se arriva NA, indirizzo duplicato → TENTATIVE → FAILED. Se timeout, unico → PREFERRED.
4. Default Gateway: decisione dell'host e configurazione
IP di un router con interfaccia nella stessa subnet dell'host. Se destinazione è fuori subnet, pacchetto inviato al gateway che instrada avanti. IP destinazione non cambia, cambia MAC ad ogni hop.
Configurazione 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 (switch L2) | ip default-gateway 192.168.1.1 |
| Cisco IOS (router L3) | ip route 0.0.0.0 0.0.0.0 192.168.1.1 |
In IPv6 nessun comando manuale se SLAAC attivo: RA contiene Router Lifetime. Se >0, mittente RA diventa candidato default gateway. Host può avere più GW e sceglie per preferenza annunciata. Verifica: ip -6 route show default.
5. Riepilogo ARP vs NDP e flusso dei MAC ad ogni hop
| Caratteristica | ARP (IPv4) | NDP (IPv6) |
|---|---|---|
| Protocollo base | Indipendente (EtherType 0x0806) | ICMPv6 (integrato in IPv6) |
| Scoperta | Broadcast | Multicast solicited-node (solo interessati) |
| Risoluzione | Request / Reply | NS / NA type 135/136 |
| Scoperta router | Non prevista | RS / RA type 133/134 |
| Duplicati | Non rilevati auto | DAD (NS con src ::) |
| Sicurezza | Nessuna (spoofing facile) | SEND RFC 3971 opzionale, più robusto |
Ricorda: IP end-to-end, MAC hop-by-hop. Pacchetto da PC a 8.8.8.8: IP src = 192.168.1.10 dst = 8.8.8.8 per TUTTO il percorso. Nel primo frame: MAC src = PC, MAC dst = gateway. Nel secondo hop: MAC src = gateway, MAC dst = prossimo router, ecc.
6. Laboratorio e verifica
🔬 Attività pratica
- Su Linux esegui
ip neigh showprima e dopo unping 192.168.1.1. Cosa cambia nello stato? - Cattura con Wireshark filtro arp e identifica HTYPE, OPER, SHA, SPA, THA, TPA. Poi filtro
icmpv6.type==135 || icmpv6.type==136per NDP. - Simula Gratuitous ARP:
arping -U -I eth0 192.168.1.10. Verifica su altro PC la cache. - Disabilita RA su router lab e verifica perdita gateway IPv6 con
ip -6 route. Riabilita e osserva ricomparsa.
1. Non conosco MAC target, metto 0. Solo SPA/SHA popolati.
3. Ultimi 24 bit = cd:1234? No: 34:1234? Attenzione ultima sezione: 1234 = 0x12 0x34 → ultime 6 hex = 34:1234? In realtà indirizzo = ...:abcd:1234 → ultime 6 hex = cd:1234? Con prefisso /104 → FF02::1:FFCD:1234.
4. 10.0.0.5 AND /24 = 10.0.0.0, 10.0.0.20 idem → diretta. 10.0.1.5 → 10.0.1.0 ≠ 10.0.0.0 → gateway.
7. Riepilogo e concetti chiave
ip neigh show.📚 Prossimo passo — ICMP, ping, traceroute e configurazione dinamica
Nelle prossime lezioni vedremo come diagnosticare la raggiungibilità con ping, ricostruire il percorso con traceroute e come SLAC e DHCPv6 assegnano automaticamente IP e gateway.
