我想知道为什么Dropbox在技术上比FTP快得多?它使用哪种技术?
我不是在谈论差异文件,而是在两种情况下都在转移新文件,Dropbox的速度要快得多。
我的意思是,对于我上传的文件,它的速度非常快,可能比FTP快10倍。稍后,我将再次尝试更大的文件。
我想知道为什么Dropbox在技术上比FTP快得多?它使用哪种技术?
我不是在谈论差异文件,而是在两种情况下都在转移新文件,Dropbox的速度要快得多。
我的意思是,对于我上传的文件,它的速度非常快,可能比FTP快10倍。稍后,我将再次尝试更大的文件。
Answers:
可能有许多原因。
FTP协议远非高效。
FTP传输至少需要两个连接(一个用于控制,一个用于数据),其中DropBox可能仅使用单个HTTP连接。另外,FTP会话的数据连接可能会从服务器打开到客户端,并且如果您已进行NAT,这可能会失败,因此您的FTP客户端可能会尝试以这种方式进行连接,然后失败,然后尝试以另一种方式进行连接。
FTP连接上有很多往返。要发送文件,客户端至少需要发送两个命令(一个命令打开数据连接,一个命令开始发送),并且每次需要等待服务器响应时,都会增加额外的延迟。以及每个文件的这两次往返,还有几个用于初始连接的命令响应往返-一个用于发送用户名,一个用于密码,以及至少一个用于设置传输参数(以确保服务器是需要二进制数据,而不是ASCII数据)。客户端还可以发出几个额外的命令,以从服务器获取有关其自身的信息。Dropbox可能仅使用一个HTTP请求,或者最多使用两个HTTP请求(一个用于身份验证,一个用于发送数据)。
最重要的是,取决于您要使用哪个客户端进行FTP传输(您未指定,将其编辑为包含该信息的问题是一个好主意),它可能会在每次发送操作后断开连接并重新连接时间。DropBox保持连接打开一段时间以进行长轮询的可能性不大,它会尽快对此客户端应下载的可用新数据做出反应,因此在需要启动新客户端时会进行响应通过HTTP连接发送文件,无需重新进行身份验证。
DropBox客户端会在发送数据之前压缩数据(以提高速度并节省带宽),而FTP客户端不会压缩它。因此,即使对于较大的文件(除非对其进行了预压缩或加密),DropBox及其类似的实用程序也可能比基本FTP传输快一些。
对于大文件,与实际传输数据所花费的时间相比,上面的前三点将显得微不足道,但是第4点可能仍然非常重要。对于小文件,FTP协议添加的所有额外设置时间可能比实际发送数据所花费的时间长几倍。
正如其他人提到的那样,Dropbox可以跳过文件中未更改的部分。但是,如果Dropbox在服务器端已经有副本(您或其他任何人已经上传的副本),Dropbox也会跳过上传文件。
因此,如果您尝试上载与Dropbox已经拥有的文件相同的文件,则会跳过上载(其他链接的计算机可以开始从Dropbox服务器下载它)。如果您要上传的文件与另一个已经上传的文件几乎完全相同(尚不清楚已经上传的文件必须是“您的”文件还是可能来自任何用户),那么它将只发送文件的足够部分文件,以便在与已经上传的文件结合后在服务器上重新创建它。
FTP不能做这些事情(这是一种简单的协议,用于发送和接收数据流,而无需引用远程端可用的任何其他数据)。诸如rsync和Unison之类的工具可以“跳过另一端已经拥有的块”,但通常仅限于比较同步层次结构中相同路径下文件内部的块。Dropbox似乎将这种想法扩展到了文件集合(因此,如果您“上传”两个几乎相同的文件,大概可以安排只发送一个加上足够的“ diff”来重新创建另一个文件)。
我猜他们使用类似于md5 / sha的简单哈希技术
每当您将文件放在本地“ dropbox”中时,dropbox-client都会计算该文件的哈希值,并且必须将一些额外的数据(如filesize,filename)发送到dropbox-server。
如果dropbox-server找到相似的文件(它们必须在其服务器上维护哈希和文件数据的索引),它将仅通知客户端文件已成功“上传”。;-)
这样,您最终只能在逻辑上“上传”文件。由于没有真正的文件内容传输,因此它必须比其他任何东西都要快。
我不确定使用哪种哈希算法Dropbox,但我100%确定其工作原理与我上面概述的相似。
尽管Dropbox使用其他服务,但它们历来一直在使用Amazon AWS(亚马逊网络服务)。听起来您从源到目的地的传输具有很大的传输管道。以我的经验,Dropbox使用的目的地可以一次接受大量数据。Dropbox还将上传内容分配到不同的IP地址。您要通过FTP传输的站点的传输管道可能要小得多,并且无法高效地分发上载内容。
如果运行Resource Monitor(resmon)并转到“网络”选项卡,您会注意到使用网络带宽的不同进程。
Total (B/sec)
Total (B/sec)
对我来说,当我将文件上传到Dropbox时,它使用4个连接来发送4个不同的IP地址。