Em teoria, dois, mas na realidade, deve-se bastar: quem envia o seu ping precisa saber para onde enviá-lo. O destinatário precisa saber para onde enviar a resposta, mas já deve ter essa informação com base nas informações recebidas do ping. A menos que, é claro, um ou mais dos computadores envolvidos tenham as entradas relevantes em sua tabela arp.
Vamos chamar o computador enviando o ping A e o alvo B.
- A, sabendo que é uma conexão local (como em, não precisa ser roteada, com base em sua tabela de roteamento), procura em sua tabela arp uma correspondência para o IP do computador B.
- Quando não encontrado, A transmitirá uma solicitação arp. Em wireshark eu lembro de ter visto este pedido arp como "Quem tem 192.168.0.123?" ou algo nesse sentido.
- B enviará uma resposta arp (não me lembro se isso foi segmentado ou transmitido. O mais provável é que seja segmentado)
- Neste ponto, A tem tudo de que precisa para enviar o ping.
- B recebe o ping e faz o que precisa ser feito para formular uma resposta.
- Neste ponto, B provavelmente já possui A em sua tabela arp, já que ele já recebeu todas essas informações do pacote Ping ICMP. Mas, para o propósito deste exemplo, digamos que não. Nesse caso, ele fará exatamente a mesma coisa que A para começar, para que ele possa enviar a resposta.