22 de Abril, 2004

Descargas más o menos inteligentes

Podría haber añadido la coletilla de en elxwifi, pero he decidido finalmente ser lo más general posible.

Esta anotación está motivada por ciertos acontecimientos de ayer tarde/noche. Un usuario sin identificar de la red elxwifi (tenía IP por DHCP y la MAC de su tarjeta no me sonaba), intentaba descargar del FTP de blackshell las tres imágenes ISO de Mandrake Linux 9.2 a la vez. Su forma de descargar no era muy inteligente, y como no me dio la oportunidad de contactar con él, al final tuve que poner una regla de PF y bloquearle el acceso al servicio :(.

Vamos por partes. A la hora de realizar una descarga "inteligente" hay que tener en cuenta principalmente 3 factores: el servicio que empleamos, el programa con el que descargamos y el medio en el que realizamos la descarga.

Para valorar el servicio solo necesitamos un mínimo de información y sentido común. Hay ciertas características que estarán disponibles por lo general en un servidor FTP, por ejemplo.

Pongamos el caso de blackshell. El servidor FTP solo da servicio a la red inalámbrica elxwifi, permite continuar descargas interrumpidas, modo pasivo, etc. Vamos, un FTP de lo más normalito: con todas sus funcionalidades. Así que lo lógico sería aprovecharlas, ¿no? Si queremos bajar una imagen ISO no es necesario contar con X horas si podemos cortar la descarga y continuar otro día. Si nos encontramos detrás de un cortafuegos haciendo NAT, no necesitaremos un proxy especial porque podremos emplear el modo pasivo que nos ofrece el servidor.

Además, si nada nos hace pensar lo contrario, el servidor (como es el caso de blackshell) no impone limitaciones a las descargas, así que emplear "aceleradores" igual no aporta beneficios y sí puede hacer que el administrador con facilidad para poner reglas de Packet Filter se mosquee :P.

Otra cosa es que en el caso del FTP anónimo puede ser buena idea emplear de contraseña una dirección de correo electrónico. Este valor es configurable en cualquier programa (incluidos navegadores). Si veo en los logs de ayer yourname@yourcompany.com, no me puedo poner en contacto con ese usuario y solo me queda recurrir al bloqueo de esa máquina hacia el servicio "para comunicarme con él". No se si entendió el mensaje, claro. Es una forma de comunicación muy rudimentaria :D.

Luego está el programa para realizar la descarga, que es muy importante. Un navegador no es, por lo general, buen programa para descargar un fichero muy grande. La función de esos programas no es esa (aunque unos se comportan mejor que otros).

El programa que recomiendo es wget, disponible en cualquier distribución de Linux, *BSD, UNIX comercial y hasta para windows.

Su uso es sencillo:

$ wget URL

Se interrumpe con un CTRL + c y usaremos -c delante de la URL para continuar la descarga. Con --passive-ftp usaremos el modo pasivo (en el caso del FTP y si nos hace falta).

Si queremos proporcionar nuestra dirección de correo electrónico como contraseña en una sesión de FTP anónima emplearemos:

$ wget ftp://anonymous:usuario%40host.dom@host/path/file

Donde usuario%40host.dom será nuestro correo electrónico, sustituyendo la arroba por %40.

wget tiene muchas más opciones, pero para nuestro cometido es más que suficiente con lo que he explicado.

Por último hay que conocer el medio. En internet es muy fácil: tenemos un máximo de subida/bajada, y contra más nos acerquemos a esos valores, mejor.

Por lo general no es buena idea bajar varios ficheros a la vez, el ancho de banda se repartirá y además perderemos parte de la calidad (por ejemplo por un aumento de los ACK de TCP). Pero bueno, en general se puede considerar si bajamos de dos servidores distintos y no llegamos a nuestra máxima velocidad de descarga con uno solo de ellos.

También podríamos pensar que tener 1 CD cada 4 horas es mejor que tener 3 en 12, pero eso ya lo dejo como pensamiento de cada uno :D. Si lo que queremos es encadenar descargas, un wget URL1 && wget URL2 && wget URL2 nos hará el papel.

La red inalámbrica es un medio complicado. Ayer nuestro usuario misterioso era incapaz de responder a un ping. Su conexión era altamente inestable. El hecho de que alcanzara en una media de 20 KB/s es muy engañoso, porque sufría desasociaciones del punto de acceso con frecuencia. No era buena idea ponerse a descargar una imagen ISO (que decir de 3 a la vez).

Esa inestabilidad hacía que consumiera recursos de una forma incontrolada porque no reutilizaba las conexiones debido a las desasociaciones. Por ejemplo a veces habían 24 instancias del servicio atendiendo a las 3 descargas simultaneas :o. El servidor ni se enteraba, pero era a todas luces malgastar recursos.

Paco ya lo dice claro en mutoid (elxwifi):

Menos de 70KB/s : calidad baja
Entre 70KB/s y 150KB/s: calidad media
Más de 150KB/s: calidad buena

Y yo añadiría: menos de 30KB/s es inutilizable.

Una pista puede ser que experimentamos desconexiones, el servidor no responde a los pings o lo hace con muchos DUP! o que las descargas tienen parones sin explicación. En estos casos la conexión TCP requerida para la descarga no es adecuada y habría que mejorar el enlace, e insistir en la descarga solo puede llevar a un bloqueo vía PF :D.

Si alguien tiene más sugerencias para descargar de forma inteligente, que aporte un comentario.

Anotación por Juan J. Martínez.

Los comentarios están cerrados: los comentarios se cierran automáticamente una vez pasados 30 días. Si quieres comentar algo acerca de la anotación, puedes hacerlo por e-mail.