标题：P2P Cache
引言
随着BT、eMule、Skype等P2P应用的流行，P2P技术已经成为互联网的重要组成部分，甚至很多人已经认为P2P技术将成为未来互联网的发展方向。作为一种与服务器/客户端模式完全不同的技术，P2P技术的突出特点就是“去中心化”。在P2P网络中，网络资源和服务散布于整个网络中，每个节点逻辑地位相等，都具备客户端和服务器双重特性，可以同时作为服务使用者和服务提供者。 
P2P应用的流行源于P2P技术所提供的无限服务能力、低廉的成本和良好的服务稳定性。P2P系统的服务能力随着用户数量的增加而增加，在理论上并不存在瓶颈，相反，传统的服务器/客户端系统存在着无法突破的服务器性能瓶颈。在打破了服务器瓶颈后利用P2P技术可以在非常便宜的设备上架设服务，从而带来了成本优势。而且在P2P系统中各个peer端都分担了服务能力，单一peer故障不会造成系统崩溃，解决了传统服务器/客户端系统中服务器故障可能造成服务崩溃的问题。服务能力的优势还为P2P系统提供了新业务模式，例如，在P2P文件共享系统中，内容发布功能被开放给每一个peer端，极大地丰富了系统的内容，从而吸引了大量新用户。对于传统的服务器/客户端系统，开放内容发布能力将给服务器系统带来无法支撑的压力。近几年，P2P应用的用户数和流量都呈现爆炸式增长的趋势，截至2005年年底，中国P2P流媒体业务的用户数已经达到235万，比年初增长176%。 
另一方面，随着P2P技术的快速发展，P2P技术和基础网络运营商之间的利益冲突日益明显，这种矛盾可能阻碍P2P技术的进一步发展。当前，网络使用时间通常是基础网络运营商和用户的结算依据，而支撑这种结算方式的是传统的网络业务访问模型，也就是用户在其访问时段内仅有部分时间活跃，用户占用的带宽随其访问的活跃程度而变化，使用的上下行带宽不对等。但是P2P技术的普及破坏了传统的网络业务访问模型，用户访问开始在其访问时段内永久活跃、带宽占用稳定并且上下行带宽基本相等。为此，基础网络运营商不得不为应付飞速上升的网络带宽需求而大规模地扩容。更要命的是此时的带宽投入已经无法带来合理的收入。当基础网络运营商无法通过改变结算方式解决带宽需求和业务收入的矛盾时，就只好转向用各种方式限制P2P技术在其网络上的应用，从而对P2P技术的继续发展设置了障碍。 
下面介绍一种P2P流量优化技术——P2P缓存系统。通过在网络边缘缓存P2P内容，过滤掉传输重复的P2P内容，可以减轻P2P应用对核心带宽带来的压力。P2P缓存系统需要完成捕捉网络流量、P2P协议分析以及内容缓存等操作，并且还需要为后续P2P访问提供缓存内容的代理服务。 
通过部署P2P缓存系统，基础网络运营商可以利用有限的投入支撑增长的P2P业务需求，从而解决当前P2P技术带来的带宽冲击。另外，P2P缓存系统的使用还可以改善P2P应用的用户体验，从而吸引更多P2P客户，并可能为基础网络运营商带来更多客户。也就是说，P2P缓存系统的部署不仅可能缓和P2P技术和基础网络运营商的矛盾，而且可能引导二者协同发展，创造出双赢局面。
P2P缓存系统
基本原理P2P缓存系统将传统的缓存原理应用到P2P内容上，其基本思想就是在网络边缘缓存P2P内容，用缓存内容服务后续的P2P请求，过滤掉重复的P2P内容。图1描述了P2P缓存系统的工作原理。如图1所示，在使用了P2P缓存系统后，P2P访问的流程如下。 
  图1　P2P缓存系统原理
首先，peer A请求下载内容片断X，下载请求由peer A所归属的Intranet路由转发给P2P缓存设备。由于是初次下载，缓存设备发现请求的内容并没有被缓存过，于是将下载请求转发给互联网上的peer C，peer A最终通过访问peer C获得片断X。注意X在被发送给peer A的同时会通过缓存设备并被缓存。当peer B再次发起下载片断X的请求时，下载请求将同样被引导到缓存设备，此时缓存设备已经缓存了X，于是peer B对X的下载直接由缓存设备提供。 
研究表明，由于在P2P网络中同样存在热点内容，因而在P2P网络中部署缓存设备可能获得高达90%的字节命中率。这意味着P2P缓存系统的使用可以非常有效地缓解P2P流量对网络带宽的占用。同时，由于缓存系统靠近P2P用户，可以使用户访问不必穿过缺乏服务质量保证的核心网络，从而降低用户访问响应时间，保证用户访问质量，提升用户体验并吸引用户，从而为P2P技术的进一步发展提供保障。系统架构和处理流程P2P缓存系统需要完成的主要工作有：P2P协议分析、内容缓存、内容分发和代理。P2P缓存系统通常由流量捕捉、协议处理、缓存检查、内容存储、转发器等单元构成，如图2所示。 
  图2　P2P缓存系统架构
其中，流量捕捉完成对受监测流量的捕捉。最简单的实现方式是将缓存系统串联到需要使用的路径上，不过也可以采用策略路由或其他方式完成流量捕捉。捕捉到的流量报文被发送到协议处理单元完成对协议的分析处理，注意此时的报文不仅仅包括P2P通信的。转发器是系统中的发送单元，接收从其他单元发送来的报文，并根据报文中的信息（如目的地址和端口）将报文发送给其他网络设备。在P2P缓存系统中，协议分析单元仅对捕捉到的P2P传输报文做深度报文分析，对其他报文，协议分析单元将直接转发给转发器。一旦协议分析单元发现某报文是P2P内容请求，该报文所属的应用会话（包括后续访问直到会话结束）的状态就会被监视。一旦能够确认该会话所访问的内容（P2P系统中内容通常由其HashID标识），协议分析单元就会访问缓存检查单元以判断该内容是否已经被缓存，如果该内容已经被缓存，该会话的后续请求就会被直接交给内容缓存模块处理。内容缓存模块根据协议分析单元的请求，从缓存中获得相应的缓存内容或将协议分析单元发送的内容做缓存处理。为实现缓存内容的发送，协议分析单元在通过内容缓存模块获得内容数据后需要按P2P协议要求封装获得的内容，模拟源P2P响应，然后交给转发器发送给应用请求者。如果P2P会话所访问的内容并没有被缓存，后续访问的内容就会被缓存到内容存储单元中。图2中标记了不同流量在P2P缓存系统中的处理流程。关键技术图2的缓存系统结构虽然能够完成基本的缓存处理操作，但实际网络对P2P缓存系统还有更多的要求。要使P2P缓存系统融合到现实网络中，P2P缓存系统还需要在处理效率、可扩展性、版权保护以及系统部署等多方面进行优化。 
处理效率 
首先，网络设备必须满足一定的处理效率要求，对于缓存设备，并发流量处理能力是一个关键性能指标，而流量处理能力的需求直接与系统所服务的终端用户量相关。对于P2P缓存系统，一定数量的重复内容访问和缓存命中率是发挥缓存系统优势的基础，而重复请求的数量依赖于用户群体的规模和用户访问特征。在流行的P2P共享系统中，共享的文件通常较大并且内容繁多，这些特征要求缓存系统能够服务较多的用户和较高的流量，以保证适当的访问命中率。另外，对带宽的需求也会受到网络物理端口的带宽限制。P2P内容的分析和缓存要求设备做7层协议分析和处理，庞大的运算量使得P2P缓存系统不得不采用较好的硬件设备，同时也要求系统充分优化流量处理过程。 
高层协议分析的处理效率通常远低于低层协议，为解决对处理效率的要求，系统设计要尽可能在低层协议分析过程中过滤掉非P2P流量。虽然P2P应用的协议五花八门，没有统一的标准，并且在通信端口上也各不相同，但对P2P协议分析显示，各种P2P应用的报文在传输层协议上存在一定的特征，如KaZaa使用的FastTrack协议在报文中存在“GET.\hash”字段，eDonkev报文中存在“E30C5”字段，BT报文中存在“BitTorrent protocol”字段。因此，利用协议分析，在第四层的分析中过滤掉不具备P2P特征的流量，系统就可以保证尽可能多的处理能力被用于7层的P2P协议分析，从而提供高流量的处理性能。 
扩展性 
对P2P缓存系统的可扩展性要求包含两方面的内容：系统处理能力的可扩展性和可缓存处理的协议数量的可扩展性。系统处理能力的可扩展性是要求系统的处理能力仅仅受系统中硬件处理能力限制，如处理器的运算能力、存储器的存储能力、网络带宽的通信能力。如果需要，系统可以通过购买新的硬件来满足更多处理能力需求。对于系统处理能力的可扩展性，现在有很多相关的解决方案，如群集（clustering）系统[5]。 
可缓存处理的P2P协议的可扩展性是要求缓存新的P2P协议内容应当仅仅需要在现有系统上安装相关的分析模块，而不需要对现有缓存系统的软件或硬件结构做整体修改，甚至是将现有系统替换掉。就当前P2P应用的发展状况来看，P2P应用和协议缺乏统一标准，P2P应用间信息难以共享。同时，P2P应用在最近几年获得了迅猛的发展，现在已经有了数百种，其中BT、eMule等少数应用已经占用了超过50%的网络流量，对网络性能有严重影响。虽然只要分析和缓存BT等少数几个协议就可以在现阶段对P2P流量达到很好的优化效果，但随着P2P技术的发展，必然会产生对新协议分析和缓存的需求，从而要求系统可以扩展其能够分析处理的协议。对于系统处理协议的扩展，可以通过系统良好的模块化并在协议处理和缓存检查模块之间定义灵活可扩展的接口来得到保证。 
版权保护 
版权问题长期以来是困扰P2P系统的一个难题。一方面，对版权缺乏保护造就了P2P文件共享网络上的丰富内容，推动了P2P文件共享的快速发展；另一方面，对版权缺乏保护又使得P2P共享对版权内容缺乏吸引，从而阻碍了P2P建立成功的商业模式并推动其进一步发展。迄今为止，虽然业界不断提出P2P文件共享系统的版权保护解决方案，但各种方案或多或少地存在一些问题。如何在保持P2P系统开放性的同时吸引版权内容的参与仍然是一个难题。 
P2P缓存系统是一个不负责内容发布的流量优化系统，在版权保护方面也需要有一定的考虑，具体地说就是要求在提供缓存内容的代理服务的同时不触犯任何版权保护法例。需要注意的是，在中国至今仍然没有明确的相关法律法规，在全球范围内对相关问题有明确界定的也仅仅是美国的《千禧年数字版权法（DMCA）》[8]。在该法案中对缓存类设备定义了“版权安全港”，这一定义对提供内容缓存系统做了如下界定：缓存是在本地服务器中为终端用户所做的自动、暂时的内容存储，并对缓存系统提出了以下要求： 
● 缓存系统不能成为内容的原始提供者； 
● 缓存系统不能在缓存过程中改变被缓存内容； 
● 缓存系统的存在不能影响内容的原始访问方式（如口令认证过程等）； 
● 缓存系统对内容更新的处理应当符合相应的行业标准； 
● 缓存系统必须在了解到所提供/缓存内容侵犯版权所有人权利后立即删除相应内容。 
为符合上述对“版权安全港”的要求，缓存系统在为peer访问提供缓存内容服务后需要保证peer访问流程符合原有P2P应用的要求，也就是要求缓存系统具备将P2P应用的数据和信令消息分离的能力。所有的信令交互仍然由信令信道通过缓存设备向提供文件服务的源peer发送，仅对数据通信提供优化加速。这可以通过在缓存系统将访问peer。到被访问peer的链接分割为两个链接实现。对访问peer和缓存设备之间的链接，缓存设备模拟正常的peer访问流程，提供正常的数据通信；对缓存设备到被访问peer的链接，缓存设备在转发所有请求和控制信息的同时，将数据传输信息用占用带宽很少的P2P维持链接信息替代（如BT中有效内容长度为0的消息），该信息同时还起到监测被访问peer状态的功能。当被访问peer停止提供服务时，缓存设备需要停止为其内容提供分发服务。另外，缓存设备还需要提供手动删除缓存内容的能力，以保证在发现内容侵权的第一时间立即删除侵权内容。