随机洲际 TCP 流很慢

网络工程 通讯协议 ssh 表现
2021-08-01 14:25:58

我在新西兰有一个家庭服务器,在阿姆斯特丹有一个远程服务器,配置如下:

新西兰到阿姆斯特丹网络图

我有一个简单的测试脚本:

#!/bin/bash

for i in `seq 1 20`;
do
    scp root@remoteserver:~/testfile.txt .
done

示例输出:

testfile.txt                                  100%   10MB 764.9KB/s   00:13
testfile.txt                                  100%   10MB 810.6KB/s   00:12
testfile.txt                                  100%   10MB 810.5KB/s   00:12
testfile.txt                                   48% 4960KB  11.6KB/s   07:36 ETA

testfile.txt是 10MB 的随机数据。似乎大约 1/4 的传输将被锁定在 10KB/s 左右。其余的平均约为 800KB/s。现在,我当然不希望用 300 毫秒的 RTT(和未调整的 TCP 堆栈)使 1 Gigabit 管道饱和,因此可以预期 800KB/s 的上限。出乎意料的是以 10KB/s 完成的随机流。任何人都可以解释这种行为并提出解决方案吗?

一些额外的上下文:

  • 本地和远程服务器都运行 Ubuntu。我尝试了不同的版本都无济于事。
  • 这只是最近几周的问题。在此之前,我从未遇到过这种奇怪的行为。
  • RTT 或链接的长度似乎对此有影响。在澳大利亚以外的服务器上没有看到相同的行为(即约 60 毫秒 RTT)。
  • 切换到不同的欧洲国家似乎没有什么区别(即法国和德国的数据中心有同样的问题)。

我问网络工程,因为我相信这可能归结为互联网或我的网络的基础设施,而不是任一端点的某些配置问题。

1个回答

我的一位客户在英国、爱尔兰和新加坡之间有流量;经常有你描述的那种惊人的减速。我的理解是,欧洲与澳大利亚和新西兰之间的大量交通要经过新加坡,那里可能会出现相当大的拥堵。(即使您不是这种情况,您也可能遇到类似的问题。)

  1. 路由:一个问题是由英国站点的路由不佳引起的。通过 NTT 的路由需要大约 190 毫秒的 RTT,并且变化相对较低,通过 PCCW 的路由需要 330 毫秒,变化非常大,高达约 1000 毫秒。此外,还有明显的带宽限制。(作为比较,AWS 新加坡到 AWS 伦敦 165 毫秒;理论上最小 105 毫秒。)仅有时与该客户端的流量有关。用于说明的附加图表(从 AWS 新加坡测量到英国客户的站点)。 建议:记录RTT并寻找模式,仔细检查路由(带traceroute

在此处输入图片说明

  1. 服务器节流:另一个问题与欧洲的服务器有关。一些租用的虚拟专用服务器有使用限制。我当然见过非常便宜的 VPS、网络流量、CPU 使用率和“磁盘”吞吐量的非常严重的限制。 建议:在昂贵的 VPS 或物理硬件上重复测试。

也许这些建议会给你一个尝试的方向。