陈曙晖[11]、刘俊超[12]、胥清化[13]等研究了一种基于正则表达式的应用层协议识别方法。该方法也是一种基于负载的检测方法,利用正则表达式匹配数据包中的负载部分数据的特殊字段,用匹配到的特殊字段来作为协议识别的依据,其研究表明基于负载的协议识别可以在线处理并且能够精确区分应用层协议。
温超、郑雪峰等[14]提出基于流量特诊分析的协议识别方法,根据以下4个特征识别P2P流量:P2P主机的上下行流量基本相当;P2P主机连接的主机数量较多;P2P主机即是服务器又是客户机;P2P主机监听端口的特点与非P2P协议不同。此方法只需对报头信息进行检测,具有简单高效的特点,但是只能应用于P2P协议,对其他协议不适用。
2003年,J.Early、C.Brodley等[15]提出了一种基于行为特征的协议识别技术,利用TCP包的到达时间、包的平均大小等行为特征来识别HTTP、SMTP、FTP、Telnet等应用层协议,其研究得出的识别准确率在85%以上。
2003年,韩国的James Won-Ki Hong等人[16]提出一种基于传输层特征的P2P流量检测方法。该方法预先统计了各种P2P应用的常用端口,然后根据这些常用的端口信息进行流量的分类,但是该方法对于动态端口的P2P协议就无能为力了。
2004年,Subhabrata Sen等[17]提出一种基于应用签名的P2P流量检测方法。该方法实际上是深度数据包检测技术的一种,是一种基于特征码的协议识别方法,这种方法把payload特征分为固定偏移量(fixed offset)特征和变化偏移量(variable offset)特征,通过应用分析的协议相关文档和静态流量来确定其应用层特征串,然后对报文流的前几个报文进行净荷检测来判断是否为P2P流量。其研究表明基于特征码的协议识别比基于端口的识别准确性要高,误报率和漏报率均低于5%。
2005年,Thomas Karagiannis等[18]仔细研究了P2P流量在传输层所表现出来的两种一般性特征,结合传统的端口检测技术,并采用启发式方法,提出了一种基于传输层特征的P2P流量检测方法。此方法能够有效地检测到新的P2P应用和加密的P2P应用,但不能对P2P应用进行准确分类。
上述的协议识别方法虽然针对某种协议或者某类协议来说识别的准确率都非常高,但是依旧存在一些难以解决问题:
(1)随着近年来越来越多的网络协议使用动态端口进行通信,仅依靠端口的识别方式具有很大的局限,协议识别的准确率越来越低,此外,很多P2P协议可能会故意利用常用服务端口进行协议隐藏,从而绕过出口过滤器。例如,Gnutella协议会伪装成使用80端口的HTTP来避开防火墙的限制;PPS协议会使用随机端口或者用户自定义端口来进行通信。
(2)基于负载的协议识别方法摒弃了依赖于固定端口的弊端,保证了较高的识别准确率,但是在其他很多方面依然存在不足。首先,由于该方法增加了对数据包有效载荷的分析,且需要进行模式串匹配,因此,带来的资源消耗是十分巨大的。在网络带宽日益增加的情况下,它对于硬件处理设备和模式串匹配算法的要求也越来越高;其次,它对于加密信息和专有协议的处理能力较弱,难以准确分析报文中的加密内容,也会涉及到违反有关隐私法律的问题。
(3)基于测度的协议识别方法由于不依赖于固定协议端口,而且不需要深度解析有效载荷的内容,所以可以解决上述两种方法无法识别动态端口和加密信息的问题。但是基于测度的协议识别方法中需要分析计算的网络流量特征数量较多,结构较复杂,所以导致了机器学习的工作量加大,识别性能低下。
(4)协议识别方法除了对已知协议能够准确识别外,还应该对未知协议进行识别分类。识别算法应该具有较低的时间和空间复杂度,使其能够应用在大多数的嵌入式网络设备中。在保证识别准确率的同时尽可能的提高识别效率,使嵌入式网络设备在线协议解析的时候保证网络时延尽可能低。