1 P2P技术原理
P2P应用软件主要有:文件分发软件,如BitTorrent、eMule;语音服务软件,如Skype[6];流媒体软件,如PPLive。目前P2P应用并没有统一的网络协议标准,种类多、形式多样,其体系结构和组织形式也在不断发展。

1.1 P2P的体系结构
P2P应用按照它的体系结构,可以分成3代,如图1所示。

第1代P2P应用的是集中控制;第2代P2P是一种完全的无中心的分布式网络;第3代P2P是一种混合式的体系结构,同时具备前两代体系结构高效性和容错性的优点。

1.2 P2P网络的组织结构
P2P网络的组织结构是P2P体系结构的具体实现。P2P网络在本质上是无结构,无集中控制的分布式系统,节点通过自组织的Overlay网络(覆盖层网络)来实现文件分发、流媒体以及语音等服务。Overlay网络的组织方式可以分为有结构和无结构两种[7]。有结构的P2P Overly网络是指Overlay的网络拓扑相对固定,内容的存放也相对有序。有结构的P2P Overly网络通常使用分布式哈希表(DHT)来实现,文件存放的位置由文件的唯一标识符决定。无结构的Overlay网络通过一些松散的规则组织在一起,其文件的存放也表现出很大随机性。

1.2.1 有结构的Overlay网络
有结构的Overlay网络也有很多种不同的实现方法,比较著名的有结构的Overlay网络包括Chord[8]、CAN[9]、Pastry[10]、eCAN[11],下面对Chord的工作原理进行简单介绍。
Chord的原理如下:

节点在逻辑上按照标识的大小组成一个环,数据同样有标识并且存放在和自己标识最近的节点上。当在某一个节点上输入查询请求的时候,如果节点的标识小于数据的标识,则向该节点知道的下一个节点请求文件,下一个节点如果拥有该文件则返回结果,否则按前面的方式继续转发给下一个节点。其中每个Chord节点只需要知道关于部分节点和到达它们的路由信息。Chord路由查找过程有两个重要特性:每个节点都只需要知道一部分节点的信息,而且离它越近的节点,它就知道越多的关于它们上面的数据信息;每个节点的路由表只有部分节点的路由信息并且不能确定任意一个关键字的确切位置,只能知道下一跳的节点。图2所示为Chord节点维护的指针表,其中N 4代表第4个节点。

1.2.2 无结构的Overlay网络
典型的无结构的Overlay网络如Freenet[12]、Gnutella[13]、FastTrack[14]、KaZaA[15],下面简单介绍一下Gnutella的工作原理。

Gnutella是一种非集中控制的协议,Gnutella被广泛使用并且有很多新的改进。Gnutella的特别之处在于它的分布式的文件定位和响应方法,图3所示为Gnutella文件的定位方法。由于数据的查询不依赖于任何有结构的拓扑结构,其查询的方式只能把请求广播到所有邻近的节点(Peer),相应节点响应消息,之后下载所需的文件。这种网络的突出优势在于良好的健壮性和可扩展性,明显的缺点在于会带来很大的查询消耗。一个节点想要加入Gnutella的网络,首先连接一些全局的可以连接的节点,一旦建立连接,节点以广播的方式通告给其他的存在。开始每一个消息被赋予一个唯一的随机产生的标识,其他节点记录到该节点的路由信息,用来防止重新广播和后向传播。广播消息通过生存时间(TTL)和经过的跳数来控制消息泛洪的范围。节点之间通过周期性的类似Ping机制的消息维护彼此的连接,每个节点建立的连接都根据本地信息来选择。最新的Gnutella引入了超级节点的概念用来提高路由查找的效率。但是由于网络本身的自组织特性使得这种超级节点的部署优势不能充分的发挥。


2 P2P流量特性
据统计,P2P应用已占运营商业务总量的60%~80%,已经成为网络带宽的最大消费者,对底层网络造成了巨大的影响。

2.1 P2P流量产生的影响
P2P网络的发展首先对于个人用户接入网络的性能提出了更高的要求。由于P2P流量特征具有上下行流量对称的特性,这使得直接面向用户的接入网络需要相应提高所能承载上行流量的能力。对大型的企业用户,其关注目标是网络的可控性以及安全性。P2P相对随机的端口号,使得企业难以对内部的网络实行有效地监测和管理,加大了日常维护的难度。对于ISP,P2P应用的影响不仅增加了网络升级的难度,同时也将降低了网络的总体性能以及P2P本身的服务质量。用户可以选择高带宽接入以正常使用各种P2P应用,企业用户可以通过谨慎的企业内部安全规范的制订来保证网络的正常使用,而ISP成为P2P应用产生流量的最终承担者,设备升级速度加大,维护费用升高。有效识别和管理网络中的P2P流量成为ISP最为关心的问题。

2.2 P2P流量特性
P2P的流量呈现出与传统流量不同的特性,P2P应用所产生的流量具有分布非均衡的特性、上下行流量的对称特性、流量的隐蔽性、数据集中性等。

P2P流量的分布具有明显的非均衡特性,在网络中,大部分节点的数据流量都是从为数很少的一些节点获取。文献[16]对该流量分布的非均衡性做了比较详细的研究。文章认为,P2P中服务提供者的价值不应该只以高的链路带宽来刻画,还应考虑节点的可用时间。在实验结果中,系统只有20%的主机拥有93%以上的实际在线时间。不到20%的P2P节点拥有80%以上的P2P网络在线时间。而正是这些少数的长时间在线主机贡献了网络中的主要流量。文献[17]中的研究结果表明,研究者可通过仅仅监测网络中1%的节点来达到了解整个P2P网络中80%以上流量的目的。

P2P流量还表现出上下行流量的对称性。在文献[16]中对上下行流量的对称特性进行了详细的研究,通过对P2P上下行流量比较得出结论,具有高带宽的用户通常会以更长的时间为其他的节点提供下载服务,上下行对称流量已经成为P2P网络流量区别于其他流量的主要特征。

P2P流量还具备很强的隐蔽的特性,它们通常使用随机端口或用户自定义端口,无法通过简单的端口识别P2P流量,目前常用的方法是通过特征码检测的方式识别P2P流量。P2P应用的特征码处在不断变化之中,加深了P2P流量的这种隐蔽特性。此外,对P2P节点之间传输文件的研究中发现,80%以上的P2P流量都是在不断地重复传播几个用户乐于获取的热点文件,这种热点文件的存在影响了P2P网络中的传输效率,针对P2P网络传输数据的高集中性,研究者提出了一系列包括文件缓存在内的解决方案。P2P数据的集中性,已经成为网络服务提供商控制P2P域间流量以及提高P2P服务质量的基本理论依据。

3 典型P2P应用的机制分析
分析典型的P2P应用机制可以深入了解P2P的原理。本节将对文件分发、流媒体应用、语音服务3个领域中具有代表性的软件机制进行详细的分析。对于这些软件的分析有助于理解P2P技术的原理和把握P2P技术未来发展的趋势。

3.1 BitTorrent
BitTorrent软件用户首先从Web服务器上获得下载文件的种子文件,种子文件中包含下载文件名及数据部分的哈希值,还包含一个或者多个的索引(Tracker)服务器地址。它的工作过程如下:客户端向索引服务器发一个超文本传输协议(HTTP)的GET请求,并把它自己的私有信息和下载文件的哈希值放在GET的参数中;索引服务器根据请求的哈希值查找内部的数据字典,随机地返回正在下载该文件的一组节点,客户端连接这些节点,下载需要的文件片段。因此可以将索引服务器的文件下载过程简单地分成两个部分:与索引服务器通信的HTTP,与其他客户端通信并传输数据的协议,我们称为BitTorrent对等协议。BitTorrent软件的工作原理如图4所示。BitTorrent协议也处在不断变化中,可以通过数据报协议(UDP)和DHT的方法获得可用的传输节点信息,而不是仅仅通过原有的HTTP,这种方法使得BitTorrent应用更加灵活,提高BitTorrent用户的下载体验。

3.2 eMule
eMule软件基于eDonkey协议改进后的协议,同时兼容eDonkey协议。每个eMule客户端都预先设置好了一个服务器列表和一个本地共享文件列表,客户端通过TCP连接到eMule服务器进行登录,得到想要的文件的信息以及可用的客户端的信息。一个客户端可以从多个其他的EMule客户端下载同一个文件,并从不同的客户端取得不同的数据片段。eMule同时扩展了eDonkey的能力,允许客户端之间互相交换关于服务器、其他客户端和文件的信息。eMule服务器不保存任何文件,它只是文件位置信息的中心索引。eMule客户端一启动就会自动使用传输控制协议(TCP)连接到eMule服务器上。服务器给客户端提供一个客户端标识(ID),它仅在客户端服务器连接的生命周期内有效。连接建立后,客户端把其共享的文件列表发送给服务器。服务器将这个列表保存在内部数据库内。eMule客户端也会发送请求下载列表。连接建立以后,eMule服务器给客户端返回一个列表,包括哪些客户端可以提供请求文件的下载。然后,客户端再和它们主动建立连接下载文件。图5所示为eMule的工作原理。


eMule基本原理与BitTorrent类似,客户端通过索引服务器获得文件下载信息。eMule同时允许客户端之间传递服务器信息,BitTorrent只能通过索引服务器或者DHT获得。eMule共享的是整个文件目录,而BitTorrent只共享下载任务,这使得BitTorrent更适合分发热门文件,eMule倾向于一般热门文件的下载。

3.3 迅雷
迅雷是一款新型的基于多资源多线程技术的下载软件,迅雷拥有比目前用户常用的下载软件快7~10倍的下载速度。迅雷的技术主要分成两个部分,一部分是对现有Internet下载资源的搜索和整合,将现有Internet上的下载资源进行校验,将相同校验值的统一资源定位(URL)信息进行聚合。当用户点击某个下载连接时,迅雷服务器按照一定的策略返回该URL信息所在聚合的子集,并将该用户的信息返回给迅雷服务器。另一部分是迅雷客户端通过多资源多线程下载所需要的文件,提高下载速率。迅雷高速稳定下载的根本原因在于同时整合多个稳定服务器的资源实现多资源多线程的数据传输。多资源多线程技术使得迅雷在不降低用户体验的前提下,对服务器资源进行均衡,有效降低了服务器负载。

每个用户在网上下载的文件都会在迅雷的服务器中进行数据记录,如有其他用户再下载同样的文件,迅雷的服务器会在它的数据库中搜索曾经下载过这些文件的用户,服务器再连接这些用户,通过用户已下载文件中的记录进行判断,如用户下载文件中仍存在此文件(文件如改名或改变保存位置则无效),用户将在不知不觉中扮演下载中间服务角色,上传文件。

3.4 PPLive
PPLive软件的工作机制和BitTorrent十分类似,PPLive将视频文件分成大小相等的片段,第三方提供播放的视频源,用户启矾PPLive以后,从PPLive服务器获得频道的列表,用户点击感兴趣的频道,然后从其他节点获得数据文件,使用流媒体实时传输协议(RTP)和实时传输控制协议(RTCP)进行数据的传输和控制。将数据下载到本地主机后,开放本地端口作为视频服务器,PPLive的客户端播放器连接此端口,任何同一个局域网内的用户都可以通过连接这个地址收看到点播的节目。图6所示为PPLive的工作原理示意图。

3.5 Skype
Skype是网络语音沟通工具。它可以提供免费高清晰的语音对话,也可以用来拨打国内国际长途,还具备即时通讯所需的其他功能,比如文件传输、文字聊天等。Skype是在KaZaA的基础上开发的,就像KaZaA一样,Skype本身也是基于覆盖层的P2P网络,在它里面有两种类型的节点:普通节点和超级节点。普通节点是能传输语音和消息的一个功能实体;超级节点则类似于普通节点的网络网关,所有的普通节点必须与超级节点连接,并向Skype的登陆服务器注册它自己来加入Skype网络。Skype的登陆服务器上存有用户名和密码,并且授权特定的用户加入Skype网络,图7所示为Skype的体系结构[18]。


Skype的另一个突出特点就是能够穿越地址转换设备和防火墙。Skype能够在最小传输带宽32 kb/s的网络上提供高质量的语音。Skype是使用P2P语音服务的代表。由于其具有超清晰语音质量、极强的穿透防火墙能力、免费多方通话以及高保密性等优点,成为互联网上使用最多的P2P应用之一。

4 P2P未来发展和展望
P2P技术不断地改变着互联网,用户无疑是P2P技术的最大受益者。在P2P技术的发展道路上,仍然有许多尚待解决的问题。

版权问题一直是P2P发展的一个不确定因素,如何在技术层面支持合法文件的分发是需要解决的重要问题。安全问题也是P2P领域的重要研究课题,如何在P2P网络中实现数据存取安全、路由安全、用户身份认证和身份管理都需要进一步研究。如果能够实现P2P应用之间的统一资源定位,统一路由,使得P2P技术有一个统一开发标准,将能够融合P2P技术,提升整体性能。

如何有效管理P2P应用所带来的巨大流量是网络运营商面对的重大课题,如何通过缓存或者流量工程的方法,减少P2P流量对网络本身的影响,同时利用P2P技术优化网络性能,比如,将P2P覆盖网络路由的优点引入到传统的网络路由中,可以实现更好的负载均衡,并利用P2P技术提供流媒体等新的增值服务。实际上,P2P技术的发展为运营商提供了可以在低成本的条件下提供更好服务的可能途径。