上个月有个用户联系我们,说他的Windows电脑装完快连8.2.1后,连接时一直显示"正在连接..."然后超时。他换了3个节点、换了2个网络、重装了2次系统,问题还是复现。我们花了2天才找到根因,这个过程值得记录一下。
一、问题描述
用户的具体情况:Windows 11专业版,AMD Ryzen 7 5800X处理器,安装快连后首次连接正常,连接成功后断开再连接就再也连不上了。每次都是"正在连接..."然后超时报错,没有任何具体错误信息。系统事件日志里也没有可疑记录。
二、我们的排查过程
第一步,我们让用户 tracert 目标节点地址。结果显示到第8跳就断了,不是超时而是直接返回*。这说明不是网络路由问题,而是某个中间节点直接拒绝了我们的请求。
第二步,我们让用户用Wireshark抓包。结果发现TCP握手包发出去了,但服务器没有响应FIN或ACK。这不是被防火墙拦截的问题——被拦截的话应该会收到ICMP不可达消息。
第三步,我们问用户最近有没有更新过什么驱动或者系统组件。用户说3天前更新了网卡驱动,从Realtek官方驱动换成了微软自动推送的驱动。
- tracert:第8跳返回*,无ICMP超时
- Wireshark抓包:TCP SYN发出,无响应
- 更换节点:东京/香港/新加坡均失败
- 更换网络:家庭宽带/手机热点均失败
三、关键发现
我们让用户回滚网卡驱动到厂商版本,问题立刻解决了。但这不是长久之计,我们想知道为什么微软的驱动会有这个问题。
后来我们找到了根因:微软自动推送的驱动默认开启了"TCP Fast Open"和"TCP Timestamps"这两个优化特性。这两个特性在某些情况下会修改TCP头部的某些字段,导致我们的自定义协议握手失败。
四、后来的改进
这件事之后我们做了几件事:
- 在连接诊断里增加了驱动版本检测,当检测到微软驱动时会给出提示
- 优化了握手协议,不再依赖TCP头部的某些可选字段
- 在帮助文档里增加了"连接问题排查"专区,包含驱动相关的说明
- 开发了一个"一键修复网络配置"的工具,可以自动排查常见问题
五、如果你也遇到类似问题
如果你装完快连后连接一直超时,可以按这个顺序排查:
- 确认系统时间正确(时间不对会导致TLS握手失败)
- 检查是否启用了代理或VPN(如果有,先关掉)
- 更新或回滚网卡驱动试试
- 关闭防火墙和杀毒软件临时测试
- 联系客服,提供tracert和抓包结果
—— 这个问题后来被我们写进了默认检测逻辑,任何用户遇到类似情况,诊断工具会自动检查驱动版本。