BitTorrent协议与MagNet协议原理
BitTorrent协议
1、简介
BitTorrent(简称BT)是一个文件分发协议,每个下载者在下载的同时不断向其他下载者上传已下载的数据。而在FTP,HTTP协议中,每个下载者在下载自己所需文件的同时,各个下载者之间没有交互。当非常多的用户同时访问和下载服务器上的文件时,由于FTP服务器处理能力和带宽的限制,下载速度会急剧下降,有的用户可能访问不了服务器。BT协议与FTP协议不同,特点是下载的人越多,下载速度越快,原因在于每个下载者将已下载的数据提供给其他下载者下载,充分利用了用户的上载带宽。通过一定的策略保证上传速度越快,下载速度也越快。在很短时间内,BitTorrent协议成为一种新的变革技术。
2、技术依赖
BitTorrent 的发展依赖于peer-to-peer技术。对等网络 (Peer - to - Peer 简称 P2P) 的研究一直是国外知名学府和知名企业以及研发机构最关注的重点。P2P是近年来互联网最热门的技术,在VoIP、下载、流媒体、协调技术等领域得到飞速发展,被财富杂志评为影响互联网的四大科技之一,甚至被认为是代表无线宽带互联网未来的关键技术。
P2P技术体现了互联网最根本的内涵——自由和免费,它的主要优点如下:
对等性高:非中心化,互联网回归本色——联系和传输;
扩展性强:用户扩展与资源、服务、系统同步扩展;
健壮性高:服务分散和自适应,耐攻击、高容错性;
性价比高:P2P成本低、存储和技术能力强;
负载均衡:分布存储和技术,整个网络负载得以均衡。
在P2P网络中,每个参与的节点既是服务器又是客户端,既是信息的提供者又是信息的消费者。P2P信息检索的目的就是网络中的任意节点都可以提交检索的请求,然后这些检索通过相关信息的节点将会回应请求,按照某种路由机制路由到本地相关的内容,以对等的形式直接传送到请求节点上。
检索过程分为以下几个阶段:每个节点在加入网络的时候,会对存储在本节点上的内容进行索引,以满足本地内容检索的目的。然后按某种预定的规则选择一些节点作为自己的邻居,加入到P2P网络当中。发起者P提出检索请求q,并将q发送给自己的邻居,P的邻居收到q后,再按照某种策略转发给它在网络中的其它邻居节点。这样,q就在整个网络中传播开来。收到请求q的节点如果存储有相应内容信息 , 则将对应的内容返回。
如何在一个大规模分布的环境下定位资源是个十分具有挑战性的问题。集中体现在如何组建P2P网络,如何选择有效的资源请求路由策略以便以较少的消息通信开销,获得较多的相关查询结果返回,同时能够保证较好的服务均衡性。
3、原理简述
普通的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)就是被下载文件的“索引”。
4、下载过程
下载者要下载文件内容,需要先得到相应的.torrent文件,然后使用BT客户端软件进行下载。
下载时,BT客户端首先解析.torrent文件得到Tracker地址,然后连接Tracker服务器。Tracker服务器回应下载者的请求,提供下载者其他下载者(包括发布者)的IP。下载者再连接其他下载者,根据.torrent文件,两者分别对方告知自己已经有的块,然后交换对方没有的数据。此时不需要其他服务器参与,分散了单个线路上的数据流量,因此减轻了服务器负担。
下载者每得到一个块,需要算出下载块的Hash验证码与.torrent文件中的对比,如果一样则说明块正确,不一样则需要重新下载这个块。这种规定是为了解决下载内容准确性的问题。
相关概念Tracker:
收集下载者信息的服务器,并将此信息提供给其他下载者,使下载者们相互连接起来,传输数据。种子:指一个下载任务中所有文件都被某下载者完整的下载,此时下载者成为一个种子。发布者本身发布的文件就是原始种子。也指.torrent文件。做种:发布者提供下载任务的全部内容的行为;下载者下载完成后继续提供给他人下载的行为。
MagNet协议
1、简介
MagNet协议,也就是磁力链接,简称磁链。以前的BT下载服务是需要一个tracker服务器来储存BT种子文件,但是MagNet URI协议是不一定需要tracker服务器的,原理类似于电驴,但不完全是电驴的翻版。MagNet每次连接的源头都是不固定的,也就没法查封源头。在BT被封锁以后MagNet将是主流下载方式。
它会根据文件内容的hash生成一个独特的指纹,有点类似于ISBN。这样,任何拥有此文件的人可以生成基于文件内容的指纹。它的另一个优势就是跨平台性,因为它是以普通文本存在,你可以简单的复制粘贴即可完成分享。
2、技术依赖
Magnet不需要Tracker服务器,也不需要.torrent文件,仅需要一串字符就可以进行文件下载。
DHT技术:2002年,纽约大学的两个教授Petar Maymounkov和David Mazières发表了一篇论文,提出了一种真正去中心化的“点对点”下载模型,他们将其称为Kademlia方法。2005年,BT软件开始引入这种技术,在BT中被称为DHT协议(Distributed Hash Table,分布式哈希表)。
DHT是一种分布式存储方法。DHT的作用是找到那些与本机正在下载(上传)相同文件的对端主机(Peer),当然,实现这一过程并不依赖Tracker服务器。在DHT网络中的每个客户端负责一个小范围的路由,并负责存储一小部分数据,从而实现整个DHT网络的寻址和存储。这种信息获取方式保证了整个网络没有单个的中心,即使一个节点下线,依然可以通过其他节点来获取文件,因此也就不需要Tracker服务器来告诉你,其他节点在什么地方。
PEX:是Peer Exchange的简写,我们可以将其理解为“节点信息交换”。虽然DHT解决了去中心化的问题,但要在没有“中心协调员”(Tracker)的情况下实现高效寻址,就要借助PEX。PEX所提供的功能有点类似于以前的Tracker服务器,但工作方式却非常不同,我们可以打个比方来说明。
小赵在A班,她不认识B班的小何,也不认识C班的小温,但小赵认识同班的小王,而小王认识B班的小何,也可能还认识C班的小温,或者小王仅认识B班的小何,但小何认识C班的小温,而小温又认识同班的所有同学,结果就是小赵可以“无限”地延伸自己的关系网,不管怎样,总有一条沟通途径可以将这些同学联系在一起,待小赵“认识”了小温后,他们就可以直接沟通了,在P2P世界里,就是进行上传与下载。
3、原理简述
Magnet links:磁力链接,简称磁链。DHT+PEX解决了BT“寻址”的问题,但是如何告诉BT客户端找(寻)什么又是另外一个问题。在.torrent文件中包含的内容就是用户真正要下载的文件的特征信息,或称为“电子指纹”,BT客户端知道了要找什么,也知道如何去找,于是P2P方式的下载、上传就实现了。以前BT客户端通过.torrent文件得知“要找什么”,现在,文件的“电子指纹”不再存放于.torrent中,而被放在了Magnet links中。
例如:
magnet:?xt=urn:btih:36684b463ca2aa2f9347b18e9f6b1a9090bdb073&dn=Microsoft+iSCSI+Initiator
分解一下这个地址:
magnet:协议名。
xt:exact topic的缩写,表示资源定位点。BTIH(BitTorrent Info Hash)表示哈希方法名,这里还可以使用SHA1和MD5。这个值是文件的标识符,是不可缺少的。
dn:display name的缩写,表示向用户显示的文件名。这是一个可选项。
tr:tracker的缩写,表示tracker服务器的地址。这是一个可选项,本例中并未出现。
简化仅需要magnet:?xt=urn:btih:36684b463ca2aa2f9347b18e9f6b1a9090bdb073就够用了,如果附加dn(display name),在使用上会更加方便一些。
Magnet Link的好处至少包括两点:网络的可靠性得到了极大的增强;不存在“被拔线”的风险。由于不存在所谓的中央节点,审查将变得更加困难,“单点失效”的问题也就不存在了。此外,Magnet URI只是一个字符串,非常容易传播,根本无法禁止。因此,Magnet URI取代Tracker模式将是大势所趋,迟早会成为主流BT下载方式。
可能看出了DHT+PEX+Magnet Link模式中的一个问题——BT客户端的“第一步是如何迈出的”,套用在介绍PEX时使用的例子,那就是小赵是怎么“加入”A班的呢?这确实是个问题。解决这个问题依然需要一台服务器(bootstrap node),不过这台服务器所起的作用与Tracker不同,它仅负责接纳小赵进入A班,当小赵与A班中的同学“搭上了话”,之后这台服务器就没有什么用处了。bootstrap node可以是不同BT客户端厂商独立运营的,也可以是几家联合共用,总之,它是分散的,只要在客户端软件中内置一张表单,那客户端就将有非常多的入口可供选择。
参考资料:百度百科---MagNet协议 百度百科---BitTorrent协议
参考博客:http://www.cnblogs.com/5kuai/archive/2009/12/28/1633964.html