常见网络错误类型及其影响
网络错误是分布式系统中最频繁出现的故障形态,其类型多样且影响层级各不相同。本章从系统边界、分层结构与信任链路视角,逐一剖析超时、连接拒绝、DNS解析失败、协议错误、带宽瓶颈以及错误码语义分析六类关键错误。每一类错误都会在调用链路上产生不同的破坏模式,只有精确识别其根因与影响范围,才能为后续的容错降级设计提供正确的判断依据。
一、超时(Timeout)
超时是指请求发出后,在预定期限内未收到响应。按层次分为连接超时、读取超时、写入超时。超时通常由网络延迟激增、服务端过载或丢包导致。在系统边界处,超时表现为挂起线程、连接池耗尽、请求堆积。
典型配置示例(gRPC 客户端):
grpc:
client:
deadline: 5000ms
connect-timeout: 1000ms
retry:
maxAttempts: 2
initialBackoff: 100ms
二、连接拒绝(Connection Refused)
连接拒绝发生在客户端发起 TCP 握手时,目标端口无监听进程。此错误通常由服务未启动、端口变更、防火墙规则或资源枯竭(如监听队列满)引起。在信任链路中,连接拒绝属于边界显式失败,可被调用方快速捕获,不会产生悬挂线程,但若频繁出现,说明服务下线或负载保护误触发。
三、DNS解析失败(DNS Resolution Failure)
DNS 解析失败指域名无法转换为 IP 地址,可能源于 DNS 服务器不可用、缓存污染、域名过期或网络分区。该错误发生在网络调用之前,导致整个请求无法发出。在微服务架构中,服务发现依赖 DNS 或注册中心,DNS 失败会破坏服务间寻址能力,引起大面积不可用。
四、协议错误(Protocol Error)
协议错误包括 HTTP 状态码误用、gRPC 状态码不匹配、TLS 握手失败、数据包格式异常等。这类错误通常由客户端与服务端的协议版本不一致、编解码库缺陷或代理配置错误导致。协议错误的识别成本高,因为需要解析报文内容,且不同协议的错误码语义差异很大。
| 协议 | 典型错误码 | 错误语义 |
|---|---|---|
| HTTP | 502 Bad Gateway | 上游返回无效响应 |
| gRPC | UNAVAILABLE (14) | 服务不可用,可重试 |
| gRPC | DEADLINE_EXCEEDED (4) | 超时过期 |
| TLS | 证书过期 / 主机名不匹配 | 安全层连接失败 |
五、带宽瓶颈(Bandwidth Bottleneck)
带宽瓶颈并非瞬时故障,而是持续的资源过载表现。表现为吞吐量下降、延迟增加、丢包率升高。在系统边界,带宽瓶颈会放大其他错误的影响:超时数量激增、连接反复重置。从数据流角度,带宽瓶颈需要结合流量整形和限流措施才能缓解。
六、错误码语义分析
错误码语义分析是区分“可重试错误”与“不可重试错误”的核心技术。相同网络错误(如超时)在不同协议中可能有不同语义:HTTP 408 表示客户端超时,而 gRPC DEADLINE_EXCEEDED 可能由客户端或服务端任何一方触发。错误码分析需要结合调用上下文、错误来源(服务端/客户端/网络中间件)和状态码映射规则。