奇怪:为什么linux在上次ping回复后用ARP请求响应ping?

Rab*_*ski 12 linux arp kernel ping icmp

我(和一位同事)刚刚注意到并测试过,当一台 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
Run Code Online (Sandbox Code Playgroud)

更新:我刚刚在 google 上搜索了更多关于单播 ARP request的信息,我发现的唯一有用的参考资料是关于“检测网络附件”的RFC 4436(从 2006 年开始)。此技术使用单播 ARP 来允许主机确定它是否重新连接到先前已知的网络。但我不明白这如何适用于执行 ping 的 ARP 请求。所以谜底还在……

Chr*_*ava 0

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