2012-02-18 22 views
8

FTP es un protocolo puro de conexión TCP, y por lo tanto AFAIK "lo más rápido posible" al considerar las opciones de transferencia de archivos TCP.Transferencia de archivos más rápida que FTP

Sin embargo, hay algunos otros productos que no se ejecutan en TCP - ejemplos son los productos comerciales BI.DAN-GUN, fasp y FileCatalyst. El último producto señala problems with pure TCP, y uno puede leer más en Wikipedia, p. a partir del Network Congestion.

¿Qué otras alternativas existen? .. en particular los de código abierto? Además, uno podría pensar que esto debería ser una especie de RFC: un protocolo estándar de transferencia específica de archivos grandes, probablemente en UDP. Alguien sabe de tal protocolo, o una iniciativa? (El Google SPDY es interesante, pero no se refiere directamente a la transferencia rápida de archivos grandes)

Respuesta

6

Hay una serie de proyectos de código abierto que intentan abordar la transferencia de archivos a través de UDP. Eche un vistazo a UFTP, Tsunami o UDT, cada proyecto se encuentra en una etapa diferente de desarrollo.

Dependiendo del ancho de banda, la latencia y la pérdida de bolsillo con la que está trabajando, cada proyecto producirá un resultado diferente. Hay un artículo en el blog que trata de comparar los 3 proyectos, aquí está el enlace http://www.filecatalyst.com/open-source-fast-file-transfers

9

¿Por qué crees que usar TCP hace que la transferencia sea más lenta? TCP generalmente puede usar todo el ancho de banda disponible. No es probable que usar UDP sea más rápido. De hecho, si intentara realizar una transferencia de archivos confiable basada en UDP, probablemente terminaría implementando una alternativa inferior a TCP, ya que usted mismo tendría que implementar la confiabilidad.

Qué es problemático de FTP es que realiza varios comandos de respuesta de solicitud de sincronismo para cada archivo a transferir, y se abre una nueva conexión de datos para cada archivo. Esto resulta en transferencias extremadamente ineficientes cuando se transfieren muchos archivos más pequeños, porque la mayor parte del tiempo se usa para esperar solicitudes/respuestas y establecer conexiones de datos en lugar de transferir datos.

Una forma simple de evitar este problema es empacar los archivos/carpetas en un archivo. Si bien puede, por supuesto, hacer el archivo, enviarlo usando FTP o similar, y descomprimirlo en el otro lado, el tiempo de embalaje y desempaquetado puede ser inaceptable. Puede evitar este retraso haciendo el embalaje y desempacando en línea. No conozco ningún software que integre un embalaje/desembalaje en línea. Puede, sin embargo, sólo tiene que utilizar los programas nc y tar en una tubería (Linux, en Windows utilizar Cygwin):

Primera corrida en el receptor:

nc -l -p 7000 | tar x -C <destination_folder> 

Esto hará que el receptor espera para una conexión en el puerto número 7000. a continuación, ejecute en el remitente:

cd /some/folder 
tar c ./* | nc -q0 <ip_address_of_receiver>:7000 

Esto hará que el emisor se conectan al receptor, a partir de la transferencia. El remitente creará el archivo tar, enviándolo al receptor, que lo extraerá, todo al mismo tiempo. Si lo necesita, puede revertir los roles del remitente y el receptor (haciendo que el receptor se conecte con el remitente).

Este enfoque de alquitrán en línea no tiene ninguno de los dos problemas de rendimiento de FTP; no ejecuta ningún comando de solicitud-respuesta, y usa solo una sola conexión TCP.

Sin embargo, tenga en cuenta que esto no es seguro; cualquiera puede conectarse al receptor antes de que lo haga nuestro remitente, enviarle su propio archivo tar. Si esto es un problema, se puede usar una VPN, en combinación con las reglas de firewall apropiadas.

EDIT: mencionó la pérdida de paquetes como un problema con el rendimiento de TCP, que es un problema importante, si se cree que la página FileCatalyst.Es cierto que TCP puede funcionar de forma no óptima con enlaces de pérdida de paquetes altos. Esto se debe a que el TCP generalmente reacciona agresivamente a la pérdida de paquetes, porque asume que la pérdida se debe a la congestión; ver Additive_increase/multiplicative_decrease. No conozco ningún programa de transferencia de archivos de código abierto/libre que intente superar esto con protocolos personalizados. Sin embargo, puede probar diferentes TCP congestion avoidance algorithms. En particular, intente con Vegas, que hace no use la pérdida de paquetes como una señal para reducir la velocidad de transmisión.

+1

¿Revisaste los enlaces que incluí? Si tiene un archivo de 500 GB para transferir, las conexiones de control de FTP son completamente insignificantes, y lo que termina con el rendimiento TCP sin procesar. Lo cual no necesariamente está ajustado para una transferencia lo más rápida posible de archivos de gran tamaño, en particular no a través de enlaces con pérdida de paquetes. Los productos en los enlaces que incluí DO implementan la fiabilidad ellos mismos, obviamente. – stolsvik

+0

@stolsvik no ha mencionado enlaces de alta pérdida, que AFAIK son raros en Internet. He agregado algo sobre eso. –

+1

En realidad, el protocolo TCP en realidad no está diseñado para la transferencia de un solo sentido. Claro que se puede hacer para hacerlo, pero TCP requiere paquetes de devolución de tal manera que provoque paradas breves y puede ser un acto de equilibrio elegir tamaños de buffer y tamaños de ventana para una velocidad verdaderamente óptima. Además, las implementaciones pueden no hacer siempre lo que realmente se supone que deben hacer con varias configuraciones opcionales. –

1

Considere el uso de la transferencia de archivos basado en UDP, echar un vistazo a JSCAPE MFT Server que implementa un protocolo propietario conocido como AFTP (File Transfer Protocol acelerado). Por favor revise este enlace:

http://www.jscape.com/blog/bid/80668/UDP-File-Transfer-up-to-100x-Faster-than-TCP

Por favor, tenga en cuenta que AFTP de JSCAPE funciona de manera óptima a través de conexiones de larga distancia que tienen latencia de la red. Si no hay latencia de red, AFTP no funcionará mejor que el viejo FTP común (sobre TCP).

Sí, trabajo para JSCAPE LLC.

2

No es de código abierto, pero vale la pena consultar las velocidades de transferencia de Aspera y no se ven afectadas por la pérdida de paquetes o el retraso de la red. You can see a chart here. También usa un protocolo patentado llamado fasp.

+0

Ya he mencionado "fasp" en la pregunta inicial ... – stolsvik

+1

Otras fuentes de fuente no abierta son signiant y smartjog. A menudo compiten con la industria de entretenimiento (producciones de películas). – satoc

Cuestiones relacionadas