• 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超时报文。

  • 相关阅读:
    mysql 性能优化方案 (转)
    MYSQL 优化常用方法
    php高级研发或架构师必了解---很多问题面试中常问到!
    MetaMask/metamask-extension/mascara 的运行实现
    简单使用metamascara
    nodejs stream 手册学习
    nodejs-stream部分
    metamask中的import account的代码实现
    Signature Request Warnings & eth_sign学习
    gulp学习-metamask前端使用
  • 原文地址:https://www.cnblogs.com/AmosYang6814/p/11944078.html
Copyright © 2020-2023  润新知