Sistemi e Reti Anno 4 Modulo 2 Lezione 06 - ARP, NDP e Default Gateway
Sistemi e Reti · Anno 4 · Modulo 2 · Lezione 06
✍ Autore: profgiagnotti · Materia: Sistemi e Reti

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.

// obiettivi di apprendimento
✓Spiegare il ruolo di ARP nella risoluzione IP → MAC e descrivere il flusso Request / Reply con broadcast e unicast
✓Comprendere il formato del pacchetto ARP (EtherType 0x0806) e le varianti Gratuitous ARP e Proxy ARP
✓Descrivere NDP come sostituto di ARP in IPv6: messaggi ICMPv6, Neighbor Solicitation/Advertisement e solicited-node multicast
✓Spiegare il ruolo del default gateway e l'algoritmo di decisione dell'host per la comunicazione inter-subnet
✓Analizzare ARP cache e neighbor cache, interpretare stati REACHABLE/STALE e riconoscere ARP poisoning e DAD

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.

📌 Definizione da ricordare

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.

LIVELLO 3 – IP Ho 192.168.1.20 destinazione MA CHI È IL MAC? Serve ARP / NDP RISOLUZIONE IPv4 → ARP Broadcast FF:FF:FF:FF:FF:FF IPv6 → NDP / ICMPv6 Solicited-node multicast LIVELLO 2 – FRAME Dest MAC: AA:BB:CC... Src MAC: 11:22:33... EtherType 0x0800 / 0x86DD Invio sul mezzo fisico
🎯 Esempio in classe

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

💬 Tip del docente

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

TIMELINE · ARP REQUEST/REPLY
Host A (192.168.1.10, AA:BB:CC:11:22:33) Host B (192.168.1.20, DD:EE:FF:44:55:66) | | |--- 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" | Oper=1, THA=00:00:00:00:00:00 | | | |<-- ARP Reply (unicast) ------------------------| "Sono io! MAC è DD:EE:FF:44:55:66" | Dest MAC: AA:BB:CC:11:22:33 | | | [salva in ARP cache REACHABLE] | | | |=== Frame Ethernet corretto: Dest DD:EE:FF ==> |

Formato del pacchetto ARP

ARP è incapsulato direttamente in Ethernet con EtherType = 0x0806 — non è IP!

CampoByteValore tipico / Significato
Hardware Type (HTYPE)20x0001 = Ethernet
Protocol Type (PTYPE)20x0800 = IPv4
Hardware Length (HLEN)16 (byte MAC)
Protocol Length (PLEN)14 (byte IPv4)
Operation (OPER)21 = Request, 2 = Reply
Sender Hardware Address (SHA)6MAC mittente
Sender Protocol Address (SPA)4IP mittente
Target Hardware Address (THA)6MAC destinazione (00:00:00:00:00:00 nella Request)
Target Protocol Address (TPA)4IP 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.

BASH · ARP CACHE
# Linux — moderna ip neigh show # 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# legacy arp -a # Windows arp -a # svuota (richiede admin) # Linux ip neigh flush all # Windows netsh interface ip delete arpcache
VARIANTE · 01

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.

VARIANTE · 02

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.

PERFORMANCE · 03

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.

⚠️ Sicurezza — ARP Poisoning / Spoofing

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

📌 Definizione formale NDP

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).

MessaggioICMPv6 TypeFunzione e dettaglio
Router Solicitation (RS)133Host appena connesso chiede ai router di annunciarsi. Destinazione FF02::2 (all-routers). Simile a DHCP? No, chiede solo prefisso.
Router Advertisement (RA)134Annuncio 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)135Equivalente ARP Request: “Chi ha 2001:db8::20?”. Inviato a solicited-node multicast, non broadcast.
Neighbor Advertisement (NA)136Equivalente ARP Reply: unicast (o multicast) con proprio MAC. Flag: Router, Solicited, Override.
Redirect137Router avvisa host che esiste next-hop migliore per destinazione (come ICMP Redirect IPv4 ma più sicuro).
ARP IPv4 - BROADCAST A B C D FF:FF:FF:FF:FF:FF disturba TUTTI Inefficiente ❌ NDP IPv6 - SOLICITED-NODE MULTICAST A B ✓ C D FF02::1:FFxx:xxxx → solo nodi interessati Efficiente ✅ risparmia CPU

Solicited-Node Multicast

// calcolo solicited-node

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.

TERMINALE · VERIFICA NDP LINUX
ip -6 neigh show # fe80::1 dev eth0 lladdr aa:bb:cc:dd:ee:ff router REACHABLE # 2001:db8::20 dev eth0 lladdr 11:22:33:44:55:66 STALE# ascolto RA rdisc6 eth0 # debug NDP tcpdump -i eth0 icmp6 and 'ip6[40] >= 133 and ip6[40] <= 137'

4. Default Gateway: decisione dell'host e configurazione

📌 Default gateway — definizione

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.

PSEUDOCODICE · ALGORITMO HOST
SE (IP_destinazione AND subnet_mask) == (IP_mio AND subnet_mask) ALLORA → stessa subnet → usa ARP/NDP per MAC di IP_destinazione → invia frame direttamente ALTRIMENTI → fuori subnet → usa ARP/NDP per MAC del DEFAULT GATEWAY → invia frame al gateway (IP dest rimane finale)
HOST A 192.168.1.10/24 GATEWAY 192.168.1.1 / 10.0.0.1 ROUTER 2 SERVER B 8.8.8.8 Dest IP 8.8.8.8 Dest MAC GW IP 8.8.8.8 intatto, MAC riscritto Internet...

Configurazione 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 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
// gateway in IPv6 via NDP

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

CaratteristicaARP (IPv4)NDP (IPv6)
Protocollo baseIndipendente (EtherType 0x0806)ICMPv6 (integrato in IPv6)
ScopertaBroadcastMulticast solicited-node (solo interessati)
RisoluzioneRequest / ReplyNS / NA type 135/136
Scoperta routerNon previstaRS / RA type 133/134
DuplicatiNon rilevati autoDAD (NS con src ::)
SicurezzaNessuna (spoofing facile)SEND RFC 3971 opzionale, più robusto
💬 Trucco per interrogazione

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

  1. Su Linux esegui ip neigh show prima e dopo un ping 192.168.1.1. Cosa cambia nello stato?
  2. Cattura con Wireshark filtro arp e identifica HTYPE, OPER, SHA, SPA, THA, TPA. Poi filtro icmpv6.type==135 || icmpv6.type==136 per NDP.
  3. Simula Gratuitous ARP: arping -U -I eth0 192.168.1.10. Verifica su altro PC la cache.
  4. Disabilita RA su router lab e verifica perdita gateway IPv6 con ip -6 route. Riabilita e osserva ricomparsa.
QUIZ · CHECK
1. Perché THA è 00:00:00:00:00:00 nella Request? 2. Cosa succede se elimini la cache prima di ogni invio? Sovraccarico broadcast? 3. Calcola solicited-node per 2001:db8::abcd:1234 4. Host 10.0.0.5/24 pinga 10.0.0.20: usa ARP diretto o gateway? E se pinga 10.0.1.5? 5. Spiega DAD packet: src IP, dst IP, tipo ICMPv6.
✅ Soluzione ragionata (estratto)

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.

✓ARP (RFC 826) risolve IP→MAC con broadcast Request e unicast Reply. Solo stessa subnet, EtherType 0x0806, cache con TTL visualizzabile con ip neigh show.
✓ARP cache: evita broadcast ripetuti; stati REACHABLE/STALE; Gratuitous ARP aggiorna vicini ma abilita ARP poisoning (MITM) senza DAI.
✓NDP (RFC 4861) sostituisce ARP in IPv6 con ICMPv6: usa solicited-node multicast (FF02::1:FFxx:xxxx) invece di broadcast → efficiente, meno interruzioni.
✓NDP include RS/RA (scoperta router e SLAAC), DAD (NS src :: per rilevamento duplicati) e Redirect tipo 137.
✓Default gateway: router nella stessa subnet per uscire; host decide con AND IP+mask; IP resta end-to-end, MAC riscritto ad ogni hop; in IPv6 RA con Router Lifetime >0 = candidato GW.

📚 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.