Fast uploads, slow downloads

Hi,

I am experiencing a 100:1 difference in STOR and RETR. I am testing on a little subnet I setup with a router (both PCs are on 192.168.0.10x). Stor yields 5000 - 11000 kbytes/sec while Retr yields only 70-90 kbytes/sec.

I've replicated the issue using SmartFTP and DOS FTP. It goes away when I run the FTP client in Linux (one PC is dual booted for Win2000 SP4 and RH Linux). I can run iperf TCP tests at full speed both directions. Therefore, it is not the hardware, not the LAN.

Any ideas?

Here's a session log:
SmartFTP v1.1.985.6
Resolving host name 192.168.0.102...
Connecting to (192.168.0.102) -> IP: 192.168.0.102 PORT: 21
Connected to (192.168.0.102) -> Time = 78ms
Socket connected waiting for login sequence.
220-Evo Netqual FTP Server
WarFTPd 1.82.00-RC10 (Jan 25 2005) Ready
©opyright 1996 - 2005 by Jarle (jgaa) Aase - all rights reserved.
220 Please enter your user name.
USER ****
331 User name okay, need password.
PASS (hidden)
230 User tems logged in from host JCMDELL5160 (192.168.0.100)
SYST
215 UNIX Type: L8 Server: "WarFTPd 1.82.00-RC10" OS: "WIN32 (Windows 2000 5.0 2195 x86 1-CPU)"
FEAT
500 'FEAT': command not understood.
TYPE I
200 Type set to I.
REST 0
350 Restarting at byte offset 0. Send STORE or RETRIEVE to initiate transfer.
PWD
257 "/" is current directory.
Compression disabled for private IP addresses.
PASV
227 Entering Passive Mode (192,168,0,102,106,134)
Opening data connection IP: 192.168.0.102 PORT: 27270.
LIST -aL
125 Using existing BINARY mode data connection for /bin/ls (330 bytes).
330 bytes received successfully. (330 B/s) (00:00:01).
226 Transfer complete. 330 bytes in 0.00 sec. (322.266 Kb/s)
CWD /testfiles/
250 "/testfiles": is current directory.
PWD
257 "/testfiles" is current directory.
Compression disabled for private IP addresses.
PASV
227 Entering Passive Mode (192,168,0,102,61,207)
Opening data connection IP: 192.168.0.102 PORT: 15823.
LIST -aL
125 Using existing BINARY mode data connection for /bin/ls (328 bytes).
328 bytes received successfully. (328 B/s) (00:00:01).
226 Transfer complete. 328 bytes in 0.00 sec. (320.313 Kb/s)
Compression disabled for private IP addresses.
PASV
227 Entering Passive Mode (192,168,0,102,25,167)
Opening data connection IP: 192.168.0.102 PORT: 6567.
RETR 1_Mb
125 Using existing BINARY mode data connection for 1_Mb (1048576 bytes).
1048576 bytes received successfully. (85.33 KB/s) (00:00:12).
226 Transfer complete. 1048576 bytes in 11.62 sec. (88.147 Kb/s)
Compression disabled for private IP addresses.
PASV
227 Entering Passive Mode (192,168,0,102,45,84)
Opening data connection IP: 192.168.0.102 PORT: 11604.
STOR 10_Mb
125 Ready to receive "10_Mb" . Mode STREAM Type BINARY.
10485760 bytes sent successfully. (5120.00 KB/s) (00:00:02).
226 Transfer complete. 10485760 bytes in 2.56 sec. (3993.760 Kb/s)
Compression disabled for private IP addresses.
PASV
227 Entering Passive Mode (192,168,0,102,89,4)
Opening data connection IP: 192.168.0.102 PORT: 22788.
LIST -aL
125 Using existing BINARY mode data connection for /bin/ls (328 bytes).
328 bytes received successfully. (328 B/s) (00:00:01).
226 Transfer complete. 328 bytes in 0.00 sec. (320.313 Kb/s)
NOOP
200 NOOP command successful.

My FTP server is using a 16,384 byte send buffer. That produces sets of (11 TCP segments of 1460 bytes, plus one segment of 324 bytes). When the FTP client PC receives the last (shorter) segment, it delays that segment's Ack for 200+ milliseconds - not sure why, but it's consisent and it drags the throughput into the mud. Perhaps an issue with SP2 for WinXP?