Strano: perché Linux risponde al ping con la richiesta ARP dopo l'ultima risposta del ping?


12

Io (e un collega) ho appena notato e testato che quando viene eseguito il ping di una macchina Linux, dopo l'ultimo ping avvia una richiesta ARP unicast alla macchina che ha avviato il ping ICMP. Quando si esegue il ping su un computer Windows, il computer Windows non emette una richiesta ARP alla fine.

Qualcuno sa qual è lo scopo di questa richiesta unicast ARP e perché si verifica su Linux e non su Windows?

La traccia di Wireshark (con 10.20.30.45 un box Linux):

No.Time        Source           Destination      Prot  Info
19 10.905277   10.20.30.14      10.20.30.45      ICMP  Echo (ping) request
20 10.905339   10.20.30.45      10.20.30.14      ICMP  Echo (ping) reply
21 11.904141   10.20.30.14      10.20.30.45      ICMP  Echo (ping) request
22 11.904173   10.20.30.45      10.20.30.14      ICMP  Echo (ping) reply
23 12.904104   10.20.30.14      10.20.30.45      ICMP  Echo (ping) request
24 12.904137   10.20.30.45      10.20.30.14      ICMP  Echo (ping) reply
25 13.904078   10.20.30.14      10.20.30.45      ICMP  Echo (ping) request
26 13.904111   10.20.30.45      10.20.30.14      ICMP  Echo (ping) reply
27 15.901799   D-Link_c5:e7:ea  D-Link_33:cb:92  ARP   Who has 10.20.30.14?  Tell 10.20.30.45
28 15.901855   D-Link_33:cb:92  D-Link_c5:e7:ea  ARP   10.20.30.14 is at 00:05:5d:33:cb:92

Aggiornamento: ho appena cercato su Google un po 'di più per le richieste unicast di ARP e l'unico riferimento utile che ho trovato è in RFC 4436 che riguarda "Rilevamento di allegati di rete" (dal 2006). Questa tecnica utilizza ARP unicast per consentire a un host di determinare se è ricollegato a una rete precedentemente nota. Ma non vedo come questo si applica a una richiesta ARP a seguito di un ping. Quindi il mistero rimane ...

Risposte:


4

Linux invia varie richieste unicast di ARP per aggiornare la sua cache ARP. Questo serve a prevenire voci della cache ARP non aggiornate (e potenzialmente dannose).

Esistono alcune situazioni in cui viene utilizzato l'ARP unicast, sostanzialmente per convalidare la cache ARP. Se la voce è obsoleta, il fallback deve trasmettere ARP.

Questo è discusso in RFC1122 2.3.2.1

Penso che sia quello che sta facendo, sul perché, la mia prima ipotesi sarebbe una sorta di misura anti-spoofing. I pacchetti ARP non vengono mai instradati, quindi presumo che lo stiate facendo sulla LAN locale? Questa situazione si verifica costantemente ogni volta che esegui il ping dell'host o hai appena rintracciato una volta? In tal caso, la cache ARP per quell'host potrebbe essere scaduta per coincidenza.

Quale sistema operativo è in esecuzione sull'host da cui si esegue il ping della macchina?


Grazie per il collegamento RFC. Ho pensato che i timeout fossero il modo predefinito per sbarazzarsi delle vecchie voci di arp e mantenere la dimensione della cache di arp limitata. Quest'ultimo non sembra essere eseguito eseguendo ARP unicast (ma forse c'è anche un timeout). Lo abbiamo testato su una LAN locale testbed 3 volte (due volte da una macchina Linux e una volta da una macchina WinXP). Ho anche provato questo sulla LAN "reale" eseguendo il ping dal mio PC (WinXP) a un VMWare Ubuntu 9.04 in esecuzione sul mio PC. Stesso risultato, stesso tempismo (2 secondi).
Rabarberski,

Hai qualche link al reclamo "Linux invia varie richieste unicast ARP ..."?
Rabarberski,

Non ne sono sicuro, ma sembra una contromisura di spoofing arp. Mi chiedo però quanto sia efficace, intendo, gli indirizzi MAC sono usati per cambiare i frame ethernet, usando un messaggio unicast lo farà andare direttamente all'ultima macchina da cui proviene il mac di destinazione ...
Hubert Kario

1

Penso che sia un bug. La seguente traccia proviene da un ping a un indirizzo che si trova nella cache ARP ma non è aggiornato. Non riesco a pensare a nessuna buona ragione per unicastre ARP due volte in così poco tempo. Questo è con 4.14.15 ma ho visto il comportamento su molte versioni del kernel.

root@observer:~# tcpdump -nevi eth0 arp
device eth0 entered promiscuous mode
tcpdump: listening on eth0, link-type EN10MB (Ethernet), capture size 262144 bytes

13:11:57.362910 42:5f:03:40:00:43 > 42:5f:03:40:00:22, ethertype ARP (0x0806), length 42: Ethernet (len 6), IPv4 (len 4), Request who-has 10.1.2.1 tell 10.1.2.2, length 28
13:11:57.363018 42:5f:03:40:00:22 > 42:5f:03:40:00:43, ethertype ARP (0x0806), length 42: Ethernet (len 6), IPv4 (len 4), Reply 10.1.2.1 is-at 42:5f:03:40:00:22, length 28
13:11:57.392890 42:5f:03:40:00:22 > 42:5f:03:40:00:43, ethertype ARP (0x0806), length 42: Ethernet (len 6), IPv4 (len 4), Request who-has 10.1.2.2 tell 10.1.2.1, length 28
13:11:57.393049 42:5f:03:40:00:43 > 42:5f:03:40:00:22, ethertype ARP (0x0806), length 42: Ethernet (len 6), IPv4 (len 4), Reply 10.1.2.2 is-at 42:5f:03:40:00:43, length 28

Mi sembra che entrambe le parti controllino la validità delle loro cache ARP; quei due interscambi andavano in direzioni opposte, e le loro voci avrebbero avuto sostanzialmente la stessa età, e quindi il timeout e venivano controllati allo stesso tempo.
rubato il

-1

Solo un'ipotesi .. ma questa potrebbe essere una 'caratteristica' per registrare l'indirizzo MAC del client ogni volta che la macchina risponde a una serie di ping o un certo numero di ping. Potrebbe essere informazioni utili per rintracciare il ping spam.


Ma questa "funzionalità" non richiederebbe l'invio di una richiesta ARP, poiché la macchina spam potrebbe aver già estratto l'indirizzo MAC dalla richiesta di ping ICMP.
Rabarberski,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.