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>

posted @ 2009-11-08 22:41  pursue  阅读(2070)  评论(0)    收藏  举报