图片来源:Easy Diffusion,参数
在 bittorrent 中, tracker 是组织或个人提供的一个中心化的服务,tracker 服务器 URL 包含在种子文件(.torrent)的 announce
或 announce-list
字段中,bittorrent 客户端通过 HTTP GET 请求向服务端发送本地信息,并从服务器获取其他客户端的信息。
Tracker 请求
以下是 HTTP GET 请求 URL 中的参数:
参数 | 必要 | 含义 |
info_hash | 是 | 种子文件中 info 字段值(bencode编码的字典)的 SHA1 校验和(20字节),种子文件结构查看 这里 |
peer_id | 是 | 20字节 ,用以识别客户端的唯一 ID,可以是任意值(可见字符或二进制数据),应当在客户端启动时生成 |
port | 是 | 客户端监听端口号,通常是6881-6889(如果客户端无法在该端口范围内监听,应当主动放弃) |
event | 否 | 值必须为 started、stopped 或 completed。客户端对 tracker 的第一次请求中应当包含 event=stared ;客户端正常关闭时应当向 tracker 发送 event=stopped ;客户端完成下载时应当向 tracker 发送 event=completed (不要重复发送 ,tracker 使用该信息统计完成的客户端数量) |
uploaded | 是 | 使用 ASCII 码表示的十进制数字,表示 event=stared 发送后上传的字节数(官方没标单位,但通常为字节) |
downloaded | 是 | 使用 ASCII 码表示的十进制数字,表示 event=stared 发送后下载的字节数(官方没标单位,但通常为字节) |
left | 是 | 使用 ASCII 码表示的十进制数字,未下载的字节数 |
compact | 是 | 值为 1 时,服务器响应使用更加紧凑的节点格式(6字节 IPv4 地址或 16字节 IPv6 地址,后2字节为端口,均使用网络序)。注意,官方建议 tracker 默认使用 compact 格式,并且该参数对 tracker 服务器来说只是个建议,即使发送 compact=0 ,tracker 服务器也可以忽略或拒绝响应 |
no_peer_id | 否 | 指示服务器响应中的 peers 字典不必包含 peer id ,使用 compact=1 时自动忽略该选项 |
ip | 否 | 客户端所在机器的真实 IP 地址,客户端通过代理与 tracker 服务器连接时需要该参数提供真实 IP 地址,方便与其他节点连接 |
numwant | 否 | 客户端希望返回的节点数量,通常默认为 50 |
key | 否 | 一个不与其他客户端分享的客户端 ID, 即使 IP 地址变化,tracker 可以使用该参数识别客户端 |
trackerid | 否 | 服务器响应可能会带有一个 tracker id ,后续请求需带上该字段值 |
Tracker 响应
响应的 content-type
为 text/plain,实际上响应体是一个 bencode 编码的字典,包含以下字段:
字段(含空格) | 类型 | 必要 | 含义 |
failure reason | String | 否 | 表示出错无法继续,值为错误信息。出现该字段的话,可能不会出现任何其他字段。 |
warning message | String | 否 | 类似 failure reason ,但响应正常,可以继续 |
interval | Integer | 是 | 请求间隔,表示客户端向 tracker 发送请求后,下次发送请求前应当等待的时间,单位秒。 |
min interval | Integer | 否 | 最小请求间隔,单位秒。无论如何请求频率不能高于该值 |
tracker id | String | 否 | 保留该值,在后续请求 URL 的 trackerid 参数中填写 |
complete | Integer | 是 | 已经拥有完整文件的节点数量 |
incomplete | Integer | 是 | 未拥有完整文件的节点数量 |
peers | List | 是(可以被下面的 peers 和 peers6 替代) | 每个元素是一个字典,包含 peer id (String),ip (String,点分十进制的IPv4或十六进制的IPv6或域名),port(Integer) 。现在更常用的是紧凑格式 的 peers 和 peers6 |
peers | String | 是 | 紧凑格式 的 IPv4 节点,每6字节一组,前4字节为 IP,后2字节为端口,使用网络序 |
peers6 | String | 是 | 紧凑格式 的 IPv6 节点,每18字节一组,前16字节为 IP,后2字节为端口,使用网络序 |
参考:
- The BitTorrent Protocol Specification
- Tracker Returns Compact Peer Lists
- IPv6 Tracker Extension
- Bittorrent Protocol Specification v1.0
本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。