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


12

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

有人知道此单播ARP请求的目的是什么,为什么会在Linux而不是Windows上发生?

Wireshark跟踪(Linux盒为10.20.30.45):

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请求的信息,而我发现的唯一有用的参考是RFC 4436中有关“检测网络附件”(从2006年开始)的信息。此技术使用单播ARP允许主机确定是否将其重新连接到先前已知的网络。但是由于执行ping操作,我看不到这如何应用于ARP请求。所以这个谜仍然存在...

Answers:


4

Linux发送各种单播ARP请求以更新其ARP缓存。这是为了防止陈旧(并且可能是恶意的)ARP缓存条目。

在某些情况下,使用单播ARP基本上是为了验证ARP缓存。如果条目是陈旧的,则后备方法是广播ARP。

RFC1122 2.3.2.1 中对此进行了讨论

我认为这就是它正在做的事情,至于为什么,我的第一个猜测将是某种反欺骗措施。ARP数据包永远不会路由,因此我想您是在本地LAN上执行此操作的吗?每次对主机执行一次ping操作还是一次跟踪一次,这种情况会持续发生吗?在这种情况下,该主机的ARP缓存可能同时发生超时。

您要对计算机执行ping操作的主机上正在运行什么操作系统?


感谢您的RFC链接。我认为超时是摆脱旧的arp条目并保持arp缓存大小有限的默认方法。后者似乎不能通过执行单播ARP来完成(但可能还会超时)。我们已经在本地测试平台LAN上对此进行了3次测试(Linux机器两次,WinXP机器一次)。我还通过从PC(WinXP)ping通到PC上运行的VMWare Ubuntu 9.04在“真实” LAN上进行了测试。相同的结果,相同的时间(2秒)。
Rabarberski

您是否具有“ Linux发送各种单播ARP请求...”声明的任何链接?
Rabarberski

我不确定,但它确实看起来像是ARP欺骗对策。我想知道这是多么有效,我的意思是说,MAC地址用于交换以太网帧,使用单播消息将使它直接到达目的地MAC来自的最后一台机器……
Hubert Kario

1

我认为这是一个错误。以下跟踪是从ping到ARP缓存中已过期的地址。我想不出这么好的理由在这么短的时间内两次单播 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

在我看来,双方都在检查其ARP缓存的有效性;这两个互换的方向相反,它们的条目本质上是相同的年龄,因此超时并在同一时间进行检查。
stolenmoment,

-1

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


但是此“功能”不需要发出ARP请求,因为垃圾邮件发送的计算机可能已经从ICMP ping请求中提取了MAC地址。
Rabarberski
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.