BitTorrent学习

资料来源:
维基百科:
https://zh.wikipedia.org/wiki/BitTorrent_(协议)

https://www.howtogeek.com/howto/31846/bittorrent-for-beginners-how-get-started-downloading-torrents/

BitTorrent协议时在对等网络中文件分享的网络协议程序。与point-to-point的协议程序不同。它为peer-to-peer,而且用户越多,下载同一文件的的人越多,下载速度越快。而且,下载之后,继续保持上传的状态.

https://www.howtogeek.com/wp-content/uploads/2010/10/Torrentcomp.gif

索引器:(indexers)

一个站点,汇集了种子列表和说明。

追踪器:(trackers)

一台服务器,协助指导同级,启动下载和维护统计信息,大多数索引器都有自己专用的追踪器,追踪器将少量的数据或数据包路由到下载器。收集下载者信息的服务器,并将此信息提供给其他下载者,是下载者连接起来,传输数据。

种子:
下载任务中,所有文件都被某个下载者完整的下载,下载者成为一个种子。

做种:
下载完成后,继续提供给他人下载的行为。

原理:

传统HTTP/FTP使用TCP/IP协议。
BitTorrent协议是TCP/IP协议上的一个P2P文件传输通信协议,处于应用层。正在不断扩展中。

协议中:
文件发布者会发布文件生成提供一个.torrent文件,种子文件。
包含Tracker信息和文件信息.
Tracker是追踪器服务器的地址和针对Tracker服务器的设置。
文件信息是根据对目标文件的计算生成,计算结果根据BitTorrent协议内的Bencode规则进行编码。
原理,将需要把提供下载的文件虚拟分成大小相等的块,块大小必须为2k的整数次方(由于是虚拟分块,硬盘上并不产生各个块文件),并把每个块的索引信息和Hash验证码写入种子文件中;所以,种子文件就是被下载文件的“索引”。

下载者要下载文件内容,就需要得到相应的种子文件,然后使用BT客户端进行下载。
下载时,BT客户端首先解析种子文件得到Tracker地址,然后连接Tracker服务器,Tracker服务器回应下载者的请求,提供下载者和其他下载者包括发布者的IP。

下载者连接其他下载者,根据种子文件,两者分别告知对方自己已有的块,交换对方没有的数据。此时不需要其他服务器才能与,分散了单个线路上的数据的流量,减轻了服务器的负担。

下载者每得到一个块,计算出下载块的Hash验证码与种子文件中的对比,如果一样则说明块正确,不一样则需要重新下载。解决了下载内容的准确性。

为了解决下完就跑的现象,在非官方的协议中存在一种慢慢开放下载内容的超级种子算法

在没有Tracker的情况下,发展出DHT网络技术。(Distributed Hash Table)分布式哈希表。是一种分布式存储方法。

在不需要服务器的情况下,每一个客户端负责一个小范围的路由,并且负责存储一小部分的数据,从而实现整个DHT网络的寻址和存储。使用该技术的BT下载软件,用户不需要连接Tracker就可以下载,因为软件会在DHT网络中寻找下载同一个文件的其他用户,并且与其通讯,开始下载任务。

有些软件可以通过自动DHT搜索种子资源,构成种子市场。(比特精灵)

DHT算法的名称位Kademlia(在eMule中也有使用,称为Kad网络)

BIT下载速度不够稳定,当中断种时则无法完整下载,当2009年tracker服务器无法展开解析工作。磁力连接就出现了。其中就有应用DHT网络技术。

取代Tracker服务器和BT种子的是DHT和PEX网络和Magnet Link。这是真正分布网络的。
DHT 保证了整个网络没有单个中心,即使一个节点下线,仍然可以通过其他节点来获取文件。

PEX Peer EXchange节点信息交换 虽然DHT解决了中心化的问题,但是没有Tracker实现高效寻址,就要PEX

Magnet links 告诉BT客户端寻找什么。

首先是客户端Becode的建立:

https://github.com/cwyang/bencode
见BT客户端的文章

The Pirate Bay海盗湾 世界上最大的电子信息分享网站,专门存储分类和搜索资源的网站,最大的BTTracker服务器

历史事件表:
该技术由2001年4月 布莱姆-科亨发布。七月正式使用。
中国大陆和西欧国家对BT没有法律上的约束,但是2009年,国家广播电影电视总局曾大范围打击和封锁中国的Tracker服务器