美文网首页
traceroute使用以及实现原理

traceroute使用以及实现原理

作者: lotusgrm | 来源:发表于2020-05-07 19:10 被阅读0次

    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 个节点:

    • 第 1 个节点:将 TTL 设置为 N - 1。如果 TTL != 0,则将数据报传递给第 2 个节点;否则丢弃数据,并向源主机报错
    • 第 2 个节点:将 TTL 设置为 N - 2。如果 TTL != 0,则将数据报传递给第 3 个节点;否则丢弃数据,并向源主机报错
    • 。。。。。。
    • 第 M 个节点:将 TTL 设置为 N - M。如果 TTL != 0,则将数据报传递给第 M + 1 个节点;否则丢弃数据,并向源主机报错

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

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

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

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


    v2-06e0b498f1aab9d80c6ec65ced30fc3a_r.jpg

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

    相关文章

      网友评论

          本文标题:traceroute使用以及实现原理

          本文链接:https://www.haomeiwen.com/subject/gxaaghtx.html