如果你想要下载一个不存在的敏感资源,你会怎么做?
最简单地方法当然是找一个有资源的哥们,让他把这些资源分享给你。早期的互联网就是这么共享文件的。
但是这样存在很多问题?
1、 比如下载的人一多,每个人的带宽就变小了,下载速度会变慢。
2、 更危险的是这些资源是敏感资源,你的哥们本来就不应该分享给你,如果你的哥们被抓了,那么大家也别下载。
由此就诞生了一个BitTorrent协议。
资源不再由一个人或者一个中心服务器提供,而是由所有人提供给所有人。下载的人越多,速度越快。这种模式叫Peer To Peer(用户群对用户群)。也就是P2P下载。
把文件分成很多个小块,让下载者互相连接。
比如:以120M视频为例,假设被分成895个128KB的文件块后,下载了第306块的用户A就可以和下载了第11块的用户B,交换彼此下载好的部分。参与的人越多,互相交换的就越密集,下载就越快。
为了做到这点,BitTorrent协议需要资源共享者生成一个包含下载信息的种子文件,后缀是.torrent,这就是我们常说的BT种子。
种子文件包含文件的名字、大小、分块后分块文件的大小、哈希值以及Tracker服务器的地址。
Tracker很重,通过Traker我们才可以找到其他下载者的联系方式。
当你用下载软件打开种子,就会开始联系种子文件里内置的Traker服务器,告诉Traker我要下载这个文件。服务器会记录下你的IP,并把其他正在下载或者下载完成的人的IP返回给你,这样你们就可以愉快地组队下载。当然如果没有找到正在下载的人,资源发布者也不在线,你就只能以0kb/s的速度等着。
不难发现Tracke服务器是P2P网络的弱点,如果Tracker关闭或者封禁,你就无法找到同伴,也难以完成下载。
为了摆脱Tracker服务器的依赖,今天最流行的下载方式是磁力链接(Magnet URI scheme)。通常是这样一串神秘代码:
链接结构:
magnet:协议名
xt:exact topic 的缩写,表示资源定位点。BTIH(BitTorrent Info Hash)表示哈希方法名,这里还可以使用 SHA1 和 MD5。这个值是文件的标识符,是不可缺少的。
最重要的是这40位16进制字符码,它是磁力链接的唯一标识符。
任何文件丢进哈希算法都能得到这样一串字符,40位,16进制,只标识这个文件。简单理解就是文件ID,它能帮我们找到我们下载的东西。
是把所有人变成小型Tracker,每个人都拿着一份动态更新的地址和文件信息, 我要找我连接的10个人,他们再找与他们连接的10个人,一传十,十传百…我找到小明,小明找到小红,小红找到了资源发布者,我与资源发布者就连上线了。
但是这种所有人找所有的方案是不太行的,不仅占用了大量的资源,效率也非常低,还有可能重复传播,造成广播灾难。这时就需要补充一个关键信息,距离。这里的距离不是空间上的距离,而是逻辑上的距离。这种距离跟DHT网络结构有关。
从上述结果中看出,你就可以拆分出4棵子树
在拆分好的子树中,每个子树中选2个点,就得到了4个K桶。
这种网络结构就叫DHT,分布式哈希表。一个高宽容度的去中心化网络。
只需要一串文件ID和存储到本地的K桶数据,你就可以高效地找到要下载的文件,而资源的发布者和传播者也只需要分箱40个字符串就好,足够简单、方便、隐私。
在真实的DHT网络,每个K桶至少记录了8个节点,任何一个节点的下线,都不会影响整个网络的运行。作为文件和节点ID,2160也足够大,达到全地球70亿人,每秒下载10000个种子,也足够下载百万亿年直到宇宙终结。
本网信息来自于互联网,目的在于传递更多信息,并不代表本网赞同其观点。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,并请自行核实相关内容。本站不承担此类作品侵权行为的直接责任及连带责任。如若本网有任何内容侵犯您的权益,请及时联系我们,本站将会在24小时内处理完毕,E-mail:xinmeigg88@163.com
本文链接:http://www.ksxb.net/tnews/1617.html