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

在以下两种情况下,从router1发送到router2的ARP请求数据包会发生什么情况? 是否会生成ARP应答或ARP请求报文被丢弃?

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

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

ARP只能在同一个IP子网中的设备之间工作。

当IP地址为A的设备A需要向IP地址为B的设备B发送数据包时,首先要查询其路由表,以确定IP地址B是否属于其可通过其networking接口直接访问的子网); 如果是,则设备A使用ARP将IP地址B映射到物理以太网地址,然后将以太网帧发送到该地址。

但是,如果两个IP地址在不同的子网上,则设备将采用完全不同的逻辑:它将在其路由表中查find达目标networking的路由,然后将其数据包发送到相应的路由器(或其路由器默认网关,如果没有更具体的路线存在); 在这种情况下,ARP将被用来查找路由器的硬件地址,因为目的地IP地址已经被认为是不可直接访问的,所以该数据包必须被传送到路由器来处理。

在某些情况下(我知道Linux 可以这样做,不知道其他的),但是主机可以在“错误的”接口上响应ARP。 采取这个networking:

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

主机A在两个networking上都有一个地址; 比方说10.0.0.1192.168.0.1

如果Host 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. 

如上所述,缺省是响应任何本地地址(即主机A上configuration的地址),而不pipe接收到ARP的接口如何。

你的拓扑结构对我来说是不清楚的。 在router1 / intf1上有一个ip地址,在router2 / intf2上有两个ip地址? 然而当router1 / intf1向router2 / intf2发送一个arp请求时,router2将发送一个arp应答,router1将把ip地址20.0.0.2的mac地址存储在他的arp表中。 这将工作,因为20.0.0.1/24包含在networking20.0.0.2/8中。 为什么你configurationIP地址的方式有点奇怪

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

如果在将R1发往Intf1的所有networking(默认路由)的stream量转发出去的路由声明中,则ARP应答将由R2生成,并在两种情况下由R1接收。

ARP是使用硬件地址进行通信的链路层协议。 它没有依赖性,也不受高层协议如IP的限制。