拒绝服务攻击保护
有时恶意用户会向你通过大量 IP 地址连接,发送基本握手信息后不再传输任何数据。
然而,由于下载器本身有最大连接数限制,当这类连接占用的连接数达到上限时,下载器将无法继续连接其它人,被 “拒绝服务攻击”。
即使解除了下载器的最大连接数限制,网络运营商、路由器也有各自的最大连接数限制,一旦达到这些限制,将直接引发断网。
目前,已知 libtorrent 容易受到这类攻击,见PBH-BTN 成员发布的攻击报告议题。
为了缓解这类攻击的发生,PeerBanHelper 将检测 Peer 和你的下载器建立的连接状态,并在需要时短暂封禁它们,释放连接资源。通常来说这没有坏处,因为这类死链接相当难以恢复,并且可能阻止更优秀的 Peer 连接。
触发条件
- 管道:种子处于活跃传输状态
- 模式:保护模式与种子状态匹配(模式 0 依赖 Peer Flags,模式 1 仅做种,模式 2 全部)
- 缓存:Guava Cache,Peer 断连 5 次 Ban Wave 后自动清除
空闲判定(所有条件同时满足):
| 条件 | 阈值 |
|---|---|
| 瞬时速度 | ≤ 64B/s(上传和下载) |
| 平均速度 | ≤ 64B/s(自空闲开始起算) |
| 进度变化 | < 0.001%(resetOnStatusChange 开启时) |
| 空闲时长 | > maxAllowedIdleTime(默认 5 分钟) |
全部满足 → BAN。任一条件恢复则计时器重置。
默认设置下,如果一个连接超过 5 分钟没有满足下列的一个或者多个任何条件,将被视为空闲连接(或者叫死连接):
- 上传或者下载的速率小于 64 字节每秒(64B/s),(1KB = 1024B)
- 回报的进度差异小于 0.001%
同时,还满足了下列的附加条件的一个或多个:
- 任务处于做种状态
- 任务处于下载状态但没有交换任务兴趣信息(兴趣消息是传输数据前所必要的消息)
然后,该连接将被断开 5 分钟。