FTP是一种纯TCP连接协议,因此在考虑TCP文件传输选项时,AFAIK"尽可能快".
但是,还有一些其他产品不能通过TCP运行 - 例如商业产品BI.DAN-GUN,fasp和FileCatalyst.后一个产品指出了纯TCP的问题,人们可以在维基百科上阅读更多内容,例如从网络拥塞开始.
有什么其他选择吗?..特别是开源的?此外,人们会认为这应该是一种RFC - 一种标准的大文件传输特定协议,可能在UDP上运行.有人知道这样的协议或倡议吗?(谷歌SPDY很有趣,但不能直接解决快速大文件传输问题)
为什么你认为使用TCP会使传输速度变慢?TCP通常能够使用所有可用带宽.使用UDP代替不太可能更快.事实上,如果你试图进行可靠的基于UDP的文件传输,你可能最终会实现TCP的劣质替代 - 因为你必须自己实现可靠性.
什么是关于FTP的问题是,它为每台你传输文件的多个同步请求-响应命令,并打开每个文件新的数据连接.当传输大量较小的文件时,这导致极低效的传输,因为大部分时间花在等待请求/响应和建立数据连接而不是实际传输数据上.
解决此问题的一种简单方法是将文件/文件夹打包到存档中.当然,您只需制作存档,使用FTP或类似方式发送存档,然后在另一侧打开包装,打包和拆包所花费的时间可能是不可接受的.您可以通过在线包装和拆包来避免这种延迟.我不知道有任何集成这种在线打包/拆包的软件.但是,您可以简单地在管道中使用nc和tar程序(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
| 归档时间: |
|
| 查看次数: |
15668 次 |
| 最近记录: |