网络知识 娱乐 华硕飞行堡垒系列无线网经常显示“无法连接网络” || 一打开游戏就断网

华硕飞行堡垒系列无线网经常显示“无法连接网络” || 一打开游戏就断网

华硕飞行堡垒系列无线网经常显示“无法连接网络” || 一打开游戏就断网

我自己的电脑是华硕飞行堡垒fx80,出现这样的情况有段时间了。我电脑的状况是,有时候无线网可以连上,但是一进行联机游戏(守望先锋,艾尔登法环、原神等)过个两分钟就断网了,右下角无线网图标变为小地球,显示“无法连接网络”。有时候甚至无线网卡根本不在设备管理器里显示,就根本没有wifi的图标。

网上给出的解决方案大多是 “重置网络配置”。我试过,有用,但又不完全有用。有时候能让网卡重新出现,但是仍然无法连接;有时候可以连接,但是一玩游戏就断。但是如果你电脑是第一次出现断网问题,还是建议在网络设置里 “重置网络配置”!

一个游戏本打不了游戏就离谱。难不成华硕想让我好好学习,少打游戏?

我拆机查过无线网卡和接线,连接正常,没有接触不良。重装驱动,没有解决问题。于是在我一阵网上冲浪后,在知乎上找到了一个有意思的回答。
知乎指路老哥
老哥虽然没说怎么解决的,但是提到了个东西叫mtu。再次冲浪找到了一篇优化游戏设置mtu的文章 https://17fifa.com/mtu-setting/

知乎老哥的图片,是在管理员身份下运行cmd后,查看网卡的mtu值。

mtu查看:

netsh interface ipv4 show subinterfaces

我一看我的网卡。哦豁,也是1500。看来有门。
接着我就测我网络的mtu值(摘自上面链接):

1、Win+R打开“运行”菜单,输入“cmd”并回车;
2、在“命令提示符”窗口中输入ping -l 1472 -f www.baidu.com,回车;
3、如果提示“需要拆分数据包但是设置 DF”,那就说明数据包大小超过了网络限定的MTU大小,就需要逐步减小上面“1472”那个数字,推荐每次减小“5”,直到提示“来自xxx.xxx.xxx.xxx的回复:字节=XXXX 时间=XXms TTL=XX”为止,然后开始每次加“1”,直到不能再加1(加了就会提示需要拆分)为止。
此时得到了这个最大的数字,比如我的是1464
即我输入ping -l 1464 -f www.baidu.com 命令时收到了baidu的回复。大家需要找自己电脑的值。

加上28,记住这个数字。比如我是记1464+28=1492

知道自己网络mtu值之后,就是修改mtu值了。我的无线网卡名字是 WLAN 2 (这个可以在查看mtu值时看到),mtu值是1492。大家酌情修改变量。

mtu修改:

netsh interface ipv4 set subinterface "WLAN 2" MTU=1492 store=persist

回车应用完后,重启,打开守望先锋2,开冲。

——————————————————————————————————————

MTU科普:

MTU,即Maximum Transmission Unit(最大传输单元),此值设定TCP/IP协议传输数据报时的最大传输单元。设置合适的MTU值可以解决“部分网站打不开”、“上网速度慢”等问题,并且可以适当提升上网速度。
设置多大的MTU值取决于你的上网方式,不同的上网方式支持不同的MTU,下面列出了一些上网方式的MTU值:
EtherNet(一般上网方式,默认值):1500
PPPoE/ADSL:1492
Dial Up/Modem:576

Ping命令的-f参数作用是"Set Don’t Fragment flag in packet", 也就是在将IP头里的"Don’t Fragment Flag"位设置为1, 也就是不允许分片, 但是我们又用Ping命令的-l参数指定了发送的数据包的大小为2000字节, 显然超过了以太网的MTU-1500字节. 所以数据包不能通过, 并且返回了上述错误信息: 数据包需要分片但是DF(Don’t Fragment)标记被设置了.

我们知道, 在MAC帧的数据(Payload)字段, 封装(存放)的是上层(IP层)的IP数据包, 而IP数据包的格式是IP Header + IP Data(Payload). 在我们用Ping命令的这个例子中, IP数据包内的IP Data字段内封装的是ICMP协议数据.

我们来回顾一下MTU的含义: MAC帧内的数据(Payload)字段的最大长度, 也就是说它所封装的IP Header + IP Data两者长度之和最大为1500字节, 而IP Header的最小长度为20字节, 所以IP Data的最大长度就是1500-20=1480字节, 离我们试验的1472字节已经比较接近了.

再查查ICMP协议数据的具体格式, 发现在Ping命令用到的ICMP Echo Request/Replay报文中, 在ICMP Data之前, 有几个字段共占用了8个字节, 分别为: Type(1byte), Code(1byte), Checksum(2byte), Identifier(2byte), Sequence Number(2byte), 这几个字段我们可以称之为ICMP Header. 好了, 1480-8=1472, 和我们的试验结果对上了.
可以发现, 我们使用Ping命令时, -l参数所指定的数据包大小, 是指的ICMP报文中的ICMP Data字段的长度, 不包括ICMP Header, 更不包括IP Header.

参考:
https://www.zhihu.com/question/398641925
https://17fifa.com/mtu-setting/
https://blog.csdn.net/qxhgd/article/details/109286034
https://blog.51cto.com/51fashion/228975