← 返回文章 ESSAY

一次真实的排障:从"能 ping 不能连"到找到 Cogent 回环黑洞

ping 通、TCP 握手成功,一传数据就超时。一次从分层测试到 Cogent 回环黑洞的真实排障记录。

目录 · 9 节
  1. 01现象
  2. 02第一步:确认是不是墙
  3. 03第二步:服务器侧抓包
  4. 04第三步:traceroute 找断点
  5. 05诊断
  6. 06为什么会这样
  7. 07IPv6 的反转
  8. 08结论
  9. 09附:怎么选 VPS

现象

一台美国 VPS,从国内:

  • ping 通(230ms)✅
  • TCP 端口能握手 ✅
  • 但一传数据就超时 ❌

从香港的机器连它:完全正常 ✅

第一步:确认是不是墙

先做分层测试:

# 1. TCP 握手
nc -zv <IP> <PORT>
# → 成功

# 2. TLS 握手
openssl s_client -connect <IP>:<PORT> -servername example.com
# → CONNECTED,Verify return code: 0

# 3. 发数据
printf 'GET / HTTP/1.1\r\nHost: example.com\r\n\r\n' | \
  openssl s_client -connect <IP>:<PORT> -servername example.com -quiet
# → write:errno=104(连接被重置)

TLS 能握手,发数据就重置 —— 像是主动干扰。

第二步:服务器侧抓包

这是最关键的一步。在服务器上:

tcpdump -i any -n "port <PORT>" -c 20

同时从国内发起连接。

结果:

In  IP 36.248.x.x.32968 > 10.0.0.1.443: Flags [S]     ← SYN 到了 ✅
Out IP 10.0.0.1.443 > 36.248.x.x.32968: Flags [S.]    ← SYN-ACK 发了 ✅
In  IP 36.248.x.x.32968 > 10.0.0.1.443: Flags [S]     ← 客户端重传(没收到)
Out IP 10.0.0.1.443 > 36.248.x.x.32968: Flags [S.]
... 重复 4 次

包能进去,回不来。

第三步:traceroute 找断点

traceroute -T -p 443 -n <中国IP>
 1  192.168.203.1       9.7ms
 6  154.54.168.101      9.6ms    ← Cogent
13  38.104.138.106     57.8ms    ← Cogent 出口
14  202.97.27.237     207.7ms    ← 中国电信!延迟暴涨 +150ms
15  202.97.65.70      208.9ms    ← 电信骨干
16-22  * * *                     ← 之后全丢

诊断

  1. 路径是通的 —— 真的到了中国电信的骨干(202.97.x)
  2. 但 Cogent ↔ 电信 互联点严重拥塞 —— 57ms 跳到 207ms,一跳涨 150ms
  3. 进入电信骨干后包被丢弃

这不是墙,是上游 transit 的问题。

为什么会这样

那台 VPS 的上游是 Cogent(AS174)。

Cogent 的特点:

  • 便宜(很多廉价 VPS 都用)
  • 对中国电信/联通的 peering 极差
  • 跨境流量在互联点排队,延迟暴涨 + 丢包

IPv6 的反转

有意思的是,同一台机器的 IPv6 完全正常:

traceroute6 2400:3200::1   # 阿里 IPv6 DNS
# → 43ms 直达 ✅

因为它的 IPv6 走的是另一家 Tier-1,不是 Cogent。

同一台机器,IPv4 废、IPv6 通。

结论

  1. 排障要分层:TCP → TLS → 应用层
  2. 服务器侧抓包是判断"包到没到"的唯一可靠方法
  3. traceroute 找断点,看最后一跳落在谁的网里
  4. 廉价 VPS 的 IPv4 回程可能是废的,买之前先测

附:怎么选 VPS

上游对中国 IPv4
Cogent(AS174)❌ 基本废
GTT(AS3257)✅ 一般还行
NTT(AS2914)✅ 好
Telia(AS1299)✅ 好
中国电信 CN2✅✅ 最好(贵)

买之前:让商家给个测试 IP,traceroute 看回程落在哪。落在 Cogent 的直接放弃。