Traceroute用于定位目标主机之间的所有路由器。通过traceroute我们可以知道信息从你的计算机到互联网另一端的主机是走的什么路径。当然每次数据包由某一同样的出发点(source)到达某一同样的目的地(destination)走的路径可能会不一样,但基本上来说大部分时候所走的路由是相同的。它利用IP协议的生存时间(TTL)字段并尝试从每个网关到主机的路径引发ICMP TIME_EXCEEDED响应。Traceroute是Linux和Mac OS等系统默认提供的路由追踪程序,tracert是windows系统默认提供的路由追踪程序,二者功能相同。但其实现原理却不同。
Traceroute的实现原理:
- 从源地址发出一个UDP探测包到目的地址,并将TTL设置为1
- 到达路由器时,将TTL减1
- 当TTL变为0时,包被丢弃,路由器向源地址发送一个ICMP超时通知,内含发送IP包的源地址,IP包的所有内容及路由器的IP地址
- 当源地址收到该ICMP包时,显示这一跳路由信息
- 重复1~5,每次TTL加1
- 直至目的地址收到探测数据包,并返回端口不可达通知(ICMP Port Unreachable)
- 当源地址收到ICMP Port Unreachable时停止traceroute
而Tracert与Traceroute的不同就在于,目的地址每次发送的是ICMP请求回显(ICMP Echo Request),目的地址收到探测数据包,返回的使得ICMP回应答复(ICMP Echo Reply)。
在ubuntu系统中有tracepath命令功能与traceroute类似。用法如下
Usage: tracepath [-n] [-b] [-l <len>] [-p port] <destination>
Traceroute用法如下:
如下所示时windows中Tracert的命令格式
最简单的用法就是 tracert target_name 检测网址经过几个跃点
如下所示是本机对百度的追踪,
Tracert命令用于确定IP数据包访问目标所采取的路径,显示从本地到目标网站所在网路服务器的一系列网络节点的访问速度,最多支持显示30个网络节点。
最左侧的1,2,3,4~13,表明在我是用的宽带上,经过12个(不算自己本地的)路由节点,可到达百度的服务。
中间的三列,单位是ms,说明源地址每次发送3个数据包,如在第2个记录中只有1个延时结果,说明源地址只收到了1个ICMP超时通知消息。
最后一列就是每个路由节点对应的IP。
若返回消息时请求超时,则可能是因为该路由接口禁用了对tracert数据包的响应。
若在测试时,大量的*和返回超时,这说明这个IP在各个路由节点都有问题。
一般10个节点内可以完成跟踪的网站,访问速度都不错,10~15个节点才完成跟踪的则访问速度比较差,若超过30个几点都没有完成跟踪,则可认为目标网站无法访问。