Usage of tracert or traceroute

来源:互联网 发布:初学者彩妆套装 知乎 编辑:程序博客网 时间:2024/04/30 19:51

在UNIX主机系统下,直接执行命令行:
       Traceroute hostname
而在windows,使用tracert。

 

tracert(跟踪路由)是路由跟踪实用程序,用于确定 IP 数据报访问目标所采取的路径。Tracert 命令用 IP 生存时间 (TTL) 字段和 ICMP 错误消息来确定从一个主机到网络上其他主机的路由。

  Tracert 工作原理

  通过向目标发送不同 IP 生存时间 (TTL) 值的“Internet 控制消息协议 (ICMP)”回应数据包,Tracert 诊断程序确定到目标所采取的路由。要求路径上的每个路由器在转发数据包之前至少将数据包上的 TTL 递减 1。数据包上的 TTL 减为 0 时,路由器应该将“ICMP 已超时”的消息发回源系统。

  Tracert 先发送 TTL 为 1 的回应数据包,并在随后的每次发送过程将 TTL 递增 1,直到目标响应或 TTL 达到最大值,从而确定路由。通过检查中间路由器发回的“ICMP 已超时”的消息确定路由。某些路由器不经询问直接丢弃 TTL 过期的数据包,这在 Tracert 实用程序中看不到。

  Tracert 命令按顺序打印出返回“ICMP 已超时”消息的路径中的近端路由器接口列表。如果使用 -d 选项,则 Tracert 实用程序不在每个 IP 地址上查询 DNS。

  在下例中,数据包必须通过两个路由器(10.0.0.1 和 192.168.0.1)才能到达主机 172.16.0.99。主机的默认网关是 10.0.0.1,192.168.0.0 网络上的路由器的 IP 地址是 192.168.0.1。

  C:/>tracert 172.16.0.99 -d

  Tracing route to 172.16.0.99 over a maximum of 30 hops

  1 2s 3s 2s 10,0.0,1

  2 75 ms 83 ms 88 ms 192.168.0.1

  3 73 ms 79 ms 93 ms 172.16.0.99

  Trace complete.

  用 tracert 解决问题

  可以使用 tracert 命令确定数据包在网络上的停止位置。下例中,默认网关确定 192.168.10.99 主机没有有效路径。这可能是路由器配置的问题,或者是 192.168.10.0 网络不存在(错误的 IP 地址)。

  C:/>tracert 192.168.10.99

  Tracing route to 192.168.10.99 over a maximum of 30 hops

  1 10.0.0.1 reports:Destination net unreachable.

  Trace complete.

  Tracert 实用程序对于解决大网络问题非常有用,此时可以采取几条路径到达同一个点。

  Tracert 命令行选项

  Tracert 命令支持多种选项,如下表所示。

  tracert [-d] [-h maximum_hops] [-j host-list] [-w timeout] target_name

选项
 描述
 
-d
 指定不将 IP 地址解析到主机名称。
 
-h maximum_hops
 指定跃点数以跟踪到称为 target_name 的主机的路由。
 
-j host-list
 指定 Tracert 实用程序数据包所采用路径中的路由器接口列表。
 
-w timeout
 等待 timeout 为每次回复所指定的毫秒数。
 
target_name
 目标主机的名称或 IP 地址。
 

Traceroute的命令参数:

Traceroute的用法为: Traceroute [options] <IP-address or domain-name> [data size]

[options]的内容有:

[-n]:显示的地址是用数字表示而不是符号

[-v]:长输出

[-p]:UDP端口设置(缺省为33434)

[-q]:设置TTL测试数目(缺省为3)

[-t]:设置测包的服务类型

[data size]:每次测试包的数据字节长度(缺省为38)

 

Traceroute的工作原理:
Traceroute最简单的基本用法是:traceroute hostname

Traceroute程序的设计是利用ICMP及IP header的TTL(Time To Live)栏位(field)。首先,traceroute送出一个TTL是1的IP datagram(其实,每次送出的为3个40字节的包,包括源地址,目的地址和包发出的时间标签)到目的地,当路径上的第一个路由器(router)收到这个datagram时,它将TTL减1。此时,TTL变为0了,所以该路由器会将此datagram丢掉,并送回一个「ICMP time exceeded」消息(包括发IP包的源地址,IP包的所有内容及路由器的IP地址),traceroute 收到这个消息后,便知道这个路由器存在于这个路径上,接着traceroute 再送出另一个TTL是2 的datagram,发现第2 个路由器...... traceroute 每次将送出的datagram的TTL 加1来发现另一个路由器,这个重复的动作一直持续到某个datagram 抵达目的地。当datagram到达目的地后,该主机并不会送回ICMP time exceeded消息,因为它已是目的地了,那么traceroute如何得知目的地到达了呢?

Traceroute在送出UDP datagrams到目的地时,它所选择送达的port number 是一个一般应用程序都不会用的号码(30000 以上),所以当此UDP datagram 到达目的地后该主机会送回一个「ICMP port unreachable」的消息,而当traceroute 收到这个消息时,便知道目的地已经到达了。所以traceroute 在Server端也是没有所谓的Daemon 程式。

Traceroute提取发 ICMP TTL到期消息设备的IP地址并作域名解析。每次 ,Traceroute都打印出一系列数据,包括所经过的路由设备的域名及 IP地址,三个包每次来回所花时间。

Traceroute 有一个固定的时间等待响应(ICMP TTL到期消息)。如果这个时间过了,它将打印出一系列的*号表明:在这个路径上,这个设备不能在给定的时间内发出ICMP TTL到期消息的响应。然后,Traceroute给TTL记数器加1,继续进行。 

原创粉丝点击