![当 ARP 请求来自不同的子网时会发生什么?](https://linux22.com/image/586796/%E5%BD%93%20ARP%20%E8%AF%B7%E6%B1%82%E6%9D%A5%E8%87%AA%E4%B8%8D%E5%90%8C%E7%9A%84%E5%AD%90%E7%BD%91%E6%97%B6%E4%BC%9A%E5%8F%91%E7%94%9F%E4%BB%80%E4%B9%88%EF%BC%9F.png)
在以下两种情况下,当 ARP 请求数据包从 router1 发送到 router2 时,会发生什么情况?会产生 ARP 应答还是会丢弃 ARP 请求数据包?
- [路由器1]Intf1(20.0.0.1/24) ======== (40.0.0.1/24)Intf2[路由器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 等更高层协议的限制。