关于磁链技术的介绍
DHT是一种分布式存储方法。DHT的作用是找到那些与本机正在下载(上传)相同文件的对端主机(Peer),当然,实现这一过程并不依赖Tracker服务器。在DHT网络中的每个客户端负责一个小范围的路由,并负责存储一小部分数据,从而实现整个DHT网络的寻址和存储。这种信息获取方式保证了整个网络没有单个的中心,即使一个节点下线,依然可以通过其他节点来获取文件,因此也就不需要Tracker服务器来告诉你,其他节点在什么地方。
PEX:是Peer Exchange的简写,我们可以将其理解为“节点信息交换”。虽然DHT解决了去中心化的问题,但要在没有“中心协调员”(Tracker)的情况下实现高效寻址,就要借助PEX。PEX所提供的功能有点类似于以前的Tracker服务器,但工作方式却非常不同。
Magnet links:有网友将其称为磁链。DHT+PEX解决了BT“寻址”的问题,但是如何告诉BT客户端找(寻)什么又是另外一个问题。在.torrent文件中包含的内容就是用户真正要下载的文件的特征信息,或称为“电子指纹”,BT客户端知道了要找什么,也知道如何去找,于是P2P方式的下载、上传就实现了。以前BT客户端通过.torrent文件得知“要找什么”,现在,文件的“电子指纹”不再存放于.torrent中,而被放在了Magnet links中。
你是如何使用BT下载?
传统的BT下载过程是这样的,用户通过网络下载到相应资源的Torrent种子文件,使用BT下载客户端软件打开这个文件。BT下载客户端软件就会根据 Torrent文件中的网址,自动连接BT Tracker服务器,从BT Tracker服务器接收到其他正在下载该文件的用户网址节点列表。然后BT下载客户端软件会与其他网址节点建立连接,从而获取所需文件资源的片段,直到整个下载完成。
从整个下载过程可以看到,在传统的BT下载中,BT Tracker服务器是BT下载必不可少的中心灵魂。两个BT用户之间建立初始连接时,是靠BT Tracker服务器上面的Tracker URL(网络资源路径)进行的。BT Tracker服务器决定了BT下载者能够和别的其他BT源建立联系,并从这些BT源进行下载。BTTracker 服务器就像一个中央节点,它为BT下载的用户彼此间建立连接,如果少了BT Tracker服务器,无法建立下载连接,因此BT下载根本无法启动。
为什么有了DHT协议以后,就不再需要Tracker服务器了,真正实现了去中心化的点对点下载?
每一台加入BT下载的计算机,都被称为一个节点(node),有一个自己的ID。这个ID是一个哈希函数值,通过对要分享的文件内容或它的 元数据进行哈希运算而得到。这就是说,如果两台计算机正在下载同一个文件,那么它们的ID应该是彼此相似的。于是,每一台计算机就通过寻找与自己相似的 ID,来找到自己可以与之交换数据的其他节点。
DHT协议的另一个巧妙之处在于,每一台计算机只保留自己附近的一部分节点信息。因此,为了得到更多的节点信息,就必须采用接龙方式,在一 个个节点之间跳跃,逐步得到全网的节点分布图。这种信息获取方式,就保证了整个网络没有单个的中心,即使一个节点下线了,依然可以通过其他节点来获取文 件,因此也就不需要Tracker服务器来告诉你,其他节点在什么地方了。
我对这个协议有一个细节还不是很清楚,我不知道,当BT下载刚刚启动的时候,如何获得第一个外部节点的位置?需不需要有人告诉你,你首先应该去找谁?如果需要的话,那么这个协议或多或少还是有一个中央服务器的。但是,如果不需要的话,那就真的是纯粹的去中心化的分布式下载协议了。
什么是Magnet URI?
MagNet协议,也就是哈希分布。现在的BT下载服务是需要一个tracker服务器来储存BT种子文件,但是MagNet URI协议是不需要tracker服务器的,原理类似于电驴,但不完全是电驴的翻版。MagNet每次连接的源头都是不固定的,也就没法查封源头。在BT 被封锁以后MagNet将是主流下载方式。
它会根据文件内容的hash生成一个独特的指纹,有点类似于ISBN。这样,任何拥有此文件的人可以生成基于文件内容的指纹。它的另一个优势就是跨平台性,因为它是以普通文本存在,你可以简单的复制粘贴即可完成分享。
Magnet 链接由一组参数组成,它们之间的顺序不是很重要。最普通的是 “xt”,下面是一个示例:
magnet:?xt=urn:sha1:YNCKHTQCWBTRNJIV4WNAE52SJUQCZO5C
其它的参数初步是这样定义的:
“dn” (“显示名称”):显示此文件名
“kt” (“关键词”):指定搜索方式而非特定文件
“mt” (“其它文件列表”):用一个URI指向一个列表,如其它的一些项目
特定程序的参数,必须以“x.”开头
标准还建议2个同种类的参数最好在后面加上数字1、2等,如:
magnet:?xt.1=urn:sha1:YNCKHTQCWBTRNJIV4WNAE52SJUQCZO5C&xt.2=urn:sha1:TXGCZQTH26NL6OUQAJJPFALHG2LTGBC7
在网页中,“磁力链接”的下载按钮,通常具有类似下面这样的图标
“磁力链接”的主要作用是识别【能够通过“点对点技术(即:P2P)”下载的文件】。
这种链接是通过不同文件内容的Hash结果生成一个纯文本的“数字指纹”,来识别文件的。而不是基于文件的位置或者名称
这就类似生活中消费品包装上常见的条码。不同的是这个“数字指纹”可以被任何人从任何文件上生成,这也就注定了“磁力链接”不需要任何“中心机构”的支持(例如:BT Tracker服务器),且识别准确度极高。
因此任何人都可以生成一个Magnet链接并确保通过该链接下载的文件准确无误。
Magnet URI的优点?
显而易见的好处是,整个下载网络的可靠性提高了,每一个节点都是可以被替代的。另一个好处是,审查变得更困难了,因为每次下载的路径都是不一样的,而且每个节点都是动态变化的,导致实际上无法追踪谁在下载。此外,magnet URI只是一个字符串,非常容易传播,根本无法禁止。因此,从这些方面考虑,magnet URI取代Tracker模式是大势所趋,迟早成为主流的BT下载方式。