Perché FileZilla è molto più veloce di PSFTP?


11

Sto usando FileZilla 3.10.3 e PSFTP 0.63 (PuTTY). Qualcuno può aiutarmi a capire perché il throughput che ottengo è così drasticamente diverso tra i due client? Non può essere solo un difetto del protocollo SFTP, perché FileZilla (e WinSCP) è molto più veloce! Grazie in anticipo.

Quando si utilizza FileZilla per connettersi allo stesso server utilizzando un protocollo, ottengo un throughput "buono"; ~ 1,2 MB per un file di grandi dimensioni. Ecco il registro:

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

Quando utilizzo PSFTP per connettersi allo stesso server utilizzando lo stesso protocollo e trasferendo lo stesso file, ottengo un throughput molto più lento. Stimerei circa 150kbps (guardando i byte I / O nel task manager di Windows 7). Ecco il registro:

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>

Risposte:


23

FileZilla utilizza un codice sorgente PuTTY / psftp per un'implementazione SFTP. In realtà FileZilla esegue un processo secondario PSFTP nascosto.

Ma utilizza la propria build di PSFTP ( FzSFtp.exe) che impiega poche ottimizzazioni (e altre modifiche), tra cui:

  • La coda di trasferimento SFTP è di 4 MB (rispetto a 1 MB in PSFTP)
  • Alloca memoria in blocchi molto più grandi (32 KB rispetto a 515 B)
  • Utilizza buffer di rete di grandi dimensioni (4 MB per SO_RCVBUF e dimensioni dinamiche per SO_SNDBUF [utilizzando SIO_IDEAL_SEND_BACKLOG_QUERY]). PSFTP mantiene le impostazioni predefinite del sistema.

FileZilla utilizza anche un compilatore (mingw) diverso da PuTTY (VS), ciò che può contribuire.


WinSCP si basa anche sul codice PSFTP (sebbene utilizzi internamente il codice PSFTP, non in un processo secondario esterno) e utilizza un insieme simile di ottimizzazioni.


4
Molto istruttivo, Martin, e grazie per WinSCP!
Chris,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.