Cosa fa#
Protocollo IPv6 che sostituisce ARP. Usa ICMPv6 con multicast per trovare il MAC address di un host nella stessa LAN. Piu' efficiente di ARP perche' usa multicast invece di broadcast — solo il dispositivo interessato processa la richiesta.
TL;DR#
ARP (IPv4): broadcast → tutti ricevono e processano
NDP (IPv6): multicast → solo chi ha quell'IP risponde
Stesso problema, soluzione piu' efficiente:
"Qual e' il MAC di questo IPv6?" → Neighbor Solicitation (Type 135)
"Sono io, ecco il mio MAC" → Neighbor Advertisement (Type 136)Confronto ARP vs NDP#
ARP (IPv4) NDP (IPv6)
Protocollo ARP (Layer 2/3) ICMPv6 (Layer 3)
Trasmissione Broadcast Multicast
Indirizzo dst ff:ff:ff:ff:ff:ff ff02::1:ffxx:xxxx
Chi risponde TUTTI processano Solo il destinatario
Tipo richiesta ARP Request (Opcode 1) Neighbor Solicitation (135)
Tipo risposta ARP Reply (Opcode 2) Neighbor Advertisement (136)
Cache ARP cache Neighbor cache
Comando Linux ip neighbor show ip neighbor show (stesso!)Come funziona — passo per passo#
Scenario: Host A (2001:db8:1:2::1003) vuole comunicare con Web Server (2001:db8:1:2::1000).
Passo 1 — Neighbor Solicitation (broadcast → multicast):
Host A
│
│ ICMPv6 Type 135 — Neighbor Solicitation
│ Ethernet dst: 33:33:ff:00:10:00 (multicast MAC derivato dall'IPv6)
│ IPv6 dst: ff02::1:ff00:1000 (multicast link-local)
│ Payload: "Chi ha 2001:db8:1:2::1000? Il mio MAC e' 00:0c:29:2f:80:31"
│
▼
[Solo il Web Server con IP 2001:db8:1:2::1000 processa]Passo 2 — Neighbor Advertisement (multicast → unicast):
Web Server
│
│ ICMPv6 Type 136 — Neighbor Advertisement
│ Ethernet dst: 00:0c:29:2f:80:31 (unicast — diretto all'Host A)
│ IPv6 dst: 2001:db8:1:2::1003 (unicast)
│ Payload: "Sono io — MAC 00:0c:29:1f:a7:55"
│
▼
[Host A aggiorna la neighbor cache e inizia la comunicazione]Lettura pacchetti in Wireshark#
Packet 1 — Neighbor Solicitation (Type 135):
Ethernet II:
Src: 00:0c:29:2f:80:31 ← MAC del richiedente
Dst: 33:33:ff:00:10:00 ← MAC multicast (derivato dall'IPv6 target)
IPv6:
Src: 2001:db8:1:2::1003 ← richiedente
Dst: ff02::1:ff00:1000 ← indirizzo multicast solicited-node
Hop Limit: 255 ← NDP usa sempre 255 (non deve uscire dalla LAN)
Next Header: ICMPv6 (58)
ICMPv6:
Type: 135 (Neighbor Solicitation)
Target Address: 2001:db8:1:2::1000 ← IP cercato
Source link-layer: 00:0c:29:2f:80:31 ← MAC del richiedente inclusoPacket 2 — Neighbor Advertisement (Type 136):
Ethernet II:
Src: 00:0c:29:1f:a7:55 ← MAC del rispondente
Dst: 00:0c:29:2f:80:31 ← MAC unicast del richiedente
IPv6:
Src: 2001:db8:1:2::1000 ← rispondente
Dst: 2001:db8:1:2::1003 ← unicast — solo al richiedente
ICMPv6:
Type: 136 (Neighbor Advertisement)
Flags:
Solicited: Set ← risposta a una Solicitation (non gratuita)
Override: Set ← aggiorna la cache anche se esiste gia'
Target Address: 2001:db8:1:2::1000
Target link-layer: 00:0c:29:1f:a7:55 ← MAC del rispondenteUnicast vs Multicast — perche' il cambio#
SOLICITATION → multicast:
Non conosco il MAC del destinatario
Non posso mandare un unicast senza MAC
→ mando a tutti... ma solo a quelli interessati (multicast)
ADVERTISEMENT → unicast:
Conosco il MAC del richiedente (era nella Solicitation)
→ mando direttamente a lui, nessun altro deve sapereI tre tipi di trasmissione a confronto#
Broadcast → altoparlante in piazza
TUTTI sentono e processano
esempio: ARP in IPv4
Multicast → newsletter con iscrizione
solo chi e' iscritto riceve e processa
esempio: NDP in IPv6, streaming video
Unicast → lettera con indirizzo preciso
solo il destinatario riceve
esempio: la maggior parte del traffico TCPPerche' multicast e' piu' efficiente in reti grandi:
Rete con 1000 dispositivi — ricerca MAC:
ARP broadcast:
1000 dispositivi ricevono il pacchetto
1000 stack di rete processano il frame
999 lo scartano dopo averlo processato
NDP multicast:
~1 dispositivo riceve il pacchetto solicited-node
(il multicast solicited-node e' quasi unicast per design)
Solo 1 stack processa e rispondeNeighbor Cache — come ip neighbor show mostra anche IPv6#
ip neighbor show
# 192.168.64.1 dev eth0 lladdr 72:8c:f2:1b:c8:64 REACHABLE ← IPv4 ARP
# fe80::708c:f2ff:fe1b:c864 dev eth0 lladdr 72:8c:f2:1b:c8:64 router STALE ← IPv6 NDPLo stesso comando mostra sia la ARP cache (IPv4) che la neighbor cache (IPv6). Gli stati sono identici: REACHABLE, STALE, FAILED.
Filtri Wireshark per NDP#
# Tutto il traffico NDP
icmpv6.type == 135 || icmpv6.type == 136
# Solo Solicitation
icmpv6.type == 135
# Solo Advertisement
icmpv6.type == 136
# Tutto il multicast IPv6
ipv6.dst matches "^ff"Scenario Reale Blue Team#
Un volume anomalo di Neighbor Solicitation da uno stesso host puo' indicare NDP scanning — l'equivalente IPv6 di un ARP scan.
Un attaccante che manda molte Solicitation verso indirizzi IPv6 diversi sta cercando di mappare quali host sono attivi nella rete.
# Rileva NDP scanning in tcpdump
sudo tcpdump -i eth0 'icmp6 and ip6[40] == 135'
# Se vedi molte Solicitation dallo stesso src → possibile scanningNDP spoofing e' l'equivalente IPv6 dell'ARP poisoning. Un attaccante puo' mandare Neighbor Advertisement falsi per avvelenare la neighbor cache. Le difese equivalenti a DAI per IPv6 si chiamano RA Guard e SEND (Secure Neighbor Discovery).
Collegato a#
- network — categoria
- arp — protocollo equivalente per IPv4
- ipv6 — il protocollo che NDP serve
- icmp-mac-ip — ICMP e il suo ruolo nel networking
- osi-model — NDP opera tra Layer 2 e Layer 3




