为什么FileZilla比PSFTP快得多?


11

我正在使用FileZilla 3.10.3和PSFTP 0.63(PuTTY)。谁能帮我弄清楚为什么两个客户端之间获得的吞吐量如此巨大的差异?这不仅是SFTP协议的缺点,因为FileZilla(和WinSCP)的速度要快得多!提前致谢。

当使用FileZilla通过某种协议连接到同一服务器时,我得到了“良好”的吞吐量。一个大文件约1.2MBPS。这是日志:

Response: fzSftp started, protocol_version=2
Command: open "mecorp@ftp.themcorp.com" 22
Trace: Looking up host "ftp.themcorp.com"
Trace: Connecting to 222.22.111.33 port 22
Trace: We claim version: SSH-2.0-PuTTY_Local:_Mar_29_2015_12:25:15
Trace: Server version: SSH-2.0-9.99 sshlib: 8.1.0.0
Trace: Using SSH protocol version 2
Trace: Doing Diffie-Hellman group exchange
Trace: Doing Diffie-Hellman key exchange with hash SHA-1
Trace: Host key fingerprint is:
Trace: ssh-dss 1024 20:88:a6:92:fe:11:db:b4:9a:b5:9e:8b:5f:50:bb:77
Trace: Initialised AES-256 SDCTR client->server encryption
Trace: Initialised HMAC-SHA1 client->server MAC algorithm
Trace: Initialised AES-256 SDCTR server->client encryption
Trace: Initialised HMAC-SHA1 server->client MAC algorithm
Command: Pass: ********
Trace: Sent password
Trace: Access granted
Trace: Opening session as main channel
Trace: Opened main channel
Trace: Started a shell/command
Status: Connected to ftp.themcorp.com
Trace: CControlSocket::ResetOperation(0)
Status: Starting upload of c:\temp\test.zip
Command: cd "/Home/mecorp"
Response: New directory is: "/Home/mecorp"
Trace: CControlSocket::ResetOperation(0)
Trace: FileTransferSend()
Command: put "c:\temp\test.zip" "test.zip"
Status: local:c:\temp\test.zip => remote:/Home/mecorp/test.zip
Trace: FileTransferParseResponse()
Trace: CControlSocket::ResetOperation(0)
Status: File transfer successful, transferred 27,974,088 bytes in 21 seconds

当使用PSFTP使用相同的协议连接到相同的服务器并传输相同的文件时,吞吐量会大大降低。我估计约为150kbps(在Windows 7任务管理器中查看I / O字节)。这是日志:

C:\temp>c:\d2\trunk\Util\psftp.exe -v -l mecorp -pw topsecret -P 22 ftp.themcorp.com
Looking up host "ftp.themcorp.com"
Connecting to 222.22.111.33 port 22
Server version: SSH-2.0-9.99 sshlib: 8.1.0.0
Using SSH protocol version 2
We claim version: SSH-2.0-PuTTY_Release_0.63
Doing Diffie-Hellman group exchange
Doing Diffie-Hellman key exchange with hash SHA-1
Host key fingerprint is:
ssh-dss 1024 20:88:a6:92:fe:11:db:b4:9a:b5:9e:8b:5f:50:bb:77
Initialised AES-256 SDCTR client->server encryption
Initialised HMAC-SHA1 client->server MAC algorithm
Initialised AES-256 SDCTR server->client encryption
Initialised HMAC-SHA1 server->client MAC algorithm
Using username "mecorp".
Sent password
Access granted
Opening session as main channel
Opened main channel
Started a shell/command
Connected to ftp.themcorp.com
Remote working directory is /Home/mecorp
psftp> put test.zip test.zip
local:test.zip => remote:/Home/mecorp/test.zip
psftp>

Answers:


23

FileZilla将PuTTY / psftp源代码用于SFTP实现。实际上,FileZilla运行一个隐藏的PSFTP子进程。

但是它使用自己的PSFTP(FzSFtp.exe)构建,该构建几乎没有进行任何优化(和其他修改),包括:

  • SFTP传输队列为4 MB(而PSFTP中为1 MB)
  • 以更大的块分配内存(32 KB与515 B相比)
  • 使用大型网络缓冲区(SO_RCVBUF为4 MB,SO_SNDBUF为动态大小(使用SIO_IDEAL_SEND_BACKLOG_QUERY))。PSFTP保留系统默认值。

FileZilla还使用与PuTTY(VS)不同的编译器(mingw),这可能有所帮助。


WinSCP也是基于PSFTP代码的(尽管它在内部而不是在外部子进程中使用PSFTP代码),并且使用了一组类似的优化。


4
马丁,内容非常丰富,感谢您的WinSCP!
克里斯(Chris
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.