我这人没什么别的爱好,就爱折腾电脑。前阵子刚拉了千兆光纤,那下载速度,真是快得离谱。Steam里下个《赛博朋克2077》,七八十个G的东西,泡杯茶的功夫就躺在硬盘里了。迅雷更是夸张,会员一开,那个速度曲线直接拉成一条直线,顶到头,看着就舒坦。我一度觉得,我这辈子跟“网络卡顿”这四个字,算是彻底绝缘了。
但现实就爱扇人嘴巴子。
下载是快,可只要我一点开游戏,比如打两把《坦克世界》,或者进《绝地求生》里跳个伞,那场面立马就不对了。画面倒不至于像PPT,但也差不多是连环画级别的。人物走路像在太空里飘,瞄准镜里的敌人永远在瞬移。更要命的是那个延迟,右上角的ping值从绿色的20几,突然就跳到黄色的100多,然后“啪”一下,变成红色200+,最后干脆给你来个“连接已断开”。
我一开始以为是电脑太老,带不动了。可我这显卡是4070Ti,CPU也是i7的,跑个3A大作开高画质都稳的一匹。内存32G,固态硬盘都是PCIe4.0的。这配置玩个破网游能卡成这德行?我不信。
于是我开始排查,杀毒、更新驱动、关特效,折腾了一晚上,屁用没有。第二天我无意间发现,我一边开着迅雷下电影,一边进游戏,就卡成狗;我把迅雷一关,游戏立马恢复丝般顺滑。我这才恍然大悟,原来问题出在这儿。

但让我彻底明白其中门道,还得是一次偶然的机会。我一个在电信机房当运维的朋友来家里喝酒,我跟他吐槽这事儿。他听完哈哈大笑,说我的情况特典型,核心原因就两个字:**NAT**。
我听了一头雾水。他就跟我解释,说我的下载速度快,那是光猫和路由器把带宽都“喂”给了下载任务。下载这种东西,走的是UDP或TCP的并发连接,它不看延迟,只看吞吐量。迅雷那哥们儿为了抢速度,能同时开着成百上千个连接,把路由器的NAT会话表直接塞满。
这个会话表就相当于路由器的“电话本”,每一条正在传输的数据都得在上面留个记录。当这个“电话本”被占满之后,新来的数据包——也就是我游戏里发出的操作指令——就得排队等。游戏这种东西,最怕的就是排队,它讲究的是一个实时响应。我按一下W键,这个指令数据包在路由器那儿排了半天的队,等它终于排到了,发出去,人家游戏服务器早就认为我掉线了。
他喝了口酒,继续说,下载是连续的大块数据传输,稍微丢几个包无所谓,重传一下就行。但游戏不一样,每一个数据包都关乎生死。我这下载任务不仅把“电话本”占满了,还占用了路由器CPU的处理能力。那路由器本来就是个几百块钱的小东西,处理能力有限,一边要处理迅雷几千个连接的数据转发,一边还要管游戏那几十个低延迟的小包,它根本忙不过来,一忙就出错,一出错就丢包,游戏自然就卡成狗了。
后来我自己又做了个测试。我试着用网线直连光猫,不用路由器,然后一边开下载一边玩《原神》,发现好了很多,但偶尔还是会卡一下。我朋友说这很正常,光猫也有性能瓶颈,而且运营商那边一般也会限制单个端口的并发连接数,它们也会对下载任务进行优先级处理,牺牲掉你游戏的实时性。
所以别迷信那数字上看着吓人的下载速度。你那千兆光纤的“兆”是兆比特,游戏里看的延迟是毫秒,这俩压根就不是一个维度的事儿。下载速度是高速公路的宽度,游戏延迟是高速公路上开车的反应时间。路再宽,如果路上全是加塞、乱停车的大货车,你的跑车一样得堵在里面。
现在我想明白了,每次玩竞技游戏前,我都得先把迅雷、百度网盘那些后台下载任务全暂停了。有时候甚至得去路由器管理后台看一眼,是不是有哪个设备在偷偷跑下载。要不然,我这边游戏界面刚亮起来,那边客厅的电视正好在放4K高清,整个屋子里的网络设备都得为那台电视的缓冲让路。
说多了都是泪。以前是担心网速不够用,现在倒好,成了得跟自己的下载软件打架。这大概就是新时代的烦恼吧,速度快到一定程度,快的本身就成了原罪。玩个游戏,还得先学会资源调度,真是比上班都累。