如果对 ARP 请求没有响应,主机是否会发送到其默认网关?

网络工程 路由 子网 arp
2021-07-10 03:24:31

主机 A 和 B 位于同一子网上。A 发送 ARP 请求,请求 B 的 MAC。无论出于何种原因,B 都没有回应。A 是否会:

  1. 放弃——达不到B
  2. 将数据包发送到默认网关路由器 R,并让它尝试将其路由到 B?

当然,如果 B 在不同的子网中,A 将直接转到上面的 #2。我的问题是,如果它们在同一个子网上,但 ARP 失败,主机也会尝试 #2。

这什么时候出现?两种情况:

  1. A 确实与 B 位于不同的子网上,但子网掩码配置错误。

  2. A 和 B 位于同一子网中,但都在受保护的端口(私有 VLAN)中,因此如果没有路由器,则无法直接相互通信。

PS 我可以想象这种行为是依赖于实现的。因此,我不仅会欣赏理论论证,还会欣赏特定操作系统的行为方式,或者至少引用 RFC 或标准。

3个回答

每个 ARP 都会超时,并且会定期重新发送新的 ARP。根据实施情况,它可能会在某个阶段放弃。应用程序可能会自行超时,或者较低的层可能会将错误传递给应用程序层。

它绝对不会发送到默认网关(除非默认网关响应,代理 ARP 等)

在两台主机在不同网络的情况下,可能会出现默认网关为主机做代理ARP,回复自己的MAC,然后转发流量的情况。只有在路由器配置为发送代理 ARP 时才会发生这种情况,两台主机都配置了地址/掩码,以便它们相信它们在同一网络上,而路由器有更长的掩码并相信它们在不同的网络上)。但这不是 ARP 超时,执行代理 ARP 的路由器会立即响应。

如果 A 的 ARP 请求没有得到响应,ARP 尝试将在几次重试后超时,并返回一个错误(主机不可达或类似)返回给上层。

A 不会尝试使用网关路由器,因为 B 的目标地址位于同一子网中。尝试本地传送还是使用网关之间的决定是基于本地路由表做出的,而本地路由表又基于每个主机接口的网络部分和掩码长度。当本地交付失败时,没有回退到网关。

A 确实与 B 位于不同的子网上,但子网掩码配置错误。

如果 A 位于其他地方或不存在,则无关紧要。B 根据它们的公共子网前缀决定 A 是本地的,如果本地传递失败,就是这样。

A 和 B 位于同一子网中,但都在受保护的端口(私有 VLAN)中,因此如果没有路由器,则无法直接相互通信。

同样的事情 - 如果 B 的 ARP 请求没有到达 A 或 A 的回复没有到达 B,则 ARP 失败并且不会发生本地传递(也没有任何其他方式)。

ARP 在RFC 826 中定义,有一些更新。

简单地说,没有。

当主机发送 ARP 时,它已经通过比较自己的 IP 地址和子网掩码计算出该主机在本地子网内。