TTL 是什么

TTL 是 IP 包里的一个计数字段,全称 Time To Live。它的作用是防止数据包在网络里无限循环。

核心机制

TTL 是一个 8 位字段,理论范围 0-255。每经过一个路由器(一跳),TTL 就减 1。当 TTL 减到 0 时,路由器丢弃这个包,并向源地址发回一个 ICMP "Time Exceeded" 消息。

所以 TTL 的实际含义是:这个包最多还能走多少跳。

为什么需要 TTL

网络里可能存在路由环路------包在几个路由器之间来回打转。如果没有 TTL,这种包会永远占用带宽和路由器资源。TTL 给了它一个硬性寿命上限,走够跳数就自动消亡。

常见的初始 TTL 值

不同操作系统的默认初始 TTL 不一样:

系统 默认 TTL
Linux 64
Windows 128
部分网络设备 255

可以用这个特性做粗略的 OS 指纹识别:ping 一个主机,看回包的 TTL,如果收到 57,那初始值大概率是 64,中间经过了 7 跳。

TTL 的两个经典用途

1. traceroute(路由追踪)

traceroute 的原理就是故意利用 TTL:先发 TTL=1 的包,第一跳路由器把它减到 0,回一个 ICMP 超时消息,这样就暴露了第一跳的 IP。然后发 TTL=2 的包,暴露第二跳,依次递增,直到到达目标。这样就能逐跳画出完整路径。

2. 限制作用范围

在组播、BGP 邻居建立等场景里,有时会故意把 TTL 设成 1,让包只能在本链路内传输,出不了直连设备。这是一种简单的安全边界控制。

一个容易混淆的点

TTL 和 DNS 里的 TTL 是两回事。DNS TTL 指的是记录在 DNS 缓存里能存多久,单位是秒。IP 的 TTL 是跳数计数,两者只是名字撞了,机制完全不同。

traceroute 第 16 跳之后全是 *,说明后续路由器不回应 ICMP 超时(很多骨干网设备默认关闭这个功能),并不代表包没过去。

有几种情况会让 TTL 反推和 traceroute 对不上:

1. 初始 TTL 不一定是 64。 如果百度那台服务器是 Windows(初始 128),那 128 - 48 = 80 跳,显然不合理,说明它不是 Windows。如果是某种网络设备(初始 255),255 - 48 = 207,更不可能。所以基本可以确定初始值是 64。

2. traceroute 的 * 不代表没经过。 中间那些 * * * 的路由器只是不回复 ICMP 超时,但包确实从它们身上过去了。TTL 计数把这些"沉默的跳"也算进去了。

3. 去程和回程路径可能不对称。 traceroute 测的是去程路径,而 ping 的 TTL 是回包里的值,反映的是回程路径的跳数。两者可能不一样。

4. 同一域名可能解析到不同 IP。 你 ping 和 traceroute 虽然都显示 124.237.177.164,但百度有多台服务器,不同时刻可能解析到不同地址,路径也可能不同。

相关推荐
香吧香2 个月前
SNMP Walk 中的 maxRepetitions 详解
网络与传输协议
香吧香6 个月前
wireshark 抓包Trap上报告警内容
网络与传输协议
香吧香1 年前
SNMP 请求响应报文传输分片定位
linux·网络与传输协议
香吧香1 年前
wireshark 进行snmp 协议加密报文解密查看
网络与传输协议
香吧香1 年前
wireshark 抓包查看包得明文消息
网络与传输协议
香吧香2 年前
iptables 命令使用帮助总结
linux·网络与传输协议
香吧香2 年前
iptables 工作过程整理
linux·网络与传输协议
香吧香2 年前
SNAT 与 DNAT
linux·网络与传输协议
香吧香3 年前
BGP路由协议学习一
网络与传输协议