В теории два, но в действительности одного должно быть достаточно: тот, кто отправляет свой пинг, должен знать, куда его отправлять. Получатель должен знать, куда отправить ответ, но уже должен иметь эту информацию, основываясь на информации, полученной от эхо-запроса. Если, конечно, один или несколько задействованных компьютеров не имеют соответствующих записей в своей таблице arp.
Давайте назовем компьютер, отправляющий пинг A, и цель B.
- A, зная, что это локальное соединение (например, не требует маршрутизации на основе таблицы маршрутизации), просматривает таблицу arp на предмет соответствия IP-адресу компьютера B.
- Если A не найден, A будет транслировать запрос arp. На wireshark я помню этот запрос arp как "У кого есть 192.168.0.123?" Или что-то вдоль этих линий.
- B отправит ответ arp (я не помню, был ли это целью или трансляцией. Скорее всего нацелен)
- На данный момент, A имеет все необходимое для отправки пинга.
- B получает пинг и делает то, что нужно сделать, чтобы сформулировать ответ.
- На данный момент B, вероятно, уже имеет A в своей таблице arp, так как он уже получил всю эту информацию из пакета ICMP Ping. Но для целей этого примера, скажем, нет. В этом случае он будет делать то же самое, что и A для начала, чтобы он мог отправить ответ.