La conexión con un servidor FTP se bloquea (nunca finaliza) al recuperar más de un paquete de red

La conexión con un servidor FTP se bloquea (nunca finaliza) al recuperar más de un paquete de red

Tengo un problema con un servidor FTP (ftp.cluster003.ovh.net), que ocurre específicamente cuando me conecto desde casa (sea cual sea el cliente, computadora o sistema operativo).

El problema no aparece cuando me conecto a otro servidor FTP (ftp.phpnet.org) o cuando me conecto a ftp.cluster003.ovh.net desde mi oficina.

En casa, estoy conectado a través de un módem-enrutador DSL Netgear D6000.

Los síntomas son los siguientes: cada vez que intento recuperar algunos datos del servidor, cuando la cantidad de datos a recuperar no cabe en un solo paquete de red, la transacción nunca finaliza. Esto sucede, por supuesto, al recuperar un archivo, pero también simplemente al enumerar el contenido de un directorio cuando hay más de aproximadamente 20 archivos en el directorio (la respuesta del servidor contiene los permisos y propietarios de los archivos, por lo que cada archivo enumerados corresponden a aproximadamente 70 bytes de datos).

Ejemplo de una sesión (bajo 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 ?

Si no interrumpo con Ctrl+ C, no pasa nada y el servidor eventualmente agota el tiempo de espera. Al observar lo que sucede con Wireshark, se puede ver que el archivo1 cabe en un solo paquete, mientras que el archivo2 no.

file1 cabe en un solo cuadro

archivo2 no

Se recibe el último paquete del archivo2 pero no los anteriores. Esto es completamente determinista. ¿Alguna idea de qué causa este problema y cómo solucionarlo?

Respuesta1

Aparentemente, este problema ha sido reportado por otras personas que tienen el módem-enrutador Netgear D6000, por ejemplo:

La solución (que también funcionó para mí) es desactivar la función "Escaneo de puertos y protección DoS" del enrutador.

información relacionada