protocols - BitTorrent 协议 - DL/UL 统计数据的完整性(跟踪器)
问题描述
我有一个关于 bittorrent 协议的问题:假设我们有一个私人跟踪器,我们在其中注册和登录以下载 torrent 文件/访问磁体。我们知道客户端向跟踪器宣布获取对等点列表,然后客户端本身连接到不同的对等点以下载整个文件的单独部分。一旦客户端完成下载或中止,它会向跟踪器发送一条 AnnounceFinished 消息,以便统计/正常关闭客户端。
现在,假设跟踪器想要保持下载/上传速率(就像在真实跟踪器中通常所做的那样)以限制 leecher 在不上传的情况下下载过多。当实际下载/上传仅发生在对等点之间时,跟踪器如何获得有关对等点下载/上传量的真实/合法统计信息?他们是否需要诚实和合作并将正确的统计数据发送给跟踪器,或者跟踪器能否以某种方式强制执行正确的数据?
解决方案
他们是否需要诚实和合作
或多或少,是的。
或者跟踪器可以以某种方式强制执行正确的数据?
不是在多个共谋同行的一般情况下。在单个/几个自私下载者的特殊情况下,可以通过交叉检查来自多个对等点的统计数据来检测它们,但这很脆弱,需要一些微调的启发式方法来最大限度地减少误报,同时仍然获得不错的真阳性。
它基本上是一个杂物,而不是协议设计的东西。
对于下载的统计数据,跟踪器也可以作为比特流对等方参与群,并根据have
消息查看客户端的进度,但这不适用于上传,也不是那么可靠,因为不能保证它可以连接到群中的所有对等点以观察它们。
推荐阅读
- java - Elasticsearch - Java RestHighLevelClient - 如何使用滚动 api 获取所有文档
- javascript - 用不存在的标签替换链接 HTML
- mysql - ORDER BY NOT EXIST 在另一个表的两列中。可能吗?
- android - 运行 Instrumentation Tests 时如何禁用 V/InstrumentationResultParser 输出
- angular - 来自子组件的 Angular 移动方法和属性(由
) 到父组件中 - ruby-on-rails - 根据其他哈希数组的键值更新一个哈希数组
- react-native - 如何在平面列表中隐藏/显示文本输入反应原生?
- java - Java.lang.IllegalStateException:罐子地狱!在弹性 6.5.1 中
- sapui5 - getRows 低于模型长度
- aem - AEM - Sling Page 对象不一致