为什么 PING 回复需要对原始主机 MAC 地址进行 ARP 请求?

为什么 PING 回复需要对原始主机 MAC 地址进行 ARP 请求?

我有一个如下所示的场景。
这里有两台主机通过集线器连接:

在此处输入图片描述

好的,主机 1 想要 ping 主机 2,并且我在连接到同一集线器的第三台主机上设置了 wireshark。现在令人惊讶的是,对于一个 ping 命令,我看到了 6 个数据包,而应该有 4 个。这是我从 wireshark 中看到的内容:

在此处输入图片描述

现在我无法理解的是,为什么会生成数据包 5 和 6,而 ARP 回复目的地却已经知道发送方 mac。

或者我的理解有问题,请帮忙。

答案1

原始答案

第一个响应来自集线器接口,而不是主机 1 接口。当发送回数据时,您仍然需要知道主机 1 的 IP 和接口的 mac。有些交换机会自动执行此操作,有些则不会。

改进的答案:


              .-----------.
              | hub       |
              |           |
[host-1 i1]+--+hi1     hi2+--+[i2 host-2]
              |           |
              `-----------´

network interfaces: 
i1, i2, hi1, hi2

通过应用层的 IP 地址从主机 2 向主机 1 发送某些内容后,对主机 2 的初始响应(以及所有后续响应)将来自该hi2接口,而不是i1主机 1 中的接口。

为了向主机 1 的已知 IP 发送任何内容,主机 2 仍需要知道在链路层上将数据包发送到何处。为此,主机 2 必须请求主机 1 的 IP 所在接口的 MAC 地址。

有些交换机会自动进行这种转换 - 它们会记住 mac 路径向后。大多数集线器不具备此条件,因此提出第二个请求。

答案2

我认为给出的答案是错误的。在我看来,这种现象的发生是因为 Linux 内核的 ARP 实现会查找/避免陈旧的 ARP 条目。一旦获悉发送方的 MAC 地址,它就会更新接收方的本地 ARP 缓存,并将条目置于“延迟”状态。等待约 5 秒(默认值,可在 中更改delay_first_probe_time)后,接收方将探测可达性,然后确定主机现在被视为“可到达”。

更多详情可在这找到:

https://osqa-ask.wireshark.org/questions/15792/arp-replies-appear-with-delay-in-wireshark-output/

相关内容