扫一扫
分享文章到微信
扫一扫
关注官方公众号
至顶头条
作者:李玉行 宋传志 来源:支点网 2009年1月9日
关键字: p2p
P2P (Peer to Peer)是近年来出现的一种新的网络应用,它的出现开启了网络边缘未使用的资源。当前随着硬件价格的不断下降,作为客户端的PC机已经具有相当大的处理能力和存储空间,然而这些资源在大部分时间都是处于闲置状态。比如在当前Internet中流行的C/S配置模式中,用户的PC机仅仅是被作为一个显示网页的工具。而P2P体系结构则可以使用这些PC机分担网络中心的任务。上百万个Internet用户组合得到的处理能力将远远高于任何一个中心服务器的处理能力。除此以外,P2P体系结构还具有开放性、可扩展性强等特点。所有这些使得P2P应用在短短几年时间有了飞速的发展,其体系结构也经历了由集中式服务器(Napster)到纯分散式文件共享系统(Gnutella),再到部分分散式结构(KazaA);由使用固定端口到使用动态端口进行数据传输;由使用独特端口到与其他应用合用端口(如使用Web应用的80端口等);由明文传输到进行数据加密传输等变化过程。
研究表明,尽管受版权等问题的困扰,当前P2P应用仍呈现快速增长的趋势,并且变得越来越隐蔽[3]。P2P的飞速发展一方面丰富了网络中的应用形式,但另一方面也带来了许多负面的问题。如:P2P文件共享过程中的版权问题;P2P应用大量占用网络带宽的问题;以及P2P的流量模式对传统网络设计带来的挑战等,其中后者尤为网络设计、管理人员所关注。我们知道,在Web应用流量占网络流量主体时,由于Web流量的高度非对称性(用户链路的下行流量要远远高于其上行流量),大部分用户接入方式如ADSL、Cable modem等都设计为下行带宽远高于上行带宽。而在P2P应用中,由于所有主机都是对等的,因此其流量具有很大的对称性。研究表明,P2P应用与Web应用上行流量与下行流量的比率分别为1:1.25和1:7,两者差别将近6倍[5]。因此上述设计理念在当前P2P流量占主体的网络状况下已经不再适应。
由此可见,P2P应用对网络性能具有很大的影响,例如对于一些ISP而言,文件共享流量约占其总流量的60%,另外企业网络中大量出现的P2P流也会极大地影响网络性能。因此无论从ISP的角度还是从企业网络管理人员的角度,都希望能够将P2P流量有效的识别出来,从而便于网络的规划与管理。对于一个企业而言,可以限定P2P流量不超过某个阈值,从而能够为其他重要的应用提供一定程度上的QoS保证;或者为了网络管理的需要,直接在内部将P2P流量过滤掉。而对于ISP而言,可以在此基础上对服务进行控制以及对用户进行管理等。但是当前识别P2P的一个主要挑战就是以一种可扩展的方式识别出P2P流量,同时不要求对所有的分组进行深层分组检查(DPI, deep packet inspection)。
文章后面部分按照下述方式组织:第一部分概述了P2P流量识别技术;第二部分详细综述了当前几种常用的P2P流量识别技术;第三部分对P2P流量识别技术的发展进行了展望;最后对全文进行了总结。
P2P流量识别技术概述
为了控制网络P2P应用对带宽的大量占用,必须首先对P2P流量进行有效地监控,它涉及到下面几个方面的问题:流量采集、流量识别以及流量控制。在其中,流量的采集与其他网络监测方式采用的技术完全一致,流量控制则取决不同的网络管理策略,由网络管理人员进行相应的设置,例如进行P2P流量限制或者完全过滤P2P流量等。因此,这里的关键部分是流量的识别操作。根据实现思想不同,可以将它分为多种类型,如基于分组分析、基于流分析等。其实现方式直接关系到整个监控系统的实现效率以及系统的可用性。
P2P应用从最初的采用固定端口发展到使用可变端口甚至使用其他应用的端口进行数据传输,在传输的具体内容方面也从使用明文传输发展到对传输数据进行加密处理,因此对P2P流量进行识别的技术也随之经历了相应的变化过程。本文中我们主要针对四种典型的识别方法进行讨论,包括端口识别法、应用层特征识别法、流量模式识别法以及连接模式识别法。对于这几种技术,我们将在第二节中进行详细的讨论。
典型P2P流量识别技术
端口识别法
在P2P应用兴起的早期,大多数应用使用的都是固定端口,例如,Gnutella使用6346-6347端口,BitTorrent使用6881-6889端口等。在这种情况下,对其流量的识别方式与识别普通应用分组的方式完全相同:在需要监测的网络中被动收集分组,然后检查分组的运输层首部信息,如果端口号与某些特定的端口号匹配,则说明该分组即为P2P流量分组,可以按照预设的动作对其进行处理。这种识别方法最大的优点就是简单易行,它不需要进行复杂的分组处理即可得出结论。在P2P应用出现的初期它显得十分简单有效,但是随着P2P技术的发展,该方法逐渐变得不再适用,因此后来又出现了一些新的技术方案。
应用层特征识别法
与第一代使用固定端口进行数据传输的P2P应用不同,当前许多P2P应用都能够通过使用随机端口来掩盖其存在,有些甚至可以使用HTTP, SMTP等一些协议使用的熟知端口,这增加了识别P2P流量的难度:简单的通过分析分组首部的端口信息已经无法识别出这类应用的存在。
但是,每种应用的分组中都携带有特定的报文信息,例如,HTTP协议报文中会出现GET, PUT, POST等报文字样。与之相类似,在各种P2P应用协议中也具有类似的信息。因此,人们提出了通过检查分组内部携带的负载信息进行分组识别的方法。文献[2]提出了一种利用应用层特征的方式对P2P流量进行识别。在[2]中,作者首先对5种常见的P2P协议(KaZaA, Gnutella, eDonkey, DirectConnect以及BitTorrent)的特征进行了分析,提取出其特征信息,然后根据特征信息对收集到的分组进行模式匹配操作,从而判断出该分组是否属于某一类P2P应用分组。例如,Gnutella的连接建立报文具有下述格式
GNUTELLA CONNECT/<protocol version string>\n\n
而应答报文格式如下
GNUTELLA OK\n\n
根据这些以及其他类似特征,即可判定相应报文是否为P2P应用报文,并由此确定某个流是否为P2P流。
[2]中的实际测量结果表明,在大多数情况下,该方法能够以低于5%的错误概率对分组进行识别。
与第一种方法相比,上述方法能够识别出使用可变端口的P2P流量(这正是当前P2P应用发展的一个趋势),提高了其结果的准确性,例如在同样情况下,用户数据特征识别 法识别出的P2P流量是仅仅采用端口进行识别的方法得到结果的3倍[2]。但是分析不难发现,这一方法存在下述一些问题:
只能针对已知数据格式的P2P应用进行识别,这使得每出现一种新的P2P应用,就需要修改上述实现,因而造成其扩展性不好;
对用户数据的检查不符合Internet的基本原则,并且由于诸如法律、个人隐私等原因,检查用户数据在许多情况下几乎是不可能的;
由于需要对分组内部数据进行全面的检查分析,使得其实现效率不是很高;
随着技术的发展,一些P2P应用开始以密文方式进行数据传输,面对这种情况用户数据识别方式则完全是无能为力。
上述种种原因导致用户数据识别方法的通用性十分有限,而且,随着P2P技术的发展,这种识别方法也会与通过固定端口进行识别的方法相类似,逐渐不适应实际的需要,因此有必要找到其他方法对P2P流进行较为精确的识别。
分析端口识别法和应用层特征识别法可以发现,尽管两者的实现机理完全不同,但是其基本思想均是基于P2P应用的一些外在特征,并且这些外在特征是可以隐藏的,一旦出现上述情况,这些识别方法就不再适用。而且,上述两种方法只能识别已知P2P协议的流量,一旦出现一种新的P2P应用,必须修改上述识别方法才能对其进行识别,这限制了它们的应用范围。因此,为了能从根本上解决这些问题,必须分析P2P应用与其他一些诸如Web等应用的根本区别,然后利用这些本质特征对其进行识别。下述两种方法就分别从P2P应用的流量特征以及P2P网络的连接模式特征着手对其进行了分析。
流量模式识别法
这是在Caspian路由器中实现的一种功能,该路由器记录经过它的每条流的信息,因此可以实现基于流的流量识别和控制功能,以一种新的方式对P2P流量进行识别和控制。并且,如前所述,这一解决方案是基于P2P流的内在特征的,避免了前面两种识别方法中的一些问题。
表1 几种比较常见IP服务的流量特征
服务 持续时间 平均速率 传输字节数
HTTP 短 高 中-高
VPN 长 低 高
Games 长 低 高
Streaming 长 中 高
Telnet 长 低 中
Fileshare / P2P 长 中-高 高
上表1描述了几种不同的应用对应的流量特征[4],由此可以看出,P2P应用的特点是持续时间长、平均速率较高以及总的传输字节数高。这与文件传输如FTP等应用有些类似,但是该类应用可以很方便的通过端口号识别出来,而且由于这些应用与用户的交互性不如Web、视频等应用高,因此出现一定的误判导致对它们的流量限制不会造成大的问题。
另外,根据流所包含的字节数,可以很容易将普通Web流量同P2P文件共享流量区分开。
可见,通过分析不同应用的流量模式,可以实现识别P2P流量的目的。而且这一方法不需要对分组内部用户数据进行检查,因此不受数据是否加密的限制,扩大了其适用范围。但是,由于需要记录每条流的信息,这种方法对内存空间以及处理速度都提出了比较大的要求。这方面国内较为知名的网管软件:聚生网管系统(官方网址:http://www.grabsun.com/)就是采用这种方法,从而使得封堵P2P软件较其他网管软件有明显的优势。
连接模式识别法
[1]中提出了一种在传输层识别P2P流量的方法,它仅仅统计用户分组的首部信息,而不涉及具体数据。因此一方面克服了前述方法对加密数据无法识别的问题,同时又不涉及用户的具体数据,符合Internet体系结构中的端到端原则。其基本思想是:基于观察源和目的IP地址的连接模式。一些模式是P2P所独有的,因此可以由此直接将P2P流量识别出来;另外一些模式由P2P和其它少数应用所共有,这时可以根据对应IP地址的流历史以及其它特征来减少误判概率。
在这种思想的具体实现中,Thomas Karagiannis等给出了两种启发式方法:(1) 识别出那些同时使用TCP和UDP进行数据传输的源-目的IP地址对。研究表明,大约2/3的P2P协议同时使用TCP和UDP协议,而其他应用中同时使用两种协议的仅仅包括NetBIOS、游戏、视频等少数应用[1]。因此,如果一个源-目的IP地址对同时使用TCP和UDP作为传输协议,那么可以认为在这一地址对之间的流除一些已知的应用外(对于这些应用可以根据它们的特征将其排除),很有可能就是P2P流,可以将它们加入到候选P2P流的队列中;(2) 基于监测{IP, 端口}对的连接模式。这一方法的基本依据为:当一个新的主机A加入P2P系统后,它将通过super peer广播其IP地址以及接受连接的端口号port。其他主机收到后利用这一信息与主机A建立连接。这样,对端口port而言,与其建立连接的IP地址数目就等于与其建立连接的不同端口数目(因为不同主机选择同一端口与主机A建立连接的可能性是很低的,完全可以忽略不计)。而其他一些应用如Web,一个主机通常使用多个端口并行接收对象,这样建立连接的IP地址数目将远小于端口数目。但是另外一些应用,如mail、DNS等,也具有类似的属性,因此使用这种方法在实际识别过程中需要将它们区分出来。
难点问题与研究路线
由上文的分析我们可以发现,流量的识别过程本质上就是根据流量或其中分组的基本特性,进行模式识别的过程,考虑不同的特性可以设计出不同的识别方法,其实现的性能以及算法的通用性也会有很大不同。
当前P2P流量识别的难点主要来自两个方面:(1) Internet链路带宽的不断增长;(2) 数据加密、隐藏等技术在P2P中的应用。前者导致网络中单位时间内数据以及流数目的增大,给数据的采集增加了困难,而后者又使得传统的端口、应用层特征等识别方法不再适用。
流量模式分析和连接模式分析两种方法尽管在一定程度上避开了难点(2)带来的问题,但是它们的分析方法又略显粗糙。而且在这两种方法中,各种特征及其在识别过程中对最终结果的影响因子是由管理人员主观确定的,无法由程序根据识别过程中学习的信息自动进行调整。因此如何提取并有效利用P2P应用的流量及连接特征仍是一个有待研究的问题,在下一步的研究中可以将模式识别和人工智能中的一些技术引入识别过程中,综合运用小波变换、人工神经网络等技术对P2P流量特征进行发掘。
结束语
当前,网络中P2P应用的数目不断增加,流量也呈现逐渐增长的趋势,而且,分布式、加密、匿名P2P应用越来越成为主流[3]。在这种情况下,为了满足服务质量、网络规划、计费和审计等基本要求,必须对P2P流量进行有效的识别和监测。本文所描述的几种典型的P2P流量识别方法,分别针对P2P流量不同方面的特征对其进行了分析和识别。但是,随着P2P技术的不断发展,上述识别方法仍需要相应的改进,包括挖掘P2P流量的深度特征,在识别系统中引入智能学习功能等。另外,在未来网络的发展过程中,应当考虑在网络体系结构设计引入这种流量识别监测机制,以便对网络中相关P2P流量进行实时、高效的监控。同时能够根据网络的运行状况以及用户设定的处理规则对其进行智能控制,从而为网络管理人员提供一个便利的管理平台。
如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。
现场直击|2021世界人工智能大会
直击5G创新地带,就在2021MWC上海
5G已至 转型当时——服务提供商如何把握转型的绝佳时机
寻找自己的Flag
华为开发者大会2020(Cloud)- 科技行者