我这段时间快被QQ游戏整疯了,玩个斗地主或者桌球,动不动就卡在原地,然后弹出来一个网络连接中断,重连又连不上。但诡异的是,我网页刷得飞快,视频照样高清流畅,跟朋友微信视频通话一点问题都没有。这种情况持续了好几天,我一开始以为是我家路由器抽风,后来发现根本不是这么回事。
先说说我的网络环境。家里是电信五百兆的光纤,光猫加路由器都是去年新换的,测速软件跑下来下载速度能到六百多兆,上传也有七八十兆。我专门用命令行ping了一下腾讯的服务器,延迟在十五到二十毫秒之间,丢包率基本是零。按理说这个网络状况玩什么游戏都该是丝滑的,可偏偏就QQ游戏这玩意儿掉链子。
后来我打电话问了一个在腾讯做运维的朋友,他听了我的描述之后笑了笑,告诉我这种情况其实挺常见的。他说QQ游戏大厅是一个很老的产品了,从二零零几年到现在,架构基本上没怎么大改过。它的服务器集群虽然遍布全国,但跟现在那些主流竞技游戏的服务器比起来,带宽和并发处理能力差得很远。特别是在晚上八点到十一点这个高峰时段,几十万老玩家同时挤在那些老旧的服务器上,服务器本身就扛不住,就会主动断开一些看起来不太活跃的连接。
我这才明白,原来不是我的网络问题,是人家服务器的承受能力有限。但我还是不理解,为什么我用其他软件都没事,偏偏就它掉线?我朋友说这里面的关键在于网络协议和端口的使用。QQ游戏走的是UDP协议,对这种丢包非常敏感,本来就是为了低延迟,但一旦服务器那边有波动,UDP不会像TCP那样自动重传数据,直接就是连接断开。而我看视频、刷网页走的是TCP协议,数据丢了会自动补上,所以感知不到任何异常。
还有一个因素就是运营商线路的NAT表老化。我玩QQ游戏默认用的华东一区服务器,物理位置在上海,而我在广州。我家的光猫和路由器会创建一个地址转换表,每次跟服务器通讯都要走这个映射关系。玩游戏的时候,我每隔几秒钟就会跟服务器有一个心跳包保持连接,但如果中间有一天运营商那边重新分配了IP,或者NAT表的超时时间设得太短,这个映射就会被提前清掉。QQ游戏这个老客户端对断线重连的机制做得不够好,一旦连接断了,它不积极去恢复,反而会让你手动重新登录。

后来我试着按照朋友的建议做了几个改动,效果立竿见影。先在路由器后台把UPnP功能打开,这个功能能让QQ游戏自己申请端口映射,不用经过NAT的复杂转发。然后又去QQ游戏设置里把画质和特效调到最低,他解释说老服务器带宽有限,你开了高画质就会频繁跟服务器交换大量数据,带宽一拥堵自然容易触发服务器的保护性断线。做完这两步之后,我玩了一个下午的象棋和斯诺克,一次都没有掉过线。
如果你也遇到这种只有QQ游戏掉线的情况,建议你先别急着怪网络运营商,先用命令行工具ping一下腾讯的服务器看延迟和丢包率。如果延迟低丢包为零,那问题大概率出在游戏服务器的负载或者客户端的端口通信上面。可以尝试换个时间段玩,避开晚高峰,或者换个区域的分区服务器。另外把电脑上那些乱七八糟的加速器都关掉,这类软件有时候会篡改你的路由表,反而越帮越忙。
最后提一句QQ游戏客服中心的处理效率也确实感人,我提了工单三天之后才收到回复,回复的内容就是那套查驱动、重装游戏的万能答案。所以到头来还是得靠自己排查。希望我的经历能帮到你,别再傻傻地去砸路由器了。