Более быстрая передача файлов, чем по FTP - PullRequest
8 голосов
/ 19 февраля 2012

FTP - это чистый протокол TCP-connect, и поэтому AFAIK «настолько быстр, насколько он есть» при рассмотрении параметров передачи файлов TCP.

Однако есть и другие продукты, которые не работают по TCP - примерыявляются коммерческими продуктами BI.DAN-GUN , fasp и FileCatalyst .Последний продукт указывает на проблемы с чистым TCP , и вы можете прочитать больше в Википедии, например, начиная с Перегрузка сети .

Какие есть другие альтернативы?.. в частности с открытым исходным кодом?Кроме того, можно подумать, что это должен быть своего рода RFC - стандартный специфичный для передачи больших файлов протокол , вероятно, работающий по протоколу UDP.Кто-нибудь знает такой протокол или инициативу?(Google SPDY интересен, но напрямую не связан с быстрой передачей больших файлов)

Ответы [ 4 ]

9 голосов
/ 19 февраля 2012

Почему, по вашему мнению, использование TCP замедляет передачу? TCP обычно может использовать всю доступную пропускную способность. Использование UDP вместо этого вряд ли будет быстрее. На самом деле, если вы попытаетесь сделать надежную передачу файлов на основе UDP, вы, скорее всего, в конечном итоге внедрите более низкую альтернативу TCP - поскольку вам придется реализовать надежность самостоятельно.

* * * * * * * * * * * * * * * * * * * * * * * * * * * * проблема с FTP заключается в том, что он выполняет несколько синхронных команд запрос-ответ для каждого передаваемого файла и открывает новое подключение для передачи данных для каждого файла. Это приводит к крайне неэффективной передаче, когда передается много файлов меньшего размера, потому что большая часть времени тратится на ожидание запросов / ответов и установление соединений с данными вместо фактической передачи данных.

Простой способ обойти эту проблему - упаковать файлы / папки в архив. Хотя вы, конечно, можете просто сделать архив, отправить его по FTP или аналогичному устройству и распаковать его на другой стороне, время, потраченное на упаковку и распаковку, может быть неприемлемым. Вы можете избежать этой задержки, выполнив упаковку и распаковку онлайн. Я не знаю ни о каком программном обеспечении, которое объединяет такую ​​онлайн упаковку / распаковку. Однако вы можете просто использовать программы nc и tar в конвейере (Linux, в Windows используется Cygwin ):

Первый запуск на приемнике:

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

Это заставит получателя ждать соединения на порту с номером 7000. Затем запустите на отправителе:

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

Это заставит отправителя подключиться к получателю, начав передачу. Отправитель создаст архив tar, отправит его получателю, который будет извлекать его - и все это одновременно. При необходимости вы можете поменять роли отправителя и получателя (подключив получателя к отправителю).

В этом подходе онлайн-tar нет ни одной из двух проблем производительности FTP; он не выполняет никаких команд запрос-ответ и использует только одно TCP-соединение.

Однако учтите, что это небезопасно; любой может подключиться к получателю до того, как наш отправитель отправит ему свой собственный архив tar. Если это проблема, можно использовать VPN в сочетании с соответствующими правилами брандмауэра.

EDIT : вы упомянули потерю пакетов как проблему с производительностью TCP, что является серьезной проблемой, если верить странице FileCatalyst . Это правда, что TCP может работать неоптимально с высокими потерями пакетов. Это связано с тем, что TCP обычно агрессивно реагирует на потерю пакетов, поскольку предполагает, что потеря вызвана перегрузкой; см. Additive_increase / multiplicative_decrease . Я не знаю ни одной бесплатной программы с открытым исходным кодом для передачи файлов, которая пыталась бы преодолеть это с помощью пользовательских протоколов. Однако вы можете попробовать другие алгоритмы предотвращения перегрузки TCP . В частности, попробуйте Vegas , который не использует потерю пакетов в качестве сигнала для снижения скорости передачи.

6 голосов
/ 20 октября 2012

Существует ряд проектов с открытым исходным кодом, пытающихся решить проблему передачи файлов через UDP.Взгляните на UFTP , Tsunami или UDT, каждый проект находится на отдельной стадии разработки.

В зависимости от пропускной способности, задержки и потери кармана, с которыми вы работаете, каждый проектпривести к другому результату.В блоге есть попытка сравнить 3 проекта, вот ссылка http://www.filecatalyst.com/open-source-fast-file-transfers

2 голосов
/ 14 августа 2014

Не с открытым исходным кодом, но скорость передачи Aspera стоит проверить, и на нее не влияют потеря пакетов или сетевая задержка. Вы можете увидеть график здесь . Он также использует собственный протокол, называемый fasp.

1 голос
/ 17 апреля 2013

Рассмотрите возможность использования передачи файлов по протоколу UDP, взгляните на JSCAPE MFT Server , который реализует собственный протокол, известный как AFTP (ускоренный протокол передачи файлов).Пожалуйста, просмотрите эту ссылку:

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

Пожалуйста, имейте в виду, что AFTP в JSCAPE оптимально работает при подключениях на большие расстояния, которые имеют задержку в сети.Если сетевая задержка отсутствует, AFTP не будет работать лучше, чем обычный старый обычный FTP (через TCP).

Да, я работаю в JSCAPE LLC.

...