Por que o FileZilla é muito mais rápido que o PSFTP?

11

Estou usando o FileZilla 3.10.3 e PSFTP 0.63 (PuTTY). Alguém pode me ajudar a descobrir por que o rendimento que recebo é tão drasticamente diferente entre os dois clientes? Não pode ser apenas uma falha do protocolo SFTP, porque o FileZilla (e o WinSCP) é muito mais rápido! Desde já, obrigado.

Ao usar o FileZilla para conectar-se ao mesmo servidor usando algum protocolo, recebo uma taxa de transferência "boa"; ~ 1.2MBPS para um arquivo grande. Aqui está o log:

Response: fzSftp started, protocol_version=2
Command: open "[email protected]" 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

Ao usar o PSFTP para conectar-se ao mesmo servidor usando o mesmo protocolo e transferindo o mesmo arquivo, fico com uma taxa de transferência muito mais lenta. Eu estimaria cerca de 150kbps (observando os bytes de E / S no gerenciador de tarefas do Windows 7). Aqui está o log:

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>
Chris
fonte

Respostas:

23

O FileZilla usa um código-fonte PuTTY / psftp para uma implementação SFTP. Na verdade, o FileZilla executa um subprocesso PSFTP oculto.

Mas ele usa sua própria compilação de PSFTP ( FzSFtp.exe) que emprega poucas otimizações (e outras modificações), incluindo:

  • A fila de transferência SFTP é de 4 MB (em comparação com 1 MB no PSFTP)
  • Aloca memória em pedaços muito maiores (32 KB em comparação com 515 B)
  • Usa buffers de rede grandes (4 MB para SO_RCVBUF e tamanho dinâmico para SO_SNDBUF [usando SIO_IDEAL_SEND_BACKLOG_QUERY]). PSFTP mantém os padrões do sistema.

O FileZilla também usa um compilador diferente (mingw) que PuTTY (VS), o que pode contribuir.


O WinSCP também é baseado no código PSFTP (embora ele use o código PSFTP internamente, não em um subprocesso externo) e use um conjunto semelhante de otimizações.

Martin Prikryl
fonte
4
Muito informativo, Martin, e obrigado por WinSCP!
Chris