Mengapa FileZilla jauh lebih cepat daripada PSFTP?

11

Saya menggunakan FileZilla 3.10.3 dan PSFTP 0.63 (Putty). Adakah yang bisa membantu saya mencari tahu mengapa throughput yang saya dapatkan sangat jauh berbeda antara kedua klien? Itu tidak bisa hanya merupakan kelemahan dari protokol SFTP, karena FileZilla (dan WinSCP) jauh lebih cepat! Terima kasih sebelumnya.

Saat menggunakan FileZilla untuk terhubung ke server yang sama menggunakan beberapa protokol, saya mendapatkan throughput "baik"; ~ 1.2MBPS untuk satu file besar. Ini lognya:

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

Saat menggunakan PSFTP untuk terhubung ke server yang sama menggunakan protokol yang sama dan mentransfer file yang sama, saya mendapatkan throughput yang jauh lebih lambat. Saya akan memperkirakan sekitar 150kbps (melihat I / O byte di task manager Windows 7). Ini lognya:

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
sumber

Jawaban:

23

FileZilla menggunakan kode sumber Putty / psftp untuk implementasi SFTP. Sebenarnya FileZilla menjalankan sub-proses PSFTP tersembunyi.

Tetapi ia menggunakan build sendiri dari PSFTP ( FzSFtp.exe) yang menggunakan beberapa optimasi (dan modifikasi lainnya), termasuk:

  • Antrian transfer SFTP adalah 4 MB (dibandingkan dengan 1 MB di PSFTP)
  • Mengalokasikan memori dalam potongan yang jauh lebih besar (32 KB dibandingkan dengan 515 B)
  • Menggunakan buffer jaringan besar (4 MB untuk SO_RCVBUF dan ukuran dinamis untuk SO_SNDBUF [menggunakan SIO_IDEAL_SEND_BACKLOG_QUERY]). PSFTP menjaga standar sistem.

FileZilla juga menggunakan kompiler yang berbeda (mingw) dari PutTY (VS), yang mungkin berkontribusi.


WinSCP juga didasarkan pada kode PSFTP (meskipun menggunakan kode PSFTP secara internal, bukan dalam sub-proses eksternal) dan menggunakan serangkaian optimisasi yang serupa.

Martin Prikryl
sumber
4
Sangat informatif, Martin, dan terima kasih atas WinSCP!
Chris