14.3 跟踪数据包在两台主机之间经过的路由

traceroute

traceroute命令能够显示数据包从你的计算机路由到指定的主机上时经过的每一步。假设你想知道为什么无法访问www.granneman.com,昨天还能很好地访问它,但今天加载这个网页就超时了。哪出了问题?

  1. $ traceroute www.granneman.com
  2. traceroute to granneman.com (216.23.180.5), 30 hops
  3. max, 38 byte packets
  4. 1 192.168.0.1 (192.168.0.1) 1.245 ms 0.827 ms 0.839 ms
  5. 2 10.29.64.1 (10.29.64.1) 8.582 ms 19.930 ms 7.083 ms
  6. 3 24.217.2.165 (24.217.2.165) 10.152 ms 25.476 ms 36.617 ms
  7. 4 12.124.129.97 (12.124.129.97) 9.203 ms 8.003 ms 11.307 ms
  8. 5 12.122.82.241 (12.122.82.241) 52.901 ms 53.619 ms 51.215 ms
  9. 6 tbr2-p013501.sl9mo.ip.att.net (12.122.11.121)
  10. 51.625 ms 52.166 ms 50.156 ms
  11. 7 tbr2-cl21.la2ca.ip.att.net (12.122.10.14)
  12. 50.669 ms 54.049 ms 69.334 ms
  13. 8 gar1-p3100.lsnca.ip.att.net (12.123.199.229)
  14. 50.167 ms 48.703 ms 49.636 ms
  15. 9 * * *
  16. 10 border20.po2-bbnet2.lax.pnap.net
  17. ➥(216.52.255.101) 59.414 ms 62.148 ms 51.337 ms
  18. 11 intelenet-3.border20.lax.pnap.net
  19. ➥(216.52.253.234) 51.930 ms 53.054 ms 50.748 ms
  20. 12 v8.core2.irv.intelenet.net (216.23.160.66)
  21. 50.611 ms 51.947 ms 60.694 ms
  22. 13 * * *
  23. 14 * * *
  24. 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)。可以认为它是pingtraceroute的组合。如果你的Linux分发版可以使用mtr,那么下载并试试它吧。更多信息,可以访问www.bitwizard.nl/mtr