我可以跟踪到一个 IP 地址,但不能 ping 它

DJA*_*DJA 19 ping traceroute

在 Windows 上,如果我跟踪到 Google,我会得到以下信息;

C:\Users\Dave>tracert -d -w 100 www.google.com

Tracing route to www.google.com [216.58.220.100]
over a maximum of 30 hops:

  1    <1 ms    <1 ms    <1 ms  192.168.1.1
  2    17 ms     *       16 ms  [redacted]
  3    17 ms    16 ms    17 ms  [redacted]
  4    34 ms    34 ms    34 ms  150.101.33.18
  5    35 ms    43 ms    33 ms  72.14.221.174
  6    33 ms    33 ms    33 ms  66.249.95.234
  7    31 ms    31 ms    31 ms  209.85.142.11
  8    33 ms    33 ms    38 ms  216.58.220.100

Trace complete.
Run Code Online (Sandbox Code Playgroud)

现在,如果我 ping 倒数第三个 IP 地址 66.249.95.234,我会得到这个......

C:\Users\Dave>ping 66.249.95.234

Pinging 66.249.95.234 with 32 bytes of data:
Request timed out.
Request timed out.
Request timed out.
Request timed out.

Ping statistics for 66.249.95.234:
    Packets: Sent = 4, Received = 0, Lost = 4 (100% loss),
Run Code Online (Sandbox Code Playgroud)

tracert 内部的“ping”如何以某种方式与真正的 ping 不同?它们有何不同?我需要做什么才能让 ping 像 tracert 一样工作?

MaQ*_*eod 27

这一切都与 tracert 的工作方式有关。Ping 是从 A 点到 B 点的直接 ICMP,它通过路由规则遍历网络。Tracert 的工作方式非常不同,即使它使用 ICMP。

Tracert 以最后一跳为目标,但限制 TTL 并等待超时消息,然后将其增加 1 以进行下一次迭代。因此,它得到的响应不是对来自主机的 ICMP 回显请求的 ICMP 回显回复,而是来自该主机的超时消息 - 所以即使它正在使用 ICMP,它也在以一种非常不同的方式使用它.

您可以在此处阅读有关它的更多详细信息。

  • 添加ping超时的最后一点:显然,倒数第三个主机被配置为作为路由器*通过*它(包括发送ICMP TTL EXCEEDED控制消息以应对故障),但要阻止*到*它的流量,特别是不回复 ICMP ECHO REQ。顺便说一下,traceroute 客户端可以发送任何以最后一跳为目的地的东西——它*可能*是 ICMP ECHO REQ 但它也可能是一些 TCP SYN(这可能会触发其他 ICMP 消息,尤其是当目标 jhost 是达到了。实际上,操作系统之间的实现不同。然后是`tracepath` ... (13认同)
  • 同样值得注意的是,许多“tracert”实现甚至不发送 ICMP 数据包。至少在大多数 Linux 上的 `traceroute` 是这种情况,它发送 UDP 数据报,尽管我不确定 Windows 版本是做什么的。中间跃点应该为任何类型的数据包发送 ICMP TTL EXCEEDED,而不仅仅是 ICMP。 (4认同)