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

Why does BitTorrent only transfer 16KB subsets of pieces at a time?

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

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

比特流协议是一个消息流,包括控制消息。较大的块大小会增加控制消息的延迟,以至于它们所传达的信息在收到它们时会过时(超时)。

在慢速互联网连接上(比如在 ADSL 或两个绑定的 ISDN 通道上上传 128kbit)假设没有其他任何东西正在使用该连接,这已经花费了一个 16KiB 块的整整一秒——这个假设在现实中是不成立的。

请注意,http/2 还使用 16KiB 的初始帧大小来多路传输流。

This small transfer size seems to add a lot of complexity (having to handle a queue of requests and build up the piece out of the 16KB blocks).

反正这些东西都是必须的

如果单个源速度较慢或者它是高优先级片段,则需要子片段请求才能同时从多个来源获取大片段块。

队列需要始终有处理中的请求。简单的请求-接收-请求周期意味着在空闲时间远程不发送数据。