tracker服务器

知识
张雷老师 2019-07-17 16:52:49

tracker服务器是BT下载中必须的角色。一个BTclient在下载开始以及下载进行的过程中,要不停的与tracker服务器进行通信,以报告自己的信息,并获取其它下载client的信息。这种通信是通过HTTP协议进行的,又被称为tracker HTTP协议,它的过程是这样的:

client向tracker发一个HTTP的GET请求,并把它自己的信息放在GET的参数中;这个请求的大致意思是:我是xxx(一个唯一的id),我想下载yyy文件,我的ip是aaa,我用的端口是bbb。。。

tracker对所有下载者的信息进行维护,当它收到一个请求后,首先把对方的信息记录下来(如果已经记录在案,那么就检查是否需要更新),然后将一部分(并非全部,根据设置的参数已经下载者的请求)参与下载同一个文件(一个tracker服务器可能同时维护多个文件的下载)的下载者的信息返回给对方。

Client在收到tracker的响应后,就能获取其它下载者的信息,那么它就可以根据这些信息,与其它下载者建立连接,从它们那里下载文件片断。

关于client和tracker之间通信协议的细节,在“BT协议规范”中已经给出,这里不再重复。下面我们具体分析tracker服务器的实现细节。

从哪里开始?

要建立一个tracker服务器,只要运行bttrack.py程序就行了,它最少需要一个参数,就是–dfile,这个参数指定了保存下载信息的文件。Bttrack.py调用track.py中的track()函数。因此,我们跟踪到track.py中去看track()函数。

Track.py:track()

这个函数首先对命令行的参数进行检查;然后将这些参数保存到config字典中。在BT中所有的工具程序,都有类似的处理方式。

接下来的代码:

r=RawServer(Event(),config['timeout_check_interval'],config['socket_timeout'])

t=Tracker(config,r)

r.bind(config['port'],config['bind'],True)

r.listen_forever(HTTPHandler(t.get,config['min_time_between_log_flushes']))

t.save_dfile()

首先是创建一个RawServer对象,这是一个服务器对象,它将实现一个网络服务器的一些细节封装起来。不仅tracker服务器用到了RawServer,我们以后还可以看到,由于每个client端也需要给其它client提供下载服务,因此也同时是一个服务器,client的实现中,也用到了RawServer,这样,RawServer的代码得到了重用。关于RawServer的详细实现,在后面的小节中进行分析。

接着是创建一个Tracker对象。

然后让RawServer绑定在指定的端口上(通过命令行传递进来)。

最后,调用RawServer::listen_forever()函数,使得服务器投入运行。

最后,在服务器因某些原因结束运行以后,调用Tracker::save_dfile()保存下载信息。这样,一旦服务器再次投入运行,可以恢复当前的状态。

其它信息:

1、 BT源码的分布:

把BT的源码展开之后,可以看到有一些python程序,还有一些说明文件等等,此外还有一个BitTorrent目录。这些python程序,实际是一些小工具,比如制作metafile的btmakemetafile.py、运行tracker服务器的bttrack.py、运行BTclient端的btdownloadheadless.py等等。而这些程序中,用到的一些python类的实现,都放在子目录BitTorrent下面。我们的分析工作,通常是从工具程序入手,比如bttrack.py,而随着分析的展开,则重点是看BitTorrenet子目录下的代码。

BT作者BramCohen在谈到如何开发可维护的代码的一篇文章中(http://www.advogato.org/article/258.html),其中提到的一条就是开发一些小工具以简化工作,我想BT的这种源码结构,也正是作者思想的一种体现吧。

2、 我们看到,python和我们以前接触的c/c++不一样的第一个地方就是它的函数在定义的时候,不用指定参数类型。既然这样,那么,在调用函数的时候,你可以传递任意类型的参数进来。例如这样的函数:

deffoo(arg):

printtype(arg)

你可以这样来调用:

a=100

b=“helloworld”

foo(a)

foo(b)

输出结果是:

<type‘int’>

<type‘str’>

这是因为,第一次调用foo()的时候,传递的是一个整数类型,而第二次调用的时候,传递的是一个字符串类型。

这种参数具有动态类型的特性,是c/c++等传统的语言是所不具备的。这也是python被称为动态语言的一个原因吧。C++的高级特性模板,虽然也使得参数类型可以动态化,但使用起来,远没有python这么简单方便。

#tracker服务器#

返回顶部

影响力:4338

如何测试服务器?

这个解答帮助过1053人

一、服务器测试方法分为两个大方面,性能测试与功能测试。

在性能测试方面采用了新的测试方法,主要分为文件测试、数据库性能测试与Web性能测试三个方面。其中,文件性能与数据库性能采用美国Quest软件公司的Benchmark Factory负载测试和容量规划软件,Web性能测试则使用了Spirent公司提供的Caw WebAvalanche测试仪。

编辑时间 2019-11-12 18:26:29
影响力:8076

求助,物理运动分析软件tracker怎样获得速度与时间的关系曲线呢?我现在只能获得位移与时间的关系曲线!

这个解答帮助过7983人

【高中曲线运动考点】 1、定义:运动轨迹为曲线的运动。 2、物体做曲线运动的方向: 做曲线运动的物体,速度方向始终在轨迹的切线方向上,即某一点的瞬时速度的方向,就是通过该点的曲线的切线方向。

编辑时间 2019-03-08
影响力:5719

torrent hash怎么用?

这个解答帮助过5100人

与特征码的用法一样。在hash前加上“magnet:?xt=urn:btih:”,再复制进迅雷里面,就能得到种子。torrent文件本质上是文本文件,包含Tracker信息和文件信息两部分。

  1. Tracker信息主要是BT下载中需要用到的Tracker服务器的地址和针对Tracker服务器的设置,文件信息是根据对目标文件的计算生成的,计算结果根据BitTorrent协议内的B编码规则进行编码。

  2. 它的主要原理是需要把提供下载的文件虚拟分成大小相等的块,块大小必须为2k的整数次方(由于是虚拟分块,硬盘上并不产生各个块文件),并把每个块的索引信息和Hash验证码写入.torrent文件中;所以,.torrent文件就是被下载文件的“索引”。

  3. 根据BitTorrent协议,文件发布者会根据要发布的文件生成提供一个种子文件。下载者要下载文件内容,需要先得到相应的种子文件,然后使用BT客户端软件进行下载。

编辑时间 2019-01-22
影响力:1600

我制作了一个种子,想上传到服务器分享给大家,但是上传速度很慢,只有十几K,怎么办啊?我用的比特彗星

这个解答帮助过654人

我来给你讲解下比特彗星上传速度为0,有三种可能性。
第一,在这个世界上,没有任何地球人在下载你的种子。
第二,制作种子文件过程没有添加可用的tracker服务器地址。
第三,UDP端口被阻塞会导致无法上传,请切换到软件统计分类,确保UDP显示已开通,TCP阻塞可以不用管它,TCP被阻塞没有任何影响。

编辑时间 2019-11-05
影响力:5995

磁力搜索是什么?

这个解答帮助过9169人

没有磁力搜索只有磁力链接。

磁力链接(Magnet URI scheme)是一种特殊链接,它通过不同文件内容的Hash结果生成一个纯文本的“数字指纹”,并用它来识别文件。磁力链接识别准确度高,下载的文件准确无误,相比较BT文件,下载速度稳定,文件丢失率低。

特点

众所周知, BT下载速度不够稳定,当中断种时则无法完整下载。但是,这还不是最严重的。

从2009年开始,BT下载遭遇到了“更大的困难”——很多的BT服务器被关,不仅很多种子文件无法找到,BT Tracker服务器也断开解析工作,这就使得BT下载成为很大的难题。

磁力链接很好地解决了这个问题。磁力链接的问世与大行其道,标志着BT 1.0时代已经过去,BT 2.0 时代已经到来。

角色

在传统的BT下载方式中让各个 下载者之间相互联系,有2种途径:

1、通过连接BT种子中记录的BT Tracker服务器,获取下载者列表

2、利用BT种子中记录的“ 数字指纹”通过DHT网络进行搜索,获取下载者列表

(不过现实是,存活的BT Tracker服务器越来越少。而BT 种子文件也需要服务器保存。)

我们假设 “BT Tracker服务器连接不上了,BT种子文件服务器也被干掉了。。”

那么显而易见的是第1种途径完全走不通,第2种途径只能帮你“寻找”,却没办法知道你在寻找什么。

“磁力链接”的主要作用就是把“ 数字指纹”告诉DHT网络,你需要寻找什么。

编辑时间 2019-01-11
影响力:3240

百度网盘多个视频怎么合并种子

这个解答帮助过510人

第一步:安装BT软件
下载 BitComet并进行安装
第二步 先将要制作种子的影片放到相应的文件夹里
第三步 打开BitComet 点击工具栏里的“制作”开始制作种子
第四步 在常规栏里设置种子的文件来源 分块大小 种子服务器 种子保存路径等
第五步 在备注栏里填入种子的发布者信息等其他内容
第六步 点击确定开始制作种子
第七步 种子制作完毕 双击打开即可
第八步 将种子在发布服务器上发布
用BitComet,打开BitComet 左上角有个制作种子,选好你要做的种子的文件,然后tracker服务器地址写好,点确定就可以了,在要做种文件目录下就有种子,上传种子到bt发布页就可以,然后宣传bt种子的下载地址就行。

追问

视频怎么做?

文件在网盘怎么解决

追答

下载后制作啊

更多追问

编辑时间 2019-10-05
影响力:4187

手机上的磁力链接怎么使用?

这个解答帮助过2021人

先复制  ,磁力 可以用 

1、手机自带下载管理中点新建建下载 把磁力黏贴 然后点下载  完成之后形成一个bt种子  可继续用自带下载器下载 或者用百度云打开 或者迅雷、等工具打开  

2、百度云打开  ,在手机百度设置种–离线下载  新建链接任务  下载之后形成bt种子文件可以选择保存在百度云网盘  保存之后可以打开直接看  或者保存后下载不够有限速    或者用其他bt工具下载

3、迅雷,在手机迅雷中转到下载管理–又上角有个加字符号点开  把复制的链接黏贴后点下载  完成后也是形成bt种子文件  然后迅雷会为你打开bt文件  然后你根据自己需要选择bt子文件进行下载  下载完成后就可以打开了

磁力链接,简单的说(Magnet URI scheme):类似下面这样以“magnet:?xt=urn:btih:”开头的字符串,就是一条磁力链接;确切的说:“磁力链接”的主要作用是识别【能够通过“点对点技术(即:P2P)”下载的文件】。这种链接是通过不同文件内容的Hash结果生成一个纯文本的“数字指纹”,来识别文件的。而不是基于文件的位置或者名称。[1] 

众所周知,BT下载速度不够稳定,当中断种时则无法完整下载。但是,这还不是最严重的。

从2009年开始,BT下载遭遇到了“更大的困难”——很多的BT服务器被关,不仅很多种子文件无法找到,BT Tracker服务器也断开解析工作,这就使得BT下载成为很大的难题。

磁力链接很好地解决了这个问题。磁力链接的问世与大行其道,标志着BT 1.0时代已经过去,BT 2.0 时代已经到来。

深刻理解磁力链接

简单地说,磁力链接是一种特殊链接,但是它与传统基于文件的位置或名称的普通链接(如http://xxx)不一样,它只是通过不同文件内容的Hash结果生成一个纯文本的“数字指纹”,并用它来识别文件。

它类似于生活消费品包装上常见的条码,不同的是这个“数字指纹”可以被任何人从任何文件上生成,这也就注定了磁力链接不需要任何“中心机构”的支持(例如:BT Tracker服务器),且识别准确度极高。

因此任何人都可以生成一个Magnet 链接并确保通过该链接下载的文件准确无误。

更简单地说:类似【magnet:?xt=urn:btih:88594AAACBDE40EF3E2510C47374EC0AA396C08E&dn=bbb_sunflower_1080p_30fps_normal.mp4&tr=udp%3a%2f%2ftracker.openbittorrent.com%3a80%2fannounce&tr=udp%3a%2f%2ftracker.publicbt.com%3a80%2fannounce&ws=http%3a%2f%2fdistribution.bbb3d.renderfarming.net%2fvideo%2fmp4%2fbbb_sunflower_1080p_30fps_normal.mp4】这样以“magnet:?”开头的字符串,就是一条磁力链接,其在网页上的图标通常如图1所示,像一块磁铁,很容易辨别。

编辑时间 2019-01-17
影响力:3641

如何将ftp服务器在windows系统内影射为网络驱动器?

这个解答帮助过912人

你好,打开“我的电脑”里的Windows自带的“映射为网络驱动器”是不支持FTP格式的。
你可以通过下列方式进行,但有一定区别:
1、你可以直接点右键,建立快捷方式来完成,注意格式为 ftp://用户名:密码@域名或IP:端口 (如果端口为21,可以省略)。建立后,这个成文件夹的形式存在。。可以放进网上邻居里。。
2、你可以使用第三方软件将FTP映射为本地磁盘,带 C、D、E、这种盘符的。。如:NetDrive 软件,可以直接搜索这个软件名下载。

编辑时间 2019-02-03