Tracert
Tracert是路由跟踪实用程序,用于确定IP地址数据报访问目标所采取的路径,Tracert命令用IP生存时间(TTL)字段和ICMP错误消息来确定从一个主机到网络上其他主机的路由,Tracert 先发送TTL为1的回应数据包,并在随后的每次发送过程将TTL递增1,直到目标响应或TTL达到最大值,从而确定路由,通过检查中间路由器发回的“ICMP已超时”的消息确定路由,某些路由器不经询问直接丢弃TTL过期的数据包,这在Tracert实用程序中看不到的。
Tracert命令工作原理[ ]
- 通过向目标发送不同IP生存时间 (TTL) 值的“Internet 控制消息协议(ICMP)”回应数据包,Tracert诊断程序确定到目标所采取的路由信息。要求路径上的每个路由器在转发数据包之前至少将数据包上的TTL递减1。数据包上的TTL减为0时,路由器应该将“ICMP 已超时”的消息发回源系统。
- Tracert 先发送TTL为1的回应数据包,并在随后的每次发送过程将TTL递增1,直到目标响应或TTL达到最大值,从而确定路由,通过检查中间路由器发回的“ICMP 已超时”的消息确定路由。
Tracert 命令选项[ ]
我们可以用基于记录路由选项的路由探测,基于UDP协议的路由探测,基于ICMP Echo Request的路由探测的三种方式来探测一个数据包从源点到目的地经过了哪些中转路由器。当我们不能通过网络访问目的设备时,网络管理员就需要判断是哪里出了问题,问题不仅仅会出现在最终目的设备,也可能出现在转发数据包的中间路由器。下面是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地址。
Tracert命令使用[ ]
如果使用 -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命令注意事项[ ]
基于记录路由选项的路由探测[ ]
- ping命令发出的是类型为8的ICMP数据报,当使用ping -r时,这个类型为8的ICMP数据报被装在一个IP数据报里,IP数据报的Options(选项)字段预留出给中间路由器扣戳的地方,这个地方不太大,只能容纳9台中转路由器的IP地址。
- 当这个数据报被发送端送出后,每经过一个中转路由器,中转路由器的IP软件便会在此IP数据报的选项字段中加入一条这个中转路由器的IP地址。
- 当这个数据包到达目的地时(如www.123.com),目的设备便会生成一条类型为0的ICMP数据报,这个ICMP数据报被封装在一个新的IP数据报里,新IP数据报的Options字段中拷贝了刚才收到的IP数据报中的Options字段。
- 当这个新IP数据报回送到源发送端时,您便会在屏幕上看见一些中间路由器的IP地址了。
基于UDP协议的路由探测[ ]
下面以服务器即卖茄子(提供HTTP服务),也卖黄瓜(提供FTP服务),但不卖土豆(未监听的UDP端口),有位买家,为了知道一封信到达蔬菜供应商www.123.com中间需要经过几个邮局为例:
- 买家在信封的TTL位置写上数字1,当这封信到达与自己相邻的第一个邮局时,邮局的人把TTL值减1,于是TTL为0,邮局章程规定,把TTL值为0的信丢到垃圾桶里,然后给买家发一封名曰超时的信,信上写了丢信邮局的名字,以告诉买家信被谁丢掉了。
- 买家在信封的TTL位置写上数字2,当这封信到达与自己相邻的第一个邮局时,邮局的人把TTL值减1,现在TTL值为1,邮局章程规定, TTL值不为0的数据包需要继续转发给下一个邮局,于是这封信又被转发到了下一个邮局。当下一个邮局收到这封信时,邮局的人把TTL值减1,于是TTL为0,邮局章程规定,把TTL值为0的信丢到垃圾桶里,然后给买家发一封名曰超时的信,信上写了丢信邮局的名字,以告诉买家信被谁丢掉了。
- 我们假设中间只经过两个邮局信便到达目的地了,接着第二步,买家选在把TTL值设置为3,当这封信到达与自己相邻的第一个邮局时,邮局的人把TTL值减1,现在TTL值为2,邮局章程规定,TTL值不为0的数据报需要继续转发给下一个邮局,于是这封信又被转发到了下一个邮局。
- 当买家收到类型为终点不可达的信时,就不再把那封问土豆价格的信上的TTL加1了,因为他已经知道了到达目的地的全部路由。
ICMP Echo Request的路由探测[ ]
- 这种探测方式与基于UDP协议的路由探测的实现步骤一样,但发送端送出的不是一个UDP数据包,而发送的是一个ICMP类型为8的Echo Request(回显请求)数据报文。
- 与基于UDP协议的路由探测技术一样,每次发送端都会把TTL值加1,每个中转路由器都对TTL值减1,如果为0,便丢弃后给发送端发送一个超时报文,若不为0,则继续转发给下一跳。
- 唯一不同的是,当这个数据报到达最终目的节点时,由于发送端发送的是Echo Request报文,所以接收端就会相应一个ICMP类型为0的数据报文。这样当发送端收到ICMP类型为0的数据报文时,就知道了全部路由已经查询完毕,终止继续探测。