windows之tracert与linux之traceroute用法详解

通 过Traceroute我们可以知道信息从你的计算机到互联网另一端的主机是走的什么路径。当然每次数据包由某一同样的出发点(source)到达某一同 样的目的地(destination)走的路径可能会不一样,但基本上来说大部分时候所走的路由是相同的。UNIX系统中,我们称之为 Traceroute,MS Windows中为Tracert。 Traceroute通过发送小的数据包到目的设备直到其返回,来测量其需要多长时间。一条路径上的每个设备Traceroute要测3次。输出结果中包 括每次测试的时间(ms)和设备的名称(如有的话)及其IP地址。
在大多数情况下,作为网络工程技术人员或者系统管理员会在UNIX主机系统下,直接执行命令行(注意目前新一代的Linux系统许多用tracepath命令,用法类似):
Traceroute hostname
(参考一篇e文的文档,讲得很清楚http://www.exit109.com/~jeremy/news/providers/traceroute.html)
而在Windows系统下是执行Tracert的命令:
Tracerert hostname
 

windows之tracert

C:\>tracert

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

参数说明:
tracert [-d] [-h maximum_hops] [-j computer-list] [-w timeout] target_name
该诊断实用程序通过向目的地发送具有不同生存时间 (TL) 的 Internet 控制信息协议 (CMP) 回应报文,以确定至目的地的路由。路径上的每个路由器都要在转发该 ICMP 回应报文之前将其 TTL 值至少减 1,因此 TTL 是有效的跳转计数。当报文的 TTL 值减少到 0 时,路由器向源系统发回 ICMP 超时信息。通过发送 TTL 为 1 的第一个回应报文并且在随后的发送中每次将 TTL 值加 1,直到目标响应或达到最大 TTL 值,Tracert 可以确定路由。通过检查中间路由器发发回的 ICMP 超时 (ime Exceeded) 信息,可以确定路由器。注意,有些路由器“安静”地丢弃生存时间 (TLS) 过期的报文并且对 tracert 无效。
参数
-d
指定不对计算机名解析地址。
-h maximum_hops
指定查找目标的跳转的最大数目。
-jcomputer-list
指定在 computer-list 中松散源路由。
-w timeout
等待由 timeout 对每个应答指定的毫秒数。
target_name
目标计算机的名称。

 

忽然在想,这次海底线缆挂了,备用路由在哪里呢?
试试tracert,看看都经过那几个跳转 
C:\>tracert blog.is36.cn
 
Tracing route to blog.is36.cn [68.68.99.173]
over a maximum of 30 hops:
 
  1     3 ms     8 ms    10 ms  172.31.8.254 //本地局域网上一跳
  2     9 ms     9 ms     9 ms  172.8.105.254 //继续上一跳
  3     3 ms     9 ms     9 ms  10.1.2.9 //继续上一跳
  4     1 ms     4 ms     1 ms  10.1.2.2 //出口(内部地址)
  5    <1 ms    <1 ms    <1 ms  60.191.53.193 //出口(外部地址)
  6    <1 ms    <1 ms    <1 ms  61.164.9.169 //杭州电信
  7     1 ms     1 ms    <1 ms  61.164.3.113 //杭州电信
  8    <1 ms    <1 ms    <1 ms  220.191.129.129 //杭州电信
  9     3 ms     4 ms     3 ms  202.97.39.105 //安徽黄山
 10     3 ms     4 ms     3 ms  202.97.33.74 //北京
 11   185 ms   167 ms   168 ms  202.97.51.194 //广西南宁
 12   171 ms   170 ms   172 ms  202.97.49.97 //北京
 13   176 ms   175 ms   173 ms  gige-g5-9.core1.sjc2.he.net [64.62.142.157] //美国纽约
 14   177 ms   174 ms   176 ms  10gigabitethernet1-1.core1.fmt1.he.net  [72.52.92.109] //美国加州
 15   174 ms   177 ms   173 ms  10gige1-1.fmt1.egihosting.com [64.71.129.70] //
 16   172 ms   172 ms   172 ms  72.13.80.26 //美国加州
 17   175 ms   175 ms   176 ms  68.68.99.173 //抵达目标主机(美国加州)
 
Trace complete.

以上ip的地址来之:http://www.ip2location.com/

忽然感觉这个ip数据是不是有问题……


linux之traceroute

Traceroute的命令参数:
Traceroute的用法为: Traceroute [options] <IP-address or domain-name> [data size]
[options]的内容有:

  -d   使用Socket层级的排错功能。
  -f<存活数值>   设置第一个检测数据包的存活数值TTL的大小。
  -F   设置勿离断位。
  -g<网关>   设置来源路由网关,最多可设置8个。
  -i<网络界面>   使用指定的网络界面送出数据包。
  -I   使用ICMP回应取代UDP资料信息。
  -m<存活数值>   设置检测数据包的最大存活数值TTL的大小。
  -n   直接使用IP地址而非主机名称。
  -p<通信端口>   设置UDP传输协议的通信端口。(缺省为33434)

  -q  设置TTL测试数目(缺省为3)
  -r   忽略普通的Routing Table,直接将数据包送到远端主机上。
  -s<来源地址>   设置本地主机送出数据包的IP地址。
  -t<服务类型>   设置检测数据包的TOS数值。
  -v   详细显示指令的执行过程。
  -w<超时秒数>   设置等待远端主机回报的时间。
  -x   开启或关闭数据包的正确性检验。 
[data size]:每次测试包的数据字节长度(缺省为38)

因为我的vps系统是CentOS,但是没有安装traceroute软件,需要自行安装

[root@localhost ~]# traceroute //没有这个命令

-bash: traceroute: command not found

采用yum进行安装(安装完成后可以输入traceroute看到更多可选参数):
yum_install_traceroute.jpg
大小: 70.67 K
尺寸: 254 x 300
浏览: 86 次
点击打开新窗口浏览全图
测试下从美国到杭州某网络公司服务器:
tracert eb.jpg
大小: 70.31 K
尺寸: 300 x 210
浏览: 87 次
点击打开新窗口浏览全图
测试下从vps到牛人张宴博客的路由跳转:
tracert s135.jpg
大小: 15.19 K
尺寸: 300 x 34
浏览: 40 次
点击打开新窗口浏览全图
看来是在同一个机房里的机器,只是出口ip不一样。

 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地址,三个包每次来回所花时间。

posted @ 2012-12-10 14:40 alxe_yu 阅读(...) 评论(...) 编辑 收藏