前几天晚上,我兴冲冲地打开Steam,准备下载刚买的《黑暗之魂3》——没错,我还在受苦。可当点击“下载”后,进度条直接纹丝不动,速度显示0KB/s,几秒钟后变成了“正在连接到Steam服务器……”然后循环。我尝试暂停再继续,重启客户端,甚至重启电脑,问题依旧。那一刻,我差点想把电脑砸了。但冷静下来后,我决定跟它死磕到底。
第一步:排查网络连接
一开始我以为是Steam服务器炸了,但看了看Steam好友列表能正常加载,商店也能打开,唯独下载不动。我测了测网速,延迟正常,下载带宽也能跑满。难道是Steam节点问题?
路由器重启大法
我先拔掉了路由器和光猫的电源,等了一分钟再插上。这个老办法居然让下载有了点反应——速度变成了1MB/s,但很快又跌回0。看来问题还在。
检查防火墙和安全软件
我跑去Windows防火墙看了看,发现Steam在公共网络被禁止了。我赶紧把Steam加入允许列表,然后关闭了第三方防火墙软件。重启Steam后,速度依然没有改善。我甚至怀疑是运营商搞鬼,但其他下载工具都正常。
第二步:调整下载缓存和限速设置
在Steam设置里,我把下载地区改成了“美国洛杉矶”,之前我用的“北京”。据说有些地区在高负载时段会限速。然后在下行带宽那里,我把“无限制”改成了自己实际带宽的90%,又改回来。奇怪的是,改了地区后,下载速度短暂飙升到10MB/s,但不到半分钟又掉回0。这让我觉得可能是本地缓存出了问题。
清除下载缓存
我进入设置 -> 下载 -> 清除下载缓存。这个操作会删除已经分配的缓存文件,但不会影响已下载的游戏。清除后,Steam强迫我重新登录。登录后我再次开始下载,结果速度从0慢慢爬升到5MB/s,然后稳定了一会。可好景不长,在我兴奋地跟朋友发消息时,速度又归零了。
第三步:检查硬盘和权限
我装在D盘的机械硬盘,我担心是不是磁盘碎片太多或者有坏道。但我当时没有工具检测。
更换游戏安装位置
我在Steam设置里添加了一个空的固态硬盘分区作为新的库文件夹,把下载任务迁移过去。速度依然没有明显变化,还是0KB/s。我甚至尝试在安全模式下启动Steam,问题依旧。看来不是磁盘写入的问题。
第四步:使用命令行工具排查
我打开了任务管理器,看到网络占用几乎为零,Steam进程的下载线程似乎在睡觉。我打开资源监视器,发现Steam在尝试连接几个IP地址,但发送和接收数据包非常少。我用telnet测试了这些IP的80端口,连接正常。难道是DNS解析出了问题?
刷新DNS和更换DNS
- 以管理员身份运行CMD,输入 ipconfig /flushdns 刷新缓存,没有效果。
- 手动把IPv4的DNS改成了Google的8.8.8.8和114.114.114.114,重启网络后,Steam下载依然不动。
- 甚至尝试了使用代理,但反而更糟。
第五步:深入挖掘Steam日志
我决定查看Steam的日志文件。在Steam安装目录下的logs文件夹里,我找到了connection_log.txt和content_log.txt。我发现日志中重复出现“CDownloadTask_Connect: connection to server failed, trying next”以及“HTTPTimedOut”错误。看来是Steam与内容服务器的连接非常不稳定。我依稀记得网上有人说过是中国电信的罪魁祸首,但我用的是联通啊。
修改Steam启动参数
- 我在Steam快捷方式目标后面加上“-tcp”强制使用TCP协议,有效果么?似乎有一点,速度变成了200KB/s,但根本不够用。
- 又加了“-no-dwrite”禁用DirectWrite,没用。
第六步:偶然的发现
在我几乎要放弃的时候,无意中打开Steam手机版的商店,想看看外网怎么说。我突然意识到,我的手机数据流量下载Steam游戏是正常的(虽然不能完全代替)。这说明问题很可能出在我的本地网络环境与Steam特定CDN节点之间的路由上。于是我决定重置网络堆栈。
重置Winsock
再次打开管理员CMD,我输入 netsh winsock reset,然后按回车。接着执行 netsh int ip reset。因为两次操作都需要重启电脑,我带着忐忑的心情重启了。当Windows再次亮起时,我打开Steam,点继续下载。那一刻,速度直接跳到满速——6MB/s,而且再也没有掉下来。我呆呆地看着进度条飞涨,差点流下眼泪。
速度回到6MB/s的那一刻,我没有欢呼,只是默默看着进度条走完。然后关掉电脑去睡觉。第二天玩上了游戏,但心里总还想着昨晚那些跳动的数字。这件事件过去后,我对Steam下载机制有了更多了解。至于下次还会不会出问题?谁知道呢,至少我不慌了。
