为什么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 

你不能把所有这些数字加在一起。 这是ping到谷歌path上的每一跳的时间。 所以,天生的道路每一条腿都会越走越远,你会看到不同的平时间。 如果您查看tracert(34 ms)中的最后一次ping时间以及发出ping(34 ms)时所收到的时间,这些都是相同的。 tracert程序不比ping慢。

我build议阅读一下traceroute的工作原理:
http://en.wikipedia.org/wiki/Traceroute

你可以像从纽约到旧金山的驾车一样看到平。 可以说,200个小时(来自瑞士,不熟悉美国的距离)

但司机必须回纽约告诉你他在旧金山。 你看看手表,现在你计算,他花了400小时的距离。 现在这就是Ping所做的。 Traceroute做的是:告诉你的司机,他应该从纽约开车到圣弗朗西斯科,每次他来到一个十字路口时,他都应该回来告诉你它的名字。 所以他正在路上,头几个十字路口在纽约。 所以他很快回到你身边,告诉你十字路口的名字。 但是当他远一点时,他会花更长的时间回到你身边。 等等…

所以,如果你把所有的驾驶时间都算在路上的话,那么他要比所有的十字路口都要花费更多的时间才能驾车去旧金山。 希望这个清除一些东西给你…

实际上,这主要是因为PING通过networking向DNS和其他networking设备发送了一个ICMP请求。

然而,Traceroute发送很多与TTL很短的paquets。

例如,当您尝试从您的座位上joinwww.google.com时,traceroute会将TTL设置为1的paquet发送至www.google.com,并等待来自第一次遇到networking设备的回答。

然后,Traceroute在屏幕上显示第一个networking设备的IP地址,之后它会做同样的事情,但这次TTL设置为2等等。

最后,Traceroute已经等待了大约一半的时间,因为在每次发送时,它都在等待networking设备的回应。

Traceroute总是告诉你平均到目的地,而不是时间的积累,就你的情况来说,它是34ms的pingtraceroute

如果traceroute做你的build议,它的输出将是相当不可读的。

如果您只对目标的响应时间感兴趣, ping就足够了, traceroute用于当您需要debugging到达目的地的路由上的某些内容时。 而且,你和目的地之间的所有跳数都是路由器,大多数情况下,路由器都有优先权,即首先路由数据包,然后回答ping或traceroute(也就是第一种情况,回答一个icmp echo reply ,在第二种情况下, icmp time exceeded ),经常回答更慢(当他们回答时)

为了后代,因为没有一个正确的答案是非常清楚的…

跟踪路由中显示的每一次都是从您的机器(或执行跟踪路由的机器)到该特定节点的总时间。

换句话说,第二个节点上显示的时间不是节点1和节点2之间的时间,而是源节点,第一个节点和第二个节点之间的总时间全部放在一起。

所以平均来说,每个节点上显示的时间应该与您直接ping特定节点所得到的时间大致相同(它不是比现实中的traceroute更直接,它通常会遵循相同的path在网上)。

只要记住有一个“滞后高峰”的东西。 find滞后来源的最准确方法是使用batch file(如果在Windows上)重复运行traceroute,并在任何给定时间查找最近(最低编号)的节点数量较多的节点。

对于batch file,打开记事本并键入这3行:

 :start tracert -d www.google.com goto start 

然后保存为“Trace.bat”,但确保在保存前将保存对话框中的文件types更改为“所有文件”,否则将保存为文本文件。

打开时,这将不断运行traceroutes(谷歌)。 您可以在select窗口时按ctrl + c来停止它。

当然,您可以通过将“www.google.com”更改为您想要的任何地址来更改运行traceroute的位置。

如果您希望查看已parsing的主机名,也可以删除“-d”选项,但由于从每个节点的DNS服务器获取所述主机名,这会使traceroute花费更长的时间(但这并不会改变实际结果)。

最后,如果你发现一个高时间的节点,并且只想运行跟踪路由到那个特定的节点,以防其他节点出现问题,你可以将“www.google.com”改为该节点的IP地址或主机名,或者您可以使用-h选项来指定要search的节点数量,即…

 :start tracert -d -h 5 www.google.com goto start 

因为tracert使用UDP数据包,就像ping使用ICMP数据包一样。 在Linux下,使用traceroute -I选项来执行ICMP traceroute。

在你的testing中,连接到google的时间在traceroute和ping中是一样的:34ms。 中间的所有路由器都有自己的时间来回答,但不影响最后的转移时间。

http://en.wikipedia.org/wiki/Traceroute解释Traceroute上的所有内&#x5BB9;

您可以通过禁用往往会失败的反向dns查找来提高跟踪路由:tracert -d http://www.google.com