今天跟大家唠唠我在Linux上用`traceroute`这个命令的小实践,这玩意儿在排查网络问题的时候,简直就是个神器。
我以为`traceroute`跟Windows下的`tracert`是一样的,毕竟名字都那么像。结果一上手,发现Linux下根本没有`tracert`这个命令,这才意识到,,原来Linux用的是`traceroute`。
我遇到的问题是,我的一台Linux服务器,访问某个域名特别慢,有时候甚至直接超时。第一反应肯定是网络有问题,但是问题出在哪儿?这就得靠`traceroute`来帮忙。
我打开终端,直接输入`traceroute www.你的目标域名.com`,然后回车。
bash
traceroute www.你的目标域名.com
屏幕上就开始噼里啪地显示出一堆信息。你会看到一列列的数字,每行代表一个“跳”,也就是数据包经过的一个路由器。每一跳都会显示IP地址、主机名(如果有的话),还有三个时间,这三个时间代表着从你的服务器到这个路由器,再返回来的时间。
我仔细观察这些输出,发现前面几跳都很快,基本都在几毫秒内,但是到后面某一跳的时候,时间突然变得特别长,动不动就几百毫秒,甚至直接显示` `,表示超时。
这说明说明问题就出在这一跳或者之后的网络上。要么是那个路由器很忙,要么是线路有问题。
知道问题在哪儿,接下来就好办。我可以把这个有问题的IP地址记下来,然后去查一下这个IP是哪个运营商的,哪个地区的。如果是我的服务器的运营商的问题,我就直接找他们去反馈。如果是目标域名那边的运营商的问题,那就只能等等看,或者换个线路试试。
我通常还会配合`ping`命令一起用。`ping`可以用来测试目标主机是否可达,以及网络的延迟情况。如果`ping`的结果也很差,那就基本可以确定是网络问题。
还有一点要注意,有些路由器可能出于安全考虑,会禁止`traceroute`的请求,所以你可能会看到很多` `。这并不一定代表网络有问题,可能只是路由器不让你跟踪而已。
`traceroute`还有一些其他的参数可以用,比如`-m`可以设置最大跳数,`-n`可以禁止反向域名解析,等等。具体可以看`man traceroute`的文档,里面有详细的说明。
`traceroute`是一个非常实用的网络诊断工具,只要你稍微解一下它的原理,就能用它来快速定位网络问题。希望我的这回小实践能帮到你!