← 返回文章
ESSAY
一次真实的排障:从"能 ping 不能连"到找到 Cogent 回环黑洞
ping 通、TCP 握手成功,一传数据就超时。一次从分层测试到 Cogent 回环黑洞的真实排障记录。
现象
一台美国 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 * * * ← 之后全丢
诊断
- 路径是通的 —— 真的到了中国电信的骨干(
202.97.x) - 但 Cogent ↔ 电信 互联点严重拥塞 —— 57ms 跳到 207ms,一跳涨 150ms
- 进入电信骨干后包被丢弃
这不是墙,是上游 transit 的问题。
为什么会这样
那台 VPS 的上游是 Cogent(AS174)。
Cogent 的特点:
- 便宜(很多廉价 VPS 都用)
- 对中国电信/联通的 peering 极差
- 跨境流量在互联点排队,延迟暴涨 + 丢包
IPv6 的反转
有意思的是,同一台机器的 IPv6 完全正常:
traceroute6 2400:3200::1 # 阿里 IPv6 DNS
# → 43ms 直达 ✅
因为它的 IPv6 走的是另一家 Tier-1,不是 Cogent。
同一台机器,IPv4 废、IPv6 通。
结论
- 排障要分层:TCP → TLS → 应用层
- 服务器侧抓包是判断"包到没到"的唯一可靠方法
traceroute找断点,看最后一跳落在谁的网里- 廉价 VPS 的 IPv4 回程可能是废的,买之前先测
附:怎么选 VPS
| 上游 | 对中国 IPv4 |
|---|---|
| Cogent(AS174) | ❌ 基本废 |
| GTT(AS3257) | ✅ 一般还行 |
| NTT(AS2914) | ✅ 好 |
| Telia(AS1299) | ✅ 好 |
| 中国电信 CN2 | ✅✅ 最好(贵) |
买之前:让商家给个测试 IP,traceroute 看回程落在哪。落在 Cogent 的直接放弃。