%20ao%20recuperar%20mais%20de%20um%20pacote%20de%20rede.png)
Tenho um problema com um servidor FTP (ftp.cluster003.ovh.net), que acontece especificamente quando me conecto a ele a partir de casa (seja qual for o cliente, computador ou SO).
O problema não aparece quando me conecto a outro servidor FTP (ftp.phpnet.org) ou quando me conecto ao ftp.cluster003.ovh.net a partir do meu escritório.
Em casa, estou conectado através de um modem-roteador Netgear D6000 DSL.
Os sintomas são os seguintes: sempre que tento recuperar alguns dados do servidor, quando a quantidade de dados a recuperar não cabe em um único pacote de rede, a transação nunca termina. Isso acontece, é claro, ao recuperar um arquivo, mas também simplesmente ao listar o conteúdo de um diretório quando há mais de aproximadamente 20 arquivos no diretório (a resposta do servidor contém as permissões e os proprietários dos arquivos, então cada arquivo listado corresponde a aproximadamente 70 bytes de dados).
Exemplo de sessão (no Linux):
% for i in `seq 1 385`;do printf "$i-";done > file1
% for i in `seq 1 395`;do printf "$i-";done > file2
% ftp ftp.cluster003.ovh.net
Connected to ftp.cluster003.ovh.net.
220- ~~~ Welcome to OVH ~~~
220 This is a private system - No anonymous login
Name (ftp.cluster003.ovh.net:XXXXXXXX): XXXXXXXX
331 User XXXXXXXX OK. Password required
Password:
230-OK. Current restricted directory is /
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> put file1
local: file1 remote: file1
200 PORT command successful
150 Connecting to port 56721
226-File successfully transferred
226 0.087 seconds (measured here), 16.14 Kbytes per second
1432 bytes sent in 0.00 secs (24.3868 MB/s)
ftp> put file2
local: file2 remote: file2
200 PORT command successful
150 Connecting to port 39725
226-File successfully transferred
226 0.111 seconds (measured here), 12.93 Kbytes per second
1472 bytes sent in 0.00 secs (17.9975 MB/s)
ftp> ls
200 PORT command successful
150 Connecting to port 46431
drwx---r-x 2 644709 users 4 Jan 2 13:02 .
drwx---r-x 4 644709 users 8 Dec 31 12:58 ..
-rw----r-- 1 644709 users 1432 Jan 2 13:02 file1
-rw----r-- 1 644709 users 1472 Jan 2 13:02 file2
226-Options: -a -l
226 4 matches total
ftp> get file1
local: file1 remote: file1
200 PORT command successful
150 Connecting to port 35507
226-File successfully transferred
226 0.001 seconds (measured here), 2.71 Mbytes per second
1432 bytes received in 0.00 secs (529.3102 kB/s)
ftp> get file2
local: file2 remote: file2
200 PORT command successful
150 Connecting to port 56107
^C
receive aborted
waiting for remote to finish abort
226-File successfully transferred
226 0.000 seconds (measured here), 2.91 Mbytes per second
500 ?
Se eu não interromper com Ctrl+ C, nada acontece e o servidor eventualmente expira. Ao observar o que acontece com o Wireshark, pode-se ver que o arquivo1 cabe em um único pacote, enquanto o arquivo2 não.
O último pacote do arquivo2 é recebido, mas não os anteriores. Isso é completamente determinístico. Alguma idéia do que causa esse problema e como resolvê-lo?