BitTorrent协议规范(BitTorrent Protocol Specification)之Tracker HTTP/HTTPS Protocol-第三部分 (2)

l  failure reason:如果dictionary中包含这个键(key),那么其他的键(key)就不会出现,该键(key)对应的值是一个可读的错误消息,它告诉用户的请求为什么会失败。(字符串类型)

l  warning message:(新加入,可选) 类似于failure reason,但是即使存在这个键,这个响应还会正常地处理下去。warning message显示为一个错误。(字符串类型)

l  interval:客户端每隔一定间隔就会向Tracker发送一个请求,这个键(key)以秒为单位指出这个间隔的大小。(整数类型)

l  min interval:(可选),最小的请求间隔,它表示客户端不能在这个时间间隔之内向Tracker重发请求。 (整数类型)

l  tracker id:客户端发送其下一个请求时必须返回给Tracker的一个字符串。如果缺失,但是上一个请求发送了tracker id,那么不要丢弃旧值,重复利用即可。

l  complete:完成整个文件下载的peers数,即做种者的数量。 (整数类型)

l  incomplete:非做种的peers数(还没有完成该文件下载的peers数),即“占他人便宜者”数。(整数类型)

l  peers:(dictionary model) 该键(key)对应的值是一个dictionary list(列表),该list中的每一个dictionary都包含如下的键(key):

n  peer id:peer自己选择的用来标识自己的ID,上文在描述Tracker请求时已经说明。 (字符串类型)

n  ip:peer的IP地址,可以是Ipv6/Ipv4/DNS name。(字符串类型)

n  port:peer的端口号。(整数类型)

l  peers:(binary model) 不是使用上面描述的dictionary model,binary model下,该键(key)对应的值可以有多个六字节组成的字符串。这六个字节中的前四个是IP地址,后两个是端口号。IP地址和端口号均以网络字节序(大端)表示。

综上所述,默认情况下peers列表的长度是50,如果torrent中的peers比较少,那么这个列表长度会更短。否则如果torrent中的peers比较多,那么tracker就得从这些peers中随机选择一些放入响应中。当响应请求时,Tracker需要使用一个智能的机制来进行peer选择。例如:向做种者报告种子就得避免(意思说如果没有好的机制,就有可能出现这种情况)。

如果有一个事件发生(即stopped或者completed)或者客户端需要获得更多的peers时,客户端发送请求的频率肯定高于指定的间隔。尽管如此,不断地向Tracker发送请求以获得更多的peers绝对不是一个好主意。如果一个客户端想在其响应中包含一个更长的peer列表,那么它应该通过指定numwant参数来达到目的。

BitTorrent实现者注意:30个peers已经是一个很大的数目了,官方的客户端版本3在peers少于30的情况,会积极地向Tracker建立连接已获得更多的peers,但是如果客户端已经有55个peers的情况下,客户端将拒绝和Tracker建立连接。这个值的选择对于性能非常重要。当一个片(piece)已经下载完成后,客户端需要将HAVE消息(参考下文)发送给大多数活跃的peers。结果是广播通信的代价与peers数量成正比。这个数高于25之后,新加入的peers不太可能提升下载速度。强烈建议UI设计者使这个数模糊和很难修改,因为这样做没有任何作用。

Tracker \'scrape\' Convention
按照惯例:大部分Tracker支持另一种形式的请求,这种方式查询Tracker正在管理的给定torrent(或者所有的torrent)。这种方式通常被称为”scrape page”,因为这种方式会自动进行另一个单调乏味的流程:”screen scraping” Tracker的统计页。

类似于上面描述的URL,scrape URL也是一个HTTP GET方法。尽管如此,它们的Base URL是不相同的。想要得到scrape URL,请使用如下步骤:从announce URL开始,找到该announce URL中的最后一个’/’,如果该’/’之后的内容不是’announce’,那么说明这个Tracker不支持scrape。如果这个Tracker支持scrape,那么使用’scrape’代替’announce’就可以得到scrape页。

例:(announce URL -> scrape URL)

~         ->  ~

~        ->  ~

~      ->  ~

~                 ->  (scrape not supported)

~?x2%0644  ->  ~?x2%0644

~?x=2/4     ->  (scrape not supported)

~%064announce     ->  (scrape not supported)

scrape URL可以作为可选参数info_hash(上文描述的一个20字节值)的一个补充。但是这样限制了Tracker向那个特殊的torrent发送报告。否则tracker正在管理的所有torrent的统计数据将会返回。强烈建议软件编写者尽可能使用info_hash参数,这样就能够减少Tracker的负载和带宽。

你也可以指定多个info_hash参数给Tracker (得支持多个info_hash参数)。这不是官方规范的一部分,但是已经成为了实际标准,例如:

?info_hash=aaaaaaaaaaaaaaaaaaaa&info_hash=bbbbbbbbbbbbbbbbbbbb&info_hash=cccccccccccccccccccc

这个HTTP GET方法的响应是一个’text/plain’或者有时候是用gzip压缩的文本,这个文本由一个B编码的dictionary组成,这个dictionary包含如下的键(key):

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zgwzyd.html