traceroute使用以及实现原理

2020-05-07  本文已影响0人  lotusgrm

traceroute 命令是诊断网络问题时常用的工具,它可以定位从源主机到目标主机之间经过了哪些路由器,以及达到各个路由器所用的耗时

traceroute 用途

我们知道,两台主机之间的通信,往往需要经过很多中间节点(如下图所示)


v2-8854b209358e8b3cca6316f975eb32db_r.jpg

当源主机 A 向目标主机 B 发送消息,发现消息无法送达。此时,可能是中间节点发生了问题,比如说路由器 02 因负载过高产生了丢包

此时,可以通过 traceroute 进行初步检测,定位网络包是在哪个节点丢失的,之后才可以进行针对性的处理

入门例子

假设想要知道,当我们访问 iqiyi.com 时,经过多少中间节点,那么可以使用如下命令:
下面为输出结果

traceroute: Warning: www.iqiyi.com has multiple addresses; using 220.181.184.211
traceroute to ipv6-static.dns.iqiyi.com (220.181.184.211), 64 hops max, 52 byte packets
 1  10.81.71.238 (10.81.71.238)  17.692 ms  15.428 ms  13.868 ms
 2  * * *
 3  * * *
 4  218.30.104.81 (218.30.104.81)  16.006 ms
    218.30.104.17 (218.30.104.17)  26.800 ms  13.931 ms
 5  * * *
 6  * * *
 7  220.181.184.211 (220.181.184.211)  18.317 ms  18.816 ms  15.585 ms

首先,从上面的输出内容中可以知道 iqiyi.com 域名对应多个 IP 地址,这里采用了 220.181.184.211 ,对应的主机名是 ipv6-static.dns.iqiyi.com

从当前主机到目标主机,最多经过 64 跳(64 hops max),每次检测发送的包大小为 52 字节(52 byte packets)

traceroute: Warning: www.iqiyi.com has multiple addresses; using 220.181.184.211
traceroute to ipv6-static.dns.iqiyi.com (220.181.184.211), 64 hops max, 52 byte packets

接下来的输出比较有规律。每一行包含三部分:序号 + 主机/IP + 耗时
行首是序号,表示经过的第 N 个节点。序号后面是节点的主机名 + IP 地址。最后是到达当前节点所耗费的时间

 1  10.81.71.238 (10.81.71.238)  17.692 ms  15.428 ms  13.868 ms
 2  * * *
 3  * * *
 4  218.30.104.81 (218.30.104.81)  16.006 ms
    218.30.104.17 (218.30.104.17)  26.800 ms  13.931 ms
 5  * * *
 6  * * *
 7  220.181.184.211 (220.181.184.211)  18.317 ms  18.816 ms  15.585 ms

*注意:每次检测都同时发送 3 个数据包,因此打印出来三个时间。此外,如果某一个数据报超时没有返回,则时间显示为 *,此时需要特别注意,因为有可能出问题了

以第一跳为例,IP 地址是 10.81.71.238,检测到数据包到达路由器的时间分别是:17.692 ms 15.428 ms 13.868 ms
第2,3.....N 跳类似,最后一跳为目标主机

 7  220.181.184.211 (220.181.184.211)  18.317 ms  18.816 ms  15.585 ms
实现原理简析

主机之间通信,网络层 IP 数据包的首部中,有个 TTL(Time To Live)字段。TTL 的作用是,设置 IP 数据报被丢弃前,最多能够经过的节点数

每经过一个中间节点,再向下一个节点转发数据前,都会将 TTL 减 1。如果 TTL 不为 0,则将数据报转发到下一个节点;否则,丢弃数据报,并返回错误

假设 TTL 设置为 N,当前转发至第 M 个节点:

如果源主机收到出错的回报,则知道数据报已经到达哪一个节点。此时,记录下该节点的 IP,以及数据报往返的耗时

到这里,可以引出 traceroute 的基本实现原理:

从源主机向目标主机发送 IP 数据报,并按顺序将 TTL 设置为从 1 开始递增的数字(假设为 N),导致第 N 个节点(中间节点 or 目标主机)丢弃数据报并返回出错信息。源主机根据接收到的错误信息,确定到达目标主机路径上的所有节点 IP,以及对应的耗时时间

来看个简单的图例。假设源主机 A 到目标主机 B 之间有 2 个中间节点,也就是说,A 到 B 一共需要经过 3 跳。


v2-06e0b498f1aab9d80c6ec65ced30fc3a_r.jpg

本文转载至:traceroute使用与实现原理分析
traceroute使用手册

上一篇下一篇

猜你喜欢

热点阅读