美文网首页
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使用以及实现原理

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

  • 【tracetcp】tracetcp,基于tcp协议的trace

    Traceroute 的实现一共有三种方法,分别是: TCP traceroute(使用 tracetcp 程序可...

  • traceroute使用方法及实现原理

    在检查网络连通情况是,使用最多的traceroute命令(windows对应的是tracert命令) 使用方法 使...

  • traceroute的工作原理

      traceroute有不同的实现版本:常规的traceroute(基于UDP和ICMP)和tcptracero...

  • traceroute

    traceroute 是用来检测发出数据包的主机到目标主机之间所经过的网关数量的工具。traceroute 的原理...

  • KVC底层实现步骤

    参考 iOS底层-KVC使用实践以及实现原理 [a setValue:value forKeyPath:@"ico...

  • Multidex

    Multidex 这个插件相信大家使用的不少,今天说下他的原理,以及最近遇到的一个问题。 实现原理 实现原理是将c...

  • Linux命令:traceroute命令(路由跟踪)

    traceroute是用来检测发出数据包的主机到目标主机之间所经过的网关数量的工具。traceroute的原理是试...

  • traceroute 使用

    简单来说就是打印从你的主机到目标主机所经过的节点 原理就是通过ICMP的差错控制来实现,首先发送TTL =1 的包...

  • Traceroute(路由追踪)的原理及实现

    现实世界中的网络是由无数的计算机和路由器组成的一张的大网,应用的数据包在发送到服务器之前都要经过层层的路由转发。而...

网友评论

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

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