Мне интересно, почему я получаю такой результат:
если я пытаюсь получить доступ к несуществующему хосту в моей локальной сети, например, используя команду ping, я вижу с помощью tcpdump arp
команда, что каждую секунду who-has
запрос отправлен с моего компьютера, но я получаю три сообщения Destination Host Unreachable
подряд каждые три секунды.
Объясните, пожалуйста, почему?
Из http://linux-ip.net/html/ether-arp.html:
Если для запрошенного IP-адреса назначения нет записи кэша ARP, ядро будет генерировать запросы ARP mcast_solicit до получения ответа. В течение этого периода обнаружения запись кэша ARP будет отображаться в незавершенном состоянии. Если поиск не будет успешным после указанного количества запросов ARP, запись кэша ARP будет указана в состоянии сбоя. Если поиск действительно успешен, ядро вводит ответ в кэш ARP и сбрасывает таймеры подтверждения и обновления.
Вы можете найти значение mcast_solicit, например, в /proc/sys/net/ipv4/neigh/eth0/mcast_solicit
. Я не уверен, можно ли настраивать тайм-аут перед повторной передачей запроса arp, но эмпирически он составляет 1 секунду.
Поскольку требуется 3 попытки, прежде чем делается вывод о том, что узел недоступен, пакеты ping ставятся в очередь на 3 секунды, затем все они отклоняются вместе, поскольку состояние «недоступно». Затем история начинается снова, с объяснения 3-секундной кластеризации сообщений об ошибках.
Хост не существует для ответа на запрос ARP. Таким образом, ваш клиент не может даже создать ICMP-пакет, предназначенный для «предполагаемого» MAC-адреса IP-адреса, который вы пытаетесь проверить. Фактически, никакие действия вашего компьютера не позволят ему создать такой пакет, если он не сможет разрешить MAC-адрес через ARP. Таким образом, это хост назначения однозначно недоступен.
Если бы этот хост существовал, он бы ответил на запрос ARP, и ваш клиент смог бы сформировать эхо-пакет ICMP. ЕСЛИ хост затем решил не отвечать (возможно, потому, что он отбрасывает трафик ICMP), ваш клиент успешно отправил бы эхо-сообщение ICMP, но не получил бы эхо-ответ ICMP. Ваш Ping сообщит что-то вроде Истекло время запроса.