在不开会员的情况下,百度云盘那小水管般的下载速度早已被人吐槽了无数遍。但考虑到公司服务器运维成本的需要,百度这样做也无可厚非。
最近使用的时候发现系统设置里面多了一个“下载提速
”的功能,使用了一下发现提速效果还挺明显的,热门资源基本上可以把我的带宽跑满。难道是百度良心发现了,突然想着加入了这么一个功能?实则不然,与会员的服务器提速不同,该提速功能是P2P技术的下载模式,从某种层面上来说对百度和用户来说算得上是一种互利共赢。
部署
要完成一个BT下载的过程,至少需要一个由发布者建立的静态种子文件(.torrent),一个跟踪(tracker)服务器和终端下载者。这里,终端下载者指的就是用户的PC,也就是BT的下载客户端。
工作原理
下载者要下载文件,需要先得到相应的种子文件,然后使用BT 客户端软件(迅雷、比特彗星等)进行下载。
下载时,BT客户端首先解析种子文件得到 Tracker 地址,然后连接Tracker 服务器。Tracker 服务器回应下载者的请求,提供其他下载者(包括发布者)的IP。下载者再连接其他下载者,根据种子文件,两者分别告知对方自己已经有的片段,然后交换对方所没有的数据。此时不需要其他服务器参与,分散了单个线路上的数据流量,因此减轻了服务器负担。
下载者每得到一个片段(片段通常是非顺序下载的),需要算出下载片段的哈希值与种子文件中的对比,如果一样则说明片段正确,不一样则需要重新下载这个片段,这种规定是为了解决下载内容准确性的问题。同样,BT 下载也天然支持断点续传功能。
片段选择
通过BT下载的流程可知,在下载过程中将文件分片是个必须的过程,BT将文件切割为固定大小的片段(典型的大小是256K)。下载者只有在检查了片段的完整性之后,才会通知其他下载者拥有这个片段。在BT下载过程中,选择一个好的顺序来下载片段,对提高性能非常重要。
一个差的片段选择算法可能导致所有的片段都处于下载中,或者另一种情况,没有任何片段被上传给其他下载者。
- 随机选择第一个片段
- 严格的优先级,最少优先
- 最后阶段模式
拥塞机制
节点间建立连接后,进行内容分发的过程中,一个节点可能会同时收到来自它多个节点的要求下载文件分片的请求。如果本节点同时满足所有这些请求,向所有这些节点发送文件,就可能会造成本节点性能下降以及网络拥塞。为了避免这种情况,对部分节点请求进行阻塞。
阻塞算法
- TFT阻塞算法:节点以回报的方式,选择当前向自己上传文件速度最快的一定数量的结点作为自己的服务对象。
- 乐观阻塞算法:从所有向自已发出申请节点里面随机选择一个为其提供上传服务,不管对方当前是否为自己服务
- 种子阻塞算法:由于种子节点不再需要下载,决定因素是只为下载速度最快的那些节点服务,以便最大化上传带宽,加快文件的分发。
优缺点
优点:
- 不需要服务器来存放共享文件,节省了服务器架设、海量硬盘、网络带宽
- 每个用户端节点都同时是文件下载者和提供者
- 加入的人越多,下载速度越快,资源越丰富
- 共享方便
缺点:
- 对硬盘的损害
- 严重占用带宽
- 助长了病毒的传播
- 可能面临着版权侵害的风险
磁力链接——BT下载的升级版
Tracker服务器对于BT下载来说至关重要,没有了 Tracker 服务器BT下载就没法正常工作了。但是由于BT下载导致了盗版的泛滥,Tracker 服务器成为了版权组织打击的重点。为了保证在没有 Tracker 服务器的情况下仍然能够正常下载,磁力链接(Magnet URI scheme)这一新的技术就此诞生了。
磁力链接原理
不同于之前的 BT 对每个文件块做哈希值,磁力链接是对整个文件做哈希,来唯一标识这个文件。磁力链接并不是取代种子文件,而是在没有 Tracker 服务器的情况下,可以用一小段链接方便的在 DHT 中找到种子文件。
DHT 全称为分布式哈希表(Distributed Hash Table),是一种分布式存储方法。在不需要服务器的情况下,每个客户端负责一个小范围的路由,并负责存储一小部分数据,从而实现整个 DHT 网络的寻址和存储。使用支持该技术的 BT 下载软件,用户无需连上 Tracker 就可以下载,因为软件会在 DHT 网络中寻找下载同一文件的其他用户并与之通讯,开始下载任务。
有些软件(如比特精灵)还会自动通过 DHT 搜索种子资源,构成种子市场,即搭建曾经形式的 BT 服务器。
特点
- 磁力链接是基于文件内容的,属于统一资源名称,理论上每个文件都对应不同的 URI ,且不会重复。
- 任何人都可以通过一个磁力链接来确保该链接指向的资源就是他想要的,而和得到该资源的方式无关,所以整个下载网络的可靠性提高了,因为每一个节点都是可以被替代的。
- Magnet URI 只是一个字符串,天然具有跨平台性,天然容易传播。
磁力链接样例
1 | magnet:?xt=urn:btih:A88AB0EA9040286098D8FF185A4A7587E8B4BC93 |
电驴——BT的竞争对手
Donkey2000(又称 eDonkey,可缩写为 eD2k,中文一般称电驴,因为 Donkey 在英文中就是驴子的意思)是电驴最早的前身,它是由 MetaMachine 公司开发的一个可跨平台运行于 Windows、Mac OS、Linux 等操作系统的闭源免费的 P2P 文件共享软件。正如它的名字,他是在 2000 年发布的。
eDonkey 是由三个部分组成:
- eDonkey 网络:基于 P2P 的文件共享网络,目前使用最广的文件共享网络之一,后升级为KAD网络
- eDonkey 软件:即 eDonkey 网络客户端,所有可连接 eDonkey 网络的客户端软件的统称。包括 eDonkey2000、eMule、aMule 等
- eD2k 链接:用于指示 eDonkey 网络上文件的链接。是对文件内容提取出的哈希值。
1 | ed2k://|file|%E6%B2%B3%E7%95%94.720p.BD%E4%B8%AD%E5%AD%97[%E6%9C%80%E6%96%B0%E7%94%B5%E5%BD%B1www.66ys.tv].mp4|1284891202|5052C583C3EC5A5BC626F45847CB0340|h=5QE3DFPQBGH5JXPBSZ4P5IHVAUS3HWPY|/ |
然而2005年9月28日,在遭到美国唱片业协会的侵权控告并败诉后,MetaMachine 公司关闭了 eDonkey2000 官方网站,之后又停止了 eDonkey2000 软件的开发。但是 eDonkey2000 软件的主要 P2P 网络,同时也是 MetaMachine 公司为 eDonkey2000 原创研究出的 eDonkey 网络和 eD2k 链接,至今仍被广泛使用。
电骡——电驴的后继者
虽然 eDonkey2000 倒下了,但是后起之秀其实在它刚诞生1年就已经出现了,那就是 eMule,因为 eMule 在中文是骡子的意思,所以中文正式翻译是电骡。它是一款开源软件,它可以看作是是商业软件 eDonkey 的同人作品。
eMule除了支持eDonkey网络,还支持KAD网络。eDonkey 电驴所使用的 eDonkey 网络,虽然也是基于 P2P 共享,但是仍然离不开中央服务器。一群人使用 eDonkey 电驴进行文件共享,必须要有中央服务器来作为通讯中心,为用户提供查找文件等服务。而 KAD 则是更彻底的 P2P,只需要用户作为节点,用户之间能够直接连接,完全脱离了中央服务器。这种方式其实也因此经受住了版权商的压力而巍然不动,因为用户之间共享盗版可以推脱给用户的自发行为。
easyMule —— VeryCD 电驴
由于eMule 是开源的,上海维西(VeryCD)公司2007年起开始将 eMule 的代码拿来开发,改名叫 easyMule。easyMule 第一版为 eMule Mod,修改自官方 eMule,因而遵循 GNU GPL v2 协议,开放源代码;第二版声称完全自主开发而闭源,但其是否真正完全自主开发尚存在争议。而取名为电驴也实属曾eDonkey的热度,因为 VeryCD 电驴在国内较为盛行,所以直接在百度搜索电驴
的话出现在前排的反而是 VeryCD 电驴官网。
在起初,VeryCD 电驴还保留着 eMule 的大量功能,但到了后来,VeryCD 电驴将最精髓的 KAD 资源搜索等功能重重阉割,VeryCD 官网通过把 eD2k 资源进行了整合,建立起了 eD2k 分享平台,一度成为了中国大陆浏览量最大的资源分享网站之一。
实际上,国内抄袭 eMule 的并不止 VeryCD 电驴一家,比如一些所谓的“种子搜索神器”,而且为了省事还在功能上做劣化和阉割,并在界面当中加入了广告。
从 2009 年开始,中国加强了网络版权把控,VeryCD 被迫转型,撤下了几乎所有的 eD2k 共享链接。但只要有人在用 eMule 共享文件,eDonkey 和 KAD 网络就仍会在运行。
BT、磁力链接与电驴、电骡的比较
名称 | 对文件内容做哈希提取 | 早期有中央服务器阶段 | 后期脱离中央服务器阶段 |
---|---|---|---|
电驴 | eD2k链接 | eDonkey网络 | KAD网络 |
BT | 磁力链接 | Tracker网络 | DHT网络 |
近几年磁力链接在国内依然大行其道,但电驴却开始没落,被使用的越来越少了,主要有以下原因:
- 电驴 / 电骡 软件使用复杂。
eD2k 对应的客户端如 eMule 电骡是共享软件,而 Magnet 磁链对应的BT软件则是下载软件。这让它们在使用上,有着很多根本性的区别。
比如,开启 eMule 后,第一件事做的并不是什么下载,而是设置共享目录,该目录中的所有文件,都会实时共享到 eDonkey 和 KAD 网络中。目录中共享了的文件都会生成 eD2k 链接,所有人通过相应的 eD2k 链接,都能够拿到你共享的文件,一旦有人下载相应文件,那么你的 eMule 客户端就会上传数据。我们平时使用 eD2k 链接下载,资源也是来自他人 eMule 所共享的文件的。当然,共享目录中也可以啥都不放,但很多 eMule 客户端都拥有队列优先级机制,上传得少,下载速度也会被限制。 - eMule一旦开启,默认会不断上传共享了的文件,这种大流量的上传任务,并不适合中国上传带宽较窄的互联网。一些运营商为了减少上传的压力,甚至直接封杀了KAD协议,让eMule无用武之地。
- eMule封杀迅雷旋风等吸血客户端。迅雷等客户端有吸血机制,从eMule拿数据,但并不回传数据给eD2k网络,这让很多eMule客户端都使用IPFilter封杀了迅雷。不少人发现迅雷下eD2k下不动,渐渐也就不用eD2k的链接了。
- HighID越来越难以获取。在eMule中,HighID会获得比较快的速度,但这需要公网IP。现在运营商普遍给用户提供内网IP,这限制了eMule的传输效率。
- 一个eD2k链接只能下载一个文件。与之相比,BT一个任务可以下载多个文件。下载资源合辑的时候,一个磁链总比一行行eD2k链接方便。
其实eD2k 协议要比Magnet磁链更加先进,eD2k 网络不仅可以共享文件,还支持资源搜索、通讯等功能,可谓是个能脱离 HTTP 存在的理想 P2P 网络。但国人很少意识到eD2k共享这一点,看到eD2k链接,很多人的第一反应就是用迅雷等工具去下载,这在无形中也破坏了eD2k网络的共享生态。种种原因下,eD2k尽管还有人用,但流行度就远不能和Magnet磁链相比了。
其他
迅雷链接、快车链接、旋风链接都不是协议,只是单纯对字符串做一些编码操作,好让别的下载软件识别不了,而自家的软件因为知道解码规则所以可以。本质上还是使用的传统C/S架构、BT、磁力链接等下载技术。
P2P下载技术对硬盘的损伤
起初 BT 和 eMule 下载对硬盘都有损伤的。后来这个问题慢慢不被人提起了,因为伤害已经降低了很多可以忽略不计了,具体原因是:
1、SSD(固态硬盘) 逐渐取代了传统机械硬盘
BT 和 eMule 等 P2P 下载对硬盘有损的原因是通常会在下载同时上传数据,造成硬盘不间断读写。
而机械硬盘由于需要高速旋转,会出现过热情况,对硬盘寿命造成影响。但由于 SSD 不需要旋转,所以事实上 BT 下载对于 SSD 的影响主要就是集中在读写寿命上了。
网上有人做过测试,对于一般用户来说,日常的 BT 等 P2P 下载对 SSD 的读写寿命影响微乎其微。实际上,操作系统比 BT 软件对磁盘的操作更多,更毁硬盘。
2、缓存机制的应用
现代的 BT 软件一般都会尽量开辟更大的内存缓存,而避免频繁读写硬盘。其中迅雷是所有下载软件中“最”不伤硬盘的下载软件。
3、下载软件也会自带上传的限制
结语
除了上述几种下载技术以外,越来越多像百度云盘、人人影视PC客户端这样的软件开始使用P2P传输技术,甚至一些厂家在硬件层面将其做入机顶盒、家用硬盘服务器以实现闲置网络挣钱,其本质都是使用的P2P技术或者一些分布式计算技术提升自家产品的服务体验。P2P技术的大量使用也会导致网络环境的拥塞和恶化,其中最为感到头疼的就是宽带运营商,相应的P2P侦测与拦截技术也随之应运而生。P2P技术的存在可以说是一把双刃剑,在给我们生活提供方便的同时也在一定程度上恶化网络环境、传播盗版和病毒,如何使用才能更好的使用P2P技术还需要大家更多的研究和努力。
参考资料