Arp 在各种基于 *nix 的系统上尝试

Arp 在各种基于 *nix 的系统上尝试

有谁知道是什么决定了路由器进行的 arp 尝试次数?我的两个设备的行为不同,如果我尝试跟踪路由到属于路由器接口的子网上不存在的主机,Linux 机器将尝试 arp 3 次,然后返回主机无法访问的 icmp 消息。Junos 将不断尝试 arp 但不返回任何内容。是否有一个 sysctl 值可以决定这一点或任何东西。

答案1

在 Linux 上,您感兴趣的是:

% sysctl net.ipv4.neigh.eth0.mcast_solicit
net.ipv4.neigh.eth0.mcast_solicit = 3

如果尝试后仍无法解析 ARP,Linux 内核将向原始发送进程返回 ICMP 主机不可达信息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。(你得到所有三个!Hs 是因为net.ipv4.neigh.eth0.unres_qlen默认设置为 3,所以 ARP 在尝试解析时将在其队列中保留最多 3 个数据包。如果你设置net.ipv4.neigh.eth0.unres_qlen2,对不存在的本地地址的跟踪路由将给你!H !H *

如果您在 Junos(BSD)上对不存在的本地地址执行跟踪路由,您应该会看到 5 个 ARP,*然后跟踪路由会再次尝试,您会看到另外 5 个 ARP,再一个*等等,跟踪路由会继续,直到它在 3 次探测 30 跳后最终放弃,每次探测 ARPing 5 次(我猜总共有 450 个 ARP)。

相关内容