同行不发回unchoke消息

peers not sending back unchoke message

我正在创建一个 bittorrent 客户端,并试图与同行沟通,我需要畅通无阻才能最终收到作品。

我一直在向同行发送unchoke和感兴趣的消息,我希望他们回复我的unchoke消息,但没有成功接收

我主要关注这个article,它指出您必须在创建握手后发送感兴趣的消息(我已成功完成)

这是我用来创建感兴趣消息的代码

 12 def generateinterested():
 13   return struct.pack('>iB', 1, 2)

作为十六进制转储,这是:

00000000: 00 00 00 01 02                                    .....

发送该消息没有得到回复。类似的 说你在握手后发送了一个 unchoke 消息(而不是感兴趣的),这与原始文章冲突。

我已尝试使用以下代码来创建取消阻塞消息

  9 def generateunchoke():
 10   return struct.pack('>iB', 1, 1)

作为十六进制转储,这是:

00000000: 00 00 00 01 01                                    .....

都没有像我预期的那样产生对等方发回 unchoke 消息的结果。我在这里做错了什么?我是想在握手后发送我感兴趣的消息还是取消消息以接收取消消息?

我收到不一致的消息。 2% 的时间,对等方将发回 unchoke。其他 98% 的人我等了超过一分钟也没有得到回复。为什么是这样?

如果你不熟悉 bittorrent 消息here是一些帮助

发送感兴趣的消息并不能保证您会收到一条畅通无阻的消息。 表示兴趣仅仅意味着同行会认为你是一个无可挑剔的候选人。换句话说,你必须等待。多长时间取决于远程同行的决策。

表示兴趣不是一种预期会得到回应的请求形式。它只是将您的当前状态通告给您所连接的所有对等方。其中一些可能会选择在将来的某个时候解除您的阻塞,其他人可能不会,并且解除阻塞会随着时间的推移而改变。当您向他们上传数据时,他们更有可能解除您的阻塞。请参阅 bittorrent economics paper 以了解预期客户的总体行为方式的基线。

fast extension 在启动过程中提供了更多的提示行为。 Peer一般会按照一个通用的算法计算出一组你可以下载的片段,然后告诉你他们计算出的是哪一组,你就可以请求这些片段而不被阻塞。