为什么 traceroute 比 ping 花费的时间长得多?

为什么 traceroute 比 ping 花费的时间长得多?

该如何解释呢?

C:\Documents and Settings\Administrator>tracert google.com

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

  1    <1 ms    <1 ms    <1 ms  192.168.0.1
  2     7 ms    <1 ms    <1 ms  reserve.cableplus.com.cn [218.242.223.209]
  3   108 ms   135 ms   163 ms  211.154.70.10
  4     *        *        *     Request timed out.
  5     2 ms     *        1 ms  211.154.64.114
  6     1 ms     1 ms     1 ms  211.154.72.185
  7     1 ms     1 ms     1 ms  202.96.222.77
  8     2 ms     1 ms     2 ms  61.152.81.145
  9     1 ms     2 ms     1 ms  61.152.86.54
 10     1 ms     1 ms     1 ms  202.97.33.238
 11     2 ms     2 ms     2 ms  202.97.33.54
 12     2 ms     1 ms     2 ms  202.97.33.5
 13    33 ms    33 ms    33 ms  202.97.61.50
 14    34 ms    34 ms    34 ms  202.97.62.214
 15    34 ms   186 ms    37 ms  209.85.241.56
 16    35 ms    35 ms    44 ms  66.249.94.34
 17    34 ms    34 ms    34 ms  hkg01s01-in-f104.1e100.net [64.233.189.104]

Trace complete.

所以平均时间应该是:1+7+108+2+1+1+2+1+1+2+2+33+34+34+35+34+34+35+34,这比ping

C:\Documents and Settings\Administrator>ping google.com

Pinging google.com [64.233.189.104] with 32 bytes of data:

Reply from 64.233.189.104: bytes=32 time=34ms TTL=241
Reply from 64.233.189.104: bytes=32 time=34ms TTL=241
Reply from 64.233.189.104: bytes=32 time=34ms TTL=241
Reply from 64.233.189.104: bytes=32 time=34ms TTL=241

Ping statistics for 64.233.189.104:
    Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),
Approximate round trip times in milli-seconds:
    Minimum = 34ms, Maximum = 34ms, Average = 34ms

答案1

您不能简单地将所有这些数字相加。这是通往 Google 的路径上每个跳点的 ping 时间。因此,自然而然地,路径的每一段都会越来越远,您会看到不同的 ping 时间。如果您查看 tracert 中的最后一个 ping 时间(34 毫秒)和您发出 ping 时收到的时间(34 毫秒),它们是相同的。tracert 程序并不比 ping 慢。

我建议阅读一下跟踪路由的工作原理:
http://en.wikipedia.org/wiki/Traceroute

答案2

您可以看到 ping 就像从纽约开车到旧金山一样。假设需要 200 小时(我来自瑞士,不熟悉美国的距离)

但是司机必须回到纽约才能告诉你他已经到了旧金山。你看了看手表,然后计算出他花了 400 小时才到达旧金山。这就是 Ping 所做的。Traceroute 所做的是:告诉你的司机他应该从纽约开车到旧金山,每次他经过一个十字路口时,他都应该回来告诉你那个十字路口的名字。所以他已经在路上了,前几个十字路口都在纽约。所以他很快就开回你身边,告诉你十字路口的名字。但是当他走得更远时,他会花更长时间才能回到你身边。等等……

因此,如果你计算他一路上开车的时间,他报告所有十字路口的时间要比他开车去旧金山的时间长得多。希望这能帮你理清一些事情……

答案3

回答

慢的原因traceroute是:

  1. 它会按顺序 ping 沿途的每个路由器,直到到达主机(按顺序,取决于具体的实现)
  2. 当出现 时,速度最慢*。这意味着给定的路由器没有确认数据包,请求超时了。默认超时时间为 5 秒,默认traceroute情况下发送三个数据包,因此需要 15 秒才能确定沿途的单个路由器没有响应(* * *)。1

加速

您可以通过每个路由器仅发送两个探测并将超时时间减少到 3 秒来加快跟踪路由速度,例如:

traceroute -q 2 -w 3 google.com

背景

traceroute 命令用于查看数据包的路由方式。它的工作原理是发送具有增加的 TTL 值的数据包,从 1 开始。因此,第一个路由器获取数据包,并将 TTL 值减一,从而丢弃该数据包。路由器向我们发回 ICMP 超时消息。然后下一个数据包的 TTL 为 2,因此它通过了第一个路由器,但当它到达第二个路由器时,TTL 为 0,并返回另一个 ICMP 超时消息。Traceroute 以这种方式工作,因为在发送和丢弃数据包时,它会构建数据包经过的路由器列表,直到它最终到达目的地并收到 ICMP 回显回复消息。2

注意,ICMP Time Exceeded 和请求超时不一样,后者是没有任何响应,前者是有响应的。

为了加快速度,我们不必等待路由器的响应就再 ping 下一个路由器:

不过,traceroute 程序的现代版本并不是每次只发送一个数据包。为了加快速度,它一次发送多个具有不同跳数的数据包,因此程序不必等待每个路由器响应后再发出下一个数据包。3


1来源:traceroute 中的“***”是什么意思

2来源:https://linuxjourney.com/lesson/traceroute

3来源:https://www.perl.com/article/how-does-traceroute-work-/

答案4

事实上,这基本上是由于 PING 通过网络向 DNS 和其他网络设备发送了 ICMP 请求。

但是,Traceroute 发送了很多 TTL 很短的数据包。

例如,当您尝试从您的位置加入 www.google.com 时,traceroute 会向 www.google.com 发送一个数据包,其中 TTL 设置为 1,并等待第一个遇到的网络设备的答复。

然后,Traceroute 会在屏幕上显示第一个网络设备的 IP,之后它会执行相同的操作,但这次将 TTL 设置为 2 等等。

最后,Traceroute 等待了大约一半以上的时间,因为每次发送时,它都在等待网络设备的答复。

相关内容