查看 BitTorrent 协议(protocol),我发现对于请求消息,虽然长度字段为 4 个字节长,但最大允许值(通常)为 2^16。这是为什么?
如此小的传输大小似乎增加了很多复杂性(必须处理请求队列并从 16KB block 中构建片段)。 我看到的一个好处是它使应用程序能够控制速率限制(通过阻塞和解除阻塞)。这对于证明增加的复杂性是否合理如此重要?
最佳答案
bittorrent 协议(protocol)是一个消息流,包括控制消息。较大的 block 大小会增加控制消息的延迟,以至于它们所传达的信息在收到时就已过时(超时)。
在缓慢的互联网连接上(例如 ADSL 上的 128kbit 上传或两个绑定(bind)的 ISDN channel ),假设没有其他东西正在使用该连接,对于单个 16KiB block 来说,这已经花费了整整一秒的时间 - 这种假设在现实中并不成立。
请注意,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).
无论如何,这些东西都是必要的。
如果单个源很慢或者它是一个高优先级片段,则需要子片段请求才能从多个源一次获取大片段的 block 。
需要队列才能始终处理请求。幼稚的请求-接收-请求周期意味着存在远程不发送数据的空闲时间。
关于bittorrent - 为什么 BitTorrent 一次只传输 16KB 的片段子集?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42378623/