同伴如何知道另一个同伴是种子?

时间:2015-02-09 19:32:04

标签: bittorrent

当一个对等体连接到另一个拥有所有部分的对等体时,连接对等体如何知道它连接的对象实际上是种子(并且具有所有部分)?他们之间是否有消息?

在像uTorrent这样的客户端中,对等方似乎也知道它所连接的每个对等方的下载进度。 它怎么知道这一切?如果进度是100%,或者实际上是否存在特定的消息,那么对等体是否导出另一个对等体是种子?协议的哪些部分涉及所有这些?

3 个答案:

答案 0 :(得分:3)

对等方知道另一个对等方是否是另一个对等方的种子:

  • 发送一个完整的bitfield,表示它包含torrent中的所有部分。 - BEP3

  • 发送一份不完整的bitfield,然后发送所有have条消息,其中包含它从一开始就没有的其他内容。 (这可以是它不断下载并完成它发送lazy bitfield的torrent 。) - BEP3

  • 根据Fast Extension - BEP6

  • 发送have all条消息
  • 根据Extension for Partial Seeds - BEP21发送upload only=1 部分种子意味着对等方只下载了部分torrent并且不想再下载并正在播种它的内容。

对等方通过不断发送have条消息来报告其进度。

该协议的这一部分称为对等线协议

答案 1 :(得分:1)

正如您在the spec中所看到的,客户应该交换bitfield消息,告诉对方他们目前有哪些部分。定期have消息稍后会更新此消息,当对等方收到更多内容时(无论如何都是简单的描述,现实更加混乱,稍后会更多)。

受广泛支持的Fast Extension修改了此问题,其中对等方可以将完整且完全空的位域消息压缩为have allhave none

它也被Superseeding修改,其中种子位于它们所拥有的碎片上,以便更有效地播种初始群。一般来说,同龄人总是会说谎,特别是他们可以假装没有他们真正做过的作品,而且你永远都不知道。

这让我回到了更加混乱的现实。如果您告诉他们have x,则同行可以选择不向您发送x,因为您是否会向他们请求x不会有任何区别(你赢了,因为你已经拥有它)。另一方面,这对于某些优化是不利的,例如优先上传稀有碎片,特别是取代。

答案 2 :(得分:0)

根据bittorent protocol specification

  

对等协议如所描述的那样通过索引引用文件的片段   在metainfo文件中,从零开始。当一个同伴完成   它宣布,下载一个片段并检查哈希是否匹配   它对所有同行都有这个作用。

然后,是的,消息由对等方交换,因此他们可能知道可以下载的内容。处理此问题的协议“部分”是对等协议。