奇怪:为什么 Linux 在最后一次 ping 回复后用 ARP 请求来响应 ping?

奇怪:为什么 Linux 在最后一次 ping 回复后用 ARP 请求来响应 ping?

我(和一位同事)刚刚注意到并进行了测试,当对 Linux 计算机进行 ping 时,在最后一次 ping 之后,它会启动一个单播向发起 ICMP ping 的计算机发送 ARP 请求。当 ping Windows 计算机时,Windows 计算机最后不会发出 ARP 请求。

有人知道这个单播 ARP 请求的目的是什么,以及为什么它出现在 Linux 上而不是 Windows 上?

Wireshark 跟踪(10.20.30.45 是 Linux 机器):

No.Time        Source           Destination      Prot  Info
19 10.905277   10.20.30.14      10.20.30.45      ICMP  Echo (ping) request
20 10.905339   10.20.30.45      10.20.30.14      ICMP  Echo (ping) reply
21 11.904141   10.20.30.14      10.20.30.45      ICMP  Echo (ping) request
22 11.904173   10.20.30.45      10.20.30.14      ICMP  Echo (ping) reply
23 12.904104   10.20.30.14      10.20.30.45      ICMP  Echo (ping) request
24 12.904137   10.20.30.45      10.20.30.14      ICMP  Echo (ping) reply
25 13.904078   10.20.30.14      10.20.30.45      ICMP  Echo (ping) request
26 13.904111   10.20.30.45      10.20.30.14      ICMP  Echo (ping) reply
27 15.901799   D-Link_c5:e7:ea  D-Link_33:cb:92  ARP   Who has 10.20.30.14?  Tell 10.20.30.45
28 15.901855   D-Link_33:cb:92  D-Link_c5:e7:ea  ARP   10.20.30.14 is at 00:05:5d:33:cb:92

更新:我刚刚在 Google 上搜索了一些单播 ARP 请求s,我发现的唯一有用的参考资料是RFC 4436这是关于“检测网络连接”的(2006 年)。该技术使用单播 ARP 允许主机确定它是否重新连接到先前已知的网络。但我不明白这如何适用于执行 ping 后发出的 ARP 请求。所以谜团依然存在……

答案1

Linux 发送各种单播 ARP 请求来更新其 ARP 缓存。这是为了防止 ARP 缓存条目过时(且可能具有恶意)。

在某些情况下会使用单播 ARP,主要是为了验证 ARP 缓存。如果条目已过时,则回退到广播 ARP。

这在RFC11222.3.2.1

我认为这就是它正在做的事情,至于为什么,我的第一个猜测是某种反欺骗措施。ARP 数据包始终不会被路由,所以我假设您在本地 LAN 上执行此操作?每次 ping 主机时都会发生这种情况吗?还是您只跟踪过一次?在这种情况下,该主机的 ARP 缓存可能恰好超时了。

您正在 ping 该机器的主机上运行着什么操作系统?

答案2

我认为这是一个错误。以下跟踪来自对 ARP 缓存中但已过时的地址的 ping。我想不出任何好的理由单播这么短的时间内发生两次 ARP。这是 4.14.15 的情况,但我在许多内核版本中都看到过这种行为。

root@observer:~# tcpdump -nevi eth0 arp
device eth0 entered promiscuous mode
tcpdump: listening on eth0, link-type EN10MB (Ethernet), capture size 262144 bytes

13:11:57.362910 42:5f:03:40:00:43 > 42:5f:03:40:00:22, ethertype ARP (0x0806), length 42: Ethernet (len 6), IPv4 (len 4), Request who-has 10.1.2.1 tell 10.1.2.2, length 28
13:11:57.363018 42:5f:03:40:00:22 > 42:5f:03:40:00:43, ethertype ARP (0x0806), length 42: Ethernet (len 6), IPv4 (len 4), Reply 10.1.2.1 is-at 42:5f:03:40:00:22, length 28
13:11:57.392890 42:5f:03:40:00:22 > 42:5f:03:40:00:43, ethertype ARP (0x0806), length 42: Ethernet (len 6), IPv4 (len 4), Request who-has 10.1.2.2 tell 10.1.2.1, length 28
13:11:57.393049 42:5f:03:40:00:43 > 42:5f:03:40:00:22, ethertype ARP (0x0806), length 42: Ethernet (len 6), IPv4 (len 4), Reply 10.1.2.2 is-at 42:5f:03:40:00:43, length 28

答案3

只是猜测……但这可能是一个“功能”,每当机器响应一系列 ping 或一定数量的 ping 时,记录客户端的 MAC 地址。这可能是追踪 ping 垃圾邮件的有用信息。

相关内容