与Tracker交互
目的
与Tracker进行交互主要有两个目的:一是将自己的下载进程通知给Tracker以便Tracker进行一些相关的统计;二是获取当前下载同一个共享文件的peer的IP地址和端口号。
协议
BT客户端与tracker交互依靠的是HTTP/HTTPS协议。
过程
在BT客户端解析完torrent文件信息后,建立一个
HttpURLConnection连接,而这个URL地址就是torrent文件里的announce的tracker服务器地址。客户端使用HTTP协议与Tracker进行通信。Tracker通过HTTP GET方法获取请求,请求的构成为Tracker的URL后面跟一个?以及参数和值对,如 http://tk.greedland.net/ announce?paraml=value1¶m2=value2。
GET请求参数
info_bash: .torrent文件中的info部分的Shal校验码,共20byte。tracker服务器可以通过它在发布列表中找到对应的记录。
peer_id: BT客户端的唯一性标志,在客户机启动时产生,共20bit。在BTV1.0中没有规定产生peer_id的算法,只能保证唯一性即可。
port: 提供上传的端口号,亦即常说的监控端口。
key: 可选。一个扩展的唯一性标志,即使改变了IP地址,也可以使用该字段标志该BT客户机。
uploaded/downloaded: 上传/下载的字节数(从客户机向tracker服务器发送“started”开始计算),服务器可以用它做流量分析。
left: 还需要下载的字节数。
compact: 压缩标志。假如值为1表示接受压缩格式的对等方列表,即用6byte表示一个对等方(前4byte表示IP地址,后2byte表示端口号)值为0表示不接受。
event: 表面客户机的状态,只是started、completed、stopped等3种中的一种。