这一个被窃听我多年。
基本的问题: 是有一些原因ARP 必须与ARP缓存条目固定超时来实现?
我做实时ciricles了很多工作。 我们做我们的大部分系统间通信的这些天在专用UDP / IP链路。 这在大多数情况下可靠地工作在实时,但对于一个挑剔:ARP表项超时。
该方法典型的实现做ARP如下:
- 当客户端所要求的IP分组发送到IP地址与一个未知的MAC地址,而不是发送该IP包,堆栈发出ARP请求。 如果上层(TCP)重发做,那也没问题。 但是,由于我们使用UDP,原始信息丢失。 在启动时,这是好的,但在操作过程中,这是一件坏事 ™。
- (动态)ARP表项从ARP表中删除定期对,即使我们只是得到了一个数据包从该系统一毫秒前。 这意味着坏事™经常发生在我们的系统。
显而易见的解决方案(我们religously使用)就是让所有的ARP表项静态的。 然而,这是一个皇室PITA(特别是在RTOS的地方找到一个接口的MAC地址并不总是几个简单的图形用户界面下点击)。
回来时我们写我们自己的IP堆栈,我从来没有通过(曾经)超时ARP表项解决了这个问题。 这具有明显的缺点。 更健壮的和完全合理的解决方案可能是刷新每当从相同的MAC / IP组合分组被看到的条目超时。 这样的条目将只能得到超时,如果它没有用的时间量堆栈传递。
但是,现在我们正在使用我们的供应商的IP堆栈,我们又回到了愚蠢的ARP超时。 我们有与此供应商,我也许可以让他们使用较少inconvienient方案足够的影响。 然而,这种脑死亡超时算法的通用性使我相信这可能是执行的必要组成部分。
所以这就是问题。 由于某种原因需要这种行为?
互联网主机RFC1122要求讨论这一点。
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.
网络可以是非常动态的; DHCP服务器可以分配相同的IP地址,当旧租约到期时间(使当前ARP数据无效),可以有IP冲突,将永远不会被发现,除非ARP请求定期进行等不同的计算机
它还提供了用于检查主机是否仍然在网络上的机制。 想象一下,你正在串流通过UDP视频的一些IP地址192.168.0.5。 如果缓存那台机器的MAC地址永远,你就继续滥发出即使在主机停机UDP数据包。 因为没有人与MAC回答该IP每一个现在,然后做一个ARP请求将停止与一个目的地不可达的错误流。
它起源于路由协议的不信任,尤其是在非以太网世界(尤其是MIT的CHAOS网络)。 克里斯月球,早期的“ARPAnauts”的一个专门关于这个在原来的ARP报RFC。
你可以,当然,保持其他人的ARP缓存由主动广播自己的ARP通告超时。 大多数以太网层将接受免费ARP应答到他们的缓存,但不尝试关联他们ARP他们以前发送的请求。
文章来源: ARP Timeouts. Why fixed periodic?