💻 第九章 通过七个简单的实验理解TCP/IP网络
📄 一句话概括

TTL 每过一跳减 1、减到 0 就回信报名——tracert 发 TTL=1、2、3…… 的包,把沿途每台路由器逐站列成清单。

📝 本节和前面几节的关系

上一节知道包会逐跳接力,本节用 tracert 把这条接力链亲眼列出来——机关在 TTL 字段。

一、TTL 的机关

IP 包头部有个 TTL(生存时间)字段:每经过一台路由器减 1,减到 0 就被丢弃并给发送方回一封信; 这本是防环机制——包在网络里转圈时不至于永远转下去; 聪明用法:故意发 TTL=1 的包,它会在第一跳【阵亡】并回信——回信人就是第一台路由器;TTL=2 问出第二台……逐站点名。

二、实验怎么做

跑 tracert 8.8.8.8(或任意网站域名); 输出逐行是:站序、每站回信时间(通常测三次)、路由器地址; 第 1 站是你家路由器,第 2 站起是运营商骨干——平时看不见的接力链就此现形。

三、看清单时注意什么

中途某站显示 * * * 不一定是断线——有的路由器不回信,跳过继续; 去程和回程可以不走同一条路——逐跳选路本来就不保证对称; 【⚠️ 2026 现状】CDN 时代访问大网站常发现【第一站之外没几跳就到了】——因为内容缓存就在离你很近的节点。

四、动手 Demo:TTL 逐站探测

模拟 tracert 的原理:TTL 从 1 逐个加,每站的路由器【阵亡时报名】。

route = ["192.168.1.1", "10.66.0.1", "202.97.12.5", "8.8.8.8"]
for ttl, addr in enumerate(route, start=1):
    print("TTL=%d -> %s 回信报名" % (ttl, addr))

实跑输出:

--------------------------------------------------------------------
实验 5——查看路由器的路由过程
--------------------------------------------------------------------

tracert 的机关在 TTL 字段: 每过一台路由器减 1, 减到 0 就被丢下并回信报名。
于是发 TTL=1, 2, 3…… 的包, 就能一站一站问出整条路:

    跑 tracert 8.8.8.8:
        TTL=1 的包 -> 192.168.1.1 回信报名    1 ms
        TTL=2 的包 -> 10.66.0.1 回信报名    6 ms
        TTL=3 的包 -> 202.97.12.5 回信报名    12 ms
        TTL=4 的包 -> 8.8.8.8 回信报名    28 ms

  站序          角色                   谁家的设备
  -------------------------------------------------
  第 1 站       家里/公司的路由器      自己的网关
  第 2 站起     运营商的骨干路由器     电信/联通等
  末站          目的地服务器           对端机房

路线不是铁打的: 绕路、换线都会让 tracert 的清单变样——
每次跑都可能有细微不同, 这正是逐跳接力的本色。

tracert 每站测三次回信时间,是为了看延迟的稳定程度——单次会撞上偶然抖动。 TTL 初始值常见 64 或 128:用初始值减 tracert 站数,还能反推对方系统的默认值。

30 秒实验

  1. 跑 tracert 到你常去的网站,数一数经过几跳、第 1 站是不是你家网关。
  2. 跑两次 tracert 对比结果,观察路线是否完全一致。

常见误区

  1. 以为中途 * * * 就是网络断了——可能是那台路由器不回应 TTL 超时消息。
  2. 以为路径固定不变——逐跳选路下,绕路与换线都会让清单变样。
自测三问(点开对答案) 1. tracert 靠什么字段逐站点名? —— TTL——每跳减 1,减到 0 丢弃并回信报名。 2. TTL 的本职作用是什么? —— 防环——包不会在网络里永远转圈。 3. 输出里的第 1 站通常是谁? —— 自己的默认网关(家里/公司的路由器)。

相关笔记