那天傍晚我本来准备开开心心打开Steam下好《博德之门3》的最新补丁,结果看着下载进度条发呆——速度一直卡在几百KB,甚至经常掉到0。我第一反应是“又抽风了”,毕竟Steam的下载问题老生常谈。但这次感觉不对劲,之前同样的时间段、同样的游戏,速度都能跑满我的200M宽带,今天怎么连200KB都稳不住?
从“玄学排查”到“发现端倪”
我按照老套路先检查了其他设备:手机刷视频秒开、其他平台下载正常,路由器后台宽带速率也正常。然后重启光猫、换DNS、关闭防火墙……折腾了半小时,Steam下载速度依然像便秘一样。正当我准备放弃时,无意间打开任务管理器看了一眼“网络”标签——咦?Steam进程的流量怎么全走的是IPv6?我点开网络状态详细页,发现IPv4那一栏几乎没有任何活动连接,而IPv6的发送和接收数据量却在疯长。
我恍然大悟,赶紧检查自己的网络适配器属性:IPv6协议确实处于勾选状态,而且优先级的设定也是系统默认——IPv6优先。过去很多年因为运营商不支持IPv6,我电脑上的IPv6都是摆设,但去年ISP升级了双栈,我的的网络开始同时拥有v4和v6地址。问题很可能就出在这里:Steam在某次更新后,对下载服务器的域名解析默认指向了IPv6地址,并且“锁死”在了IPv6上。
强制锁定v6的“罪魁祸首”
为了验证猜想,我打开命令提示符,输入 nslookup steamcontent.com(Steam下载常用的CDN域名),结果返回了一大串IPv6地址,IPv4记录也有但排在很后面。我又用 ping -4 强制使用IPv4去Ping这些域名,延迟很低且不丢包;但用默认Ping(走IPv6)时,延迟忽高忽低,甚至有丢包。我意识到:Steam客户端在发起下载请求时,优先选择了IPv6地址,而我的IPv6网络质量其实很差,可能是ISP的IPv6路由绕路或者出口不稳定,导致下载速度被严重拖累。
更令人气愤的是,我当时的IPv6延迟比IPv4高了三倍,而且偶尔会有连接超时的情况。Steam却似乎没有提供“强制使用IPv4下载”的选项,它像一个倔强的孩子,认定IPv6是未来,哪怕我的IPv6网络一团糟,它也要硬着头皮用。
破局的“一顿操作”
既然系统层面的IPv6优先级我可以通过调整前缀策略来修改(但比较麻烦),我决定直接一点——在网卡属性里暂时取消勾选“Internet协议版本6(TCP/IPv6)”。点击确定后,网络断开重连,IPv6地址消失了。再次打开Steam,下载速度瞬间飙满,恢复到正常的十几MB每秒。当时我长舒一口气,问题解决了。
不过后来我又查了一些资料,发现Steam最近的CDN架构确实在向IPv6倾斜,很多新增的边缘节点只分配了IPv6地址。如果用户的ISP对IPv6支持不完美,比如没有本地区域覆盖、路由绕路、或者存在透明代理干扰,就容易出现这种“强制锁定v6”的下载悲剧。而且Steam客户端内部对域名解析的排序是硬编码的,用户无法通过常规设置改变。
一些有意思的细节
我不信邪,重新启用了IPv6,但尝试在Steam快捷方式的启动选项里加上 -tcp 参数(据说能强制走TCP而非UDP的QUIC),然而没用。后来我在hosts文件里手动把常连的几个CDN域名指向IPv4地址,发现Steam会短暂走IPv4,但过一会儿解析又被刷成IPv6,显然Steam有自己的DNS缓存机制且不受系统hosts完全控制。最后我只好保持IPv6禁用,直到现在偶尔会重新开启看看,但只要下载速度一慢,我就立刻切回去——这成了我独家的“IPv6检测法”。
写在最后
这次经历让我明白,技术演进中的“一刀切”经常会忽略实际体验。IPv6很好,但它在不同地域的可用性参差不齐。Steam作为最懂玩家的平台,在这一波推送中显得有点霸道。希望将来他们能提供一个“首选IP版本”的选项,让我们这些活在v4和v6混合地带的人,保留一点选择权。毕竟,下载游戏时的急迫心情,经不起网络协议的折腾。
