P2P : 漫谈

来源:互联网 发布:河北广电网络集团 编辑:程序博客网 时间:2024/05/22 14:59

也谈P2P

接触p2p也有一段时间了,把自己的理解写出来,一方面希望能对别人有所启发,一方面也算是对自己思绪的一种整理。
1.P2P模型与CS模型
要说黑,往往先说白,我们从CS模型说开去。
常见的FTP HTTP 服务,可以说是CS模型的代表,以FTP为例,客户端要想下载一个文件,必须连接到提供FTP服务的服务器上,然后用FTP协议下载文件,这是传统的客户端-服务器模型;
而说到P2P,我们往往想到BT协议,用BT协议下载文件时是如何的呢?作为客户端,我们先得到一个种子文件,这个文件告诉我们一个TRACKER服务器的地址,然后我们通过TRACKER服务器知道了许许多多其它的也在下载这个文件的客户端,然后我们连接上这些客户端,开始了我们的下载。这里和CS模型有了一个显著的不同,即我们要下载的文件不是在某个服务器上,而是在其它的客户端上,这可能就是P2P名称的由来;
2.p2p模型的理解
p2p模型的实质是CS模型的复用。
与传统的CS模型相比,P2P模型其实是让同一台主机同时担当了客户端和服务器这两个角色,公式大概是:
C-->S
+S-->C
---------
=P<->P

身处在P2P网络中的某个节点,总会在本地监听一个端口,这个端口即是提供服务的端口,自己的服务端口是为其它节点提供下载服务的,所以相当于是服务器;而自己要下载时就用本地的随机端口连接其它节点的服务端口去下载,相当于是客户端。
P2P会有一个问题,就是我们怎么知道提供服务的那些节点的IP和端口呢?在CS模型中,这不是问题,我们事先就知道FTP服务器的地址或是HTTP的域名,而在P2P中我们不得不依靠一个第三方来告诉我们。这个第三方的角色,在任何的P2P网络中都存在,虽然在不同的网络中有不同的名字,我们为了方便,以下把第三方叫做tracker,这是广义上的叫法.这个tracker有些网络中是实体存在,就是单独由一个服务器来做这个事情,比如最早的napster所谓的第一代P2P网络中,存在一个目录索引服务器,BITTORRENT网络中的tracker服务器,emule/edonkey网络中的服务器等等;也有一些网络不断进化,实现了在客户端上集成部分的tracker功能,比如说bittorrent网络中的DHT网络,emule网络中的KAD网络,skype网络中的超级节点等等,我们可以称之为逻辑存在。

3.P2P模型的分类
虽然有些厂商将p2p分为四代五代六代的,但实际上炒作的成分更大一些,说自己的产品怎么怎么好,技术上怎么怎么高,抛开这些不谈。我在这里只说一下我的一家之言,呵呵,当作者的好处。
我觉得P2P网络无所谓几代几类的,如果硬要分,那么就两类:
3.1按照是否存在实体的tracker分
我总认为是否存在实体的tracker是P2P发展的一个里程碑,它的意义就像是从CS模型转到P2P模型一样大。从CS到P2P实现了一个客户端上CS的复用,而DHT KAD网络实现了一个客户端上tracker和peer的复用。
从这个意义上说,P2P网络分成了这么两类,一类比如说BT的依靠tracker组织起来的网络,emule依靠资源服务器组织起来的网络,还有xunlei网络;一类是BT的DHT网络,emule的kad网络;但是实际中的P2P网络往往都是二类的复用,哈,有点类似对立统一的思想,看来philosophy matters.
3.2按照peers之间是一对一还是一对多来分
如果说上面的分法还有些根据,那么下面要说的分法就真的是一家之言了。
既然我要p2p了,那么我是to一个呢,还是to好多个呢?一般来说肯定得是to 好多个了,因为我们直观的感觉就是用bittorrent下载文件,人越多越快,仿佛只有一对多才叫p2p吗!但是我觉得p2p模型可以根据这一点分为两种模型,一对一的,和一对多的。
一对多的大家见得多了,多是文件共享的,bt,emule,gnutella,xunlei等等;一对一的大家听说的肯定不多吧,那是因为常规意义上并不把它们归到p2p模型,这一类比如说skype,qq,msn,IRC(interner relaychat)等常见的即时通信类的软件。不要诧异,听我慢慢解释。skype是宣称第一个把p2p技术融合进IM的软件,倘若软件有灵性,skype应该脸红,而IRC恐怕早就笑死了。IRC是互联网中继聊天协议,其本身是相当明显的一个CS模型,有服务端口6667,客户端连接服务器,服务器作聊天内容的中转分发。但是IRC协议中有一个信令是DCC,好像是direct clientconnect的缩写,它允许客户端之间建立起直接的连接去聊天,这不就是peer-to-peer吗!按照这个思维,msn,qq,skype之类软件都支持直接的客户端之间的连接,如果客户端直接连接失败,就采用服务器中转方式

4.P2P协议的比较 ---BT EMULE XUNLEI SKYPE pplive
以上都在说P2P模型,下面说说P2P协议,着重说一下各自的特点
4.1 bittorrent 和emule
bt协议是我真正读过的协议,别的都是触类旁通的那个“旁”,举一反三中的那个“三”。
bt协议恐怕是国人用的最多的一种P2P协议,从众多的客户端就能看出来,但是我总觉得在许多方面,它是不如emule协议优雅和健壮的,我们从宏观上作一比较,因为协议细节这种东西我也不会:
bt协议是采用种子文件标识一个文件的,emule是采用目录索引的方式,所以emule查询某个文件时要方便;
bt协议没有固定的tracker服务器,这个tracker服务器是由种子文件确定的,不同的下载文件有不同的tracker,emule是有固定的资源搜索服务器供客户端查询,不过这一点上说不上谁好谁坏,固定服务器的方式,用起来方便,实际效果挺好;而仔细想想,在由BT组成的P2p网络中可以进一步细分文许许多多的不同的网络,凡是下载同一个文件的客户端组成一个子网络,每个子网络拥有一个独自的tracker显然更符合P2P的“要分散,不集中”的思想;
bt协议中客户端与tracker通信时没有加密,而emule是可以加密此过程的,它自己叫模糊连接,这一点上emule要好。可能BT考虑到trakcer服务器的性能影响,否决了加密的提案,但是实际上这很重要,因为我就做过这样的工作,捕获所有的和trakcer通信的流量,解码出所有的peers节点,从而测绘BT的P2P网络。bt的tracker比起emule来更具有分散性,应该加密此通讯过程,而且借鉴一下其它软件就知道加密的必要性了,xunlei从一开始就加密的,skype更甚,所有过程都加密;
bt的DHT网络虽然名称与emule的KAD网络不同,但是实际的深层原理的东西都是抄袭的kad网络,怎么实现分布式哈希表,怎么查找节点,这是真正学术的东西,没搞懂,不说了。
bt的客户端之间的传输也可以加密,这一点上比emule的客户端之间的加密要做的好。这个加密似乎不属于官方,而是由国外bt客户端厂商Azureus, now called Vuze提出的,很快成了事实上的标准。我虽没有看过emule的加密规范,但是直观上感觉bt的要好一些;
4.2xunlei
迅雷这个软件真是以迅雷不及掩耳之势占领了国内下载软件的市场,挤占了老牌下载软件flashget之类的地盘,我们从技术上主要是网络模型上分析一下它的过人之处;
p2sp
这也是它刚出道时常常叫嚣的,俺是P2SP,比P2P多个S呢!实际上也确实如此,如果你在新浪网上下载一个文件,那么讯雷会向服务器查询候选资源,从而获得数十个其它网站的此文件下载URL和数十个其它的正在下载此文件的peers的地址和端口;这是xunlei在模型上的最大特点;
特点二,服务器地址固定,peer和服务器之间通讯加密;
以上是模型上的特点,其次在传输技术上,xunlei也很有一套的。他采用udp作为主要的传输协议,实现了速度上的最优化。采用udp模拟出了tcp 的序列号,缓冲区通告,确认机制,还有自己的安全机制。很好很强大!
4.3skype
模型特点一:超级节点。这个想法是p2p领域的一次变革。
让某些客户机具备tracker的功能,同时还为客户端中转数据,是角色合一的一次成功的尝试,这是它的p2p模型最大的特点;
特点二:对流量的掩饰,作的相当好。
一是大量使用加密算法,把所有通讯流量都加密,而是换端口,443 ssl,80http,换协议udp转tcp ,是个顽固的家伙;
特点三:反调试,还尽量隐藏信息,这个不熟,所以不说。
5.值得借鉴的东西
a.模型混合用
在网络模型上一定要多模型复用,既有服务器索引,又有DHT,还要有超级节点,最好是把DHT和超级节点合二为一,作为一种DHT的优化版本,因为他们感觉像一种东西。
b.加密多运用
所有流量都加个密,有人干扰流量就换换端口,改成ssl传输,伪装成http之类;
c.服务器要固定
不能学BT一样,TRACKER不固定,应该学讯雷,整一个自己专门的索引服务器网络;
d.peer与tracker之间要加密
BT有个提案,后来给否决了,实际上应该用的。
e. tracker与peers之间一次通讯
不能像BT一样,隔一段就通告一次;应该学讯雷,一次请求,之后自己去判断节点的有效性,这样就减小了服务器的压力;

6.白日做梦
6.1设想有这样一种软件,它采用P2P的模型,但是监听端口是80或者21等,提供的服务呢就是标准的http服务或者FTP服务,把现在网络中的服务器的角色部分地搬移到客户端上来,比如一些BLOG,SNS社区,邮箱,我的网络硬盘等等涉及到用户的东西都放到客户端来,实现每个人都拥有一个自己为自己量身定做的综合展示区,它融合了各种用户需要的功能,每个人对别人来说是既是客户端也是服务器,极大淡化甚至取消现在的门户网站的作用,实现真正的P2P。
6.2设想有这样一种蠕虫病毒,它不是靠把技术做到极致,使自己成为系统级,内核级病毒而免于查杀,而是依靠采用P2P模型,实现自身的繁衍。就好像是并不一定要做武林高手,而是做一个运筹帷幄的大将,合理的调兵遣将,使兵士组成什么八卦阵,九卦阵的,使自己杀不死。

7.关于对P2P流控
随着P2P软件的盛行,流控产品也大行其市。习惯上,我们把流量分为2类,P2P类,非P2P类。然后保证非P2P类,阻断或限制P2P类。
这里只说一个经验,就是对P2P流量要限制,不要阻断。
如果对P2P流量完全阻断,那么会使他们采用加密流量,伪装成HTTP等正常流量等来逃避封锁,一句话,转入地下!从而变得不可控!
以前看《复活》知道在当时的俄国,妓女职业是合法的,是要经过登记和管理的,现在有许多国家也是这样,对比我们国内的色情行业,法律上不合法,但是能够禁止吗,美容院洗脚屋都开到了小学学校门口,这是如何的一种讽刺!离题了!
类似于哲学上讲,对立统一规律,黑中有白,白中有黑,没有了任何一方,另一方会失去立足的依据。

有些长,想到哪,写到哪,大家凑和看吧
同时欢迎大家交流各种想法

http://www.netexpert.cn/thread-22924-1-1.html