在P2P技术之前,网络中的所有人大多都是通过一种叫做“客户端/服务器”的模式被组织在一起。一个服务器向很多客户提供服务。举个例子吧: kaka有一台机子,里面存有全套的央视春晚,他想把他的挚爱分享给所有人。于是不论是通过广告还是别的什么方式,很多人知道了kaka有这个资源的消息。通过网络,他们就可以向kaka建立连接并从他的机子上下载。这样就形成了一个以kaka为中心的小型网络。这当中,kaka是服务器,其他人都是客户端。如图一
图一
这样的模式中,对服务器的性能及相应带宽要求比较高,如果有成千上万的人都想下春晚,kaka的海淀在线肯定就操蛋了。当然一般的公司不会用一个家用电脑做服务器。假设有存在一个特别强大的服务器,以及足够的带宽。我们来看看这种模式天生的一些弱点:
1. 服务器扮演的角色太重了,网络的一切都指着他。假如kaka不小心把电脑从6楼扔下去,整个网络就都瘫痪了。请注意,想要把一个服务器弄失灵的方法太多了,所以使用这中模式的风险是比较大的。
2. 网络的资源利用率低下。所有客户都只能从服务器那获得资源,因为他们之间不认识,甚至不知道相互的存在。然而,现实中,可能每个人都有自己独门的资源,比如日天有无数游戏,威哥有无数动漫电影…….总之,整个网络的资源可能是服务器的无数倍。但是苦无客户端之间没有交流的渠道,所以资源无法互通。
3. 关于完美服务器的假设,基本不成立。
P2P技术就是要解决上述的问题已达到如下的效果: 所有人的资源都可以被别人找到并使用。没有哪个人特别重要,人人平等(peer-to-peer就是这个意思),任何一个人失灵都不会导致网络的死亡。
这里已Gnutella为例,对P2P基本原理进行介绍。 Gnutella是一种典型的P2P网络,很具代表性,以其为基础的软件有Limewire。这种网络里,没有服务器。用户之间任意连接,如图二左所示
图二
Kaka认识 ‘日天’‘curt’‘威’, 日天认识‘小胖’,威认识‘候泡’,Curt 认识 ‘路’。当然真正的网络有至少有成百上千个用户,这里只是展示一个小的局部。
这个网络如何工作呢?比如kaka想要找一首叫‘走进新时代’的歌。一个基本交易要经过如下几步:
1, kaka给他的邻居们每人发一个请求消息,‘你们丫谁有走进新时代?’
2, 日天,威,curt吐血,‘谁tm听这歌啊,我没有’。于是把kaka的消息转发给他们的邻居:日天发给小胖,威发给候泡,curt发给路总。
3, 当kaka邻居的邻居们收到这个消息后,同样,先看看自己有没有。比如,候泡有这个歌,他就可以给kaka发个消息:‘爷这有,来下吧’
4, 卡卡于是可以直接去候泡那下载。
很多人说在p2p里面,所有人即是服务器又是客户端。应该这样理解,比如,kaka在上例中就是个客户端。 但当有人要想要春晚的时候,只要那人的请求消息能被转到kaka这,kaka就可以成为一个服务器。
最后要说的是P2P的现状以及应用。目前P2P与传统的‘客户端/服务器’模式可以说分庭抗礼,互为补充。那么为什么没能取而代之呢?因为,P2P也有自身的弱点,其中包括,1,占带宽(50%以上的网络带宽都是P2P占用的,搜索方法不灵)2,安全(不具体解释了,太专业了,总之和加密那些东西有关)3, 诚信(没有中央控制,你传个毛片也可以告诉你是新闻联播)4,自私(我什么都不付出,有也说没有)5,知识产权保护(在中国相当于盗版的集散地)等等。 至于这些问题的对策以及其不足,以后会做专题介绍。
P2P的应用不少但大都停留在比较低端的服务,比如文件共享,msn,在线视频这一类。实际上作为一种新的模式,其生命力应该不止如此。
下期预告: 非结构P2P及其搜索方法
(由于没有中央的服务器的控制。定位资源就成了P2P的一个核心技术。上例中用的是‘flooding’说白了就是地毯式的。还有很多更高效的)