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 106.14.12.46 网络抓包图。

下图是TTL=8的tracert工具发送的包的具体内容

上图中,ttl的值被设置为8,当数据包经过第八跳的路由器时,ttl的值被减为0,路由器 202.97.27.13发回超时的ICMP报文,ICMP诊断程序接收到该ICMP报文时,检查报文的数据部分,当确定时上一次发送的报文的错误报告报文时,显示路由器信息。

 

但是部分路由器在接收到ttl=0的报文时,不回复ICMP超时报文,如上图的第14跳、15跳、16跳路由器,路由器直接丢弃了该报文,导致tracert命令无法收到回复,从而导致无法显示路由信息。

同时,也可以注意到tracert命令中,有三个时间戳,这三个时间戳,是因为tracert命令在发送追踪数据包的时候,同一个包会发送三次。如下图所示,同一个测试包发送了三次。

在进行网络抓包的时候,可以看见除了ICMP协议外,还有NBNS协议,如下图所示:

通过查阅资料可以知道NBNS是指网络基本输入/输出系统协议,在 每个计算机在网络中都有一个NetBIOS名称和一个IP地址。 网络通过NBNs协议查询域名空间相对应的IP地址。在window系统中,域名解析机制大致顺序如下所示:

  1. Hosts文件(本地文件)

  2. NetBIOS缓存(本地文件)

  3. DNS服务器解析(DNS数据包)

  4. WINS服务器解析(NBNS数据包)

  5. NetBIOS广播查找(NBNS数据包)

因此在使用tracert命令时,tracert诊断工具的流程如下所示:

1.

tracert诊断工具首先使用NBNS本地服务和DNS域名解析服务解析tracert命令后跟着的网址,获取器真正的IP地址。

2.主机会发送测试数据包,并设置其TTL为一个较小的值,当路由其由于超时丢弃该路由的时候,路由器会向源主机发送ICMP超时报文。

posted @ 2019-11-27 17:49  与兔赛跑的龟  阅读(1210)  评论(0编辑  收藏  举报