traceroute命令

traceroute命令
 
    traceroute是用来检测发出数据包的主机到目标主机之间所经过的网关数量的工具。traceroute的原理是试图以最小的TTL(存活时间)发出探测包来跟踪数据包到达目标主机所经过的网关,然后监听一个来自网关ICMP的应答。发送数据包的大小默认为38个字节。
 
 
原理:
    
    程序利用增加存活时间(TTL)来实现其功能。每当数据包(3个数据包包括源地址,目的地址和包发出的时间标签)经过一个路由器,其存活时间就会减1。当其存活时间是0时,主机便取消数据包,并传送一个ICMP(Internet控制报文协议。它是TCP/IP协议族的一个子协议,用于在IP主机、路由器之间传递控制消息。控制消息是指网络通不通、主机是否可达、路由是否可用等网络本身的消息。这些控制消息虽然并不传输用户数据,但是对于用户数据的传递起着重要的作用。) TTL数据包给原数据包的发出者。
 
 
traceroute程序完整过程:
    
    首先它发送一份TTL字段为1的IP数据包给目的主机,处理这个数据包的第一个路由器将TTL值减1,然后丢弃该数据报,并给源主机发送一个ICMP报文(“超时”信息,这个报文包含了路由器的IP地址,这样就得到了第一个路由器的地址),然后traceroute发送一个TTL为2的数据报来得到第二个路由器的IP地址,继续这个过程,直至这个数据报到达目的主机。
 
 
1.命令格式:
 
     traceroute [参数] [主机]
 
 
2.命令功能:
 
     traceroute指令让你追踪网络数据包的路由途径,预设数据包大小是40Bytes,用户可另行设置。
    
    具体参数格式:
        
        traceroute [-dFlnrvx][-f<存活数值>][-g<网关>…][-i<网络界面>][-m<存活数值>][-p<通信端口>][-s<来源地址>][-t<服务类型>][-w<超时秒数>][主机名称或IP地址][数据包大小]
 
 
3.命令参数:
 
    -d 使用Socket层级的排错功能。
    -f 设置第一个检测数据包的存活数值TTL的大小。
    -F 设置勿离断位。
    -g 设置来源路由网关,最多可设置8个。
    -i 使用指定的网络界面送出数据包。
    -I 使用ICMP回应取代UDP资料信息。
    -m 设置检测数据包的最大存活数值TTL的大小。
    -n 直接使用IP地址而非主机名称。
    -p 设置UDP传输协议的通信端口。
    -r 忽略普通的Routing Table,直接将数据包送到远端主机上。
    -s 设置本地主机送出数据包的IP地址。
    -t 设置检测数据包的TOS数值。
    -v 详细显示指令的执行过程。
    -w 设置等待远端主机回报的时间。
    -x 开启或关闭数据包的正确性检验。
 
 
4 . 案例01:
 
    traceroute www.badiu.com
 
        
 
     说明:
        
        记录按序列号从1开始,每个序号表示一跳,每一条代表一个网关,我们看到每行有三个时间,单位是 ms 即数据包到达此跳路由或主机再返回你的主机所需要的时间。
traceroute默认每次发送3个数据包,所以显示三个往返时间。
        
        这里的 * 号代表 路由器禁止了ICMP数据包返回或者是防火墙的过滤。 traceroute程序本身就被用来发现网络故障,如果从某跳开始所有的时间都成了星号,即超时,则网络故障很有可能就出现在了这一跳
        
        这里使用 -q 参数指定每次发送次数 traceroute -q 4 www.baidu.com  表示向每个网关发送4个数据包。
        
        见下图:
        
 
 
         有时我们在某一网关处延时比较长,有可能是某台网关比较阻塞,也可能是物理设备本身的原因。当然如果某台DNS出现问题时,不能解析主机名、域名时,
    也会有延时长的现象;可以加-n 参数来避免DNS解析,以IP格式输出数据。
        
        
 
        如果在局域网中的不同网段之间,我们可以通过traceroute 来排查问题所在,是主机的问题还是网关的问题。如果我们通过远程来访问某台服务器遇到问题时,
    我们用到traceroute 追踪数据包所经过的网关,提交IDC服务商,也有助于解决问题;但目前看来在国内解决这样的问题是比较困难的,就是我们发现问题所在,
    IDC服务商也不可能帮助我们解决。
 
 
5 . 案例02:
 
    参数: -m  设置检测数据包的最大存活数值TTL的大小。
 
    traceroute -m 6 www.baidu.com
    
    
    
    通过结果可以看到存货数值=6,当跳到序号6时第6个路由取消数据包。
    当存活值=0时,路由便取消数据包。
 
6 . 案例03:

     参数: -w  设置等待远端主机回报的时间
   
  traceroute -w 3 www.baidu.com
 
    
 
 
 
7 .扩展内容:
 
    目的主机在接收到TTL值为1的IP数据报是不会丢失的,这样也不会产生一个超时的ICMP数据报文,那么程序如何判断是否已经到达目的主机了呢?
    
   在Linux下,traceroute程序发送一个UDP数据报给目的主机,但它选择一个不存在的端口作为UDP端口号(大于30000),使目的主机的任何一个应用程序都不可能使用该端口,因此,当该数据报达到目的主机的时候,目的主机会产生一个“端口不可达”错误的ICMP报文,这样,traceroute程序要做的就是区分接收到的ICMP报文是超时还是端口不可达,从而来区分是路由器还是目的主机。
    
 
8 .本文参考内容:
 
    
DDU ICMP controls consist of 3 controls : TDDUOSPING - A non blocking PING protocolTDDUOSTRACEROUTE - A non blocking TraceRoute ProtocolTDDUOSDNS - A non blocking ARP/RARP controlAbout TDDUOSDNS :Host names are resolved to IP addresses, and IP address can be resolved to host names. If you enter an IP into the ADDRESS property, the HOST property will be completed, and the OnHostLookup event will occur. If you enter an IP or a HOST name into the HOST property, the ADDRESS property will be completed, and the OnAddressLookup event will occure. The runtime property OK can be queried to see if the lookup was successful. To reduce lookup overhead, an IP/Hostname cache can be used by setting the UseIPCache property to true. The cache is only persistent for the current session, and maynot be saved between sessions. You can use FlushIPCache method to clear the cache.When combined with the other controls in this package, the delay normally associated with connecting a socket can be avoided. Each control must have a unique TDDUOSDNS control.About the Demo :The demo project shows how to use each control. The TDDUOSDNS control is shown both in combination with other controls, and used independantly. DNS not an ICMP protocol, but it is included to prevent the windows application from blocking.Blocking is when your windows program stops responding to messages, waiting for a call to return. Normally, all calls blocks for a very short time, and is not noticable - but when you have to wait for 5 or 10 seconds or even longer, the application can appear to be crashed. By using threads, callback messages, and events, I have illustrated how it is possible to avoid blocking in an application.These controls form a custom set of TCP/IP controls I have been developing over the past year. The ICMP controls were written over the period of a week, and I consulted several references for information. I would like to thank Quinn Shute for his excellent book "Windows Socket Network Programming&
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值