Tracker HTTP协议
Tracker是一种HTTP/HTTPS服务,它是专门为BitTorrent而设计的,和普通HTTP协议一样,采取请求和应答方式。BT客户端得到有关下载文件的各种动态信息,最主要的是下载同一文件的其他下载者。.Tracker使用CGI方法提出申请,如"param1=value & param2 = val"
注意:所有不在0-9、a-z,、A-Z,和 $-_.+!*'()的字符集都要转义。比如空格要转义成"%20",其中20是空格的ASCII符。详看RFC1738.
客户端根据Metafile指出的"announce"地址,对tracker提出申请:如
http://tk.greedland.net/announce?info_hash=XXXXXXXXXXXXXXXXXXXX&peer_id=AZ34343&port=6881...
下面是向tracker申请的参数:
info_hash: Info键值的20字节SHA杂凑值.
peer_id: 20字节长的独一无二的伙伴标识,在client启动时生成. 可用BT下载客户端的程序名和随机数来生成.
port: 客户端监听端口.典型的端口是6881-6889.
uploaded: 上传总量 (从前是客户端对tracker发送"开始"event) 十进制ASCII码数字. 它表示客户端上传字节总量.这一参数并没被官方描述提到.
downloaded: 下载总量 (从前是客户端对tracker发送"开始"event) 十进制ASCII码数字. 它表示客户端下载字节总量.这一参数并没被官方描述提到.
left: 剩余下载字节, 十进制ASCII码数字.
compact:
此参数值为1,表示期望得到紧凑模式的节点列表.
否则表示期望得到普通模式的节点列表.
指出客户端是否支持压缩模式. 如果是,伙伴列表将被一个伙伴字符串所代替.每个伙伴占6个字节.前4个字节是主机(网络字序) , 后2个字节是端口(网络字序).
event: 事件有3种: 开始(started), 完成(completed), 停止(stopped)
started: 对tracker的第一个请求必须包括开始事件.
stopped: 必须在客户端关闭时发送此事件.
completed: 必须在完成下载时发送此事件. 可是, 当在完成下载后重新开始任务就不可重发"完成"事件.
ip: 可选的IPV6地址
numwant: 可选的期望Tracker最大返回数.缺省为50个.
trackerid: 可选. 如果上次发布含有trackerid,这次就要重新扫送.
HTTP Tracker 回应消息
这是一个回应的样子
如果返回的bencode编码中包含failure reason字段,则表示处理请求失败,此字段的值即为失败原因.
如果请求成功,则有两个字段是必须出现的:
peers:节点列表
interval:服务器期望的下次查询间隔时间,单位为秒
通常还会有如下一些字段出现:
done peers:下载完毕的节点个数
num peers或者incomplete: 当前下载的节点个数
普通模式的回复其peers字段包括ip,port两个字段,如果未指定no_peer_id参数还将包括peer id字段.
Tracker交将返回一个"text/plain"文档,含有Bencode编码的字典:
failure reason: 如果有本项,说明发生了一个严重错误,将不会返回其他任何信息. 键值是人类可读的错误信息.
warning message: (新的) 键值是人类可读的的一般警告信息.
interval: 发送请求之间必须的间隔时间(秒) (必须执行)
min interval: 最小的发布间隔时间 (秒). 限制客户端重新发布.
tracker id: 一个必须被回送的字符串,当客户端再次发布.
complete: 整数, 拥有完全文件的伙伴数.
incomplete: 整数, 拥有不完全文件的伙伴数,也就是"水蛭".
peers: 一个含有字典的列表, 每一个字典含有如下内容:
peer id: 字符串, 伙伴的唯一名称.
ip: 字符串,伙伴的IPv4或IPv6地址,或是DNS名.
port: 整数,伙伴的端口
有一些Tracker能返回"Compact"模式的伙伴列表,如果是这种情况,peers列表就会被一个peers字符串所代替,每个伙伴占6个字节.其中前4个字节是主机IP(网络字序) , 后2个字节是端口(网络字序).
BitComet对Tracke请求的扩展:
localip: 发送本地IP
hide: 隐身模式,不允许tracker返回你的IP给别人.
对返回的扩展:
tracker_alias_url:返回别名tracker的列表.如是同一个主机,主机名可以省略如udp://:8080/
源文档 <http://blog.csdn.net/wenxinfly/archive/2007/02/07/1504785.aspx>

浙公网安备 33010602011771号