BT 与 Magnet 的下载方式及原理

 

用户通过BT下载文件的基本过程:

一、找到.torrent文件

二、使用BT下载客户端软件打开这个文件

三、对于用户来讲,只要花时间去等就可以了

而对于客户端软件来讲,它会根据.torrent文件中的网址自动连接Tracker服务器,从它那里接收到其他正在下载该文件的人的网址名单。下一步,软件就一一与名单上的网址取得联系,从它们那里获取文件的片段,直到整个下载完成。从整个过程不难看出,BT Tracker服务器是一个中央节点,任何客户端都可以在其上找到“同伴”——只要其他人也在下载或分享同一个文件。

      因此,BT并非一个去中心化的应用,必须依靠中央节点(BT Tracker服务器)才能正常工作。

Magnet 下载文件原理:

      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世界里,就是进行上传与下载。

      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客户端厂商独立运营的,也可以是几家联合共用,总之,它是分散的,只要在客户端软件中内置一张表单,那客户端就将有非常多的入口可供选择。

 

(摘选自 Pconline)

posted @ 2009-12-28 13:01  咋攒都五块  阅读(19355)  评论(1编辑  收藏  举报