【问题标题】:ARP timeout in broadcast message广播消息中的 ARP 超时
【发布时间】:2016-09-17 10:02:38
【问题描述】:

假设我有想要与主机 H2(10.1.1.3/24) 通信的源主机 H1(10.1.1.2/24)。由于两台主机都在同一个子网中,H1 发送一个 ARP 广播。 H2 回复这个广播,最后 H1 得到 H2 MAC 地址。因此通信建立。

现在如果 H2 宕机,H1 将不会收到来自 H2 的 ARP 回复。那么 H1 将等待 ARP 回复多长时间? RFC 826 没有讨论任何此类计时器。

我在一些论坛上发现它是 5 到 30 秒。对吗?

问候, 苏丹苏

【问题讨论】:

    标签: linux ip tcp-ip arp


    【解决方案1】:

    在您的描述中,您至少遗漏了一件事。 ARP 回复作为 ARP 条目缓存一段时间。所以 H1 会在 H2 宕机后向黑洞发送一些流量。这段时间被选为base_reachable_time/23*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 条目不完整。在此检查期间,内核可以在 ARP 队列中保存发送到 H2 的数据包。

    总结:

    • 在 ARP 条目重新验证之前经过了 15-45 秒
    • (3+3)*1000 毫秒,从探测开始到 ARP 条目被认为无效。

    【讨论】:

    • 谢谢德米特里。答案令人信服。对于“base_reachable_time”,我应该参考哪个标准?或者它是某些操作系统专有的。
    • 该算法在 IPv6 的邻居发现 tools.ietf.org/html/rfc4861 中有所描述(我不知道谁是第一个 - linux 实现或这个规范)。参数有BaseReachableTime。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-09-09
    • 2011-09-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-07
    • 1970-01-01
    相关资源
    最近更新 更多