第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版本):
-
TTL=1
- 发UDP数据报,TTL=1
- 第一个路由器收到,TTL减1=0
- 丢弃,发ICMP超时(类型11)
- 得到第一跳的地址和RTT
-
TTL=2
- 发UDP数据报,TTL=2
- 第一个路由器转发,TTL=1
- 第二个路由器收到,TTL=0
- 丢弃,发ICMP超时
- 得到第二跳的地址和RTT
-
TTL=3, 4, 5…
- 以此类推
- 直到到达目的主机
-
到达目的主机
- 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, 2, 3…
- 第几跳
-
路由器地址
- 路由器的IP和主机名
- 反向解析的
-
三个RTT
- 每跳发三个包
- 三个RTT值
- 看稳定性
-
星号(*)
- 没收到应答
- 可能超时了
- 可能路由器不发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:
| 对比项 | Ping | Traceroute |
|---|---|---|
| 作用 | 测试连通性和RTT | 追踪路径 |
| 原理 | ICMP回显 | TTL+ICMP超时 |
| 信息 | 整体RTT、丢包 | 每一跳的地址和RTT |
| 协议 | ICMP | UDP或ICMP |
| 用途 | 简单测试 | 路径诊断 |
两者各有用途。
什么时候用哪个
什么时候用ping:
- 简单测试通不通
- 测整体RTT
- 测丢包率
- 快速检查
什么时候用traceroute:
- 不通,想知道哪里断了
- 想知道经过哪些路由器
- 想知道哪一段延迟大
- 路径诊断
根据需要选择。
8.7 小结
Traceroute概述
-
作用
- 追踪网络路径
- 看经过哪些路由器
- 诊断网络问题
-
基本原理
- TTL字段
- ICMP超时报文
- 逐步增加TTL
工作原理
-
UDP版本
- 发UDP包
- 逐步增加TTL
- 到目的后回端口不可达
- Unix/Linux常用
-
ICMP版本
- 发ICMP回显
- 逐步增加TTL
- 到目的后回回显应答
- Windows常用
输出
-
输出内容
- 跳数
- 路由器地址
- 三个RTT
- 星号表示超时
-
为什么三个包
- 看稳定性
- 看抖动
问题
-
路径不对称
- 去和回路径不同
- RTT是总和
-
路由器不发ICMP
- 显示星号
- 不代表不通
-
负载均衡
- 同一跳多个IP
- 正常现象
-
最大跳数
- 默认30跳
- 可以改
IP选项
-
记录路由
- 不够用
- 最多9个
-
源站选路
- 指定路径
- 很多不支持
vs Ping
-
Ping
- 简单测试
- 整体RTT
-
Traceroute
- 路径诊断
- 每一跳信息
关键概念
-
Traceroute
- 追踪路径
- TTL+ICMP超时
-
UDP vs ICMP版本
- 两种实现
- 原理一样
-
路径不对称
- 去回路径不同
- RTT是总和
-
每跳三个包
- 看稳定性
- 看抖动