ARP超时。为什么固定周期?

时间:2013-03-15 19:26:43

标签: udp real-time arp

这个人多年来一直困扰着我。

基本问题:是否有某些原因ARP 在ARP缓存条目上实现固定超时?

我在Real Time中做了很多工作。如今,我们在专用的UDP / IP链路上进行大部分的系统间通信。这在大多数情况下可以在实时中可靠地工作,但是对于一个尼特:ARP输入超时。

典型实现ARP的方式如下:

  • 当客户端要求将IP数据包发送到具有未知MAC地址的IP地址时,堆栈不会发送该IP数据包,而是发出ARP请求。如果上层(TCP)确实重新发送,则没有问题。但由于我们使用UDP,原始邮件将丢失。在启动时,这没关系,但在操作过程中这是 Bad Thing ™。
  • (动态)ARP表条目会定期从ARP表中删除,即使我们只是在几毫秒之前从该系统获得了一个数据包。这意味着 Bad Thing™定期发生在我们的系统中。

显而易见的解决方案(我们使用宗教)是使所有ARP条目都是静态的。然而,这是一个皇家PITA(特别是在RTOS上,找到一个接口的MAC地址并不总是一些简单的GUI点击)。

当我们编写自己的IP堆栈时,我通过永远(永远)超时ARP表条目解决了这个问题。这有明显的缺点。一个更健壮且完全合理的解决方案可能是每当看到来自相同MAC / IP组合的数据包时刷新进入超时。这样,如果条目在那段时间内没有与堆栈通信,那么条目只会超时。

但现在我们正在使用我们供应商的IP堆栈,我们又回到了愚蠢的ARP超时。我们对这家供应商有足够的影响力,我或许可以让他们使用不那么不方便的方案。然而,这种脑死亡超时算法的普遍性使我相信它可能是实现的必要部分。

这就是问题所在。这种行为是否需要某种程度?

2 个答案:

答案 0 :(得分:3)

RFC1122 Requirements for Internet Hosts 讨论了这一点。

     2.3.2.1  ARP Cache Validation

        An implementation of the Address Resolution Protocol (ARP)
        [LINK:2] MUST provide a mechanism to flush out-of-date cache
        entries.  If this mechanism involves a timeout, it SHOULD be
        possible to configure the timeout value.

      ...

       DISCUSSION:
             The ARP specification [LINK:2] suggests but does not
             require a timeout mechanism to invalidate cache entries
             when hosts change their Ethernet addresses.  The
             prevalence of proxy ARP (see Section 2.4 of [INTRO:2])
             has significantly increased the likelihood that cache
             entries in hosts will become invalid, and therefore
             some ARP-cache invalidation mechanism is now required
             for hosts.  Even in the absence of proxy ARP, a long-
             period cache timeout is useful in order to
             automatically correct any bad ARP data that might have
             been cached.

网络可以非常动态;当旧租约时间到期时(当前ARP数据无效),DHCP服务器可以为不同的计算机分配相同的IP地址,除非定期发出ARP请求,否则可能会发生永远不会被注意到的IP冲突等。

它还提供了一种机制,用于检查主机是否仍在网络上。想象一下,您正在通过UDP将视频流式传输到某个IP地址192.168.0.5。如果您永远缓存该计算机的MAC地址,即使主机出现故障,您也只会继续发送垃圾邮件。偶尔执行ARP请求将使目标无法访问错误停止流,因为没有人使用该IP响应该IP。

答案 1 :(得分:2)

它起源于对路由协议的不信任,特别是在非以太网世界(尤其是MIT的CHAOS网络)中。早期的“ARP​​Anauts”之一Chris Moon在最初的ARP RFC中被引用了。

当然,您可以通过主动广播自己的ARP公告来阻止其他人的ARP缓存超时。大多数以太网层都会接受无偿ARP响应进入其缓存,而不会尝试将它们与之前发送的ARP请求相关联。