Arp пытается на различных *nix-системах
Кто-нибудь знает, что определяет количество попыток arp, которые сделает маршрутизатор? У меня разное поведение с двумя устройствами, если я пытаюсь отследить маршрут к несуществующему хосту в подсети, которая принадлежит интерфейсу на маршрутизаторе, Linux-бокс попытается выполнить arp 3 раза, а затем вернет сообщение icmp, не поддающееся повторной проверке хоста, Юнос будет постоянно пытаться взломать и ничего не вернуть. Есть ли значение sysctl, которое определяет это или что-то вообще.
1 ответ
На Linux вы заинтересованы в:
% sysctl net.ipv4.neigh.eth0.mcast_solicit
net.ipv4.neigh.eth0.mcast_solicit = 3
Ядро linux вернет хост icmp, недоступный исходному процессу отправки, если он не сможет разрешить ARP после mcast_solicit
пытается.
В BSD (включая Junos) вы можете установить его следующим образом:
% sysctl net.link.ether.inet.maxtries
net.link.ether.inet.maxtries: 4
Это устанавливает количество повторов, поэтому установите его на 0
если вы просто хотите один ARP. В отличие от Linux, BSD не отбрасывает недоступный ICMP; Время ожидания истекает (тайм-аут TCP SYN_SENT или любой другой).
Если вы выполняли трассировку на несуществующий локальный адрес в Linux, вы должны были увидеть 3 ARP, а затем трассировку, завершающуюся с !H !H !H
, (Вы получаете все три !H
потому что net.ipv4.neigh.eth0.unres_qlen
по умолчанию установлено значение 3, поэтому ARP будет удерживать до 3 пакетов в своей очереди, пока пытается разрешить. Если вы установите net.ipv4.neigh.eth0.unres_qlen
в 2
трассировка на несуществующий локальный адрес даст вам !H !H *
Если вы выполняли трассировку на несуществующий локальный адрес в Junos (BSD), вы должны увидеть 5 ARP с последующей печатью трассировки *
, затем traceroute попробует еще раз, вы увидите еще 5 ARP, еще один *
и так далее, трассировка продолжается до тех пор, пока она не сдается после 3 проб в течение 30 прыжков, ARPing 5 раз на пробу (я полагаю, всего 450 ARP).