📄 一句话概括
TTL 每过一跳减一,减到 0 就被丢弃并回 ICMP 超时——这是防止路由表配错导致包无限打转的保险。
📝 本节和前面几节的关系
3.3.5 解决了【往哪走】;本篇解决【走不出来怎么办】。
一、TTL 机制
出发时给一个初值(常见 64、128);每过一台路由器减 1; 减到 0 → 丢弃 + 回 ICMP 超时给源主机。
二、为什么需要
路由表配置出错会形成环路——包在几台设备间打转; TTL 是这种灾难的硬止阀。 tracert 正是利用 TTL 逐跳加一逼路由器报家门。
三、动手 Demo:TTL 防循环
TTL 递减的过程:
ttl = 64
for hop in range(1, 5):
ttl -= 1
print('过 %d 跳 -> TTL=%d' % (hop, ttl))
print('...减到 0 -> 丢弃 + ICMP 超时')
实跑输出:
--------------------------------------------------------------------
TTL 防循环
--------------------------------------------------------------------
包每过一跳,TTL 减一:
出发 TTL=64
过 1 跳 -> 63
过 2 跳 -> 62
...
减到 0 -> 丢弃,回 ICMP 超时
教材点出:这是防止【路由表配错导致包打转】的死循环保险。
tracert 就是靠 TTL 从 1 开始逐次加一,逼路由器报家门。
教材此处强调的正是【环路保护】—— 这也是为什么 TTL 会被用于网络测绘(traceroute)。
30 秒实验
- 用 tracert 观察每一跳的 TTL 探测。
- Wireshark 抓包看 IP 头 TTL 沿途变化。
- 想想为什么 TTL 不设成一个很大的固定值。
常见误区
- 以为 TTL 是时间(秒)——是跳数。
- 以为 TTL 归零会重发——直接丢,靠上层重传。
自测三问(点开对答案)
1. TTL 是什么单位? —— 跳数。 2. TTL 归零怎么处理? —— 丢弃并回 ICMP 超时。 3. TTL 防的是什么? —— 路由环路导致的无限打转。- ☐ 下一节(3.3.7 通过分片功能拆分大网络包)
相关笔记
- 数据是否成功传输给接收方(ICMP) — ICMP 全解
- 对较大的数据进行拆分 — TCP 侧的切分对照
- 🔌 网络是怎样连接的 · 索引