首页/网络/协议速查/TTL 生存时间字段

TTL 生存时间字段

TTL 每经过一台路由器减 1,减到 0 丢弃并发 ICMP 超时:防止路由环路里包永远打转,也是 traceroute 的实现基础。

协议速查网络更新于 2026-10-13

TTL 防止报文无限打转

TTL 是 IP 头里的跳数上限:报文每经过一台路由器就减一,减到零会被丢弃,并由该路由器回一个 ICMP 超时报文通知源端。它的主要用途是防止路由环路让报文永远循环,同时也被 traceroute 用作逐跳探测的基础。不同系统给新发报文设置的默认值不一样,所以 ping 结果里的剩余 TTL 常被拿来粗略推断对端是什么系统。

常见默认值

系统默认 TTL说明
Linux64由内核参数 ip_default_ttl 控制
Windows128可通过注册表调整
网络设备255部分路由协议对 TTL 有额外要求

观察与修改

观察与修改
ping -c 1 8.8.8.8 | grep ttl             # 看剩余 TTL,据此粗略推断跳数
sysctl net.ipv4.ip_default_ttl            # 查本机默认 TTL 设置
tcpdump -nn -v 'icmp' -c 5 | grep -i ttl  # 抓包看实际报文字段
sysctl -w net.ipv4.ip_default_ttl=64      # 临时修改,重启后失效
traceroute -n -m 5 8.8.8.8                # 利用 TTL 递增确认前几跳地址

用剩余 TTL 推断对端

剩余值常见对应可靠性
64 附近Linux 与多数类 Unix 系统中等,虚拟化与中间设备可能改写
128 附近Windows 系统中等,经过的跳数越多推断越不准
255 附近网络设备或特殊配置中等,需结合其它特征一起判断
明显偏小经过跳数较多或初始值被改过低,仅作参考不要作为结论依据

典型使用场景

  • 配合 ping 粗判对端系统类型,缩小排查范围
  • 理解 traceroute 的工作原理,解释为什么它能逐跳显示路径
  • 排查路由环路:TTL 超时报文集中出现是环路的重要线索
  • 做网络分段演练时确认报文经过的最大跳数是否符合预期
  • 排查「小包正常、大包不通」时结合 ICMP 超时与分片提示一起分析
注意区分两个同名的 TTL:IP 头里的 TTL 是跳数上限,DNS 记录里的 TTL 是缓存秒数,二者毫无关系。排障时对话里混用会造成理解偏差,最好明确写成 IP TTL 或 DNS TTL。
IPv6 把同一字段改名为跳限 Hop Limit,作用与 IPv4 的 TTL 完全一致,只是名字不同;Windows 想改默认值要动注册表里 Tcpip\Parameters 下的 DefaultTTL,改完需重启才生效,而 Linux 用 sysctl net.ipv4.ip_default_ttl 临时调整、写进配置文件才持久。

易错点

  • 把 IP 的 TTL 与 DNS 的 TTL 混为一谈,一个说跳数一个说缓存时间,讨论到一半就会出现理解偏差
  • 想让网络「更稳」而调大 TTL,实际上 TTL 只控制跳数上限,丢包与拥塞由其它机制决定
  • 仅凭剩余 TTL 断定对端操作系统,中间设备与虚拟化环境会改写该字段,结论可靠性有限
  • 关闭或过滤全部 ICMP 超时报文,导致 traceroute 与路径 MTU 发现失效,问题被掩盖得更深

数据来源与参考

  • RFC 791 §3.2.1.9
  • RFC 1812 §4.2.2.9

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌