Bittorrent Tracker

图片来源:Easy Diffusion,参数

图片来源:Easy Diffusion,参数

在 bittorrent 中, tracker 是组织或个人提供的一个中心化的服务,tracker 服务器 URL 包含在种子文件(.torrent)的 announceannounce-list 字段中,bittorrent 客户端通过 HTTP GET 请求向服务端发送本地信息,并从服务器获取其他客户端的信息。

Tracker 请求

以下是 HTTP GET 请求 URL 中的参数:

参数必要含义
info_hash种子文件中 info 字段值(bencode编码的字典)的 SHA1 校验和(20字节),种子文件结构查看 这里
peer_id20字节 ,用以识别客户端的唯一 ID,可以是任意值(可见字符或二进制数据),应当在客户端启动时生成
port客户端监听端口号,通常是6881-6889(如果客户端无法在该端口范围内监听,应当主动放弃)
event值必须为 started、stopped 或 completed。客户端对 tracker 的第一次请求中应当包含 event=stared ;客户端正常关闭时应当向 tracker 发送 event=stopped ;客户端完成下载时应当向 tracker 发送 event=completed (不要重复发送 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 reasonString表示出错无法继续,值为错误信息。出现该字段的话,可能不会出现任何其他字段。
warning messageString类似 failure reason,但响应正常,可以继续
intervalInteger请求间隔,表示客户端向 tracker 发送请求后,下次发送请求前应当等待的时间,单位秒。
min intervalInteger最小请求间隔,单位秒。无论如何请求频率不能高于该值
tracker idString保留该值,在后续请求 URL 的 trackerid 参数中填写
completeInteger已经拥有完整文件的节点数量
incompleteInteger未拥有完整文件的节点数量
peersList是(可以被下面的 peerspeers6 替代)每个元素是一个字典,包含 peer id(String),ip (String,点分十进制的IPv4或十六进制的IPv6或域名),port(Integer) 。现在更常用的是紧凑格式peerspeers6
peersString紧凑格式的 IPv4 节点,每6字节一组,前4字节为 IP,后2字节为端口,使用网络序
peers6String紧凑格式的 IPv6 节点,每18字节一组,前16字节为 IP,后2字节为端口,使用网络序

参考:

知识共享许可协议
本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注