一个点如何知道另一个点是种子?
How does a peer know another peer is a seed?
当一个点连接到另一个拥有所有部分的点时,连接点如何知道它连接的实际上是一个种子(并且拥有所有部分)?他们之间有消息传递吗?
在像 uTorrent 这样的客户端中,点似乎也知道它所连接的每个点的下载进度。
它怎么知道这一切?如果进度为 100%,一个对等点是否推导出另一个对等点是种子,或者实际上是否有特定的消息?协议的哪些部分处理所有这些?
根据bittorent protocol specification:
The peer protocol refers to pieces of the file by index as described
in the metainfo file, starting at zero. When a peer finishes
downloading a piece and checks that the hash matches, it announces
that it has that piece to all of its peers.
然后,是的,对等方交换消息,因此他们可能知道哪些内容可供下载。处理此问题的协议 "part" 是对等协议。
如您在 the spec 中所见,客户端应该交换 bitfield
消息以告诉对方他们当前拥有哪些片段。定期 have
消息稍后会更新此内容,当对等方收到更多片段时(无论如何这是简单的描述,现实更加混乱,稍后会详细介绍)。
这是由广泛支持的Fast Extension修改的,其中对等方可以将完全完整和完全空的位域消息压缩为have all
和have none
。
它也被 Superseeding 修改,其中种子位于它们拥有的碎片周围,以便更有效地播种初始群。一般来说,同龄人总是会撒谎,特别是他们可以假装没有他们真正拥有的作品,而你永远无法确定。
这让我回到了更混乱的现实。如果您告诉他们您有 x
,同行可能会选择不向您发送 have x
,因为这对您是否向他们请求 x
没有任何影响(您不会,因为你已经拥有它)。另一方面,这对某些优化不利,例如优先上传稀有片段,尤其是超级种子。
一个节点知道另一个节点是否是种子,如果另一个节点是:
发送一个完全完整的bitfield
,表明它包含了 torrent 中的所有片段。 - BEP3
发送不完整的 bitfield
,然后发送所有 have
消息,用于从一开始就没有的其余部分。 (这可能是它正在持续下载并完成 torrent 或 它发送一个 lazy bitfield
。) - BEP3
发送have all
消息
根据Extension for Partial Seeds - BEP21
发送upload only=1
部分种子 意味着对等方只下载了 torrent 的一部分并且不想再下载,并且正在播种它所拥有的。
对等方通过不断发送 have
消息来报告其进度。
协议的这一部分称为 对等线协议。
当一个点连接到另一个拥有所有部分的点时,连接点如何知道它连接的实际上是一个种子(并且拥有所有部分)?他们之间有消息传递吗?
在像 uTorrent 这样的客户端中,点似乎也知道它所连接的每个点的下载进度。 它怎么知道这一切?如果进度为 100%,一个对等点是否推导出另一个对等点是种子,或者实际上是否有特定的消息?协议的哪些部分处理所有这些?
根据bittorent protocol specification:
The peer protocol refers to pieces of the file by index as described in the metainfo file, starting at zero. When a peer finishes downloading a piece and checks that the hash matches, it announces that it has that piece to all of its peers.
然后,是的,对等方交换消息,因此他们可能知道哪些内容可供下载。处理此问题的协议 "part" 是对等协议。
如您在 the spec 中所见,客户端应该交换 bitfield
消息以告诉对方他们当前拥有哪些片段。定期 have
消息稍后会更新此内容,当对等方收到更多片段时(无论如何这是简单的描述,现实更加混乱,稍后会详细介绍)。
这是由广泛支持的Fast Extension修改的,其中对等方可以将完全完整和完全空的位域消息压缩为have all
和have none
。
它也被 Superseeding 修改,其中种子位于它们拥有的碎片周围,以便更有效地播种初始群。一般来说,同龄人总是会撒谎,特别是他们可以假装没有他们真正拥有的作品,而你永远无法确定。
这让我回到了更混乱的现实。如果您告诉他们您有 x
,同行可能会选择不向您发送 have x
,因为这对您是否向他们请求 x
没有任何影响(您不会,因为你已经拥有它)。另一方面,这对某些优化不利,例如优先上传稀有片段,尤其是超级种子。
一个节点知道另一个节点是否是种子,如果另一个节点是:
发送一个完全完整的
bitfield
,表明它包含了 torrent 中的所有片段。 - BEP3发送不完整的
bitfield
,然后发送所有have
消息,用于从一开始就没有的其余部分。 (这可能是它正在持续下载并完成 torrent 或 它发送一个lazy bitfield
。) - BEP3- 发送
根据Extension for Partial Seeds - BEP21
发送upload only=1
部分种子 意味着对等方只下载了 torrent 的一部分并且不想再下载,并且正在播种它所拥有的。
have all
消息
对等方通过不断发送 have
消息来报告其进度。
协议的这一部分称为 对等线协议。