为什么说 BitTorrent 更快,部分原因是因为它传输文件的随机部分,而不是以连续/线性的方式从头到尾传输?
编辑:但为什么他们有是“随机”的吗?为什么不采用更可预测的“半连续”传输,即一个对等方给您前半部分,另一个对等方给您另一半?从理论上讲,这可以减少开销。
答案1
关于编辑询问为什么它们必须是随机的:假设种子被更改为仅下载下载器尚未拥有的第一个块,从而保证连续的传输。
然后我共享一个 100MB 的文件。在我离线之前,有 10 个人连接并且每人下载了 50MB。
这些人就完蛋了,因为他们都有文件的前半部分,而只有我有后半部分。除非我再次提供,否则他们无法完成下载。
相反,由于块的传输顺序是随机的,实际上也是如此,这 10 个人中的每个人都拥有一组不同的块,因此他们可以相互交易以完成下载,而不需要我在身边。
更好的是,由于它们各自都有一组不同的块,因此它们各自都可以从全部其他人来填补他们副本中的空白。您的编辑提到了从文件中的随机点开始并从该点连续下载的想法,但这会增加一个下载者的副本与下一个下载者的副本的重叠量(如果 Alice 从文件的开头开始,而 Bob 从文件的 10% 开始,那么他们俩都拥有该文件的 40%,而他们各自只有 10% 是独一无二的,他们可以交换,而无需我重新连接以提供其余部分)。按随机顺序下载可最大限度地提高每个下载者所持有的块集的独特性,从而最大限度地提高下载者开始相互交易的能力,并最大限度地提高他们在没有种子可用的情况下组装完整副本的可能性。
一次连续下载可能(或可能不是,取决于条件)更适合你,但随机顺序下载对整个网络来说更有利。
答案2
关键在于您同时从多个来源(对等点)获取文件,而不是从一个来源获取文件。
如果您有一个文件被分成 10 个部分,需要 100 秒才能从 1 个服务器下载,那么理论上您可以在 10 秒内从 10 个对等点获取该文件(加上一些开销),因为每个对等点都可以在 10 秒内交付其部分。实际上,由于每个对等点都不是完美的,所以需要更长时间,您可能会达到带宽限制(但您明白我的意思)。
因为无论如何你都要重新组装文件,所以你不必按顺序获取各个部分。因此,如果你只有 5 个对等方,每个对等方提供 2 个部分,那么这些部分可以是文件的随机部分。
答案3
应该说,这完全取决于所涉及的文件、对等点的数量以及非 bittorent 源的速度。
您的下载速度永远不会超过您的连接的最大下载带宽,如果您从有足够带宽的地方下载,它将比使用 Bittorrent 更快。
然而,随着互联网速度越来越快,我们已经到了(较小的)网站和主机无法跟上的地步。
例如,几个月前,当我在伦敦查看主机托管价格时,有人给我报了 5Mb 连接的价格,真是太贵了。如果我选择这个,那么大多数人都能从中受益。
但是,同样地,如果我要托管几个 500Mb 的文件,并且每个人都有电缆(50Mb)或快速 ADSL2+(24Mb)线路,您会注意到我的服务器无法为您提供如此快的速度......
... 但是,如果我通过 Bittorrent 向您提供相同的文件,并且有 200 个人,每个人只提供 30Kb/s,那就相当于 5.8Mb/s(而且,许多人的上传速度都比这快得多!).... 现在,如果我在我的服务器上运行 Bittorrent 并提供相同的文件,那就意味着总共有 10.8Mb/s 的可下载速度 - 比我自己通过 5Mb/s 管道所能提供的速度要多得多。
Bittorrent 很大程度上是一个数字游戏,你必须有足够多的人上传,并且有足够的带宽……由于涉及完整性检查等额外步骤(以及你应该由于带宽有限(上传回),它很难胜过从有足够带宽的好网站直接下载,但是,对于许多较小的网站来说 - 它是绝佳的选择,甚至对于只是想节省带宽费用的较大网站来说也是如此。
答案4
这是可用性问题。如果您必须连续下载,那么您就需要依赖托管比您更多文件的人。每个拥有比您更少文件的人都将无法向您发送任何数据。
如果块是随机分布的,则可以从中下载的主机数量将会更多,因此您可以更快地下载文件。