我有一个 DigitalOcean Droplet,它共享千兆位连接,幸运的是,我的大学宿舍也有千兆位连接。我注意到两者之间的数据传输非常慢,所以我运行 iperf3,将 Droplet 作为服务器,将我的电脑作为客户端。测试显示极低的速度。当我使用 UDP 或足够的并行流(80)运行相同测试时,我达到了全千兆速度。
我在另一台 Windows 机器上运行了 iperf3,得到了相同的结果。经过进一步的故障排除后,我发现使用 Ubuntu 而不是 Windows 可以达到千兆速度。
我有一个 EC2 实例,它比 Droplet 距离我更近几个州,当我将其设置为服务器并将我的 Windows 计算机设置为客户端时,我达到了大约 30 兆比特,并且再次使用 UDP 或足够的并行流,我也能够获得千兆比特。
有了这些信息,我尝试以更大的窗口大小运行 iperf,并自己调整一些 Windows 网络设置,但似乎没有任何帮助。我找到了一个文章这几乎与我的情况完全相似,但没有可用的解决方案。
我将非常感激任何帮助或建议,以帮助我实现这一点。谢谢。
编辑:我联系了文章的作者,他回复说我需要一个 WAN 优化器。以下是他发给我的电子邮件的 pastebin。有人能证实这一点或提出更简单的解决方案吗?虽然我喜欢认为自己是技术达人,但我只是一名大学新生,那封电子邮件中的几乎所有内容我都听不懂。
答案1
对于 Window tcp 优化,你可以尝试类似下面的优化器:
https://www.speedguide.net/downloads.php
对于 Linux tcp 优化,这里有一个与之相近的优化,其目标也是提高网络吞吐量
https://www.cascaderangenetworks.com/
我们在不同的系统上使用过这两种产品,它们的安装非常简单。
答案2
听起来您的 ISP 做了一些带宽限制,这使得 Windows 无法应对这种限制,否则性能会受到很大影响。我的经验是,如果您使用 Linux 并将其配置为使用CDG
TCP 拥塞算法,它将获得相当好的吞吐量和尽可能低的延迟。这很有效,因为如果您运行的是较新的 Linux 系统,Linux 会使用默认调用的队列管理算法fq-codel
。
但是,据我所知,Windows 不支持任何类型的队列管理算法,您只能从几种 TCP 拥塞算法中进行选择。我建议尝试Windows 的NewReno
算法BBR2
,但如果没有适当的队列管理,这些都不是真正好的解决方案。您可以尝试使用Cubic
拥塞控制算法来查看它是否能提高您的吞吐量。但是,请注意,Cubic 针对原始吞吐量进行了优化,完全忽略了缓冲区膨胀,这可能会导致任何交互式互联网使用的体验不佳,即使它能为您提供最大的吞吐量(例如,文件下载在最短时间内完成,但任何使用相同连接上网、玩游戏或搜索 YouTube 视频的人都会遭受大量额外的延迟)。
大多数人似乎认为唯一可接受的解决方案是使用 Linux 机顶盒作为 Windows 和上行 Internet 访问之间的过滤器,以解决 Windows 中的问题。最常用的推荐设备是 Ubiquiti EdgeRouter X,如果您的上行链路速度为 300 Mbps 或更低,它是不错的产品,因为 EdgeRouter X 内的 CPU 无法处理比这更快的流量。某些路由器(如果您的上行链路连接到您可以控制的 WLAN 接入点)已经支持主动队列管理(AQM)或智能队列管理(SQM),这可能足以强制 Windows 正常运行。使用 AQM 或 SQM 的理念是将队列吞吐量设置得比物理连接略低,以大大减少延迟。通常,将限制配置为Cubic
可以无限制吞吐的速度的 95% 左右是可以的,只要路由器有足够的 CPU 能力足够快地处理所有 TPC/IP 数据包。
令人悲伤的是,微软似乎对在其系统中添加缺失的队列管理不感兴趣,因此 Windows 自身无法正确处理这种情况。
如果您无法负担购买一个额外的网络设备来修复 Windows,那么一个穷人的解决方案就是调整网络适配器设置以将链接速度设置为 100 Mbps 双工,这会将 Windows 最大速度限制为 100 Mbps,但它应该在所有情况下至少获得 90 Mbps 的吞吐量,因为它不再达到 ISP 级别的限制。
显然,强制您的本地链接使用比您的网络连接实际支持的更小的带宽远非完美,但如果您必须优化单台 Windows 机器的互联网体验,这可能是最不坏的选择。
如果有人能指出上面的错误并告诉我如何在 Windows 中启用主动队列管理(类似于Linux 中的 或fq-codel
),请在下面添加评论。我有兴趣让我们的 Windows 游戏机在全 Linux 网络中运行,其中所有 Linux 设备使用 FTTH 连接都没有问题。cake
pie