ping 超时和目标主机不可达的区别

网络工程 国际会议
2021-07-06 02:39:09

我正在从 Windows Box ping 到我重新启动的设备。

PS C:\Users\administrador> ping 192.168.2.10

Pinging 192.168.2.10 with 32 bytes of data:
Control-C
PS C:\Users\administrador> ping -t 192.168.2.10

Pinging 192.168.2.10 with 32 bytes of data:
Request timed out.
Request timed out.
Request timed out.
Request timed out.
Request timed out.
Request timed out.
Request timed out.
Reply from 192.168.2.120: Destination host unreachable.
Reply from 192.168.2.120: Destination host unreachable.
Reply from 192.168.2.120: Destination host unreachable.
Reply from 192.168.2.120: Destination host unreachable.
Reply from 192.168.2.120: Destination host unreachable.
Reply from 192.168.2.120: Destination host unreachable.
Reply from 192.168.2.120: Destination host unreachable.
Reply from 192.168.2.120: Destination host unreachable.
Reply from 192.168.2.120: Destination host unreachable.
Reply from 192.168.2.120: Destination host unreachable.

Ping statistics for 192.168.2.10:
    Packets: Sent = 17, Received = 10, Lost = 7 (41% loss),
Control-C

此后,主机开始应答 ping 探测。

所以,我的问题是:

  1. 这些答案之间有什么区别?
  2. 为什么 ping 结果只显示 41% 的丢失而不是 100%?
  3. “目标主机无法访问”答案与机器正在启动的事实之间是否有任何关系?
2个回答

首先我们需要了解数据包是如何发送的。

当主机或路由器尝试发送 IPv4 数据包*时,它首先在其路由表中查找目的地。它根据路由表确定“下一跳 IP 地址”和接口。对于本地子网上的机器,“下一跳 IP 地址”将是目的地的 IP 地址,否则它将是网关的 IP。

接下来会发生什么取决于接口类型。假设它是以太网或类似接口,网络堆栈需要确定将数据包发送到哪个 MAC 地址。为此,它会在接口的 ARP 表中查找“下一跳 IP 地址”。如果找到有效条目,则填充 MAC 地址并通过以太网接口将数据包发送出去。

如果它没有找到有效的 ARP 表条目,那么它将开始 ARP 过程以尝试创建一个。与此同时,发往该下一跳 IP 地址的数据包将排队等待,直到系统也知道要发送它们的 MAC 地址。

如果 ARP 进程超时,那么在许多平台上,任何排队的数据包都将被拒绝,并显示“目标主机无法访问”ICMP 消息(某些平台只是默默地丢弃数据包)。

最终 ARP 表中的条目超时并需要刷新。

在没有默认网关的主机/路由器上,如果没有路由表条目,您还可以获得“目标主机无法访问”的回复,因此系统甚至不知道 ARP 的接口。


那么当你重启机器并ping它时会发生什么?

起初,您可能已经有一个有效的 ARP 表条目。您的机器将数据包放在线路上,但由于目的地上的网络堆栈已关闭,因此它们永远不会被传送。您会收到“请求超时”(使用 microsoft ping,linux ping 根本不显示没有响应)。

稍后 ARP 缓存条目超时。在您重新启动的机器(可能是您的客户端机器或路由器)之前的跃点尝试进行新的 ARP 查找但失败了,因此它会反弹带有 ICMP 错误的数据包。通常,您会看到多个数据包同时排队并被退回。

最后,目标框上的网络堆栈恢复正常。ARP 成功并且数据包被发送到回复它们的目标。

* IPv6 原理相似,但细节不同。

Request timed out.是,而目的MAC地址仍是在源/路由器的ARP缓存中。Reply from 192.168.2.120: Destination host unreachable.是在目标 MAC 地址在源/路由器的 ARP 缓存中超时之后,并且源/路由器不再具有或无法获得目标的 MAC 地址。最终,目的地重新启动,并响应源/路由器的 ARP 请求,您的 ping 成功。

您需要向 Microsoft 询问ping统计信息。那是它的版本ping,应用程序和终端设备配置在这里是题外话。似乎将任何 ICMP 回复视为有效回复。