比特流(BitTorrent)是一种内容分发协定,由布拉姆·科恩自主开发。它採用高效的软体分发系统和点对点技术共享大体积档案(如一部电影或电视节目),并使每个用户像网路重新分配结点那样提供上传服务。一般的下载伺服器为每一个发出下载请求的用户提供下载服务,而BitTorrent的工作方式与之不同。分配器或档案的持有者将档案传送给其中一名用户,再由这名用户转发给其它用户,用户之间相互转发自己所拥有的档案部分,直到每个用户的下载都全部完成。这种方法可以使下载伺服器处理多个大体积档案的下载请求,而无须占用大量频宽。
基本介绍
- 中文名比特流
- 外文名BitTorrent
- 简称BT
- 发明时间2003年
- 发明者Bram Cohen
- 特点上传速度越快,下载速度越快
技术特点
2003年,软体工程师Bram Cohen发明了BitTorrent协定。
BitTorrent(简称BT)是一个档案分发协定,每个下载者在下载的不断向其他下载者上传已下载的数据。而在FTP,HTTP协定中,每个下载者在下载自己所需档案的,各个下载者之间没有互动。当非常多的用户访问和下载伺服器上的档案时,由于FTP伺服器处理能力和频宽的限制,下载速度会急剧下降,有的用户可能访问不了伺服器。BT协定与FTP协定不同,特点是下载的人越多,下载速度越快,原因在于每个下载者将已下载的数据提供给其他下载者下载,充分利用了用户的上载频宽。通过一定的策略保证上传速度越快,下载速度也越快。在很短时间内,BitTorrent协定成为一种新的变革技术。
实现原理
普通的HTTP/FTP下载使用TCP/IP协定,BitTorrent协定是架构于TCP/IP协定之上的一个P2P档案传输协定,处于TCP/IP结构的套用层。 BitTorrent协定本身也包含了很多具体的内容协定和扩展协定,并在不断扩充中。
根据BitTorrent协定,档案发布者会根据要发布的档案生成提供一个.torrent档案,即种子档案,也简称为“种子”。
.torrent档案本质上是文本档案,包含Tracker信息和档案信息两部分。Tracker信息主要是BT下载中需要用到的Tracker伺服器的地址和针对Tracker伺服器的设定,档案信息是根据对目标档案的计算生成的,计算结果根据BitTorrent协定内的B编码规则进行编码。它的主要原理是需要把提供下载的档案虚拟分成大小相等的块,块大小必须为2k的整数次方(由于是虚拟分块,硬碟上并不产生各个块档案),并把每个块的索引信息和Hash验证码写入种子档案(.torrent)中。所以,种子档案(.torrent)就是被下载档案的“索引”。
技术依赖
bittorrent 的发展依赖于peer-to-peer技术。对等网路 (Peer - to - Peer 简称 P2P) 的研究一直是国外知名学府和知名企业以及研发机构最关注的重点。它甚至被美国《财富》杂誌称为改变网际网路发展的四大新技术之一 , 被认为是代表无线宽频网际网路未来的关键技术。现广泛套用于新技术与软体等工程。
P2P是近年来网际网路最热门的技术 ,在VoIP、下载、流媒体、协调技术等领域得到飞速发展 , 被财富杂誌评为影响网际网路的四大科技之一。P2P技术体现了网际网路最根本的内涵——自由和免费,它的主要优点如下和检索相关的节点上去 , 存储有和该检索 ;对等性高 : 非中心化 , 网际网路回归本色——联繫和传输 ;扩展性强 : 用户扩展与资源、服务、系统同步扩展 ;健壮性高 : 服务分散和自适应 , 耐攻击、高容错性 ;性价比高 :P2P成本低、存储和技术能力强 ;负载均衡 :分布存储和技术 , 整个网路负载得以均衡。
在P2P网路中,每个参与的节点既是伺服器又是客户端, 既是信息的提供者又是信息的消费者。P2P信息检索的目的就是网路中的任意节点都可以提交检索的请求 ,然后这些检索通过相关信息的节点将会回应请求 ,把本地相某种路由机制被路由到关的内容以对等的形式直接传送到请求节点上 , 如图 2 所示。
图中的检索过程分为以下几个阶段 :每个节点在加入网路的时候 , 会对存储在本节点上的内容进行索引 , 以满足本地内容检索的目的。然后按某种预定的规则选择一些节点作为自己的邻居 , 加入到P2P网路当中。发起者P提出检索请求q,并将 q传送给自己的邻居 P的邻居收到 q后 , 再按照某种策略转发给它在网路中的其它邻居节点。这样 ,q就在整个网路中传播开来。收到请求 q 的节点如果存储有相应内容信息 , 则将对应的内容返回。
如何在一个大规模分布的环境下定位资源是个十分具有挑战性的问题。集中在如何组建P2P网路,如何选择有效的资源请求路由策略以便以较少的讯息通信开销 ,获得较多的相关查询结果返回 , 能够保证较好的服务均衡性。
下载特点
和常规下载档案不一样的是,当你进行BT下载时,你开始连结的地址都是.torrent结尾的档案。其实只要下载此档案,在本机运行此档案一样可以进行BT下载工作。而网上的BT下载连结都是由广大用户自己发布提供的,这样使得下载资料非常广,不受常规管理人员的限制。
种子
无论何种BT客户端程式,默认设定都未对下载速度和上传速度进行限制,这是因为BT软体会给上传速度较快的用户优先提供服务,也就是说上传速度越快,下载速度也越快,如果你使用的是宽频的话,下载时就不要去限制上传速度了。
当下载结束后,如果未关闭BT客户端程式(例如一边运行BT提供上传服务,一边浏览网页、编辑文档等),这时你将成为一个传递圣火的使者,即“种子”(seed)。换句话说,如果一个档案被分成10个部分,但拥有第9部分的人只有一个,即只有一个种子,如果这位用户由于某种原因断线或关机,那幺其他用户就只能下载到90%了,在进行BT下载时是令人最为苦恼的。
想想自己下载时遇到的“种子数为0”的痛苦吧,将心比心,儘可能在下载结束后不要立即关闭BT程式视窗,做一个传递圣火的使者吧。
下载注意
下载者要下载档案内容,需要先得到相应的.torrent档案,然后使用BT客户端软体进行下载。
下载时,BT客户端解析.torrent档案得到Tracker地址,然后连线Tracker伺服器。Tracker伺服器回应下载者的请求,提供下载者其他下载者(包括发布者)的IP。下载者再连线其他下载者,根据.torrent档案,两者分别对方告知自己已经有的块,然后交换对方没有的数据。此时不需要其他伺服器参与,分散了单个线路上的数据流量,减轻了伺服器负担。
下载者每得到一个块,需要算出下载块的Hash验证码与.torrent档案中的对比,如果一样则说明块正确,不一样则需要重新下载这个块。这种规定是为了解决下载内容準确性的问题。
存在问题
一般的HTTP/FTP下载,发布档案仅在某个或某几个伺服器,下载的人太多,伺服器的频宽很易不胜负荷,变得很慢。而BitTorrent协定下载的特点是,下载的人越多,提供的频宽也越多,种子也会越来越多,下载速度就越快。
而有些人下载完成后关掉下载任务,提供较少量数据给其他用户,为儘量避免这种行为,在非官方BitTorrent协定中存在超级种子的算法。这种算法允许档案发布者分几步发布档案,发布者不需要一次提供档案所有内容,而是慢慢开放的下载内容的比例,延长下载时间。此时,速度快的人由于未下载完必须提供给他人数据,速度慢的人有更多机会得到数据。
网路技术
又发展出DHT网路技术,使得无Tracker下载成为可能。
DHT全称为分散式哈希表(Distributed Hash Table),是一种分散式存储方法。在不需要伺服器的情况下,每个客户端负责一个小範围的路由,并负责存储一小部分数据,从而实现整个DHT网路的定址和存储。使用支持该技术的BT下载软体,用户无需连上Tracker就可以下载,因为软体会在DHT网路中寻找下载同一档案的其他用户并与之通讯,开始下载任务。
有些软体(比特精灵)还会自动通过DHT搜寻种子资源,构成种子市场。
,这里使用的DHT算法叫Kademlia(在eMule中也有使用,常把它叫做KAD,具体实现协定有所不同)。
这种技术好处十分明显,就是大大减轻了Tracker的负担(甚至不需要)。用户之间可以更快速建立通讯(特别是与Tracker连线不上的时候)。
相关概念
Tracker收集下载者信息的伺服器,并将此信息提供给其他下载者,使下载者们相互连线起来,传输数据。
种子指一个下载任务中所有档案都被某下载者完整的下载,此时下载者成为一个种子。发布者本身发布的档案就是原始种子。也指.torrent档案。
做种发布者提供下载任务的全部内容的行为;下载者下载完成后继续提供给他人下载的行为。
功能
BitTorrent对于大型文档和自由软体如Linux、FreeBSD的发布帮助很大。对于发布数百MB以至数GB的档案时,如Fedora的光碟镜像格式档,BitTorrent的使用能大大减低伺服器的数据流量从而减低发布的成本。,一般有新版本软体推出时,伺服器必定人山人海,使用BitTorrent也能大大减低繁忙时间伺服器的负担。
浏览器
Opera 9
BT软体
p2psearcher
BT Plus!
BitBuddy
BitTornado
Azureus
比特精灵
比特彗星(BitComet)
BitTorrent
迅雷
Frostwire
uTorrent
脱兔
Flashget
QQ旋风
历史
2002年,Bram Cohen在CodeCon初次露面,发表首个BT软体BitTorrent。它以Python写成,以MIT许可证发布。
合法性
简介
BT下载方式引起社会的广泛讨论。
利用BT免费发布着作权内容肯定损害着作权所有者的合法权益,但传播非收费性内容的好处有目共睹。争论的焦点是,是否应立法全面禁止BT,并且对从事BT下载的人作出惩罚。但到目前为止,中华人民共和国大陆和西欧国家等,如德国,对BT仍没有任何法律上的约束。而在香港,已经有人(绰号为古惑天皇)因为发布电影的种子而被海关拘捕。2005年10月24日,香港司法机关裁定“古惑天皇”的侵权罪成立,需要即时“监禁”三个月。香港工商贸易部门领导曾俊华与“海关关长”汤显明对今次裁决感到欢迎,并表示香港将不容忍任何侵权行为的存在,政府亦会随时与商人合作打击侵权行为。
BitTorrent
(简称BT,俗称BT下载)是一个多点下载的源码公开的P2P软体,使用非常方便,就像一个浏览器外挂程式,很适合新发布的热门下载。其特点简单的说就是下载的人越多,速度越快。 BitTorrent下载工具软体可以说是一个最新概念P2P的下载工具、它採用了多点对多点的原理,一般简称 BT(BitTorrent) 也就是大家所说的变态下载。该软体相当的特殊,一般我们下载档案或软体,大都由 HTTP 站点或FTP 站台下载,若间下载人数多时,基于该伺服器频宽的因素,速度会减慢许多,而该软体却不同,恰巧相反,间下载的人数越多你下载的速度便越快,因为它採用了多点对多点的传输原理。
BitTorrent 强大实用的原因
(原文是Incentives Build Robustness in BitTorrent,不知道怎幺翻译比较好?)
Bram Cohen
2003年5月22日
翻译小马哥
日期2004-6-1
用途
BitTorrent 档案发布系统採用针锋相对(tit_for_tat)的方法来达到帕累托有效,与当前已知的协作技术相比,它具有更高的活力。本文将解释BitTorrent 的用途,以及是怎样用经济学的方法来达到这个目标的。
BitTorrent 用来做什幺
当通过HTTP协定来下载一个档案的时候,所有的上载开销都在主机上。而使用 BitTorrent,当多个人下载同一个档案的时候,他们之间也相互为对方提供档案的部分片断的下载。这样,就把上载的开销分摊到每个下载者那里,也就可以在理论上支持无限多个下载者来下载同一个档案。
研究人员以前也在寻找一种达到这种效果的可实用的技术[3]。这种技术原来并没有在大的範围内运用过,因为逻辑和的问题非常棘手。如果仅仅计算哪些 peers 拥有档案的哪些片断以及这些片断应该被传送给谁,那幺很难只产生比较小的系统开销。Peers之间的连线很少会超过几个小时,通常是几分钟而已。,有一个普遍的问题,就是公平性。
我们将解释BitTorrent 是如何很好的解决这些问题的。
1.1.BitTorrent接口
BitTorrent 的接口可能是最简单的。用户点击希望下载的档案的超级连结,然后会弹出一个标準的“保存到”对话框。此后,出现一个下载进度的视窗,在这个视窗中,除了显示下载速率外,还显示一个上载速率。BT在使用上非常简单,使得BT能广泛的被运用。
1.2.部署
决定採用BitTorrent的原因是因为有一些档案需要发布。而下载者使用 BitTorrent,是因为这是他们获取所需要的档案的唯一途径。下载者经常一完成下载,就停止为别人上载,虽然说,在BT客户端完成下载之后,继续为别人提供一段时间的上载是一种礼貌的行为。标準的实现是让客户端一直保持上载,除非视窗被关闭。
在一个典型的部署中,未完成的下载者
一台主机负责提供原始的档案,下载者通过BT来下载这个档案。下载者在下载的,为其它人提供上载,,离开这个系统。
技术框架
2.1发布内容
为了部署 BT,将一个扩展名为 .torrent 的档案放在一个普通的web伺服器上。.torrent档案包含了要共享的档案的信息,包括档案名称、大小、档案的散列信息和一个指向tracker的url。Tracker负责帮助下载者能够获取其它下载者的信息。Tracker和下载者之间使用一种很简单的基于HTTP的协定进行互动,下载者告诉tracker自己要下载的档案、自己使用的连线埠以及类似的信息,tracker告诉下载者其它下载同样档案的下载者的联繫信息。下载者利用这些信息相互之间建立连线。一个被成为“种子”的下载者,必须被启动,它知道完整的档案信息。对tracker和web伺服器的频宽需求很低,而种子必须至少传送原始档案的一份完整拷贝。
译注
P2P的核心思想就是没有伺服器的概念,任何一个下载者既是client,又是server。
下载者从别人那里取档案的时候,称为下载,而为别人提供档案的时候,称为上载(传)。
为了完成一次部署,至少需要一个tracker和一个seed。所谓tracker,是一个伺服器,负责帮助peers之间相互建立连线。而seed,通常是第一个向tracker注册,然后它就开始进入循环,等待为别人提供档案,也就是说,第一个seed只负责上传档案。一旦有一个peer向tracker注册后,就可以取得seed的信息,从而与seed建立连线。从seed处读取档案。由于原始的档案,只有seed拥有,所有说,seed至少要上传原始档案的一份完整拷贝。如果又有一个peer加入进来,那幺它可以和seed和前一个peer建立连线,然后从这两者处获取档案。
2.2对等发布
所有和档案下载相关的逻辑问题,通过 peers之间的互动来解决。一些关于下载和上传的速率的信息被传送给tracker,tracker蒐集这些信息用于统计。Tracker的职责被严格限定为“帮助peers相互发现对方”。
儘管tracker是peers之间相互发现的唯一途径,也是peers之间相互协作的唯一地点,标準的tracker算法返回一个随机的 peers的列表。随机图具有非常强大的特性,许多的peer选择算法最终产生了一个幂律图,幂律图能以少量的搅拌来获得分片。注意,peers之间的连线都是双向传输的。
为了跟蹤每个peers都拥有什幺,BT将档案切割为固定大小的片(典型的大小是256k)。每个下载者必须通知其它peers,它拥有哪些片。为了验证档案的完整性,对每个片断都通过SHA1算法计算出它的hash信息,并保存在torrent档案中。Peers只有在检查了片断的完整性之后,才会通知其它peers它拥有这个片断。删除代码是一种被建议使用的帮助档案分布的技术,这种更简单的方法(既分片)也是可用的。
Peers不断的从它能连线到的peers那里下载档案片断。,它不能从没有跟它建立连线的peers那里下载任何东西。即使是建立了连线的peers,有的也并不包含它想要的片断,或者还不允许它去下载。关于不允许其它peers从它那里下载档案片断的策略,被称为 阻塞choking,后文将进行讨论。其它关于档案分布的方法通常都要用到麻烦的树结构,而且树叶的上载能力并没有被利用起来。简单的让 peers 宣布它拥有什幺会导致不到 10 % 的频宽开支,却可以可靠的使用所有的上载能力。
2.3流水作业
构架在TCP之上的套用层协定,例如BT,很重要的一点是应该传送多个请求,以避免在两个片断髮送之间的延迟,因为那样会严重影响传输速率。为了达到这种目的,BT将每个片断又进一步分为子片断,每个子片断的大小一般是16k,,它一直保持几个请求(通常是5个)被流水的传送。流水作业所选择的data(应该是指的传送的请求数目,也就是5个request)的依据是能使得大多数连线变得饱和。
译注也就是说,每次传送5个请求,然后过一段时间,又传送5个请求。流水作业在HTTP 协定1.1版本中被广泛运用。
2.4片断选择
选择一个好的顺序来下载片断,对提高性能非常重要。一个差的片断选择算法可能导致所有的片断都处于下载中,或者另一种情况,没有任何片断被上载给其它 peers。
2.4.1严格的优先权
片断选择的第一个策略是一旦请求了某个片断的子片断,那幺该片断剩下的子片断优先被请求。这样,可以儘可能快的获得一个完整的片断
2.4.2最少的优先
对一个下载者来说,在选择下一个被下载的片断时,通常选择的是它的peers们所拥有的最少的那个片断,也就是所谓的“最少优先”。这种技术,确保了每个下载者都拥有它的peers们最希望得到的那些片断,从而一旦有需要,上载就可以开始。这也确保了那些越普通的片断越放在下载,从而减少了这样一种可能性,即某个peer当前正提供上载,而随后却没有任何的被别人感兴趣的片断了。
译注
也就说说,每个peer都优先选择整个系统中最少的那些片断去下载,而那些在系统中相对较多的片断,放在后面下载,这样,整个系统就趋向于一种更优的状态。如果不用这种算法,大家都去下载最多的那些片断,那幺这些片断就会在系统中分布的越来越多,而那些在系统中相对较少的片断仍然很少,,某些 peer 就不再拥有其它 peer 感兴趣的片断了,那幺系统的参与者越来越少,整个系统的性能就下降。
在BT系统中,充分考虑了经济学的概念,处处从整个系统的性能出发,参与者越多,系统越最佳化。
信息理论显示除非种子上传了档案的所有片断,否则没有任何下载者可以完成所有档案的下载。如果在一个部署中,只有一个种子,而且种子的上载能力比它的大多数下载者都要差,那幺,不同的下载者从种子那里下载不同的片断,性能就会变得比较好,因为,重複的下载浪费了种子获取更多信息的机会。“最少优先”使得下载者只从种子处下载新的片断(也就是整个系统中其它peer都没有的片断),因为,下载者能够看到其它peers那里已经有了种子已经上传的片断。
在某些部署中,原始的种子由于某些原因最终关闭,只好由剩下的这些下载者们来负责上传。这样显然会带来一个风险某些片断任何一个下载者都不拥有。“最少优先”也很好的处理了这种情况。通过儘快的複製最少的片断,减少了这种由于当前的peers停止上载后带来的风险。
2.4.3随机的第一个片断
“最少优先”的一个例外是在下载刚开始的时候。此时,下载者没有任何片断可供上传,所以,需要儘快的获取一个完整的片断。而最少的片断,通常只有某一个peer拥有,所以,它可能比多个peers都拥有的那些片断下载的要慢。,第一个片断是随机选择的,直到第一个片断下载完成,才切换到“最少优先”的策略。
2.4.4阶段模式
有时候,从一个速率很慢的peer那里请求一个片断。在下载的中间阶段,这不是什幺问题,却可能潜在的延迟下载的完成。为了防止这种情况,在阶段,peer向它的所有的peers们都传送某片断的子片断的请求,一旦某些子片断到了,那幺就会向其它peer传送cancel 讯息,取消对这些子片断的请求,以避免频宽的浪费。实际上,用这种方法并没有浪费多少频宽,而档案的结束部分也一直下载的非常快。
阻塞算法
BT并不集中分配资源。每个peer自己有责任来儘可能的提高它的下载速率。Peers从它可以连线的peers处下载档案,并根据对方提供的下载速率给予同等的上传回报(你敬我一尺,我敬你一丈)。对于合作者,提供上传服务,对于不合作的,就阻塞对方。所以说,阻塞是一种临时的拒绝上传策略,虽然上传停止了,下载仍然继续。在阻塞停止的时候,连线并不需要重新建立。
阻塞算法并不属于BT对等协定(指peers 之间互动的协定)的技术部分,对提高性能是必要的。一个好的阻塞算法应该利用所有可用的资源,为所有下载者提供一致可靠的下载速率,并适当惩罚那些只下载而不上传的peers。
3.1帕累托有效
帕累托有效是指资源配置已达到这样一种境地,即任何重新改变资源配置的方式,都不可能使一部分人在没有其他人受损的情况下受益。这一资源配置的状态,被称为“帕累托最优”(Pareto optimum)状态,或称为“帕累托有效”(Pareto efficient)
在计算机领域,寻求帕累托有效是一种本地最佳化算法
BitTorrent的阻塞算法,用一种针锋相对的方式来试图达到帕累托最优。(原文不太好翻译,我简化了)。Peers对那些向他提供上传服务的peers给予同样的回报,目的是希望在任何时候都有若干个连线正在进行着双向传输。
3.2 BitTorrent的阻塞算法
从技术层面上说,BT的每个peer一直与固定数量的其它 peers 保持疏通(通常是4个),所以问题就变成了哪些peers应该保持疏通?这种方法使得TCP的拥塞控制性能能够可靠的饱和上传容量。(也就是说,儘量让整个系统的上传能力达到最大)。
严格的根据当前的下载速率来决定哪些peers应该保持疏通。令人惊讶的是,计算当前下载速率是个大难题。当前的实现实质上是一个每隔20秒的轮询。而原来的算法是对一个长时间的网路传输进行总计,但这种方法很差劲,因为由于资源可用或者不可用,频宽会变化的很快。
为了避免因为频繁的阻塞和疏通 peers造成的资源浪费,BT每隔10秒计算一次哪个peer需要被阻塞,然后将这种状态保持到下一个10秒。10秒已经足够使得TCP来调整它的传输性能到最大。
3.3.optimistic unchoking
如果只是简单的为提供最好的下载速率的peers们提供上载,那幺就没有办法来发现那些空闲的连线是否比当前正使用的连线更好。为了解决这个问题,在任何时候,每个peer都拥有一个称为“optimistic unchoking”的连线,这个连线总是保持疏通状态,而不管它的下载速率是怎样。每隔30秒,重新计算一次哪个连线应该是“optimistic unchoking”。30秒足以让上载能力达到最大,下载能力也相应的达到最大。这种和针锋相对类似的思想非常的伟大。“optimistic unchoking”非常和谐的与“囚徒困境”合作。
3.4.反对歧视
某些情况下,一个peer可能被它所有的peers都阻塞了,这种情况下,它将会保持较低的下载速率直到通过“optimistic unchoking”找到更好peers。为了减轻这种问题,如果一段时间过后,从某个peer那里一个片断也没有得到,那幺这个peer认为自己被对方“怠慢”了,于是不再为对方提供上传,除非对方是“optimistic unchoking”。这种情况频繁发生,会导致多于一个的并发的“optimistic unchoking”。
3.5仅仅上传
一旦某个peer完成了下载,它不能再通过下载速率(因为下载速率已经为0了)来决定为哪些 peers 提供上载了。採用的解决办法是,优先选择那些从它这里得到更好的上载速率的peers。这样的理由是可以儘可能的利用上载频宽。
真实体验
BitTorrent不仅仅早已经实现,而且早已经被广泛的使用,它为许多并发的下载者提供成百兆的档案下载。已知的最大的部署中,有超过1000个的下载者。当前的瓶颈(实际还没有达到)看来是trakcer的频宽。它(trakcer的频宽)大概占用了频宽总量的千分之一,一些小的协定扩展可能会使它降到万分之一。