我有 3 台主机(PC1、PC2 和 PC3)。我将 PC2 和 PC3 的 IP 地址设置为 ,10.0.0.2
将 PC3 的 IP 地址设置为10.0.0.1
。我从 PC1 远程登录到 10.0.0.2。然后我登录到 PC3。我在 Wireshark 中看到 PC3 首先响应其 MAC 地址,然后 PC2 响应,但它被视为重复的 IP 地址并被忽略。这是为什么?为什么 PC3 没有被 PC2 覆盖?
答案1
之前标记为正确的答案实际上是错误的(在一定程度上)。生成的数据包将包含在具有特定目标 MAC 地址的帧中发送。目标 MAC 地址将基于发送者的 ARP 表。
无论是否已过期,ARP 回复都会自动缓存。因此,最后一个响应将被缓存,覆盖收到的第一个响应(这正是 ARP 中毒的工作原理和原因)。您可以在ARP 中毒了解更多详情。
与“telnet”的连接将会是最后一个响应广播到广播域的最后一个 ARP 请求的设备。
对于应该发生的情况的简单解释如下:
- 发送方没有 IP:X 的 ARP 表条目。
- 发送方针对 IP:X 发出 ARP 请求广播。
- 广播域中的所有设备都发送 ARP 请求。
- 所有配置了 IP:X 的设备都会响应 ARP 请求。
- 发送者每次接收 1 个 ARP 响应。a. 收到 ARP 响应 #1,并将 MAC/IP 对添加到 ARP 表中。b. 收到 ARP 响应 #2,并将 MAC/IP 对覆盖第一个响应。...(对每个响应重复“b”)
- 发送方发送一个数据包,其中包含最后收到的 ARP 响应中包含的目标 MAC 地址。
然而,如果响应设备看到相冲突的响应,它会根据以下情况做出一些选择:RFC 5227. 其中 1 个是响应配置代理,其 IP 无效。如果没有看到数据包捕获,很难确切地告诉您您看到了什么。
答案2
*请参考 Goblinlords 的回答,它更准确地解释了我想要表达的意思。
如果我没记错的话,这是因为 PC2 响应较慢。当您进行 telnet 会话时,您正在创建 TCP 会话。这从三次 TCP 握手开始。由于您只发送了一个 telnet 连接请求,您的客户端会发现它已经连接到 ip 10.0.0.2,因此它会将来自 PC2 的回复视为重复。
基本上,您的计算机认为较慢设备的响应是未经请求的。如果您清除 arp 表,然后多次重试,您应该会看到当 PC2 首先响应时发生相同的情况,并且 PC3 的数据应该被丢弃。
不确定您想要完成什么,但我建议为 PC2 和 PC3 提供唯一的 IP。