14.3 跟踪数据包在两台主机之间经过的路由
traceroute
traceroute
命令能够显示数据包从你的计算机路由到指定的主机上时经过的每一步。假设你想知道为什么无法访问www.granneman.com,昨天还能很好地访问它,但今天加载这个网页就超时了。哪出了问题?
$ traceroute www.granneman.com
traceroute to granneman.com (216.23.180.5), 30 hops
➥max, 38 byte packets
1 192.168.0.1 (192.168.0.1) 1.245 ms 0.827 ms 0.839 ms
2 10.29.64.1 (10.29.64.1) 8.582 ms 19.930 ms 7.083 ms
3 24.217.2.165 (24.217.2.165) 10.152 ms 25.476 ms 36.617 ms
4 12.124.129.97 (12.124.129.97) 9.203 ms 8.003 ms 11.307 ms
5 12.122.82.241 (12.122.82.241) 52.901 ms 53.619 ms 51.215 ms
6 tbr2-p013501.sl9mo.ip.att.net (12.122.11.121)
➥51.625 ms 52.166 ms 50.156 ms
7 tbr2-cl21.la2ca.ip.att.net (12.122.10.14)
➥50.669 ms 54.049 ms 69.334 ms
8 gar1-p3100.lsnca.ip.att.net (12.123.199.229)
➥50.167 ms 48.703 ms 49.636 ms
9 * * *
10 border20.po2-bbnet2.lax.pnap.net
➥(216.52.255.101) 59.414 ms 62.148 ms 51.337 ms
11 intelenet-3.border20.lax.pnap.net
➥(216.52.253.234) 51.930 ms 53.054 ms 50.748 ms
12 v8.core2.irv.intelenet.net (216.23.160.66)
➥50.611 ms 51.947 ms 60.694 ms
13 * * *
14 * * *
15 * * *
那些* * *
是什么意思?表明在那一跳(hop)发生了一次5秒种的超时。有时这也表明某台计算机只不过是因为bug而不知道如何处理traceroute
数据包,但一连串的星号(*
)则说明从v8.core2.irv. intelenet.net开始,数据包转发到的那些路由器在某些地方出了问题。如果一直有问题,就需要通知v8.core2.irv.intelenet.net
的管理员,让他知道从这个主机开始的路由出了问题(当然,让gar1-p3100.lsnca.ip.att.net
的管理员知道,从该主机到border20. po2-bbnet2.lax.pnap.net
的路由也有点问题,但还不像intelenet.net
主机的问题那么严重,让他知道这些情况也没什么坏处)。
应对有问题的tracerouter
命令的另一种方法是增加命令尝试的最大跳数。在默认情况下,跳数的最大值是30。不过,可以使用–m
选项来修改这一设置,例如traceroute -m 40 www.bbc.co.uk
。
提示 事实上,
traceroute
的一个更好的替代品是mtr
(代表Matt's traceroute)。可以认为它是ping
和traceroute
的组合。如果你的Linux分发版可以使用mtr
,那么下载并试试它吧。更多信息,可以访问www.bitwizard.nl/mtr。