精华内容
下载资源
问答
  • traceroute 工作原理

    万次阅读 2020-12-07 16:52:32
    文章目录PINGTracerouteTraceroute 的工作原理举个“栗子” PING ICMP 的一个重要应用就是分组网间探测 PING(Packet InterNet Groper),用来测试两台主机之间的连通性。PING 使用了 ICMP 回送请求与回送回答报文。...

    PING

    ICMP 的一个重要应用就是分组网间探测 PING(Packet InterNet Groper),用来测试两台主机之间的连通性。PING 使用了 ICMP 回送请求与回送回答报文。PING 是应用层直接使用网络层 ICMP 的一个例子。他没有通过传输层的 TCP 或 UDP。

    Traceroute

    ICMP 的另一个非常有用的应用是 traceroute(这是 UNIX 操作系统中名字),它用来跟踪一个分组从源点到终点的路径。在 Windows 操作系统中这个命令是 tracert。下面简单介绍下这个程序的工作原理。

    Traceroute 的工作原理

    Traceroute 从源主机向目的主机发送一连串的IP数据报,数据报中封装的是无法交付的 UDP 用户数据报。第一个数据报 P1 的生存时间 TTL 设置为1。当 P1 到达路径上的第一个路由器 R1 时,路由器 R1 先收下它,接着把 TTL 的值减 1。由于 TTL 等于零了,R1 就把 P1 丢弃了,并向源主机发送一个 ICMP 时间超过 差错报给报文。
    源主机接着发送第二个数据报 P2,并把 TTL 设置为 2。P2 先到达路由器 R1 收下后把 TTL 减 1 再转发给路由器 R2。R2 收到 P2 时 TTL 为 1,但减 1 后 TTL 变为零了。R2 就丢弃 P2,并向源主机发送一个 ICMP 时间超过差错报给报文。这样一直继续下去。当最后一个数据报刚刚到达目的主机时,数据报的 TTL 是 1。主机不转发数据报,也不把 TTL 值减 1。但因 IP 数据报中封装的是无法交付的传输层的 UDP 用户数据报,因此目的主机要向源主机发送 ICMP 终点不可达差错报告报文。
    这样,源主机达到了自己的目的,因为这些路由器和最后目的主机发来的 ICMP 报文正好给出了源主机想知道的路由信息——到达目的主机所经过的路由器的 IP 地址,以及到达其中的每一个路由器的往返时间。

    举个“栗子”

    C:\Users\liyongjun>tracert www.baidu.com
    
    通过最多 30 个跃点跟踪
    到 www.a.shifen.com [180.101.49.11] 的路由:
    
      1     5 ms     2 ms     6 ms  10.10.68.1 [10.10.68.1]
      2     *        *        *     请求超时。
      3     3 ms     3 ms     3 ms  49.76.124.1
      4     3 ms     1 ms     3 ms  58.215.68.201
      5     5 ms     6 ms     4 ms  58.215.152.181
      6     5 ms     6 ms     6 ms  58.213.94.106
      7     *        *        6 ms  58.213.94.86
      8     7 ms    45 ms     9 ms  58.213.96.102
      9    11 ms    10 ms    10 ms  10.166.50.6 [10.166.50.6]
     10    10 ms    11 ms    10 ms  10.166.50.8 [10.166.50.8]
     11     *       60 ms    11 ms  10.166.96.4 [10.166.96.4]
     12    11 ms     *        *     10.165.1.17 [10.165.1.17]
     13     5 ms     5 ms     6 ms  180.101.49.11
    

    上面是从一台 Windows PC 向百度服务器 www.baidu.com 发出的 tracert 命令后获得的结果。图中每一行有三个时间出现,是因为对应于每一个 TTL 值,源主机要发送三次同样的 IP 数据报。出现 * 号,可能是该路由器防火墙屏蔽掉了 ICMP 消息,所以我们得不到相关数据包的返回数据。上图说明从 PC 到百度服务器,中间共经历了 12 台路由器,并且能够看到每台路由器的 IP 地址,最终抵达目的IP 180.101.49.11
    我们还应该注意到,从原则上讲,IP 数据报经过的路由器越多,所花费的时间也就越多。但从上面示例可以看出,有时正好相反。这是因为互联网的拥塞程度随时都在变化,也很难预料到。因此,完全有这样的可能:经过更多的路由器反而花费更少的时间。

    展开全文
  • traceroute工作原理

    千次阅读 2016-08-08 14:38:08
    traceroute,也就是trace route,跟踪路由。这个程序最早是Van Jacobson实现的。
    traceroute,也就是trace route,跟踪路由。这个程序最早是Van Jacobson实现的。源码在网上可以找到,不过我还没有去找。主要的原理是IP路由过程中对数据包TTL(Time to Live,存活时间)的处理。当路由器收到一个IP包时,会修改IP包的TTL(及由此造成的头部检验和checksum变化)。每收到一个包,检查这个的TTL是否是0或1。如果是,表明这个包还没有到达目的地,而且剩余时间不多了,肯定是到不了目的地了。这样路由器就简单地丢弃这个包,并给源主机发送ICMP通知,说这个包已经超时了。ICMP的通知信息里包含当前路由器发送时所用的IP。
    

      这样就可以通过构造数据包,来间接检查到 达一个主机时经过了哪些路由。一开始发送一个TTL为1的包,这样到达第一个路由器的时候就已经超时了,第一个路由器就发通知说包超时,这样就可以记录下 所经过的第一个路由器的IP。然后TTL加1,安全通过第一个路由器,而第二个路由器的的处理与第一个相同,丢包,发通知说包超时了,这样记录下第二个路由器IP,由此可以一直进行下去,直到这个数据包到达目标主机,由此打印出所有经过的路由器。

      在通信中,IP层只负责数据的路由与传输,并不处理数据包的内容。例如ICMP,或TCP,UDP,这些协议是依赖IP层的传输功能来传送数据的。在通信双方的主机中,收到这些协议的数据包后,一般在通信的对应主机上,会有程序来处理这些数据。而直接的IP数据报是没有用处的(win2000的驱动层可以直接使用IP报而不需要加上其他协议,但是一般是不会这样用的)。因此traceroute程序发送一个UDP包来试探。对路由器来说,UDP数据报只是IP数据报的一种,它并不关心UDP数据报的具体内容。直到这个包到达目的端的主机会,目的主机的内核会解析UDP数据报,并查找数据报中要求端口是否已经有进程在使用。如果找到,则通知进程有数据到达。而如果找不到,则发送一个"目的端口不可达"的ICMP错误数据回到源主机。

      这样就可以完全确定下来。trcertroute建立一个UDP数据包,不断修改TTL值并发送出去,如果收到"超时错",表示刚刚到达的是路由器,而如果收到的是"端口不可达"错误,表示刚刚到达的就是目的主机。这样路由跟踪完成,程序结束。

      有几个细节:

      1.局域网的路由是相对稳定的,因此用traceroute打印出来的响应时间相差不大。而如果用来跟踪广域网的路由,由于广域网的路由信息是动态变化的,而且并不能确定是发送路径耗时还是返回路径耗时较多,因此时间与路由信息只能做为参考。

      2.TTL的选择。如果把TTL设得足够大,是不是一定可以打印出所有路由,比如一个数据包经过300个路由器才到达目的端。当然在现有网络环境下不太可能出现要经过这么多路由的情况。而TTL信息在IP数据报中只有一个字节,也就是最多能设定到255(256以后又重新从0开始)。设定这个信息的目的,就是防止一些僵而不化的数据报在网络漫上无目的的游荡而不消失。数据报每经过一个路由器,路由器就把TTL减1(或在该路由器被处理前经过的秒数),总有一个时候会被减到1,然后路由器会把它丢弃。

      3.traceroute的是以收到"端口不可达"为标志来结束的。前提是发出的UDP数据报中要求的端口在目的主机上没有进程在使用。而如果目的主机上正好有进程在使用这个端口,接收这个包并按正常方式处理,这样traceroute就收不到"端口不可达"的错误了。为了避免出现这种情况,UDP数据报的端口很高(书中的实现是初始值33435,以后每发送一次再加1,端口号最大可以到65535)。 普通程序一般不会使用这些高端口。问题是假如真的存在这种情况时,traceroute会怎么处理?而好像Solaris系统可能会使用高端口,这时又怎么样。

      4.在发送过程中,要经过许多的路由,到达目的主机前,可能还要经过网关,防火墙,以及其他例如IDS的过滤,发送包能不能到达目的主机还是个问题。而即使到达了,发送的ICMP信息能不能返回也是个问题。因为沿途经过的关卡太多,遇上黑洞路由器,不转发这些信息的话,那就一点办法也没有了。

      书中还提到原来的traceroute里有一个选项,可以指定数据包经过的路由器。如果是宽路由,则只要经过指定的路由即可。而如果是严路由,则必须按指定的顺序经过指定的路由器。因为这个选项可能导致某个固定的路由处理信息太多,在公布的源码里已经取消了。但是可以找到补丁,还是可以用起来的。从比较的结果看,似乎指定路由器反而不如让路由器采用默认路由处理得快。而对于严路由来说,要成功就要更难一些,因为并不一定你指定的路由器正好有条目到接下来的路由器。
     
       ping命令

      ping程序是利用icmp的回复请求来探测远端主机是否可达。(并不能继续判断端口是否可达,要想查看端口,就要使用扫描器了)win2000里的网络库里已经提供网络函数库(icmp.dll)可以实现利用icmp来探测远端主机。相比起使用管道来读ping的结果,或者嵌入ping源码,这个是最简单的方法了。ping其实还有一个R选项,用来记录经过的路由,以前一直不知道。(ping www.google.com -r 7)记录经过的7个路由器。按照分析,根据所在环境限制最多可以记录8~9个项目。

      除了回显请求外,还可以利用icmp来实现时间请求。在icmp的数据包中可以包含发送时间,目的主机收到后再附上自身当时时间才发回。这样可以做一个时间校验,并可以判断源与目的之间的通讯速度。由于具体的内容部分比较烦,类型太多,一下子记不住各个类型的意思。

      一般用ping的时候只是用了它的最简单的功能:检查主机能不能连到。其实使用它所提供的其他选项,可以实现许多细节上的控制,例如数据包长度,TTL,路由记录,宽/严路由经过路由等。
    展开全文
  • traceroute工作原理

    2020-03-22 22:25:39
    traceroute工作原理 是利用ICMP差错控制报文中的TTL超时会回向源点发送一个时间超时报文。例如A 主机 traceroute B主机,A会封装一些分组,这些分组很特殊,例如第一个分组的TTL设置为1 ,第二个分组的TTL设置为2 ...

     

    MyySophia5个月前

    traceroute的工作原理 是利用ICMP差错控制报文中的TTL超时会回向源点发送一个时间超时报文。例如A 主机 traceroute B主机,A会封装一些分组,这些分组很特殊,例如第一个分组的TTL设置为1 ,第二个分组的TTL设置为2 以此类推.......当第一个分组到达第一个路由器时,发现TTL变成了0就会给源主机发送一个时间超时报文,这也就知道了这个分组所经过的一个路由器,同理可得。 当最后一个分组到达B主机时。收集每个时间超时的报文中的IP 就获得了A主机到B主机的路径。

    展开全文
  • 工作开发过程中,我们经常会使用到ping和traceroute。在这里,我们将细述其工作原理,让你在会用的基础之上理解其内部工作过程。 ICMP应用实例——Ping Ping 是 ICMP 的一个重要应用,主要用来测试两台主机之间的...

    在工作开发过程中,我们经常会使用到ping和traceroute。在这里,我们将细述其工作原理,让你在会用的基础之上理解其内部工作过程。

    ICMP应用实例——Ping

    Ping 是 ICMP 的一个重要应用,主要用来测试两台主机之间的连通性。Ping 的原理是通过向目的主机发送 ICMP Echo 请求报文,目的主机收到之后会发送 Echo 回答报文。Ping 会根据时间和成功响应的次数估算出数据包往返时间以及丢包率。

    Ping的完整工作流程:
    Ping本质上是ICMP数据包,所以其工作流程就是ICMP数据包的发送与解析流程。
    大致流程如下:
    构造ICMP数据包-->构造IP数据包-->构造以太网数据帧----物理传输到目标主机---->获取以太网数据帧-->解析出IP数据包-->解析出ICMP数据包-->发送回送应答报文

    本地主机处理流程:

    1. 在本地,ping命令会构建一个ICMP数据包(构造回送请求报文)
    2. 将该ICMP数据包和目标IP地址给IP协议,IP协议将本地地址作为源地址,与目的地址等构造IP数据包
    3. 根据本地ARP缓存查找目的地址IP对应的MAC地址,如果缓存中没有则通过ARP协议找到对应IP的MAC地址。将MAC地址交给数据链路层以构造数据帧
    4. 经物理层发送给目的主机

    目的主机处理流程:

    1. 目的主机接收到数据包
    2. 物理层接收到二进制数据流经数据链路层,按照以太网协议解析出数据帧,如果数据帧中的目标MAC地址与本机MAC地址相同,则接收该数据包,否则丢弃该数据包。
    3. 接收到该数据包之后,经网络层解析出IP数据包,通过IP包头中的协议字段判断出是ICMP数据包。之后解析出ICMP数据包,发现是回送请求报文(ping request)后马上构建一个ICMP回送应答报文(ping reply)
    4. 将封装好的ICMP数据包经网络层、数据链路层、物理层发送回源主机

    所以,Ping的本质其实就是ICMP回送请求报文和回送应答报文。我们可通过Wireshark抓包工具对Ping进行分析。使用ping命令:

    在这里插入图片描述

    本机会向远端主机发送ICMP回送请求报文。

    在这里插入图片描述

    远端主机收到后会发送回送应答报文:
    在这里插入图片描述

    ICMP应用实例——Traceroute

    Traceroute 是 ICMP 的另一个应用,用来跟踪一个分组从源点到终点的路径。有2种实现方案:基于UDP实现和基于ICMP实现。

    基于UDP实现traceroute工作原理

    在基于UDP的实现中,客户端发送的数据包是通过UDP协议来传输的,使用了一个大于30000的端口号,服务器在收到这个数据包的时候会返回一个端口不可达的ICMP错误信息,客户端通过判断收到的错误信息是TTL超时还是端口不可达来判断数据包是否到达目标主机。流程如下:

    1. 源主机向目的主机发送一连串的 IP 数据报(UDP报文)。第一个数据报 P1 的生存时间 TTL 设置为 1,当 P1 到达路径上的第一个路由器 R1 时,R1 收下它并把 TTL 减 1,此时 TTL 等于 0,R1 就把 P1 丢弃,并向源主机发送一个 ICMP 时间超过差错报告报文;
    2. 源主机接着发送第二个数据报 P2,并把 TTL 设置为 2。P2 先到达 R1,R1 收下后把 TTL 减 1 再转发给 R2,R2 收下后也把 TTL 减 1,由于此时 TTL 等于 0,R2 就丢弃 P2,并向源主机发送一个 ICMP 时间超过差错报文。
    3. 不断执行这样的步骤,直到最后一个数据报刚刚到达目的主机,主机不转发数据报,也不把 TTL 值减 1。但是因为数据报封装的是无法交付的 UDP,因此目的主机要向源主机发送 ICMP 终点不可达差错报告报文。
    4. 之后源主机知道了到达目的主机所经过的路由器 IP 地址以及到达每个路由器的往返时间。

    Linux中的traceroute就是这种实现方式。

    基于ICMP实现的tracert工作原理

    在这一种实现中我们不使用UDP协议,而是直接发送一个ICMP回显请求(echo request)数据包,服务器在收到回显请求的时候会向客户端发送一个ICMP回显应答(echo reply)数据包。流程与上面相似,只是最后判断结束上为目标主机(而不是中间经过的主机或路由器)返回一个ICMP回显应答,则结束。

    Windows中的tracert就是这种实现方式。利用Wireshark分析如下:
    在cmd下输入tracert www.baidu.com
    在这里插入图片描述

    每一跳默认发送三个数据包,我们会看到下面这样的输出:
    在这里插入图片描述
    在这里插入图片描述

    可以看到TTL逐个递增,并且最终到达目的主机180.97.33.107,到达目的主机,目的主机回复,终止。

    关注微信公众号,每天进步一点点!
    16bb1f63dd4c0c34?w=173&h=171&f=jpeg&s=31832

    转载于:https://www.cnblogs.com/s-lisheng/p/11284397.html

    展开全文
  • ping和traceroute工作原理

    千次阅读 2016-06-21 22:31:58
    ping命令工作原理 ping命令主要是用于检测网络的连通性。 Ping命令发送一个ICMP请求报文给目的IP,然后目的IP回复一个ICMP报文。 原理:网络上的机器都有唯一确定的IP地址,我们给目标IP地址发送一个数据包,对方...
  • Traceroute 工作原理

    2013-01-10 10:51:21
    Traceroute最简单的基本用法是:traceroute hostname  Traceroute程序的设计是利用ICMP及IP header的TTL(Time To Live)栏位(field)。首先,traceroute送出一个TTL是1的IP datagram(其实,每次送出的为3个...
  • 《TCP/IP 卷一》描述traceroute工作过程:“ 首先,traceroute 送出一个TTL是1的IP数据包到目的地,当路径上的第一个路由器收到这个数据包时,它将TTL减1。此时,TTL变为0,所以该路由器会将此数据包丢掉,并送回一...
  • tracert/traceroute原理

    万次阅读 多人点赞 2017-04-10 20:09:04
    一、路由追踪程序traceroute/tracertTraceroute是Linux和Mac OS等系统默认提供的路由追踪小程序,Tracert是Windows系统默认提供的路由追踪小程序。二者的功能相同,都能探测数据包从源地址到目的地址经过的路由器的...
  • TraceRoute工作原理 TraceRoute工作原理 TraceRoute工作原理
  • ping 与 traceroute工作原理分析

    千次阅读 2018-11-05 17:28:49
    然后照此原理traceroute 发送 TTL 为 2 的数据报时,会收到路径上第二台路由器返回的 ICMP 超时报文,记录第二台路由器的地址;直到报文到达目的主机,目的主机不会返回 ICMP 超时,但由于端口无法使用,就会返回...
  • traceroute命令(unix)/tracert命令(windows)的工作原理  traceroute命令和tracert命令的工作原理是一样的,只是前者用于unix和linux系统中,而后者用于windows系统中。  先来看一个例子,在windows的CMD下,...
  • tcptraceroutetraceroute

    千次阅读 2018-03-27 19:16:12
    1 traceroute 功能说明:显示数据包到主机间的路径。它默认发送的数据包大小是40字节。 通过traceroute我们可以知道信息从你的计算机到互联网另一端的主机是走的什么路径。...工作原理 Traceroute程序的...
  • 网上很多文章都混淆了tracert和traceroute工作方式原理,有必要说明下 tracert和traceroute默认是有区别的: 首先win下的tracert是采用的icmp报文,发送的是echo request请求报文,最终目的服务器回应的是...
  • traceroute原理与使用

    2020-01-13 19:58:57
    原理分析 traceroute是通过ICMP协议中的时间超时差错报告报文来实现的,他从源主机到目的主机发送一连串的IP数据报p1-pn,并且数据报是无法交付的udp数据报。第一个数据报的TTL设置为1,这样当这个数据报转发到第一...
  • Traceroute命令原理及使用(路由跟踪)

    万次阅读 2019-01-08 20:27:29
    traceroute,现代Linux系统称为tracepath,Windows系统称为tracert,是一种计算机网络工具。它可显示数据包在IP网络经过的路由器的IP地址。我们可以用这个命令来查看数据包途径的网络节点和ISP,从而排除一部分网络...
  • TraceRoute原理

    2020-03-14 14:31:02
    原文链接: https://www.jianshu.com/p/75a5822d0eec https://www.wolfcstech.com/2017/04/13/Traceroute%E5%8E%9F%E7%90%86/

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 6,215
精华内容 2,486
关键字:

traceroute工作原理