当我ping
在 LAN 上找到主机 IP 地址时,我的主机会广播请求ARP
。在收到ARP
目标主机的回复后,它会启动一个ICMP echo
包含回复的消息会话。
当目标主机从我的源主机接收时ARP request
,目标主机是否会ARP
使用请求中嵌入的信息更新缓存(因为源MAC address
存在于中ARP request
)?
如果是这样,为什么目标主机有时会ARP request
为我的源主机 IP 地址发送另一个请求,并丢弃所有ICMP echo
请求直到得到回复ARP reply
?
请注意,这种行为是偶然发生的,有时ICMP echo
会在ARP request
目标主机发出响应之前做出响应,但这种响应ARP request
总是出现在 ping 会话中间的某个地方。
我不知道这是否是由于早期 ping 会话中主机的 ARP 表更新所致,或者第二个只是一种协议,并且目标主机已经具有来自第一个的ARP request
源主机的信息。MAC address
ARP request
或者,目标主机根本不需要源主机MAC address
,因为它总是封装在每个ICMP echo
请求中,并且对每个此类请求的回复都使用收到的有关的信息MAC addresses
并在响应帧中切换它们?
编辑 1:经过一番研究,我发现目标主机实际上并没有ARP cache
从被动ARP requests
(即来自其他主机的请求)中填充其内容。它ARP cache
仅从ARP
其自身请求收到的回复中填充其内容。
编辑2:继之后,在任何回复之前来自目标主机的Edit 1
第二个回复表明源不在其内或已成为,从而在回复请求之前触发另一个回复。(有时首先通过探测检查地址,如果映射无效或探测超时,则发生新的回复。ARP request
ICMP echo
MAC address
ARP cache
STALE
ARP request
ICMP echo
STALE
ARP request
ARP request
因此,会话中间发生的第二个请求ping
表明,由于某些原因(在我的主机中配置为 60 秒),源MAC address
已进入STALE
我的目标主机,从而触发了第二个请求。此外,这些第二个请求澄清了虽然目标主机不需要源填充到其请求中并使用有关源的信息来回复它,但它确实需要知道源才能回复请求。ARP cache
ARP timeout value
ARP request
ARP
MAC address
ARP cache
ARP request
MAC address
MAC address
TCMP echo
尽管如此,我们仍然非常感谢任何能够详细说明或纠正上述调查结果中的错误的答案。