丢包问题解决

感谢原链接:https://www.zhihu.com/question/24330843

内容如下:

当网络出现有规律的故障,我们要依靠原理来解释这种现象。

题主的问题可以归纳为:在电脑上使用PPPoE拨号,可以无障碍上网;而使用路由器的PPPoE拨号,出现间歇性的丢包与延迟,问题可以复现,说明问题并不是偶发,而是有规律的。

问题症结可能:
电脑拨号产生一虚拟接口,由于有PPPoE头部封装,自动将虚拟接口MTU 设置成 1492,电脑上的TCP 的MSS 会动态生成 1452,这样可以避免分片,所以网络一路畅通。

路由器拨号也会产生一个MTU= 1492 的虚拟接口,但是电脑不知道该情况,依然发送packet size = 1500 的包到达路由器,路由器只有被迫分片,分片需要耗费CPU资源,对性能的影响非常大,所以当流量上升到一个阀值,路由器处理不过来,会有丢包,同时延迟也会加大。

解决方案:
在电脑上修改MTU -> 1492 或 1480 ( 最好以4个字节为一个单位),重启电脑,问题应该消失。

========================================分割线==============================================

实际情况不一定设1492或是1480,或许可能需要更低,至于到底设多少合适?

感谢原(待定?)链接:http://www.xitongcheng.com/jiaocheng/win10_article_34701.html

以管理员身份运行cmd,输入netsh interface ipv4 show subinterfaces查看当前的MTU值

接着按下面格式输入:netsh interface ipv4 set subinterface "连接名" mtu=值 store=persistent  (如:netsh interface ipv4 set subinterface "WLAN" mtu=1440 store=persistent) 按下回车键,出现“确定”提示 则说明修改完成。

============================================分割线==========================================

至于到底取1492还是1480还是我这里的1440,要去试,方法如下:

同样先打开命令提示符(管理员), 输入:ping -l 1472 -f www.baidu.com  (探测百度为例),请求将一个不允许分割的 1472 字节的数据包发送出去;

若是出现传输失败,提示需要拆分数据包的情况,则说明当前网络的 MTU 值要比指定的 1472 小,因此我们就适当调小数据包的大小(比如 1450),输入:ping -l 1440 -f www.baidu.com 按下回车键;(发现不行于是又试了1428)

如果出现传输成功,则说明当前网络的 MTU 值比 1440 要大(但是上面设1440就会丢失,所以应该就设1400附近已经可以了)。实测下来(LOL。。)设1440已经几乎不丢包了。

至于为什么不试试更小的数,比如1400或是13XX甚至更小,因为担心影响其他的应用比如出现这种状况:

以上。

猜你喜欢

转载自blog.csdn.net/qq_26043397/article/details/82830862