traceroute怎样追踪数据包路由路径

联启 网络工具 18

本文目录导读:

traceroute怎样追踪数据包路由路径-第1张图片-电脑手机工具软件下载 - 免费实用工具合集 | 联启科技

  1. 核心机制:TTL(生存时间)
  2. 详细步骤(以 Unix/Linux 的 UDP traceroute 为例)
  3. 三种不同的实现方式
  4. 输出结果解读
  5. 局限性

traceroute(在 Windows 系统中是 tracert)通过一种逐跳探测的方式,利用 IP 包头的 TTL(生存时间) 字段和 ICMP(互联网控制消息协议)UDP(用户数据报协议) 的超时机制,一步步“套出”每一跳路由器的地址。

它的核心原理可以概括为:通过故意制造错误,迫使中间路由器回报自己的身份

下面详细拆解它的工作过程:

核心机制:TTL(生存时间)

  • 每个 IP 数据包都有一个 TTL 字段(通常初始值为 64 或 128)。
  • 每经过一个路由器(一跳),TTL 值减 1。
  • 当 TTL 减为 0 时,路由器会丢弃该数据包,并向发送方(你的电脑)发送一个 ICMP Time Exceeded(超时) 错误消息。
  • 这个 ICMP 错误消息的源 IP 地址,就是丢弃数据包的那个路由器的 IP 地址

详细步骤(以 Unix/Linux 的 UDP traceroute 为例)

假设你想追踪到目标 8.8.8 的路由。

  1. 第一跳:

    • 你发送一个 TTL=1 的 UDP 数据包(或 ICMP 请求包)到 8.8.8 的一个大端口(如 33434)。
    • 数据包到达第一跳路由器(你的网关),TTL 变成 0。
    • 路由器发现 TTL 耗尽,丢弃该包,并向你的 IP 回复一个 ICMP 超时消息
    • 你收到这个回复,从中提取出第一跳路由器的 IP 地址(168.1.10.0.1)。
    • 结果: 1 192.168.1.1
  2. 第二跳:

    • 你发送一个 TTL=2 的 UDP 数据包到 8.8.8
    • 第一跳路由器(192.168.1.1)看到 TTL=2,合法,减为 1,转发给下一跳。
    • 第二跳路由器收到后,TTL 从 1 变成 0,丢弃,回复 ICMP 超时消息
    • 你收到回复,得到第二跳路由器的 IP。
    • 结果: 2 10.0.0.2
  3. 重复步骤: 依次发送 TTL=3、4、5... 的数据包,直到发生以下两种情况之一:

    • 到达目标主机: 当 TTL 足够大,数据包最终到达目标 8.8.8,目标主机收到 UDP 包后,发现端口(如 33434)未监听,会回复一个 ICMP Port Unreachable(端口不可达) 错误。traceroute 收到这个错误,就知道已经到达终点,停止探测。
    • 达到最大跳数: 通常默认最多 30 跳,超过则停止。

三种不同的实现方式

不同系统为了兼容防火墙或策略,使用了不同的探测协议:

实现方式 使用协议 发送数据包 期望的回复 常见系统
UDP 模式 UDP + ICMP 发送 UDP 包到目标的高位端口(如 33434+) 中间跳:ICMP Time Exceeded
终点:ICMP Port Unreachable
Linux、macOS (默认)
ICMP 模式 ICMP 发送 ICMP Echo Request(Ping 包) 中间跳:ICMP Time Exceeded
终点:ICMP Echo Reply
Windows (tracert)、部分 Linux/Unix 选项
TCP 模式 TCP 发送 TCP SYN 包(如 HTTP 端口 80) 中间跳:ICMP Time Exceeded
终点:TCP SYN-ACK (或 RST)
tcptraceroute 工具或 nmap
  • 为什么 Windows 用 ICMP 而 Linux 默认用 UDP?

    这主要是历史原因和设计哲学不同,ICMP 模式更简单,但容易被防火墙屏蔽,UDP 模式利用高位端口,有时能穿透某些只拦截 ICMP 的防火墙,但目标主机的高位端口如果被占用,可能会返回不同的结果。

输出结果解读

traceroute 的典型输出如下:

traceroute to 8.8.8.8 (8.8.8.8), 30 hops max, 60 byte packets
 1  * * *                                    # 第一跳无响应(可能被防火墙阻止)
 2  10.0.0.1 (10.0.0.1)  2.123 ms  2.034 ms  1.998 ms  # 第二跳:IP + 往返时间(3次探测)
 3  172.16.1.1 (172.16.1.1)  5.234 ms  5.145 ms  5.111 ms
 ...
 6  8.8.8.8 (8.8.8.8)  15.345 ms  15.221 ms  15.198 ms  # 到达目标
  • * `**: 表示该跳没有收到 ICMP 回复,常见原因:
    • 路由器配置了不回复 ICMP 超时消息(安全策略)。
    • 防火墙屏蔽了 ICMP 包。
    • 网络拥塞导致丢包。
  • 往返时间(RTT): 显示三次探测的耗时,如果时间突然变大,说明该跳可能存在性能瓶颈或物理距离较远。

局限性

  1. 路径不对称traceroute 只显示了从你到目标的路径,回程路径可能完全不同(中间路由器不同),但你无法直接看到回程路径。
  2. 负载均衡: 现代网络常用多路径负载均衡,由于 traceroute 每跳发送不同的包,这些包可能走不同的路径,导致输出结果出现混乱的 IP 地址和时间。
  3. 防火墙屏蔽: 很多核心路由器或目标主机会直接丢弃 ICMP 超时消息或 UDP 包,导致出现 而无法探知路由。
  4. IP 地址变化: 同一个路由器可能有多个接口,不同方向的流量可能显示不同 IP。

traceroute 通过逐步增加 TTL 的方式,让每一跳路由器“不得不”回复一个 ICMP 错误消息(因为它丢弃了数据包),从而暴露自己的位置,你最终看到的,就是这条数据包路径上所有愿意“开口”的路由器的名单。

标签: Traceroute原理 路由路径探测

抱歉,评论功能暂时关闭!