假设我有源主机 H1(10.1.1.2/24),想要与主机 H2(10.1.1.3/24) 通信。由于两台主机位于同一子网中,H1 发送 ARP 广播。 H2 回复此广播,最终 H1 获得 H2 MAC 地址。因此,沟通建立起来。
现在如果 H2 宕机,H1 将不会收到来自 H2 的 ARP 回复。那么H1会等待ARP回复多长时间呢? RFC 826 没有讨论任何此类计时器。
我在一些论坛上发现它是5到30秒。正确吗?
问候, 苏丹苏
最佳答案
在您的描述中,您至少错过了一件事。 ARP 回复作为 ARP 条目缓存一段时间。所以H2宕机后H1会向黑洞发送一些流量。该时间段被选择为 base_reachable_time/2
和 3*base_reachable_time/2
之间的随机数字。 (随机用于及时分发来自不同设备的请求)。默认情况下,base_reachable_time 为 30 秒。
经过此随机时间后,H1 尝试更新 ARP 条目。更新是通过以retrans_time_ms
间隔(默认为1秒)发送ARP请求的单播消息(直接发送到H1而不向网络进行任何广播)来执行的。如果ucast_solicit
(默认为3)尝试失败,则执行广播探测。
如果广播探测也失败(mcast_solicit
以 retrans_time_ms
间隔尝试),则 ARP 条目被视为不完整。在此检查期间,内核可以将发送到 H2 的数据包保留在 ARP 队列中。
总结:
- ARP 条目重新验证前已过 15-45 秒
- 启动探测后到 ARP 条目被视为无效之前经过了 (3+3)*1000 毫秒。
关于linux - 广播报文中的 ARP 超时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37341598/