为什么Dropbox与FTP相比可以超级快速?


36

我想知道为什么Dropbox在技术上比FTP快得多?它使用哪种技术?

我不是在谈论差异文件,而是在两种情况下都在转移新文件,Dropbox的速度要快得多。

我的意思是,对于我上传的文件,它的速度非常快,可能比FTP快10倍。稍后,我将再次尝试更大的文件。


2
您上传的文件大小,类型和数量是多少?他们每个人花了多长时间上传?您在哪里通过FTP上传文件?Dropbox并不是魔术,最简单的解释是您上传的FTP服务器的带宽也比Amazon少得多。
2010年

2
如果他们已经拥有了,那就不会重新上传; p
Journeyman Geek

4
您说的是“新文件”,但是除非这些文件是新鲜的随机数据,否则您可能会看到块级同步的好处(例如在rsync和其他工具中)。
克里斯·约翰森

1
这更多是一个托管比较imo,我知道FTP服务器比Dropbox快,并且我还与Filezilla一起使用多个连接,因此此答案中列出的语句不成立。
Tamara Wijsman 2010年

Dropbox确实使用重复数据删除功能来节省常见文件的存储空间,因此如果已有的话,则不需要上载它们。
仿形2011年

Answers:


31

可能有许多原因。
FTP协议远非高效。

  1. FTP传输至少需要两个连接(一个用于控制,一个用于数据),其中DropBox可能仅使用单个HTTP连接。另外,FTP会话的数据连接可能会从服务器打开到客户端,并且如果您已进行NAT,这可能会失败,因此您的FTP客户端可能会尝试以这种方式进行连接,然后失败,然后尝试以另一种方式进行连接。

  2. FTP连接上有很多往返。要发送文件,客户端至少需要发送两个命令(一个命令打开数据连接,一个命令开始发送),并且每次需要等待服务器响应时,都会增加额外的延迟。以及每个文件的这两次往返,还有几个用于初始连接的命令响应往返-一个用于发送用户名,一个用于密码,以及至少一个用于设置传输参数(以确保服务器是需要二进制数据,而不是ASCII数据)。客户端还可以发出几个额外的命令,以从服务器获取有关其自身的信息。Dropbox可能仅使用一个HTTP请求,或者最多使用两个HTTP请求(一个用于身份验证,一个用于发送数据)。

  3. 最重要的是,取决于您要使用哪个客户端进行FTP传输(您未指定,将其编辑为包含该信息的问题是一个好主意),它可能会在每次发送操作后断开连接并重新连接时间。DropBox保持连接打开一段时间以进行长轮询的可能性不大,它会尽快对此客户端应下载的可用新数据做出反应,因此在需要启动新客户端时会进行响应通过HTTP连接发送文件,无需重新进行身份验证。

  4. DropBox客户端会在发送数据之前压缩数据(以提高速度并节省带宽),而FTP客户端不会压缩它。因此,即使对于较大的文件(除非对其进行了预压缩或加密),DropBox及其类似的实用程序也可能比基本FTP传输快一些。

对于大文件,与实际传输数据所花费的时间相比,上面的前三点将显得微不足道,但是第4点可能仍然非常重要。对于小文件,FTP协议添加的所有额外设置时间可能比实际发送数据所花费的时间长几倍。


+1获取详细答案。我也想知道Dropbox这么快。
格兰特·佩林2010年

1
我在某处读到,保管箱数据在传输前已加密-因此也将其压缩(至少一点)是有意义的。
迪恩·拉瑟

加密文件不应该是可压缩的-我不转移过程中丢弃箱文件加密,反正
马丁贝克特

@mgb:您是正确的,文件压缩技术不应在加密到数据的数据中找到足够的冗余,这样才有用,因此最初发送文件不会对压缩产生帮助。但是,如果dropbox已经有文件并且您刚刚对其进行了更新(并且密钥仍然相同),则很有可能它不需要传输整个文件来更新远程副本。尽管无法压缩数据,但仍可以减少为保持数据最新而需要发送的数据量(对于具有较小更新的大文件而言,可观)。
David Spillett'7

1
我很确定他们使用HTTPS进行传输(基于SSL的HTTP),而不是以纯格式发送数据。我不知道实际的存储使用了什么(如果有的话)加密,但是如果您的数据很敏感,那么无论如何您都应该在自己的身边加密它,因此只有您拥有相关密钥的副本。
David Spillett'7

15

正如其他人提到的那样,Dropbox可以跳过文件中未更改的部分。但是,如果Dropbox在服务器端已经有副本(您或其他任何人已经上传的副本)Dropbox也会跳过上传文件

因此,如果您尝试上载与Dropbox已经拥有的文件相同的文件,则会跳过上载(其他链接的计算机可以开始从Dropbox服务器下载它)。如果您要上传的文件与另一个已经上传的文件几乎完全相同(尚不清楚已经上传的文件必须是“您的”文件还是可能来自任何用户),那么它将只发送文件的足够部分文件,以便在与已经上传的文件结合后在服务器上重新创建它。

FTP不能做这些事情(这是一种简单的协议,用于发送和接收数据流,而无需引用远程端可用的任何其他数据)。诸如rsyncUnison之类的工具可以“跳过另一端已经拥有的块”,但通常仅限于比较同步层次结构中相同路径下文件内部的块。Dropbox似乎将这种想法扩展到了文件集合(因此,如果您“上传”两个几乎相同的文件,大概可以安排只发送一个加上足够的“ diff”来重新创建另一个文件)。


11

我认为您的意思是传输文件的速度更快。当你在你的Dropbox文件夹中保存文件,Dropbox的仅发送增量数据到远程存储服务器(或差异)。FTP(最有可能)逐字节发送文件(而不只是发送更改),这可能需要更长的时间才能通过网络传输。同样,远程服务器同步时,本地客户端将仅下载更改。

LAN同步功能还可以潜在地加快同步速度并减少所需的网络流量。


确实,我在谈论这两种情况的新文件。

0

发送大量文件时,Dropbox可能会更快。当我们进行通话时,FTP的速度是最快的,但是对于每个文件来说,它在服务器和客户端计算机之间花费了太多的“通话”,因此ftp似乎速度较慢。如果要上载带有数千个文件的开源应用程序,则压缩所有文件,通过FTP上载并在服务器上解压缩会更方便。


0

我猜他们使用类似于md5 / sha的简单哈希技术

每当您将文件放在本地“ dropbox”中时,dropbox-client都会计算该文件的哈希值,并且必须将一些额外的数据(如filesize,filename)发送到dropbox-server。

如果dropbox-server找到相似的文件(它们必须在其服务器上维护哈希和文件数据的索引),它将仅通知客户端文件已成功“上传”。;-)

这样,您最终只能在逻辑上“上传”文件。由于没有真正的文件内容传输,因此它必须比其他任何东西都要快。

我不确定使用哪种哈希算法Dropbox,但我100%确定其工作原理与我上面概述的相似。


0

尽管Dropbox使用其他服务,但它们历来一直在使用Amazon AWS(亚马逊网络服务)。听起来您从源到目的地的传输具有很大的传输管道。以我的经验,Dropbox使用的目的地可以一次接受大量数据。Dropbox还将上传内容分配到不同的IP地址。您要通过FTP传输的站点的传输管道可能要小得多,并且无法高效地分发上载内容。

如果运行Resource Monitor(resmon)并转到“网络”选项卡,您会注意到使用网络带宽的不同进程。

  • 在“具有网络活动的进程”下,为 Total (B/sec)
  • 在“ TCP连接”下,选择用于 Total (B/sec)

对我来说,当我将文件上传到Dropbox时,它使用4个连接来发送4个不同的IP地址。

在此处输入图片说明

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.