เหตุใด 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 (ดู I / O bytes ในตัวจัดการงาน Windows 7) นี่คือบันทึก:

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>

คำตอบ:


23

FileZilla ใช้ซอร์สโค้ด PuTTY / psftp สำหรับการนำ SFTP ไปใช้ ที่จริงแล้ว FileZilla จะเรียกใช้กระบวนการย่อย PSFTP ที่ซ่อนอยู่

แต่ใช้โครงสร้างของตัวเองของ PSFTP ( FzSFtp.exe) ที่ใช้การเพิ่มประสิทธิภาพไม่กี่ (และการแก้ไขอื่น ๆ ) รวมถึง:

  • คิวถ่ายโอน SFTP คือ 4 MB (เทียบกับ 1 MB ใน PSFTP)
  • จัดสรรหน่วยความจำในกลุ่มที่ใหญ่กว่ามาก (32 KB เทียบกับ 515 B)
  • ใช้บัฟเฟอร์เครือข่ายขนาดใหญ่ (4 MB สำหรับ SO_RCVBUF และขนาดไดนามิกสำหรับ SO_SNDBUF [ใช้ SIO_IDEAL_SEND_BACKLOG_QUERY]) PSFTP เก็บค่าเริ่มต้นของระบบ

FileZilla ยังใช้คอมไพเลอร์ (mingw) ที่แตกต่างจาก PuTTY (VS) สิ่งที่อาจมีส่วนร่วม


WinSCP ยังใช้รหัส PSFTP (แม้ว่าจะใช้รหัส PSFTP ภายในไม่ใช่กระบวนการย่อยภายนอก) และใช้ชุดการเพิ่มประสิทธิภาพที่คล้ายคลึงกัน


4
ให้ข้อมูลมาร์ตินและขอขอบคุณ WinSCP!
Chris
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.