Warum ist FileZilla so viel schneller als PSFTP?

11

Ich verwende FileZilla 3.10.3 und PSFTP 0.63 (PuTTY). Kann mir jemand helfen, herauszufinden, warum der Durchsatz zwischen den beiden Clients so drastisch unterschiedlich ist? Es kann nicht nur ein Mangel des SFTP-Protokolls sein, weil FileZilla (und WinSCP) so viel schneller sind! Danke im Voraus.

Wenn ich mit FileZilla über ein Protokoll eine Verbindung zum selben Server herstelle, erhalte ich einen "guten" Durchsatz. ~ 1,2 MBit / s für eine große Datei. Hier ist das Protokoll:

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

Wenn ich PSFTP verwende, um mit demselben Protokoll eine Verbindung zu demselben Server herzustellen und dieselbe Datei zu übertragen, erhalte ich einen viel langsameren Durchsatz. Ich würde ungefähr 150 KBit / s schätzen (unter Berücksichtigung der E / A-Bytes im Windows 7-Task-Manager). Hier ist das Protokoll:

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
quelle

Antworten:

23

Die FileZilla verwendet einen PuTTY / psftp-Quellcode für eine SFTP-Implementierung. Tatsächlich führt FileZilla einen versteckten PSFTP-Unterprozess aus.

Es verwendet jedoch einen eigenen PSFTP ( FzSFtp.exe) - Build, der nur wenige Optimierungen (und andere Modifikationen) verwendet, darunter:

  • Die SFTP-Übertragungswarteschlange beträgt 4 MB (im Vergleich zu 1 MB in PSFTP).
  • Ordnet Speicher in viel größeren Blöcken zu (32 KB im Vergleich zu 515 B)
  • Verwendet große Netzwerkpuffer (4 MB für SO_RCVBUF und dynamische Größe für SO_SNDBUF [mit SIO_IDEAL_SEND_BACKLOG_QUERY]). PSFTP behält die Systemstandards bei.

FileZilla verwendet auch einen anderen Compiler (mingw) als PuTTY (VS), was dazu beitragen kann.


WinSCP basiert ebenfalls auf PSFTP-Code (obwohl PSFTP-Code intern und nicht in einem externen Unterprozess verwendet wird) und verwendet ähnliche Optimierungen.

Martin Prikryl
quelle
4
Sehr informativ, Martin, und danke für WinSCP!
Chris