我们遇到了 FTP 性能问题。看来我们距离服务器的跳数越多,速度就会急剧下降。
Cerberus FTP 服务器,运行在 VMWare 上。同一 VMWare 主机和子网上的 2 台机器可以获得 25Mbyte/s,但 10 跳后速度会降至 2.5MB/s。出于某种原因,sftp 速度更快。IIS FTP 也存在问题。在另一个端口 (2121) 上运行没有解决任何问题。Cisco 路由器使用 FTP 修复程序。ACTIVE/PASV FTP 也存在同样的问题。
wireshark 显示服务器正在使用巨型帧(卸载到虚拟适配器),DF 标志,但数据包在客户端上被分割。许多 ACK 包到大数据包的子集同时传送到 FTP 服务器(例如一次最多 10-20 个 ACK 数据包)。尝试禁用所有卸载,然后我们得到匹配两端的 1380 字节有效负载数据包。但速度相同,或略快(加速不到 10%)。
有什么见解可以解释原因吗?似乎只有 FTP 受到影响。sftp 没有受到影响(我的建议是放弃 FTP,这多年来一直是公司政策)。但 sftp 可能有其他东西可以帮助它。
距离服务器的距离可能表明路由器执行 ftp 修复会减慢速度,但 VPN 上的云服务器速度最慢(3Mbps)。因此延迟/RTT 可能会参与其中。但当 LAN 上的速度降至 2.5Mbyte/s 时,ping 显示延迟小于 5ms。即使小于 1ms 也太慢了。
网络人员表示,目前还没有 Cisco Firepower – 客户端和服务器之间只有 Cisco ASA。
还有一件事。我们可以在客户端看到,数据以 8k“桶”的形式发送。即 5 个 1380 字节的数据包 + 1 个 1292 字节的数据包。Cerberus 中的所有缓冲区都设置为 64/256k。所以可能是代码本身写入了 8k 缓冲区。
如果我们查看 wireshark 中的数据包间时序,我们会看到 2 个随机的 1380 字节数据包,间隔距离大致与报告的速度相匹配。因此一切都变慢了。wireshark 图表显示了同样的情况。速度一直很慢。
答案1
FTP 太老了,它通过单独的控制协议协商端口号。这让现代防火墙变得复杂。状态连接跟踪和协议感知助手通常是需要的,这会降低吞吐量并限制通过防火墙的最大会话数。
尝试不使用 NAT,使用 IPv6 端到端。通过 TCP iperf 等工具比较 ftp、sftp over ssh 和原始带宽。