我对 BitTorrent 协议很好奇。很多软件都实现了这个协议,比如 µTorrent、Vuze、qBittorent...
这些软件中的每一个都有一个功能:限速。
例如,如果我的最大下载速度是 3000 KB/s,我可以将速度限制在 1500 KB/s 或 500 KB/s,而不会减少源(种子)的数量。这个速度限制是如何工作的?
我对 BitTorrent 协议很好奇。很多软件都实现了这个协议,比如 µTorrent、Vuze、qBittorent...
这些软件中的每一个都有一个功能:限速。
例如,如果我的最大下载速度是 3000 KB/s,我可以将速度限制在 1500 KB/s 或 500 KB/s,而不会减少源(种子)的数量。这个速度限制是如何工作的?
我不能确定所有这些程序是否都以相同的方式执行此操作,但我查看了几年前的 libtorrent 源代码(其中大多数程序用于实现 BitTorrent 协议的库)和 libtorrent像这样处理它:
该库在工作时维护一个平均上传和下载数量。当达到限制(上传或下载)时,软件只会在短时间内保持操作,直到平均上传/下载低于限制,然后再次恢复。
当达到限制时,它不仅会丢弃流量。特别是在下载限制生效之前开始的块的下载仍然会被接收。
这也意味着它永远不会完全悬停在极限上,但它会稍微过冲、下降到以下、再次过冲等等。
保持下载操作意味着:简单地不请求从任何对等点下载新块。对于上传,这意味着拒绝其他客户端的上传请求。(BitTorrent 协议有规定告诉另一端“我有那个块给你,但现在没有。稍后再试。”)
PS 上面的逻辑有一些例外。特别是对于具有非常少量对等点的“慢动作”,在某些情况下无论如何都允许通过,因此他们有更好的机会通过 BitTorrent 网络传播。
PSPS 在 3-4 年前,我浏览了 libtorrent 源,但据我所知,这并没有太大变化,我的信息仍然有效。