![修复家庭网络中的缓冲区膨胀](https://linux22.com/image/1270465/%E4%BF%AE%E5%A4%8D%E5%AE%B6%E5%BA%AD%E7%BD%91%E7%BB%9C%E4%B8%AD%E7%9A%84%E7%BC%93%E5%86%B2%E5%8C%BA%E8%86%A8%E8%83%80.png)
在我们的家庭网络中,随着网络 IO 的不断发生,延迟变得非常可笑。在轻负载下,它还好,但如果我 rsyncing 大量小文件,它很快就会变得不可用——其他传输基本上停止了。Ping 勉强能通过。
简单的拓扑结构——单个盒子中的一个宽带调制解调器/WIFI 路由器,带有一些无线客户端和一些有线客户端。
我已经尝试ifconfig wlan0/eth0 txqueuelen 1
在所有客户端上进行设置,这似乎有一点帮助,但帮助不大。
欢迎提供提示:我应该如何诊断和消除延迟问题?我可以在客户端上设置更多配置设置吗?或者更好的 WIFI 路由器可能会有所帮助?
答案1
您需要的是服务质量和可调整的排队算法。如果您乐意使用 Linux / FreeBSD 的内部结构并且有一些闲钱,我建议您进行如下设置:
+------+ +--------+ +------+<----> Wireless Access Point
|Router|<--->|Firewall|<---->|Switch|
+------+ +--------+ +------+<----> Wired computers
其中防火墙是一台具有 2 个网卡的 Linux 或 FreeBSD 或类似的机器,可以对流量施加一些高级排队和服务质量规则。
当通过较慢的互联网连接进行大量数据传输时,我必须做一些类似的事情来阻止 DNS 查找超时。
另一个选择是获得一个更好的路由器 - 你可以在它上面安装 dd-wrt 或 open-wrt,因为我相信这两个固件比标准家用路由器在 QoS 等方面提供了更多的功能。
答案2
我已尝试
ifconfig wlan0/eth0 txqueuelen 1
在所有客户端上进行设置......
该命令将该机器上的缓冲区大小减少到 1 个数据包。运行此命令的重要机器是您的网络瓶颈 - 即一边具有千兆位连接,另一边具有慢得多的 Internet 连接的机器。因此,这是你要运行该命令的路由器,不是客户!
确保在正确的界面上运行命令(仅出站 LAN 接口)。
当然,这只有在路由器运行 Linux 并允许您运行命令时才有效。幸运的是,大多数家用路由器的自定义固件(DD-WRT、OpenWRT、Tomato)都支持。
需要注意的是,像这样减小缓冲区大小可能会破坏 QoS,因此如果您在路由器上使用 QoS,那么最好不要改变缓冲区大小,而只使用 QoS 来限制每个客户端的上传/下载速度,使其明显低于连接的最大上传/下载速度...尽管这有一个明显的缺点,即当只有一个人连接时,带宽会被闲置。
答案3
QoS 或服务质量是对路由器将要处理的数据包进行某种排序和设置优先级...当您遇到此类问题时,这正是应该关心的...尝试在路由器配置面板中搜索并启用 QoS...在您的情况下最好使用手动设置,但您应该知道您想要从头到尾处理的数据包的优先级顺序。
答案4
我使用的是 Windows 和 Mac,而不是 Linux,但对我来说,一个解决方案是从 ISP 盒下游的 Netgear 路由器切换到 Edge 路由器,并设置智能路由(来自 Linux)