zoukankan      html  css  js  c++  java
  • 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超时报文。

  • 相关阅读:
    JavaScript大杂烩1
    JavaScript大杂烩0
    Scrum敏捷开发沉思录
    C#的变迁史
    C#的变迁史
    C#的变迁史
    巧用浏览器F12调试器定位系统前后端bug-转载
    Jmeter如何把响应数据的结果保存到本地的一个文件
    Jmeter察看结果树的响应数据中的中文显示乱码问题处理
    Jmeter如何将上一个请求的结果作为下一个请求的参数——使用正则表达式提取器转载
  • 原文地址:https://www.cnblogs.com/AmosYang6814/p/11944078.html
Copyright © 2011-2022 走看看