linux - 广播报文中的 ARP 超时

标签 linux ip tcp arp

假设我有源主机 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/23*base_reachable_time/2 之间的随机数字。 (随机用于及时分发来自不同设备的请求)。默认情况下,base_reachable_time 为 30 秒。

经过此随机时间后,H1 尝试更新 ARP 条目。更新是通过以retrans_time_ms间隔(默认为1秒)发送ARP请求的单播消息(直接发送到H1而不向网络进行任何广播)来执行的。如果ucast_solicit(默认为3)尝试失败,则执行广播探测。

如果广播探测也失败(mcast_solicitretrans_time_ms 间隔尝试),则 ARP 条目被视为不完整。在此检查期间,内核可以将发送到 H2 的数据包保留在 ARP 队列中。

总结:

  • ARP 条目重新验证前已过 15-45 秒
  • 启动探测后到 ARP 条目被视为无效之前经过了 (3+3)*1000 毫秒。

关于linux - 广播报文中的 ARP 超时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37341598/

相关文章:

python - 连接列表中的每 4 个字符串?

c++ - 使用shared_ptr c++ boost tcp套接字

python - 用于停止所有并行运行的程序的键盘快捷方式?

linux - 分配给变量的 Bash 命令保持为空

linux - 在 RPI 上使用 cec-client 关闭电视

java.io.IOException : More data recieved than is allowed by the channel data window

scala - 将 TCP 套接字转为 Array[Byte] 的 Observable

arrays - 如何输出事件/非事件输入列表的计数?

batch-file - 将 IP 地址写入文件

c - 如何获得eth : IP address of Client in UDP in C language