BT Tracker的原理及.Net Core简单实现Tracker Server

 最近很忙,自上次Blog被盗 帖子全部丢失后也很少时间更新Blog了,闲暇在国外站点查阅资料时正好看到一些Tracker 的协议资料,也就今天记录并实践了下,再次分享给大家希望可以帮到需要的小伙伴。

首先我们来了解下BT Tracker

一、做种

 

    现在很多BT软件都提供了做种功能,在做种时,我们都必须指定tracker服务器地址,如果该地址无效,则做出来的种子对BT协议来说是没有任何实际意义的。

二、bt tracker服务

    对于纯BT协议来说,每个BT网络中至少要有一台Tracker服务器(追踪服务器),tracker主要基本工作有以下几个方面:

  •  记录种子信息(torrent文件信息)
  •  记录节点信息
  •  计算并返回节点列表给BT客户端

    每次我们利用BT软件做完种子后,总要找个论坛之类的来上传自己的种子,这样别人就可以下载到这个种子。为什么要上传种子呢?原因:

  • 上传种子,其实就是把种子信息记录到tracker服务器上
  • 种子可以在论坛传播,种子的扩展程度就决定了种子的健康度和下载度

    当其他用户用BT软件打开种子后,BT软件会对种子进行解析(BDecode),主要得到种子的相关信息,包括:文件名、文件大小、tracker地址等。然后BT软件会向tracker地址发送请求报文,开始进行下载。BT向tracker发送的是Get请求,请求的内容主要有以下几个方面:

info_hash

必填

种子文件info字段的SHA1值(20字节)

peer_id

必填

节点标识,由BT客户端每次启动时随机生成

port

必填

节点端口,主要用于跟其他节点交互

uploaded

必填

总共上传的字节数,初始值为0

downloaded

必填

总共下载的字节数,初始值为0

left

必填

文件剩余的待下载字节数

numwant

必填

BT客户端期望得到的节点数

ip

选填

BT客户端IP,选填的原因是Tracker可以得到请求的IP地址,不需要客户端直接上传

event

选填

started/stopped/completed/空。当BT客户端开始种子下载时,第一个发起的请求为started,

在下载过程中,该值一直为空,直到下载完成后才发起completed请求。做种过程中,发送

的event也为空。如果BT客户端停止做种或退出程序,则会发起stopped请求。

tracker收到该请求后主要进行以下几步处理:

1. 根据info_hash查找种子信息,如果tracker没有该种子的任何信息,tracker服务器可以返回错误或返回0个种子数

2. 如果tracker找到了种子信息,接下来就会去查找是否数据库中已存在该peer_id的节点。接下来根据event的值进行相关处理。

3. 如果event是stopped,说明该节点已不可用,系统会删除tracker上关于该节点的记录信息。

4. 如果event是completed,说明种子节点+1,非种子-1。

5. 如果event是started,说明这是种子第一次连接tracker,tracker需要记录该节点信息,此外如果left=0,说明这是一个种子节点。

6. 如果event是空,则说明节点正在下载或上传,需要更新tracker服务器上该节点的信息。

7. 最后tracker从本地挑选出numwant个节点信息返回给BT客户端,实际返回的节点数不一定就是numwant,tracker只是尽量达到这个数量。

Tracker响应

Tracker正常返回的信息结构主要是:

interval

必填

<
50000+
5万行代码练就真实本领
17年
创办于2008年老牌培训机构
1000+
合作企业
98%
就业率

联系我们

电话咨询

0532-85025005

扫码添加微信