当一个对等体连接到另一个拥有所有部分的对等体时,连接对等体如何知道它连接的对象实际上是种子(并且具有所有部分)?他们之间是否有消息?
在像uTorrent这样的客户端中,对等方似乎也知道它所连接的每个对等方的下载进度。 它怎么知道这一切?如果进度是100%,或者实际上是否存在特定的消息,那么对等体是否导出另一个对等体是种子?协议的哪些部分涉及所有这些?
答案 0 :(得分:3)
对等方知道另一个对等方是否是另一个对等方的种子:
发送一个完整的bitfield
,表示它包含torrent中的所有部分。 - BEP3
发送一份不完整的bitfield
,然后发送所有have
条消息,其中包含它从一开始就没有的其他内容。 (这可以是它不断下载并完成它发送lazy bitfield
的torrent 或。) - BEP3
have all
条消息
根据Extension for Partial Seeds - BEP21发送upload only=1
部分种子意味着对等方只下载了部分torrent并且不想再下载并正在播种它的内容。
对等方通过不断发送have
条消息来报告其进度。
该协议的这一部分称为对等线协议。
答案 1 :(得分:1)
正如您在the spec中所看到的,客户应该交换bitfield
消息,告诉对方他们目前有哪些部分。定期have
消息稍后会更新此消息,当对等方收到更多内容时(无论如何都是简单的描述,现实更加混乱,稍后会更多)。
受广泛支持的Fast Extension修改了此问题,其中对等方可以将完整且完全空的位域消息压缩为have all
和have none
。
它也被Superseeding修改,其中种子位于它们所拥有的碎片上,以便更有效地播种初始群。一般来说,同龄人总是会说谎,特别是他们可以假装没有他们真正做过的作品,而且你永远都不知道。
这让我回到了更加混乱的现实。如果您告诉他们have x
,则同行可以选择不向您发送x
,因为您是否会向他们请求x
不会有任何区别(你赢了,因为你已经拥有它)。另一方面,这对于某些优化是不利的,例如优先上传稀有碎片,特别是取代。
答案 2 :(得分:0)
根据bittorent protocol specification:
对等协议如所描述的那样通过索引引用文件的片段 在metainfo文件中,从零开始。当一个同伴完成 它宣布,下载一个片段并检查哈希是否匹配 它对所有同行都有这个作用。
然后,是的,消息由对等方交换,因此他们可能知道可以下载的内容。处理此问题的协议“部分”是对等协议。