迅雷,msn,skype,pplive, ppstream, BT……
铺天盖地的 P2P 应用已然一定程度上改变了我们上网的习惯,方式以及质量。如果你想了解 P2P 技术,又懒得找,懒得看那些繁琐,模棱两可又及其抽象的中文资料,这里应该是一个你想来的地方。 我的目的是用比较俗的语言来对 P2P 技术做一个系统的介绍。这里,我会尽量避开不必要的术语,只告诉并解释你需要知道的。当然我不是什么专家,不过请你相信我回尽量保证我所提供信息的准确性和严谨性。我们没有任何商业目的,您的每一次点击都将对我国的慈善事业做出一份贡献。在此谨代表站长 kakarott 先生向诸位表示感谢。
在 P2P 技术之前,网络中的所有人大多都是通过一种叫做“客户端 / 服务器”的模式被组织在一起。一个服务器向很多客户提供服务。
举个例子吧: kaka 有一台机子,里面存有全套的央视春晚,他想把他的挚爱分享给所有人。于是不论是通过广告还是别的什么方式,很多人知道了 kaka 有这个资源的消息。通过网络,他们就可以向 kaka 建立连接并从他的机子上下载。这样就形成了一个以 kaka 为中心的小型网络。这当中,kaka 是服务器,其他人都是客户端。如图一:
这样的模式中,对服务器的性能及相应带宽要求比较高,如果有成千上万的人都想下春晚,kaka 的海淀在线肯定就操蛋了。当然一般的公司不会用一个家用电脑做服务器。假设有存在一个特别强大的服务器,以及足够的带宽。我们来看看这种模式天生的一些弱点:
P2P 技术就是要解决上述的问题已达到如下的效果: 所有人的资源都可以被别人找到并使用。没有哪个人特别重要,人人平等(peer-to-peer 就是这个意思),任何一个人失灵都不会导致网络的死亡。
这里以 Gnutella 为例,对 P2P 基本原理进行介绍。 Gnutella 是一种典型的 P2P 网络,很具代表性,以其为基础的软件有 Limewire。这种网络里,没有服务器。用户之间任意连接,如图二左所示:
Kaka 认识 ‘日天’‘curt’‘威’, 日天认识‘小胖’,威认识‘候泡’,Curt 认识 ‘路’。当然真正的网络有至少有成百上千个用户,这里只是展示一个小的局部。
这个网络如何工作呢?比如 kaka 想要找一首叫‘走进新时代’的歌。一个基本交易要经过如下几步:
很多人说在 p2p 里面,所有人即是服务器又是客户端。应该这样理解,比如,kaka 在上例中就是个客户端。 但当有人要想要春晚的时候,只要那人的请求消息能被转到 kaka 这,kaka 就可以成为一个服务器。
最后要说的是 P2P 的现状以及应用。目前 P2P 与传统的‘客户端 / 服务器’模式可以说分庭抗礼,互为补充。那么为什么没能取而代之呢?因为,P2P 也有自身的弱点,其中包括:
P2P 的应用不少但大都停留在比较低端的服务,比如文件共享,msn,在线视频这一类。实际上作为一种新的模式,其生命力应该不止如此。
上集回顾,传统的‘客户端 / 服务器’模式有一些问题,比如,单一故障点,低资源利用率,高带宽要求。我说 P2P 客服了这些问题,因为没有中央服务器了。这里,我要强调一下,并不是说只要有中央的东西就是失败,只要这个中央的东西不是那个实际掌握资源的人就可以接受。下面,简要介绍一下 P2P 技术的发展。
这一代的 p2p 只是把资源从服务器上拿掉了。中央服务器上只有一个目录。这个目录记录着哪个用户有哪些资源。要建立这样的一个目录,要求网络中的每个人都要告诉这个服务器:他有什么资源。
这样做,解决了高带宽需求(服务器只需要转发一些消息,而不用真格的提供资源),低资源利用率的问题(网络里谁都可以发挥作用了)。但是,他仍然面临严重的‘单一故障点’风险。同时,napster 的出现严重挑战了知识产权法,并最终导致其在 2001 年被勒令关闭。
Napster 帝国的坍塌,导致了江湖上群雄并起,老的规矩也就法不责众了,其中 Gnutella 等非结构的 P2P 脱颖而出。非结构化说白了就是,用户之间瞎连,没有规定谁必须和谁有连接,基本随机。其基本搜索方法是地毯式的,如果这样的搜索能够遍及整个网络。那么,只要资源存在就一定能一网打尽。
但是上天要求每一个用户都要给自己资源请求加一个限制,于是每个资源请求都只能走几步就必须停了,即使什么都还没找到。因为地毯式的搜索要消耗大量的网络资源,比如,平均一个人有 4 个邻居,如果资源请求的限制为 5. 那么一共需要 4+42+43+44+45=1364个信息,每个信息多大呢?大概几 k 到几十 k,也就是说一个信息就至少几m。一个人一个信息就这么大了,想想一个大网络,每人十几个邻居,限制提高到 7 或 8. 这就是为什么中国很多地方,尤其是网吧限制 p2p. 因为他们可怜的带宽都被 p2p 的请求信息占用了。
当然,p2p 的设计者们都看到了问题,于是提出了很多新的搜索方法。这些方法可以分成两种:根据以前的搜索信息对以后的搜索进行预测;瞎找,碰运气。
这种非结构的 p2p 的优点在于,操作简单,完全不需要中央控制,所以又称为‘存(纯)p2p’。其缺点同样明显,要么牺牲搜索成功率,要么牺牲带宽占有量。
于是又有人提出了结构化的P2P。数学的东西我就不说了,基本的思想就是:
举个例子:
有三个人,日天,kaka,威哥。三个资源:“一剪梅.mp3”,“八荣八耻歌歌词.txt”,“xxx.avi”,对这六个东西加密后分别得到: 100,200,3000, 3002, 233,98,‘xxx.avi’的下载地址就会被分配到‘日天’的机子上,于是当你想搜索 “xxx.avi”,你的消息就会通过某种方法被传到到日天那。
这样,结构化的 P2P 就可以保证,只要网络里有相应的资源,就一定能找到。但是由于其程序实现的难度,加之维护网络所需的投入太大,并不被经常使用。尽管他有很漂亮的数据。
当然还有第三代的,以后再做专题。
2002年左右,程小胖告诉我有一种软件可以下片,人越多越快。很神奇。请注意,并不是所有的 P2P 技术都能做到这点,其他的 P2P 基本上只是提高网络资源的利用率,但是,网络中的每一单买卖都仍然采用,1 对 1 的客户端服务器模式。回顾一下之前讲过的 P2P,去掉技术细节,做一单买卖可以这样描述:
这样做的一个缺点就是,比如,我选择了一个比较矬的提供者,而那人的带宽只有 30k,然而网络中还有很多潜在提供者,可能有的人能达到 30m。但是由于我在选择时只无法对对方的带宽做出判断而无福消受。
这样做还有一个致命的漏洞!比如,我收到一个关于 “海贼王” 的请求,而且我有全套。按理说我应该通知请求者,让他来我这下。但是,让他来我这里下东西,对我来说,除了占我带宽,增加我中毒的风险,没有任何的好处。那我凭什么主动邀请他来??我何不装 ytd,对该请求视而不见?非常不幸的是,跟我有相同想法的孙子在一般 p2p 网络里面占了大多数,甚至绝大多数。这就是搭便车问题(free riding)。所幸还是有一些大侠的,无偿的提供着大量资源,他们的存在使得那些一般的 P2P 得以侥幸存活。
其实,如果仅仅依赖活雷锋们,P2P 就失去了其人人平等的意义。大侠们回复了网络中绝大多数的请求,于是人人都愿意与这些人建立连接,因为这样能更快的找到资源。于是这些大侠们就成了变得越来越红,网络的拓扑结构(我装 b 了,这个词没法解释,但是我实在找不出别的词了,别在意,看下图。)将会发生变化。
这样的变化很不好,因为 P2P 又逐渐变成了客户端 / 服务器模式了。
于是,不论是学术界还是产业界都意识到,如果没有一种鼓励机制来刺激提供者,P2P 将失去其天生的魅力。在众多解决方案中 BT 脱颖而出,迅速发展了起来。BT 是简称,在国外可能会产生歧义,如 British Telecommunications 等等。所以大家尽量还是用全称,尤其是和外国人说的时候 Bit-Torrent。有人说 BT 是第三代的 P2P,我认为这是因为他把 P2P 的理念更加深入的实现了。
在 BitTorrent 当中,所有的资源都被切成很小的等份(碎片)。这里,你不需要知道怎么切,只需要知道有一种技术可以把一个文件切成很多小等份,还能把这些等份再重新的组装。在这个技术的支持下,bittorrent 中所有有相同请求的用户可以相互传资源的碎片。而且谁传的多,谁就将获得更多。具体技术如下:
1,tracker的地址。2,相关资源的一些属性,比如大小,名字等等
。这个 torrent 文件一般都可以发布在网上,比如某某人的博客,或者论坛上。举个例子,比如 kaka 下载‘春晚’,先从某春晚发烧友论坛下载了一个叫“春晚全集.torrent”
的文件。kaka 可以联系文件中的 tracker,并得知‘程胖,日天,威,候泡,鸣’有想关资源。于是 kaka 分别与这五个人建立连接。通过检测链接的流量,kaka 可知,比如从程胖那下载速度可达 200k/s, 日天 100k/s, 威 150k/s, 候泡 70k/s, 鸣 2k/s。于是 kaka 在上传的时候就不给鸣上传,而只给前 4 名传。由于鸣的上传只有 2k/s,所以不太可能有人给他传,所以时间一长他可能会意识到,可能自己给的太少了,于是把上传带宽增加到了 500k/s。kaka 突然意识到,从鸣那里可以得到很好的速度,于是停止给候泡(70k/s)传转而给鸣传。(总给那些速度最好的人上传是为了能留住他们,当然,只有你传的足够多才能留得住人家)。
bittorrent 大概的工作原理就是这样了,还有些细节这里不多说了。我个人认为 Bittorrent 的设计还是很不错的,但是其只适用于文件共享,或视频共享。然而网络中的资源又何止电影音乐??绝大多数的资源是不可分的,bittorrent 的局限性还是相当大! 另一点可悲的是,大多数宽带用户是 ADSL,也就是说他们的下载上传的带宽上限差别很大,比如,下载最大 2m/s,上传却只有 100k/s。这也限制了 bittorrent 的发挥。