3G/UMTS 上令人费解的 TCP 性能

3G/UMTS 上令人费解的 TCP 性能

我使用 3G 作为主要的互联网连接,而这台设备上的 TCP 每天都变得越来越令人困惑。例如:

  1. 从 kernel.org 下载速度非常快:

    $wget http://www.kernel.org/pub/linux/kernel/v3.0/linux-3.6.8.tar.bz2
    

    几秒钟后增加到~500kB/s!

  2. 有些服务器非常慢,例如 www.graphic-pc.com:
    同样的事情,用 wget 下载一个大文件,一开始的速度是 ~30kB/s,然后就降到 5-10k 甚至更糟。

  3. 网页浏览还不错,但不太可靠。有时,页面会需要很长时间才能加载,甚至无法加载,但重新加载几乎可以立即成功。

  4. 现在,我偶然开始在 3G 连接上使用 UDP 上的 OpenVPN,天哪,突然一切都变得非常快!
    同样的 www.graphic-pc.com 现在的速度达到 100-200kB/s!


  • 这里发生了什么 ???
  • 为什么使用 VPN 比不使用 VPN 效果好这么多?
  • 为什么当 kernel.org 速度很快时 graphic-pc.com 却很慢?是
    不是跟我的 tcp 堆栈(或服务器)有关,或者是中间的某个有问题的路由器?

笔记:

设置是运行 Ubuntu Lucid 和华为 3G 加密狗(因此直接 pppd 连接)的笔记本电脑。

我几乎可以在一天中的任何时间重现这种情况,而且我没有移动,所以这显然不是蜂窝环境或互联网拥塞。(虽然不使用 VPN 的 kernel.org 有时在晚上会更糟,大约 60kB - 但使用 VPN 仍然有 500kB!)

对于 2) wireshark 显示重新传输的数据包、重复确认,有时甚至显示无序。

我尝试使用不同的 /proc/sys/net/ipv4 参数(tcp_rmem、window_scaling、tcp_congestion……)但似乎没有什么区别。


更新:
在 Windows 7 下尝试(无 VPN),得到了一些有趣的结果:

tcp settings  :  default          tcp_optimizer
kernel.org    :  10 kB/s          20 kB/s
graphic-pc.com:   8 kB/s          70 kB/s !

tcp_optimizer 启用了 ctcp 等。必须检查 graphic-pc.com 正在运行什么操作系统,我敢打赌 linux 的 tcp_westwood 和 ms ctcp 在这里不能很好地混合使用...

答案1

问题已解决:
在 graphic-pc.com 上用另一种文件类型 (.zip) 进行了测试。猜猜怎么着,同时这个文件的速度很快,而另一个文件的速度很慢(顺便说一下,是 .mp3)。所以这显然是 ISP 正在进行深度数据包检查和限制。

至于在 Windows 下奇怪的结果,我今天又测试了一下,现在和 Linux 完全一样。而且,节流是动态的,一天内会发生变化。我想我是真的不幸的是,当节流发生变化时,两者都重新启动并运行 tcp_optimizer......

仍然好奇 3G 对 TCP 性能的真正影响,因为数字 文件关于这个问题,但就此而言,这只是流量整形废话,3G 没有错!

答案2

首先,3G/4G 连接并非设计为互联网的主要连接,如果通过它们的流量符合某种模式,或者您超出了未明示的流量限制,它们就会受到限制。当您的运营商(即使是那些吹嘘只提供无限流量的运营商)说您没有限制时,不要相信他们。

毕竟这是空中时间,空中带宽低于光纤和铜线。当出现流量拥堵时,他们别无选择,只能限制来自终端节点的流量。

您提到的 graphic-pc 网站是一个非常重 flash(或类似)的网站,在我的 OC-3 连接的工作互联网上大约需要 60 秒。因此,通过标准 3G 访问此网站的测量速率较低并不令人意外。您说 Kernel.org 速度更快。考虑到此网站的文本性质,我相信您的 3G 连接可以以非常高的成功率即时压缩和解压缩流量,而对于图像/flash/音乐/等重的网站则不可能实现这一点。

最后但并非最不重要的一点是,你越想往你的管道(即你的 3G 连接)塞东西,你对 ISP 来说就越不受欢迎,他们无论如何都会限制你的流量。如果你读过你的 TOS,你就会发现他们有合法的权利这样做,只要是合理的使用(也就是不是24/7不间断连接)

当您通过 VPN 连接时,您将加密所有网络流量。因此,您的 ISP 不再能够检查您的数据包,因此无法区分文本页面请求和 Flash 页面请求。因此,您在一定程度上绕过了他们的深度数据包检查。但是使用 VPN 会降低速度,因为您必须加密离开连接的每个数据包,这是有代价的。但就您而言,这个代价听起来很小或可以忽略不计。

希望这能解释一下

相关内容