Estranho: por que o linux responde ao ping com a solicitação ARP após a última resposta de ping?

12

Eu (e um colega) acabamos de observar e testar que, quando uma máquina Linux é executada ping, após o último ping, ela inicia uma solicitação ARP unicast para a máquina que iniciou o ping ICMP. Ao efetuar ping em uma máquina Windows, a máquina Windows não emite uma solicitação ARP no final.

Alguém sabe qual é o objetivo dessa solicitação de ARP unicast e por que ela ocorre no Linux e não no Windows?

O rastreamento do Wireshark (com 10.20.30.45 sendo uma caixa do 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

Atualização: eu pesquisei um pouco mais sobre solicitações de ARP unicast , e a única referência útil que encontrei está na RFC 4436, que trata de "Detectando anexos de rede" (de 2006). Essa técnica usa ARPs unicast para permitir que um host determine se ele está reconectado a uma rede conhecida anteriormente. Mas não vejo como isso se aplica a uma solicitação ARP como resultado de um ping. Então o mistério permanece ...

Rabarberski
fonte

Respostas:

4

O Linux envia várias solicitações ARP unicast para atualizar seu cache ARP. Isso evita entradas de cache ARP obsoletas (e potencialmente maliciosas).

Existem algumas situações em que o ARP unicast é usado, basicamente para validar o cache do ARP. Se a entrada for obsoleta, o fallback será para transmitir o ARP.

Isso é discutido no RFC1122 2.3.2.1

Eu acho que é isso que está fazendo, e por que razão, meu primeiro palpite seria algum tipo de medida antifalsificação. Os pacotes ARP nunca são roteados, portanto, presumo que você esteja fazendo isso na sua LAN local? Essa situação ocorre de forma consistente toda vez que você executa ping no host ou apenas rastreia uma vez? Nesse caso, o cache do ARP para esse host pode ter atingido o tempo limite por coincidência.

De qual SO está sendo executado no host do qual você está executando o ping da máquina?

Philip Reynolds
fonte
Obrigado pelo link RFC. Eu pensei que os intervalos fossem a maneira padrão de se livrar das entradas antigas do arp e manter o tamanho do cache do arp limitado. O último não parece ser feito executando ARPs unicast (mas talvez haja um tempo limite também). Testamos isso em uma LAN local de teste três vezes (duas vezes em uma máquina Linux e outra em uma máquina WinXP). Também testei isso na LAN 'real' executando ping do meu PC (WinXP) para um VMWare Ubuntu 9.04 em execução no meu PC. Mesmo resultado, mesmo tempo (2 segundos).
9789 Rabarberski
Você tem algum link para a reivindicação 'Linux envia várias solicitações de ARP unicast ...'?
9789 Rabarberski
Não tenho certeza, mas parece uma contramedida de falsificação de arp. Gostaria de saber, porém, quão eficaz é isso, quero dizer, os endereços MAC são usados ​​para alternar quadros Ethernet, o uso de mensagens unicast fará com que ele vá direto para a última máquina com o destino que o Mac veio ...
Hubert Kario
1

Eu acho que é um bug. O rastreamento a seguir é de um ping para um endereço que está no cache do ARP, mas obsoleto. Não consigo pensar em nenhuma boa razão para unicastar o ARP duas vezes em tão pouco tempo. Isso acontece com a versão 4.14.15, mas já vi o comportamento em muitas versões do 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
fonte
Parece-me que os dois lados estão verificando a validade de seus caches ARP; essas duas trocas seguiam em direções opostas, e suas entradas teriam essencialmente a mesma idade e, portanto, passariam o tempo limite e seriam verificadas ao mesmo tempo.
Stolenmoment 02/10/19
-1

Apenas um palpite .. mas isso poderia ser um 'recurso' para registrar o endereço MAC do cliente sempre que a máquina responder uma série de ping ou certo número de pings. Pode ser uma informação útil para rastrear spam de ping.

Chris Nava
fonte
Mas esse 'recurso' não exigiria o envio de uma solicitação de ARP, pois a máquina com spam já poderia ter extraído o endereço MAC da solicitação de ping do ICMP.
Rabarberski 5/11/09