connection-timeout

连接超时的定位与修复

现象

客户端一直等待,最后报 Connection timed out、i/o timeout 或 context deadline exceeded。和 Connection refused 不同,超时通常意味着包被丢弃或路径不通。

快速定位

curl -v --connect-timeout 5 http://<host>:<port>/
nc -vz -w 5 <host> <port>
mtr -rwc 10 <host>
traceroute <host>
ping -c 4 <host>
ss -s
tcpdump -ni any host <host> and port <port>

云环境同时检查安全组、网络 ACL、路由表和 NAT。

常见根因

  1. 安全组/防火墙 DROP,包没有回 RST。
  2. 路由不通、VPC 对等连接或 VPN 配置错误。
  3. 目标服务 backlog 满,SYN 被丢弃。
  4. 中间设备 MTU 不匹配,较大包被丢。
  5. DNS 解析到了错误地址,或客户端连错网段。

修复

相关命令

读完自测

合上页面,先回答,再展开对照。

  1. 连接超时和 Connection refused 的含义有什么不同?
  2. 如何判断丢包发生在哪一跳?
  3. 服务端 backlog 满和 MTU 不匹配分别怎么查?
答案
  1. 超时通常表示包被丢弃或路径不通,Connection refused 表示目标可达但端口未监听或主动拒绝。
  2. 用 mtr -rwc 10 逐跳看丢包,配合 traceroute、ping 和 tcpdump 确认路径与包是否到达。
  3. backlog 看 ss -lnt 的 Recv-Q/Send-Q 和 netstat -s 溢出计数,调 somaxconn、tcp_max_syn_backlog;MTU 用 ping -M do -s 验证后调整接口 MTU。