BitTorrent协议规范之peer与tracker通讯协议

在BitTorrent中,peer和tracker之间通讯采用 HTTP/HTTPS协议通讯。peer向tracker发HTTP GET request,然后tracker返回HTTP response。即Tracker Request和Tracker Response。
Tracker Request:
在Request中包括的信息全都放在URL中,向tracker服务器发送。采用标准的cgi的方式表示参数,比如http://tracker.ydy.com:102/announce?param=value&param=value
对于value为二进制数据的时候,要把它进行url encode,即如果某个byte的值不在'0'-'9','a'-'z','A'-'Z','.','-','_','~'之内时,就要用%nn来表示该btye。
request的参数列表
info_hash: 20个byte的hash信息,它是把torrent文件中info对应的value进行SHA1算法hash得到的。
peer_id: 20个byte,用来标识某个特定的peer。通常peer_id是有BitTorrent客户端提供的,各个软件采用的方法可能不一样,但只要保证唯一就可以了。
port: peer监听的端口。BitTorrent典型的端口号是在6881-6889之间,但是现在到处都封杀bt,端口号随机更好,更有甚者,如果80端口可用直接用80端口。
uploaded: peer上传数据总数,以byte为单位
downloaded: peer下载数据总数,以byte为单位
left: peer还剩下多少字节需要下载
compact: 指示peer支不支持紧凑的response方式
no_peer_id: 指示tracker在返回给peer所要的peerlist时候,在peerlist里面可以不要peer的id信息,只要有ip和port就可以。
event: 有3种取值 started, completed, stopped。第一个tracker request中必须要设置started。如果peer正常退出,需要向设置stopped发送。当用户下载完,需要设置completed。
ip: 可选参数。两种情况下需要设置,1是peer通过代理向tracker请求,2是tracker和peer在同一个内网
numwant: 可选的,想要返回多少peer,如果不设置,默认为50.这个值也可以设置为0,显然当event为completed和stopped的时候就可以设置为0.
trackerid: 可选参数。如果上一次请求返回了tracker id,这次request就应该要有。

Tracker Response:
Tracker向Peer返回的HTTP Response的mime type是text/plain,response的内容是一个Bencode的字典,它包括下面的keys
failure reason: 如果有这个key,那就没有后面的信息了。它的value是一个string
warning message: 一个字符串,与failure reason类似,但是仅仅是warning而已,request还是被处理了。
interval: 一个整数,表示peer应当等待的时间间隔(单位s),向tracker发request
min interval: 一个整数,表示时间间隔的最小值(单位s),peer不能超过这个频率
tracker id: 一个字符串,告诉客户端下次request中用这个tracker id,如果没有这个信息,peer可以继续使用原来的tracker id,如果有的话。
complete: 一个整数,表示种子个数,就是下载完成的peer数
incomplete: 一个整数,表示正在下载的peer数
peers: 它有两种形势,一个是字典形式,一个是二进制紧凑形式。
字典形式: peers的值是一个list,list的每一项是一个字典,字典包括peer id, ip, port三个key。他们的值分别是 
  peer id: 一个字符串,表示peer的id
  ip: 一个字符串,表示peer的ip
  port: 一个整数表示端口
二进制紧凑模式: 一个长度为6*n的btye流,n是peer的个数,用6个byte表示一个peer,前面四个byte表示ip(int),后面两个是port(short),它们都是网络字节序,即高字节在前面,低字节在后面。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值