第8章 Traceroute程序

所属:TCP/IP详解 卷1:协议 来源:TCP/IP详解 卷1:协议

本章介绍Traceroute程序,包括Traceroute的工作原理、IP选项和路径追踪等。


8.1 引言

Traceroute的作用

Traceroute程序:

  • 追踪IP数据报的路径
  • 看从源到目的经过哪些路由器
  • 测试网络路径
  • 诊断网络问题

traceroute用来追踪网络路径。


为什么需要Traceroute

为什么需要traceroute:

  • 网络不通,不知道哪里断了
  • 想知道路径经过哪些地方
  • 想知道哪一段延迟大
  • 诊断网络问题

能得到什么:

  • 经过的路由器列表
  • 每一跳的RTT
  • 哪一跳有问题

traceroute用来诊断网络路径。


本章讨论的内容

本章讨论的内容:

  • Traceroute的工作原理
  • UDP版本的traceroute
  • ICMP版本的traceroute
  • 路径不对称问题
  • Traceroute的输出

本章介绍Traceroute程序。


8.2 Traceroute的工作原理

基本原理

Traceroute的基本原理:

  • 利用IP的TTL字段
  • 利用ICMP超时报文
  • 逐步增加TTL
  • 发现每一跳的路由器

用TTL和ICMP超时来追踪路径。


详细过程

Traceroute的详细过程(UDP版本):

  1. TTL=1

    • 发UDP数据报,TTL=1
    • 第一个路由器收到,TTL减1=0
    • 丢弃,发ICMP超时(类型11)
    • 得到第一跳的地址和RTT
  2. TTL=2

    • 发UDP数据报,TTL=2
    • 第一个路由器转发,TTL=1
    • 第二个路由器收到,TTL=0
    • 丢弃,发ICMP超时
    • 得到第二跳的地址和RTT
  3. TTL=3, 4, 5…

    • 以此类推
    • 直到到达目的主机
  4. 到达目的主机

    • TTL够大,到达目的
    • 目的主机收到UDP
    • 端口是一个没用的端口
    • 发ICMP端口不可达(类型3,代码3)
    • 收到端口不可达,说明到了
    • 结束

逐步增加TTL,发现每一跳。


为什么用UDP

为什么用UDP:

  • 需要让目的主机返回一个ICMP
  • 用一个不可能的端口
  • 目的主机收到就回端口不可达
  • 这样就知道到了

为什么不用ICMP回显:

  • 目的主机回的是回显应答
  • 和超时报文类型不同
  • 也可以,但需要区分
  • UDP更简单

UDP版本用端口不可达判断到达。


ICMP版本

ICMP版本的traceroute:

  • 用ICMP回显请求
  • 也是逐步增加TTL
  • 到达目的后回的是回显应答
  • Windows的tracert就是ICMP版本的

区别:

  • UDP版本:Unix/Linux常用
  • ICMP版本:Windows常用
  • 原理一样,只是用的协议不同

有UDP和ICMP两种版本。


8.3 Traceroute的输出

输出例子

Traceroute的输出例子:

traceroute to www.baidu.com (110.242.68.3), 30 hops max, 60 byte packets
 1  192.168.1.1 (192.168.1.1)  1.23 ms  0.98 ms  1.05 ms
 2  10.0.0.1 (10.0.0.1)  5.67 ms  5.43 ms  5.89 ms
 3  202.99.1.1 (202.99.1.1)  10.23 ms  10.11 ms  10.45 ms
 4  * * *
 5  110.242.68.3 (110.242.68.3)  20.34 ms  20.12 ms  20.56 ms

traceroute输出每一跳的信息。


输出字段说明

输出字段:

  1. 跳数

    • 第一列,1, 2, 3…
    • 第几跳
  2. 路由器地址

    • 路由器的IP和主机名
    • 反向解析的
  3. 三个RTT

    • 每跳发三个包
    • 三个RTT值
    • 看稳定性
  4. 星号(*)

    • 没收到应答
    • 可能超时了
    • 可能路由器不发ICMP

输出包含每一跳的地址和RTT。


为什么每跳发三个包

为什么每跳发三个包:

  • 看RTT的稳定性
  • 一个可能不准
  • 三个更有参考性
  • 看抖动情况

三个包看稳定性。


8.4 Traceroute的问题

路径不对称

路径不对称问题:

  • 去的路径和回来的路径可能不一样
  • 测的RTT是往返的
  • 不知道去用了多久,回来用了多久
  • 可能误导

例子:

  • 去的时候走A路径,很快
  • 回来的时候走B路径,很慢
  • RTT看起来很大
  • 但其实去的路径很快

路径不对称是个问题。


路由器不发ICMP

路由器不发ICMP:

  • 有些路由器配置成不发ICMP超时
  • 安全原因
  • 性能原因
  • 这一跳就显示星号

怎么办:

  • 不代表这一跳不通
  • 只是不回ICMP
  • 后面的跳可能还有回应

有些路由器不回ICMP。


负载均衡

负载均衡问题:

  • 路径有多个
  • 不同的包走不同的路
  • 同一个TTL的三个包可能走不同路径
  • 显示不同的地址

表现:

  • 同一跳有多个不同的IP
  • 每次跑结果不一样
  • 正常现象

负载均衡可能导致同一跳多个IP。


最大跳数限制

最大跳数限制:

  • 默认30跳
  • 超过就停止
  • 防止无限循环
  • 可以用-m参数改

有最大跳数限制。


8.5 IP选项和Traceroute

记录路由选项

记录路由选项:

  • ping可以用
  • traceroute也可以用
  • 但记录路由最多9个IP
  • 路径长了不够用
  • 所以traceroute用TTL的方法

记录路由不够用,所以用TTL方法。


源站选路

源站选路:

  • traceroute可以用源站选路
  • 指定路径
  • 测试特定路径
  • 用-g选项

用途:

  • 测试特定路径
  • 诊断问题
  • 但很多路由器不支持

源站选路可以指定路径。


8.6 Traceroute和Ping的比较

比较

Traceroute vs Ping:

对比项PingTraceroute
作用测试连通性和RTT追踪路径
原理ICMP回显TTL+ICMP超时
信息整体RTT、丢包每一跳的地址和RTT
协议ICMPUDP或ICMP
用途简单测试路径诊断

两者各有用途。


什么时候用哪个

什么时候用ping:

  • 简单测试通不通
  • 测整体RTT
  • 测丢包率
  • 快速检查

什么时候用traceroute:

  • 不通,想知道哪里断了
  • 想知道经过哪些路由器
  • 想知道哪一段延迟大
  • 路径诊断

根据需要选择。


8.7 小结

Traceroute概述

  1. 作用

    • 追踪网络路径
    • 看经过哪些路由器
    • 诊断网络问题
  2. 基本原理

    • TTL字段
    • ICMP超时报文
    • 逐步增加TTL

工作原理

  1. UDP版本

    • 发UDP包
    • 逐步增加TTL
    • 到目的后回端口不可达
    • Unix/Linux常用
  2. ICMP版本

    • 发ICMP回显
    • 逐步增加TTL
    • 到目的后回回显应答
    • Windows常用

输出

  1. 输出内容

    • 跳数
    • 路由器地址
    • 三个RTT
    • 星号表示超时
  2. 为什么三个包

    • 看稳定性
    • 看抖动

问题

  1. 路径不对称

    • 去和回路径不同
    • RTT是总和
  2. 路由器不发ICMP

    • 显示星号
    • 不代表不通
  3. 负载均衡

    • 同一跳多个IP
    • 正常现象
  4. 最大跳数

    • 默认30跳
    • 可以改

IP选项

  1. 记录路由

    • 不够用
    • 最多9个
  2. 源站选路

    • 指定路径
    • 很多不支持

vs Ping

  1. Ping

    • 简单测试
    • 整体RTT
  2. Traceroute

    • 路径诊断
    • 每一跳信息

关键概念

  1. Traceroute

    • 追踪路径
    • TTL+ICMP超时
  2. UDP vs ICMP版本

    • 两种实现
    • 原理一样
  3. 路径不对称

    • 去回路径不同
    • RTT是总和
  4. 每跳三个包

    • 看稳定性
    • 看抖动

Traceroute