更新时间:2022-08-25 17:21
P2P
Peer to Peer点对点网络,简称 P2P,是指网络用户之间可以直接通信的网络结构。简单的说,P2P直接将人们联系起来,让人们通过互联网直接交互。使得网络上的沟通变得容易、更直接共享和交互,真正地消除中间环节。P2P使用户可以直接连接到其他用户的计算机,而不是像过去那样连接到服务器去浏览与下载。P2P另一个重要特点是改变互联网现在的以大网站为中心的状态,重返“非中心化”,把权力交还给用户。
BitTorrent协议
BitTorrent(简称 BT,比特洪流)是一个多点下载的的 P2P文件共享软件。它由程序员 Bram Cohen使用 Python语言编写,并且还是代码开源的专利软件,可以自由地下载和传播。它采用高效的软件分发系统和点对点技术共享大体积文件(如一部电影或电视节目),使多个用户同时下载一个文件的时候,他们之间互相为对方提供自己所拥有的文件部分的下载。这样就把文件下载的带宽开销分摊到每个用户那里,理论上 BT下载可以支持无限多个用户来下载同一个文件。因此,BT被人们称之为“群集、散布、集中”的文件传输协议。目前,各种支持 BT下载的软件层出不穷,BT技术已经被广泛的应用于文件下载中。
一般来说一个BT文件发布系统由以下几个部分组成:
(1)一个普通的web 服务器;
(2)一个静态元信息文件,即BT种子文件( 以.torrent 结尾, 包含了文件的基本属性);
(3)一个追踪器(Tracker);Tracker实际上是一台服务器,它负责帮助peer之间相互建立连接;
(4)BT客户端(peer,系统的核心部分,用于实现下载策略);
(5)一个被下载文件的拥有者(seed)。
种子是一个形象的比喻。BT下载的原理从某种意义上说就像春天种下一粒种子,到了秋天就会收获万粒稻菽一样的滚雪球般的越来越大。于是人们就把发出的下载文件叫做种子。而种子文件就是记载下载文件的存放位置、大小、下载服务器的地址、发布者的地址等数据的一个索引文件。这个种子文件并不是你最终要下载的东西(如电影,软件等等),但是有了种子文件,你就能高速下载到你需要的文件。种子文件的扩展名是:*.torrent。
BT种子可称为比特流种子,主要是因为很多下载软件解析种子后下载速度很快。
BT首先在上传者端把一个文件分成了Z个部分,甲在服务器随机下载了第N个部分,乙在服务器随机下载了第M个部分,这样甲的BT就会根据情况到乙的电脑上去拿乙已经下载好的M部分,乙的BT就会根据情况去到甲的电脑上去拿甲已经下载好的N部分,这样就不但减轻了服务器端的负荷,也加快了用户方(甲乙)的下载速度,效率也提高了,更同样减少了地域之间的限制。比如说丙要连到服务器去下载的话可能才几K,但是要是到甲和乙的电脑上去拿就快得多了。所以说用的人越多,下载的人越多,大家也就越快,BT的优越性就在这里。而且,在你下载的同时,你也在上传(别人从你的电脑上拿那个文件的某个部分),所以说在享受别人提供的下载的同时,你也在贡献。
BT把提供完整文件的档案称为种子(SEED),正在下载的人称为客户(Client),某一个文件有多少种子多少客户是可以看到的,只要有一个种子,就可以放心地下载,一定能抓完。当然,种子越多、客户越多的文件抓起来的速度会越快,下载以后的种子可能会因目标文件不存在而失效。
BT 是通过BT种子文件进行下载部署的,BT种子文件放在一个普通的网络服务器上,它包含了要共享的文件的信息,包括文件名、大小、文件的分块信息和一个指向追踪器的超级链接Url。被下载文件的拥有者也可以看成这个文件的“原始”下载者。要求文件下载的用户通过BT客户端软件分解.torrent 文件,取得文件的信息和指向追踪器服务器的 Url,同 Tracker进行通讯。
BT种子文件(.torrent)的具体文件结构如下:
全部内容必须都为Bencoding编码类型。整个文件为一个字典结构,包含如下关键字:
announce: tracker 服务器的 URL(字符串);
announce-list(可选):备用 tracker 服务器列表(列表);
creation date(可选):种子创建的时间,Unix 标准时间格式,从 1970 1 月1 日 00:00:00 到创建时间的秒数(整数);
comment(可选):备注(字符串) created by(可选):创建人或创建程序的信息(字符串);
info:一个字典结构,包含文件的主要信息。分为二种情况,单文件结构或多文件结构。
单文件info结构如下:
length:文件长度,单位字节(整数);
md5sum(可选):长 32 个字符的文件的 MD5 校验和,BT 不使用这个值,只是为了兼容一些程序所保留!(字符串);
name:文件名(字符串);
piece length:每个块的大小,单位字节(整数), 块长一般来说是 2 的权值;
pieces:每个块的 20 个字节的 SHA1 Hash 的值(二进制格式)。
多文件info结构如下:
files:一个字典结构;
length:文件长度,单位字节(整数);
md5sum(可选):与单文件结构中相同;
path:文件的路径和名字,是一个列表结构,如 est est。txt 列表为l4:test8test。txte;
name:最上层的目录名字(字符串);
piece length:与单文件结构中相同;
pieces:与单文件结构中相同。
首先,客户端用户访问BT发布站点,通过站点上的信息找到想要的资源文件。其中Bt发布站点上显示共享文件的信息和每个文件的共享用户信息,并为每个文件提供一个种子文件的下载链接。
客户端下载了该种子后,与BT种子文件中的跟踪服务器(Tracker)通讯。跟踪服务器首先记录该客户端的用户信息,同时将其它共享用户的信息提供给该客户端,该客户端根据这些信息与其他共享用户的客户端软件发生通讯,从其中找出下载速率最快的40~50个客户端进行下载;其中每个客户端都按照种子文件中的规定对文件进行分块。文件的上传和下载都是按块进行的。
当客户端软件完成一个文件分块的下载后,就可以进行该块的上传。
随着参与下载的用户数量的增加,下载速度加速。
完成整个共享文件的下载后客户端就只上传,不下载,成为共享文件的种子;在一些人气很旺的下载中,原始下载者经常可以在较短的时间内退出上传,由其它已经下载到整个文件的下载者继续提供上传。
部分完成的用户开始退出,当某个种子的所有用户均结束下载或上传后,该种子可用生命期结束。
Tracker即时接收所有peer信息,并且给每个peer一份随机的peers列表。Tracker通过 HTTP GET参数获得信息,然后返回一个Bencoding编码后的信息。peer每隔一段时间连一次Tracker,告知自己的进度,并和那些已经直接连接上的peer进行数据的上传下载。这些连接遵循BitTorrent peer协议,通过TCP协议进行通信。seed和tracker,peers之间通讯连接的步骤如图1。
上面讲过,同一个资源,下载的人越多,下载的速度也就越快。经常用BT下载的电脑,一般都默认共享了不止一个资源,因此想办法让拥有你想要的资源的那些电脑连入网络,就是很有必要的。具体办法就是发布一个大家也都需要的资源,这也充分体现了BT下载模式最重要的精神——分享。
要想发布一个资源,要经过2个步骤:制作种子文件、传播种子文件。当然还要把该种子文件对应的资源所在电脑开机连入网络一段时间,具体时间不定,主要看该种子下载的情况,最好至少要保证有一部分人下载成功。
用户发布一个 BT 种子文件的具体步骤如下:
(1)选择一个BT发布站点,这个站点运行普通的网络服务器端程序,如 Apache、IIS 等。通过网站帮助信息找到Tracer的Url。
(2)用要发布的完整文件和Tracker的URL创建一个种子文件(.torrent 文件);
(3)将种子文件上传到网络服务器上;
(4)在网络服务器的网页上发布种子文件(.torrent 文件)链接和对这个文件的一些简单的描述;
(5)发布用户(seed)提供完整的文件。