能否解释一下为什么 SFTP 比 FTPS 快 4 倍?

能否解释一下为什么 SFTP 比 FTPS 快 4 倍?

问题

  • iperf3 报告942Mbps
  • SFTP 1GB 传输速度94~100MB/秒
  • 显式 FTPS 1GB 传输19~23MB/秒
  • CPU / IO 负载均低于 20%htop

我在谷歌上发现几乎 99% 的帖子都说 FTP(无论是否加密)总是比 SFTP 更快,而且我也觉得这是合理的。

过去几年我花了好几天时间配置,并苦苦思索为什么 FTPS 没有使用全部带宽,最后尝试了 SFTP。然后发现这是 4 倍的速度,几乎占用了全部带宽。

是否有任何可能的解释或 vsftpd 配置错误导致 FTPS 比 SFTP 慢?

--

再次澄清一下意图,从现在开始我完全可以使用 SFTP。我已经筋疲力尽,没有时间再摆弄 FTPS。SFTP 对我来说完美无缺,所以我不会再尝试使用 FTPS。

我只是好奇,为什么大多数教程和帖子都说 FTPS 比 SFTP 更快,但我们在这里看到的却恰恰相反。


配置

跳过详细的服务器/客户端硬件信息,因为 iperf3 和 SFTP 已经证明这不是服务器/客户端性能问题。

  • 1 个家用路由器,2Gbit/s 硬件 NAT

    • iptime a2003ns-mu(使用 RTL8197F)
  • 路由器后面的 vsftpd 服务器1G 链接速度

    • Debian 12.2.0-14
    • 华擎 J4105m
    • vsftpd 3.0.3
  • 客户端 PC 位于路由器后面1G 链接速度

    • Win11教育版
    • FileZilla 3.66.4
  • 在 FTP 上使用 TLSv1.2 进行外部连接


情况

  • 从本地网络访问 FTP 服务器的文件

vsftpd 配置

# General
pam_service_name=vsftpd
utf8_filesystem=YES
dirmessage_enable=YES
xferlog_enable=YES


# Connectivity
listen=YES
listen_ipv6=NO
connect_from_port_20=YES


# Security
anonymous_enable=NO
local_enable=YES
write_enable=YES
local_umask=022


# chroot
chroot_local_user=YES
secure_chroot_dir=/var/run/vsftpd/empty
allow_writeable_chroot=YES


# Certs
rsa_cert_file=/etc/letsencrypt/live/[REDACTED]/fullchain.pem
rsa_private_key_file=/etc/letsencrypt/live/[REDACTED]/privkey.pem


# Explicit SSL
ssl_enable=YES
force_local_logins_ssl=YES
force_local_data_ssl=YES
allow_anon_ssl=NO
require_ssl_reuse=NO
ssl_tlsv1=YES
ssl_sslv2=NO
ssl_sslv3=NO
ssl_ciphers=HIGH


# Passive mode
pasv_addr_resolve=YES
pasv_address=[REDACTED].com
pasv_enable=YES
pasv_min_port=12000
pasv_max_port=13000


# Preventing error using local address connection
pasv_promiscuous=yes

速度数据

[ ID] Interval           Transfer     Bitrate         Retr  Cwnd
[  5]   0.00-1.00   sec   113 MBytes   950 Mbits/sec    0    218 KBytes
[  5]   1.00-2.00   sec   112 MBytes   942 Mbits/sec    0    218 KBytes
[  5]   2.00-3.00   sec   112 MBytes   938 Mbits/sec    0    218 KBytes
[  5]   3.00-4.00   sec   112 MBytes   942 Mbits/sec    0    218 KBytes
[  5]   4.00-5.00   sec   112 MBytes   942 Mbits/sec    0    218 KBytes
[  5]   5.00-6.00   sec   112 MBytes   941 Mbits/sec    0    218 KBytes
[  5]   6.00-7.00   sec   113 MBytes   944 Mbits/sec    0    218 KBytes
[  5]   7.00-8.00   sec   112 MBytes   940 Mbits/sec    0    218 KBytes
[  5]   8.00-9.00   sec   112 MBytes   942 Mbits/sec    0    218 KBytes
[  5]   9.00-10.00  sec   112 MBytes   942 Mbits/sec    0    218 KBytes
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval           Transfer     Bitrate         Retr
[  5]   0.00-10.00  sec  1.10 GBytes   942 Mbits/sec    0             sender
[  5]   0.00-10.00  sec  1.10 GBytes   941 Mbits/sec                  receiver

答案1

SFTP 通过单一安全连接运行。它使用安全通道 (SSH) 来传输数据和控制信息。这样就无需像 FTPS 那样单独使用数据和控制连接,从而可以减少延迟。而 FTPS 通常使用两个单独的通道来传输控制(命令)和数据,这可能会带来额外的开销。

SFTP 依赖于 SSH 协议,该协议默认提供强加密。SFTP 中使用的加密算法通常非常高效,并且针对安全文件传输进行了优化。另一方面,FTPS 可能使用各种加密选项,加密算法的选择会影响性能。在某些情况下,可能会选择效率较低的算法,从而降低数据传输速度。


尝试增加被动端口范围

pasv_min_port=12000
pasv_max_port=13000

修改 ssl_ciphers 以包含更安全、性能更佳的密码套件:

ssl_ciphers=ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384

相关内容