文件传输速度比FTP快

sto*_*vik 8 tcp file transfer

FTP是一种纯TCP连接协议,因此在考虑TCP文件传输选项时,AFAIK"尽可能快".

但是,还有一些其他产品不能通过TCP运行 - 例如商业产品BI.DAN-GUN,faspFileCatalyst.后一个产品指出了纯TCP的问题,人们可以在维基百科上阅读更多内容,例如从网络拥塞开始.

有什么其他选择吗?..特别是开源的?此外,人们会认为这应该是一种RFC - 一种标准的大文件传输特定协议,可能在UDP上运行.有人知道这样的协议或倡议吗?(谷歌SPDY很有趣,但不能直接解决快速大文件传输问题)

Amb*_*jak 9

为什么你认为使用TCP会使传输速度变慢?TCP通常能够使用所有可用带宽.使用UDP代替不太可能更快.事实上,如果你试图进行可靠的基于UDP的文件传输,你可能最终会实现TCP的劣质替代 - 因为你必须自己实现可靠性.

什么关于FTP的问题是,它为每台你传输文件的多个同步请求-响应命令,并打开每个文件新的数据连接.当传输大量较小的文件时,这导致极低效的传输,因为大部分时间花在等待请求/响应和建立数据连接而不是实际传输数据上.

解决此问题的一种简单方法是将文件/文件夹打包到存档中.当然,您只需制作存档,使用FTP或类似方式发送存档,然后在另一侧打开包装,打包和拆包所花费的时间可能是不可接受的.您可以通过在线包装和拆包来避免这种延迟.我不知道有任何集成这种在线打包/拆包的软件.但是,您可以简单地在管道中使用nctar程序(Linux,在Windows上使用Cygwin):

首先在接收器上运行:

nc -l -p 7000 | tar x -C <destination_folder>
Run Code Online (Sandbox Code Playgroud)

这将使接收方等待端口号7000上的连接.然后在发送方上运行:

cd /some/folder
tar c ./* | nc -q0 <ip_address_of_receiver>:7000
Run Code Online (Sandbox Code Playgroud)

这将使发送方连接到接收方,开始传输.发件人将创建tar存档,将其发送到接收器,接收器将同时提取它.如果需要,您可以反转发送方和接收方的角色(通​​过让接收方连接到发送方).

这种在线tar方法没有FTP的两个性能问题; 它不执行任何请求 - 响应命令,并且仅使用单个TCP连接.

但请注意,这不安全; 任何人都可以在我们的发送者之前连接到接收者,向他发送他自己的tar档案.如果这是一个问题,可以使用VPN,并结合适当的防火墙规则.

编辑:你提到丢包是TCP性能的问题,如果要相信FileCatalyst页面,这是一个重大问题.确实,TCP可能在高丢包链路上执​​行非最佳.这是因为TCP通常会对数据包丢失做出积极反应,因为它假设丢失是由于拥塞造成的; 请参阅Additive_increase/multiplicative_decrease.我不知道有任何免费/开源文件传输程序会试图通过自定义协议来解决这个问题.但是,您可以尝试不同的TCP拥塞避免算法.特别是,尝试维加斯,这并没有使用数据包丢失作为一个信号,以减少传输速率.


小智 6

有许多开源项目试图通过UDP解决文件传输问题.看看UFTP,Tsunami或UDT,每个项目都处于不同的发展阶段.

根据您使用的延迟和丢失的带宽,每个项目将产生不同的结果.有一篇博客文章试图比较3个项目,这里是链接http://www.filecatalyst.com/open-source-fast-file-transfers