为什么我不能对 LAN 的直接广播进行 ARP 填充?

为什么我不能对 LAN 的直接广播进行 ARP 填充?

我正在尝试为我的 Linux 2.6 路由器编写一个简单的网络发现。

我正在测试 busybox 内置的 arping。我不明白为什么向直接广播发送单个请求是不够的。

root@router:# arping -h
BusyBox v1.32.1 (2021-03-26 15:21:46 CET) multi-call binary.

Usage: arping [-fqbDUA] [-c CNT] [-w TIMEOUT] [-I IFACE] [-s SRC_IP] DST_IP

Send ARP requests/replies

        -f              Quit on first ARP reply
        -q              Quiet
        -b              Keep broadcasting, don't go unicast
        -D              Exit with 1 if DST_IP replies
        -U              Unsolicited ARP mode, update your neighbors
        -A              ARP answer mode, update your neighbors
        -c N            Stop after sending N ARP requests
        -w TIMEOUT      Seconds to wait for ARP reply
        -I IFACE        Interface to use (default eth0)
        -s SRC_IP       Sender IP address
        DST_IP          Target IP address

因此此时我尝试:

root@router:# arping -c1 -w1 -I br1 -s 10.10.11.5 10.10.11.255
ARPING 10.10.11.255 from 10.10.11.5 br1
Sent 1 probe(s) (0 broadcast(s))
Received 0 response(s) (0 request(s), 0 broadcast(s))

我这里漏掉了什么?我希望 LAN 内的所有设备都能响应 arp 请求,但似乎没有发生。我剩下的唯一选择是为每个可能的 IP 发送一个 arping,但考虑到设备很小,这非常耗费内存。

所以简而言之:我如何才能制作一个 arping 命令来请求完整子网做出响应,以便在网络映射时我的 arp 表可以被视为可靠的信息来源?

谢谢!

答案1

ARP(通过以太网)用于发现与目标 IP 地址关联的以太网 MAC 地址。ARP 请求始终一次针对一个目标。解释并不重要,但它最初是以以太网广播 (FF:FF:FF:FF:FF:FF) 的形式进行的,因此尚未知道的目标可以接收它,一旦知道目标,可以作为有针对性的单播发送以刷新缓存

在 LAN 10.10.11.0/24 中,没有地址为 10.10.11.255 的系统,因为按照惯例,这是此 LAN 的定向广播地址:当 IP 数据报使用此地址作为目的地时,封装该地址的以太网帧会自动获取以太网广播地址 (FF:FF:FF:FF:FF:FF) 作为目的地,以便所有系统都能接收它。这意味着:

  • 没有主机会发送这样的 ARP 请求,或者它行为不当,因为它不需要解析任何单播当已经知道向 IP 广播地址发送时要使用哪个目标 MAC 地址时,MAC 地址:播送以太网地址 FF:FF:FF:FF:FF:FF
  • 没有主机拥有此 IP 地址(即:用作源)或配置错误(例如配置错误:此 IP 地址可能受到影响而未被视为广播地址,可能是因为存在不同的 LAN 网络掩码,如 10.10.11.255/21)
  • 因此,即使 ARP 请求错误地要求该 IP 地址,也不会看到任何 ARP 回复。

因此,在所有系统都正确配置的网络中,向 IP LAN 广播地址发送 ARP 是没有意义的,并且不会导致任何答复,因为没有任何东西可以回答它。

简而言之:你不能用一个阿尔平命令,您必须循环执行它。

相关内容