为什么BitTorrent一次只能传输16KB的子集?

时间:2017-02-21 21:47:22

标签: bittorrent

查看BitTorrent协议我看到,对于请求消息,尽管长度字段长度为4个字节,但最大允许值为(通常)2 ^ 16。这是为什么?

这种小的传输大小似乎增加了很多复杂性(必须处理一个请求队列并从16KB块中构建出来)。 我可以看到的一个好处是它可以让应用程序控制速率限制(通过阻塞和取消阻塞)。是否有必要证明增加的复杂性?

1 个答案:

答案 0 :(得分:2)

bittorrent协议是一组消息,包括控制消息。较大的块大小会增加控制消息的延迟,使得它们传达的信息在被接收时将过时(超时)。

在缓慢的互联网连接上(比如ADSL上的128kbit上传或两个绑定的ISDN信道),假设没有其他任何东西正在使用连接,这对于单个16KiB块已经花了整整一秒 - 这个假设实际上并没有实现。

请注意,http / 2也使用16KiB的初始帧大小来复用流。

  

这种小的传输大小似乎增加了很多复杂性(必须处理一个请求队列并从16KB块中构建出来)。

无论如何,这些都是必要的。

如果单个来源很慢或者它是一个高优先级的部分,则必须能够一次性从多个来源获取大块的子块请求。

队列需要始终在飞行中提出请求。天真的请求 - 接收 - 请求周期意味着存在远程不发送数据的空闲时间。