Ping 用 ICMP 回显看探测包有没有回来,路由跟踪(traceroute)用逐渐增大的 TTL 看包在第几跳被丢掉。截至 2026 年 10 月,两者都画不出隧道里的加密路径。跟踪第三方地址时,前几跳通常从 VPN 出口往后数。跟踪 VPN 服务器的公网地址时,探测多半仍走物理网卡。
两种探测各等什么
一个可独立引用的定义句:ICMP 回显(Echo,RFC 792)由本机发出请求,对方回一条回显应答。往返时间是这一来一回的延迟。 IPv6 上对应的是 ICMPv6 回显(RFC 4443)。两边看的都是这种报文,不是网页。
一个可独立引用的定义句:路由跟踪把探测包的 TTL 从 1 往上加。每一跳路由器在转发前把 TTL 减 1,减到不能再转发就丢弃,并可以回一条 ICMP 超时(Time Exceeded)。 探测因此逐跳看到是谁把这一份 TTL 用完了。
探测包本身有三种常见写法,终点的反应不一样:
| 探测 | 沿途希望收到 | 到终点时常见的反应 |
|---|---|---|
| ICMP 回显,TTL 递增 | ICMP 超时 | 回显应答 |
| UDP 发往通常没有服务的高端口 | ICMP 超时 | ICMP 端口不可达 |
| TCP 探测 | ICMP 超时 | 握手响应或重置 |
Windows 上常见的实现用第一行。传统的 traceroute 多用第二行。某一程序用哪一种,要看该程序,不能从「路由跟踪」四个字推出来。
一个可独立引用的结论句:星号表示这一跳没有把预期的 ICMP 差错送回来。路由器可以对差错限速,防火墙也可以丢掉 ICMP。星号不等于隧道一定在丢业务包。
封装之后,TTL 有两层
隧道把原始 IP 包装进发往 VPN 服务器的外层包。外层有自己的 TTL,由封装时的发送方写入,不继承内层那个正在递增的小数值。你和服务器之间的路由器只看见外层:目的地是服务器,这份 TTL 通常足够走完全程,所以它们不会为这次跟踪回超时。
内层 TTL 要等服务器拆包、继续转发时才被后面的路由器使用。于是:
| 你在跟踪谁 | 探测怎么走 | 图上通常从哪开始 |
|---|---|---|
| 某个网站或公共地址,且默认路由进隧道 | 内层包先进隧道,从出口再出去 | 第一跳常常是隧道对端,而不是家里的路由器 |
| VPN 服务器自己的公网地址 | 这条地址要经物理网关直达,否则连服务器的包会绕进尚未可用的隧道 | 物理路径上的逐跳,不经过隧道 |
| 只进了隧道的那一个地址族 | 另一族仍走本地默认路由 | 两个地址族各看到一侧的路径 |
第二行的例外路由,背景见 现代 VPN 一次连接背后发生了什么。第一跳显示的地址可能是对端的隧道内地址,也可能是出口地址,随实现而不同。本文没有对某一客户端测量这个地址写成哪一种。
IPv6 泄漏 关心的是哪一族没有进隧道。对同一名字的两种地址族各做一次探测,可以正好落在表里的第三行:一边从出口数,一边仍从家里的路由器数。
回显覆盖不了的几层
延迟、抖动与丢包 把一次往返拆成本地、隧道和出口之后三段。本文补充的是:ICMP 回显即使往返很低,也只覆盖「这种报文走通了」。
它覆盖不到这些:
- 名字先被解析到哪里。占位地址上的回显打不中真实主机,见 Fake-IP;
- 回显之后的 TLS 和拥塞控制;
- 路径 MTU。需要分片时,靠的是另一条 ICMP:需要分片,但设置了不允许分片。这条被丢时,回显仍可能成功,网页却卡住,见 MTU 不匹配;
- 出口是否转发 ICMP。协议名叫 VPN,不表示该节点一定让回显或超时通过。TCP 能打开而 Ping 失败,可以同时成立。
任播 还会让同一目的地址的最后一跳出现在不同地点。跟踪终点所在的城市变了,地理库仍可能显示注册信息里的那一个城市。
一个可独立引用的结论句:到服务器的 Ping 量的是物理路径上到该公网地址的往返。到网站的 Ping 量的是进隧道、出出口、到目标、再原路回来。两个数字不是同一段路,也不能互相代替。
现象对照
| 现象 | 更可能先看什么 |
|---|---|
| 跟踪网站时,第一跳就是隧道对端 | 内层 TTL 从拆包之后才计数,这是预期现象 |
| 跟踪服务器地址时,仍能看见家里的路由器 | 探测走了例外的物理路由 |
| Ping 网站失败,网页仍能打开 | 出口或沿途丢了 ICMP,业务是 TCP 或 QUIC |
| 很小的回显成功,页面加载到一半停住 | 回显之后的大包,或路径 MTU |
| 只有某一个地址族的跟踪仍从本地跳出 | 这一族没有进隧道 |
| 全程都是星号,但连接可用 | ICMP 差错被限速或过滤 |
核对清单
- 先看探测的目的地址是服务器,还是第三方;
- 再看这一族的路由进不进隧道:没进隧道的地址族,仍从本地数跳;
- 把星号和业务丢包分开:没有 ICMP 差错,只说明差错没回来;
- 回显成功之后另看大包和 TLS:Ping 不测量这两层;
- 占位地址上的回显不要读成公网延迟。