背景与根因关联
在与 forwardproxy 配套使用时,客户端在访问双栈目标(如 CDN 托管站点、模型 API 等)时,偶发遭遇上层连接超时(如 10 秒卡死)或 ECONNRESET。
经排查,该问题为原版 Naive 架构在客户端与服务端之间的时序协同缺陷:
- 服务端提前回送 200 OK(Fast Open)与客户端握手时序冲突:
- 客户端在
src/net/quic/quic_proxy_client_socket.cc 中处理 CONNECT 响应;
- 原版设计中客户端收到提前 200 OK 即向应用层声明连接完成,应用层立即发出 TLS
ClientHello;
- 但此时服务端可能正处于目标多 IP 的串行阻塞拨号中,一旦出现单栈卡死或最终失败,客户端只能在被动超时或连接重置之间摇摆。
协同修复与适配规划
配合服务端 forwardproxy 纠正 RFC 9110 / RFC 8305 规范时序,客户端侧需完成以下适配与验证:
1. 客户端 CONNECT 状态机与错误处理审查
- 审查
src/net/quic/quic_proxy_client_socket.cc 中关于 use_fastopen_、read_headers_pending_ 以及 STATE_READ_REPLY_COMPLETE 的状态流转;
- 确保当服务端调整为“真实目标建连成功后再返回 200 OK”的标准时序时,客户端无死锁、无时序竞争,状态机平滑进入
STATE_CONNECT_COMPLETE;
- 验证当目标不可达、服务端按标准返回 502/504 响应码时,客户端能合规地将网络错误映射回上层应用,使上层应用能及时感知并进行正确的退避重试,而非挂死在 TLS 握手阶段。
2. 回归与端到端验证
- 跑通客户端所有现存的单元测试与回归套件;
- 在真实多 IP 双栈网络环境下发起高并发新建连接压力测试,验证 10s 超时与非预期 RST 彻底消除。
背景与根因关联
在与
forwardproxy配套使用时,客户端在访问双栈目标(如 CDN 托管站点、模型 API 等)时,偶发遭遇上层连接超时(如 10 秒卡死)或ECONNRESET。经排查,该问题为原版 Naive 架构在客户端与服务端之间的时序协同缺陷:
src/net/quic/quic_proxy_client_socket.cc中处理 CONNECT 响应;ClientHello;协同修复与适配规划
配合服务端
forwardproxy纠正 RFC 9110 / RFC 8305 规范时序,客户端侧需完成以下适配与验证:1. 客户端 CONNECT 状态机与错误处理审查
src/net/quic/quic_proxy_client_socket.cc中关于use_fastopen_、read_headers_pending_以及STATE_READ_REPLY_COMPLETE的状态流转;STATE_CONNECT_COMPLETE;2. 回归与端到端验证