用 TTL 推断什么
IP 头里的 TTL(生存时间)每经过一台三层设备就减一,减到零就丢弃并回 ICMP 超时。操作系统发第一个包时会填一个初始值,常见的是 64、128、255,因此用初始值减去抓到的值,可以粗略估算这个包从发送端到你这里经过了几跳。它不能当作定位手段,但能帮你判断来源是否符合预期、路径是否发生变化。
基本信息
| 抓包字段 | Wireshark 中为 ip.ttl;tcpdump -v 输出中显示为 ttl |
|---|---|
| 常见初始值 | Linux 与多数 Unix 为 64,Windows 为 128,部分网络设备为 255 |
| 换算方式 | 跳数约等于初始值减实测值,取最接近的常见初始值反推 |
| 抓包点修正 | 换算结果是相对抓包点的跳数,不是相对你的工位 |
| 影响因素 | 中间设备可能重置或改写 TTL,代理与负载均衡常见 |
| 适用范围 | 仅作辅助判断,不作为定责依据 |
典型使用场景
- 来源核查:判断某个包的发送端是真客户端还是绕了远路的代理
- 路径变化:同一对端前后 TTL 明显不同,提示链路或出口发生切换
- 多路径识别:同一对端 TTL 小范围浮动,常见于等价多路径转发环境
- 异常检测:内网主机出现 TTL 很小或很大的包,提示来源与预期不符
- 远端探测:粗略估计跨了几层网络,辅助理解延迟构成
查看与统计
查看与统计
# 看某个来源的 TTL 分布, 判断路径是否稳定
tshark -r a.pcap -Y 'ip.src == 10.0.0.9' -T fields -e ip.ttl | sort | uniq -c
# 抓包时直接看 TTL
tcpdump -n -v -c 20 -i eth0 'host 10.0.0.9'
# 结合两侧地址确认方向与来源
tshark -r a.pcap -Y 'ip.src == 10.0.0.9' -T fields -e ip.src -e ip.dst -e ip.ttl | head -20常见初始值与判读
| 初始值 | 常见来源 | 判读要点 |
|---|---|---|
| 64 | Linux、多数 Unix、网络设备 | 最主流, 实测 62 表示约 2 跳 |
| 128 | Windows 主机 | 实测 126 表示约 2 跳, 视具体系统 |
| 255 | 部分网络设备与老系统 | 较少见, 遇到时先确认设备型号 |
| 同值多重 | 同一对端出现多个值 | 多路径或多来源, 需结合五元组 |
| 值极小 | 本地链路协议或刚发出的包 | 常见于同一网段内的直连通信 |
换算前先确认抓包点位置:如果在核心交换机的镜像口抓包,得到的是相对该交换机的跳数,与你所在办公网的跳数不同,两者混用会得出矛盾结论。
等价多路径环境下同一对端的 TTL 在小范围内浮动属于正常现象,只有跨跳数的明显变化才值得进一步核对路由。