当 ARP 请求来自不同的子网时会发生什么?

当 ARP 请求来自不同的子网时会发生什么?

在以下两种情况下,当 ARP 请求数据包从 router1 发送到 router2 时,会发生什么情况?会产生 ARP 应答还是会丢弃 ARP 请求数据包?

  1. [路由器1]Intf1(20.0.0.1/24) ======== (40.0.0.1/24)Intf2[路由器2]
  2. [路由器1]Intf1(20.0.0.1/24) ======== (20.0.0.2/8) Intf2[路由器2]

上述拓扑中,路由器“router1”上的端口“Intf1”通过直接链路(例如,1 Gbps 电缆)连接到另一个路由器“router2”上的端口“Intf2”。

答案1

ARP 仅在同一 IP 子网内的设备之间起作用。

当具有 IP 地址 A 的设备 A 需要向具有 IP 地址 B 的设备 B 发送数据包时,它要做的第一件事就是查阅其路由表以确定 IP 地址 B 是否属于它可以通过其网络接口直接到达的子网;如果是,则设备 A 使用 ARP 将 IP 地址 B 映射到物理以太网地址,然后向该地址发送以太网帧。

但如果两个 IP 地址位于不同的子网,设备将遵循完全不同的逻辑:它将在其路由表中查找到目标网络的路由,然后将数据包发送到适当的路由器(如果没有更具体的路由,则发送到其默认网关);在这种情况下,ARP 将用于查找路由器,因为目标IP地址已经被视为不可直接到达,所以必须将数据包传送到可以处理它的路由器。

答案2

在某些情况下(我知道Linux这种情况可能出现,不确定其他情况),但主机可以在“错误”接口上响应 ARP。以这个网络为例:

10.0.0.0/24  ==== Host A ==== 192.168.0.0/24

主机 A 在两个网络上都有一个地址;10.0.0.1假设192.168.0.1

如果主机 A 通过 10.0.0.1 接口接收到 192.168.0.1 的 ARP,它将使用 10.0.0.1 接口的 MAC 地址进行响应。

此行为由内核可调参数控制arp_ignore(来源:http://blog.steve-miller.org/2010/03/tweaking-arp-behavior-in-linux.html):

arp_ignore - Define different modes for sending replies in response to received ARP requests that resolve local target IP addresses:
0 - (default): reply for any local target IP address, configured on any interface.
1 - reply only if the target IP address is local address configured on the incoming interface.
2 - reply only if the target IP address is local address configured on the incoming interface and both with the sender's IP address are part from same subnet on this interface.
3 - do not reply for local addresses configured with scope host, only resolutions for global and link addresses are replied.
4-7 - reserved
8 - do not reply for all local addresses.

如上所述,默认情况下,无论 ARP 在哪个接口上接收,都会对任何本地地址(即在主机 A 上配置的地址)进行响应。

答案3

您的拓扑结构对我来说不清楚。路由器 1/intf1 上有一个 ip 地址,路由器 2/intf2 上有两个 ip 地址吗?但是,当路由器 1/intf1 向路由器 2/intf2 发送 arp 请求时,路由器 2 将发送 arp 回复,路由器 1 将在其 arp 表中存储 ip 地址 20.0.0.2 的 mac 地址。这将起作用,因为 20.0.0.1/24 包含在网络 20.0.0.2/8 中。您为什么要这样配置 ip 地址?这有点奇怪

答案4

有两个可能的答案,但都与 arp 无关,而是与转发表有关。

如果 R1 上有一条路由语句,将发往所有网络(默认路由)的流量转发出 Intf1,那么在两种情况下,ARP 回复都将由 R2 生成并由 R1 接收。

ARP 是一种使用硬件地址进行通信的链路层协议。它不依赖或受 IP 等更高层协议的限制。

相关内容