Extraño: ¿por qué Linux responde al ping con la solicitud ARP después de la última respuesta de ping?

12

Yo (y un colega) acabamos de darme cuenta, y probé, que cuando se hace ping a una máquina Linux, después del último ping inicia una solicitud ARP de unidifusión a la máquina que inició el ping ICMP. Al hacer ping a una máquina Windows, la máquina Windows no emite una solicitud ARP al final.

¿Alguien sabe cuál es el propósito de esta solicitud ARP de unidifusión y por qué ocurre en Linux y no en Windows?

El rastro de Wireshark (con 10.20.30.45 siendo una caja de 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

Actualización: Acabo de buscar en Google algunas solicitudes ARP de unidifusión , y la única referencia útil que he encontrado está en RFC 4436, que trata sobre "Detección de archivos adjuntos de red" (desde 2006). Esta técnica utiliza ARP de unidifusión para permitir que un host determine si se vuelve a conectar a una red previamente conocida. Pero no veo cómo esto se aplica a una solicitud ARP como resultado de hacer un ping. Entonces el misterio permanece ...

Rabarberski
fuente

Respuestas:

4

Linux envía varias solicitudes ARP de unidifusión para actualizar su caché ARP. Esto es para evitar entradas de caché ARP obsoletas (y potencialmente maliciosas).

Hay algunas situaciones en las que se usa ARP de unidifusión, básicamente para validar el caché de ARP. Si la entrada está obsoleta, entonces la alternativa es transmitir ARP.

Esto se discute en RFC1122 2.3.2.1

Creo que eso es lo que está haciendo, en cuanto a por qué, mi primera suposición sería algún tipo de medida contra la suplantación de identidad. Los paquetes ARP nunca se enrutan, por lo que supongo que está haciendo esto en su LAN local. ¿Ocurre esta situación constantemente cada vez que hace ping al host o lo ha rastreado una vez? En ese caso, la caché ARP para ese host puede haber estado agotando por coincidencia.

¿Desde qué sistema operativo se ejecuta en el host desde el que está haciendo ping a la máquina?

Philip Reynolds
fuente
Gracias por el enlace RFC. Pensé que los tiempos de espera eran la forma predeterminada de deshacerse de las entradas antiguas de arp y mantener limitado el tamaño de la caché de arp. Esto último no parece hacerse realizando ARP de unidifusión (pero quizás también haya un tiempo de espera). Hemos probado esto en una LAN de banco de pruebas local 3 veces (dos veces desde una máquina Linux y una desde una máquina WinXP). También probé esto en la LAN 'real' haciendo ping desde mi PC (WinXP) a un VMWare Ubuntu 9.04 que se ejecuta en mi PC. Mismo resultado, mismo tiempo (2 segundos).
Rabarberski el
¿Tiene algún enlace al reclamo 'Linux envía varias solicitudes ARP de unidifusión ...'?
Rabarberski el
No estoy seguro, pero parece una contramedida de falsificación de arp. Sin embargo, me pregunto cuán efectivo es esto, quiero decir, las direcciones MAC se usan para cambiar las tramas de Ethernet, el uso del mensaje de unidifusión hará que vaya directamente a la última máquina desde la que vino el Mac de destino ...
Hubert Kario
1

Creo que es un error. La siguiente traza es de un ping a una dirección que está en la caché ARP pero obsoleta. No se me ocurre ninguna buena razón para unidifundir ARP dos veces en tan poco tiempo. Esto es con 4.14.15 pero he visto el comportamiento en muchas versiones de 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
Tony
fuente
Me parece que ambos lados verifican la validez de sus cachés ARP; esos dos intercambios iban en direcciones opuestas, y sus entradas serían esencialmente de la misma edad, por lo que el tiempo de espera y el chequeo al mismo tiempo.
Stolenmoment
-1

Solo una suposición ... pero esto podría ser una 'característica' para registrar la dirección MAC del cliente cada vez que la máquina responde una serie de ping o cierto número de pings. Podría ser información útil para rastrear ping spam.

Chris Nava
fuente
Pero esta 'característica' no requeriría el envío de una solicitud ARP, ya que la máquina de correo no deseado ya podría haber extraído la dirección MAC de la solicitud de ping ICMP.
Rabarberski el