视野之外
[ 返回文章列表 ]
对抗实录
发布日期: 2026-09-02
4 分钟阅读

一次连接超时的分层排障记录

通过真实抓包排查一次特定节点在 TLS 握手阶段出现 Client Hello 无响应并静默超时故障的完整复盘过程。

ℹ️NOTE

演示内容说明:本文为「视野之外」演示日志,记录排查连接超时故障的技术诊断路径。

在日常观测中,突然发生的连接超时(Connection Timeout)往往比显式的 ECONNREFUSED 更加棘手。本文记录了一次特定 IP 在每隔 24 小时准点出现 TLS 握手假死现象的定位过程。

1. 现象描述与初步观测

  • 症状:客户端发起 TCP 三次握手成功(SYN -> SYN/ACK -> ACK 耗时 35ms),但在发送 Client Hello 后,服务器没有任何 ACK 响应,直至 60 秒后客户端超时断开。
  • 环境:Ubuntu 22.04 LTS, Nginx + OpenSSL 3.0。

2. 分层抓包对比 (TCPDump)

在客户端与服务端同时启动无头抓包:

# 服务端执行抓包
tcpdump -i eth0 -nn -s 0 port 443 -w server_dump.pcap

观察到的数据包流向差

[ Client 端视角 ]
10:00:00.000 IP 1.2.3.4 > 5.6.7.8: Flags [S] (SYN)
10:00:00.035 IP 5.6.7.8 > 1.2.3.4: Flags [S.], seq (SYN-ACK)
10:00:00.035 IP 1.2.3.4 > 5.6.7.8: Flags [.], ack (ACK)
10:00:00.036 IP 1.2.3.4 > 5.6.7.8: Flags [P.], length 512 (Client Hello)
... (重传 Client Hello 3 次) ...

[ Server 端视角 ]
10:00:00.035 IP 1.2.3.4 > 5.6.7.8: Flags [S]
10:00:00.035 IP 5.6.7.8 > 1.2.3.4: Flags [S.]
10:00:00.035 IP 1.2.3.4 > 5.6.7.8: Flags [.]
... (后续无任何 Client Hello 包到达网卡!) ...

3. 根因与定位结论

抓包结果明确表明:TCP SYN 与小包 ACK 顺利穿过中间路径,但长度为 512 字节的 Client Hello 在中间路径被静默丢弃(Blackhole Drop)。

解决方案:调整 Client Hello 结构,启用 SNI 混淆并在中继层拆分 TLS Record 分片,断开固定特征长度匹配。重新连通后连续观测 72 小时无再发异常。

* 点击复制包含绝对主地址的分享链接
相关研究日志 RECOMMENDED
回首页