问题
- 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