先把问题讲清楚:网络故障其实是什么样的“病”

下面这份“快连”常见网络报错代码对照表,覆盖HTTP状态码、TCP/UDP与Socket错误、DNS解析与超时、TLS握手失败、WebSocket与移动网络等场景。每条都给出简明含义、典型成因与可执行排查步骤,便于开发、测试和运维快速定位并恢复连通性。

把网络想成邮局系统:请求是信,服务器是收信人,路由器和中间设备是邮路。报错代码就像邮局返回的理由条——有的说“地址错了”(DNS或404),有的说“收信人没回应”(超时或连接被拒绝),有的说“信被篡改或不被信任”(TLS证书问题)。懂了这个比记代码更重要,接下来我们以类别讲解并给出可操作的检查与修复步骤。

如何阅读这份对照表(快速上手)

  • 先看表现:页面空白、长时间转圈、直接报错、还是断连重连?
  • 再看场景:是浏览器、App、还是服务器间调用?移动网络还是局域网?
  • 最后看日志与抓包:HTTP响应、socket错误码、DNS返回、TLS握手日志、tcpdump 都重要。
  • 小提示:先从客户端到服务器逐层排查(应用层→传输层→网络层→链路层)。

常见错误类别总览

  • HTTP 状态码(1xx-5xx)
  • DNS 错误(NXDOMAIN / SERVFAIL / TIMEOUT 等)
  • Socket / TCP 错误(ECONNREFUSED、ETIMEDOUT、ECONNRESET 等)
  • TLS/SSL 相关(证书验证失败、握手失败)
  • WebSocket 关闭码(1000、1006 等)
  • 移动网络与运营商相关错误(信号弱、切换导致断连)
  • 路由器 / NAT / 防火墙 导致的端口或连通性问题

HTTP 状态码对照表(常见且实用)

代码 含义 典型成因 快速排查/修复
200 成功 正常响应 确认内容是否正确,检查缓存与CDN
301 / 302 永久/临时重定向 服务器配置或路由规则 检查Location头,确认重定向循环或错误
400 Bad Request 请求格式不对、参数缺失 检查请求URL、Header、Body;对开发日志打点
401 Unauthorized 认证失败或Token过期 确认认证流程、刷新Token、检查时间同步
403 Forbidden 权限不足或防火墙拒绝 检查ACL、WAF 规则、CORS 配置
404 Not Found 资源不存在或路径错误 核对URL、路由规则、静态文件路径
408 Request Timeout 客户端或中间设备超时 优化网络、增大超时阈值、查看中间代理
429 Too Many Requests 限流或速率限制触发 查看限流策略、做退避重试
500 Internal Server Error 代码异常或资源耗尽 查看服务器日志、监控、回滚或修复bug
502 Bad Gateway 上游服务不可用或负载均衡问题 检查上游服务健康、LB 配置与超时
503 Service Unavailable 服务临时不可用、维护或资源耗尽 查看实例健康、扩容、限流或熔断
504 Gateway Timeout 上游超时或链路延迟 调整超时、优化上游响应、网络探测

DNS 错误与对策

DNS 相当于地址本,解析失败就找不到“家”。

错误 含义 常见原因 排查/修复
NXDOMAIN 域名不存在 域名拼写、未注册或解析记录被删除 nslookup/dig 检查,确认域名与解析A/AAAA记录
SERVFAIL 服务器返回失败 递归解析器问题、上游DNS故障或配置错误 换用可靠DNS(8.8.8.8 等),检查域名服务商
REFUSED 解析被拒绝 DNS 服务限制或防火墙阻断 检查DNS服务器访问控制与防火墙
TIMEOUT 响应超时 网络丢包、DNS服务器不可达 ping/trace到DNS服务器,确认网络连通

常见 Socket / TCP 错误(系统级)

这些通常是操作系统层面返回的错误码,能直接指示连接的问题类型。

错误码 含义 原因 处理要点
ECONNREFUSED 连接被拒绝 目标端口未监听、防火墙或服务未启动 确认服务监听端口、检查防火墙与安全组
ETIMEDOUT / EHOSTUNREACH 连接超时/主机不可达 网络中断、路由问题或服务器不可达 traceroute、ping、查看路由表与链路
ECONNRESET 连接被对端重置 对端主动断开、协议不匹配或中间设备干预 检查服务器日志、协议与负载均衡器设置
ENETUNREACH 网络不可达 本地网络配置或上游链路问题 检查网关、路由与本地网络配置
EADDRINUSE 地址已被占用 端口冲突、进程未释放端口 关闭占用进程,或使用端口复用/随机端口

TLS / SSL 常见故障(安全层)

TLS 就像信封加密与签名,失败通常表示证书、信任链或协议不匹配。

  • CERTIFICATE_VERIFY_FAILED:证书链不完整或不受信任。检查证书链 (leaf → intermediate → root),确保根证书在信任库里,证书未过期。
  • HOSTNAME MISMATCH:证书的主机名与访问域名不符。确保证书包含访问的域名(SAN 或 CN)。
  • HANDSHAKE_FAILURE:协议或加密套件不支持。检查客户端/服务器支持的 TLS 版本与套件,关注 TLS1.0/1.1 的弃用。
  • OCSP/CRL 失败:证书撤销检查失败或被阻断。确认 OCSP/CRL 可达或使用短期证书策略。

诊断工具:openssl s_client -connect host:443 -servername domain(查看握手信息、证书链与协商套件)。

WebSocket 常见关闭码

代码 含义 常见原因
1000 正常关闭 应用主动正常断开
1001 对端离开/断开 服务器重启、浏览器关闭、网络切换
1006 异常关闭(无法在应用层捕获) 网络断连、代理或防火墙中断
1002 协议错误 帧格式错误或应用协议不匹配
1011 服务器内部错误 处理异常或资源耗尽

移动网络常见问题(2G/3G/4G/5G 环境)

移动网络的不稳定性常由信号、切换与运营商策略造成:

  • 信号弱导致高丢包与高时延 → 测速、查看RSSI、切换到更稳定网络(Wi‑Fi)测试。
  • 基站切换(handovers)导致短时断连 → App 需做重连与状态保存。
  • 运营商 NAT / CGN(Carrier Grade NAT)造成端到端连通性问题 → 使用 STUN/TURN 或服务器中继。
  • 封包被运营商劫持或限速 → 对比不同运营商、使用 VPN 作对照。

设备与路由器常见故障

  • 双重 NAT 导致端口映射失败:检查家庭网络与上游运营商是否都做了 NAT。
  • 端口被 ISP 或企业防火墙阻止:用 telnet host port / nmap 测试端口连通。
  • 路由表错误或 MTU 设置不当导致分片问题:尝试降低 MTU(如 1400)测试。

逐步排查流程(可打印的清单)

  1. 重现问题并记录时间、客户端类型、网络环境(Wi‑Fi/移动/有线)。
  2. 收集客户端日志、浏览器控制台网络标签、App 的错误码与堆栈。
  3. 从客户端执行简单探测:ping、traceroute(或 tracert)、nslookup/dig、curl -v。
  4. 在服务器端查看访问日志、应用日志、负载均衡/代理日志和监控指标(CPU、内存、网络)。
  5. 抓包(tcpdump/wireshark)定位丢包、RST、FIN、TLS 握手失败点。
  6. 如果是链路问题,测试替代路径(更换DNS、VPN或不同运营商)。
  7. 修复后验证:多次重试、不同地域、不同设备确认问题彻底解决。

常用命令与如何解读输出

  • ping host:测延迟与丢包。丢包高说明链路质量差。
  • traceroute host / tracert:定位哪个跃点延迟或丢包。
  • nslookup / dig domain:检查域名解析与TTL。
  • curl -v https://host:查看HTTP头、重定向、TLS信息。
  • openssl s_client -connect host:443 -servername domain:查看证书链与协商套件。
  • tcpdump -i any host x.x.x.x and port 443:抓取相关流量用于wireshark分析。

一些实战小技巧(顺口溜式记忆)

  • 网页 4xx 看请求,5xx 看服务器;
  • 连不上先 ping,再 traceroute,看链路;
  • 证书报错先看时间与域名,再看链;
  • 移动网络报错先怀疑信号与运营商,再怀疑服务端。

案例演示(帮你把抽象变具体)

举个常见例子:用户在移动网络下访问 API 报 504(网关超时)。排查顺序通常是:

  1. 复现环境:确认只在移动网络出现还是 Wi‑Fi 也有。
  2. 客户端 curl -v 测试,记录时间戳与请求ID。
  3. 在边缘网关查看是否有大量排队或上游服务超时日志。
  4. traceroute 到边缘网关检查是否有丢包或跃点异常。
  5. 如果上游服务响应变慢,查监控看是否 CPU/IO 耗尽或 DB 慢查询。
  6. 临时修复可以提升超时阈值、降级或做请求限流;长期要优化上游性能或做缓存。

这种循序渐进的排查,避免了一开始就盲目改代码或重启服务器。

日志与监控要点(什么必须记录)

  • 请求ID/TraceID:跨服务追踪必备。
  • 客户端环境信息:App 版本、系统版本、网络类型、运营商。
  • 时间戳与耗时:方便对比与定位高耗时环节。
  • 错误栈与完整响应头:尤其是 Location、Set‑Cookie、WWW‑Authenticate。
  • 健康检查与上游服务状态:配合告警避免延迟扩大。

总结要点(记在脑子里,而不是死记代码)

  • 把网络故障分层看:应用→传输→网络→链路。
  • 重现、收集证据、定位、修复、验证。按步骤永远比乱试更快。
  • 常见工具是你的好朋友:ping、traceroute、dig/nslookup、curl、openssl、tcpdump。
  • 日志和 TraceID 是关键——没有它,排查就像找针。

嗯,好啦,这些是我常用的对照和流程,先把这些基本套路记住,遇到具体报错可以带着代码和抓包我再帮你逐条看。下次如果你能贴出报错日志片段(时间、RequestID、抓包摘要),我们可以更快地把问题钉死。