某个晚上我在刷手机,微信图片一直转圈,微博视频缓冲半天,但网页新闻能打开。切到电脑,网上银行也正常,一开在线视频就卡。起初怀疑路由器坏了,重启好几次没改善。
第一步,用电脑网线直连光猫拨号,同样的App全部秒开。问题锁定在路由器,但路由器指示灯全绿,WiFi也连着,接口没松动。我想起之前为了“提升性能”把MTU手动改成了1500,觉得是它搞的鬼。
第二步,在电脑cmd窗口输入ping -f -l 1472 114.114.114.114,结果提示需要拆分数据包但设置了DF标志,也就是大包不通。再把包长度降到1400,返回正常。逐步试,最后最大可用包是1452字节,加上28字节IP头,最佳MTU为1460。而我路由器里填的1500确实太大了。
第三步,进入路由器管理页面,在WAN口设置里把MTU从1500改成1460,保存重启。再刷微信和视频,图片秒开,视频也不卡了。这个值一直用到现在。
之所以这样,是因为连接运营商光猫的PPPoE链路MTU普遍是1492,但中间还有额外的协议开销,实际可用低于1500。路由器里写死1500后,超过链路承载能力的大包被丢弃,但小包正常,测速也不会全挂,只是部分应用表现异常。
这里注意:不同地区运营商光猫的MTU值可能不同,合适做法是用ping测试后填入。如果你也遇到类似“WiFi正常但个别App抽风”的情况,不妨按上面步骤试一下。
测试命令:ping -f -l 1472 网关IP或公网IP。如果能通,说明当前MTU可以再大;如果提示“需要拆分数据包”,就逐步降低数值,每次减20,直到能通。1472是去掉20字节IP头加8字节ICMP头,再加上28就是总长的MTU值。找出能通过的最大包长,加上28,就是该网络环境下路由器应该填的MTU。
如果不想手动测,也可以直接改成1460,对大多数家庭宽带都适用。太小会导致数据分片多,效率略降,所以不要无脑往小了调。
问:测试MTU时ping哪个地址比较准?
答:建议先用本地网关,再测公网地址如114.114.114.114。网关测的是内网链路,公网测的是整条链路,综合两者取较小值。实际使用中,以能稳定通过公网地址测试的数值为准。
问:MTU改成1460会降低下载速度吗?
答:不会。在正常范围内减小MTU不会让带宽变小,顶多是让每个包携带的有效数据少几十字节。对千兆宽带来说影响可忽略,且避免了重传反而更稳定。如果设置过小,比如低于1400,就可能出现页面加载变慢、视频卡顿。
问:路由器MTU选自动还是手动?
答:多数路由器默认自动,会自动协商,通常不用改。只有当你确认大包不通或遇到部分应用异常时才需要手动设置。手动值时尽量用实测结果,不要拍脑袋填1500。

