随着计算机网络的不断发展,网络环境越来越复杂,如采用可变端口通信,采用端口伪装来绕过防火墙,采用隧道技术来封装数据包等等。这些技术给网络协议识别带来了巨大的挑战,直接影响到了网络安全和服务质量的保证。随着计算机网络的发展,协议识别技术也一直在不断发展,由于其在其他网络应用中的重要地位,一直以来协议识别技术都是很多学者和网络爱好者关注的研究方向。目前协议识别方法可以大致分为三类:65138
(1)基于端口的识别技术利用数据包中的源端口和目的端口的信息来确定协议的类型。互联网数字分配机构(IANA)定义了常用协议和端口的映射关系,如表1.1所示。理论上基于端口的协议识别技术只能识别注册过的知名协议,对一些可变端口通信协议无能为力。
表1.1 常见协议知名端口注册表
端口 协议 说明
21 FTP 文件传输协议
22 SSH 远程登录协议
23 TELNET 终端仿真协议
25 SMTP 简单的邮件传输协议
53 DNS 域名解析协议
80 HTTP 超文本传输协议
110 POP3 邮局协议
(2)基于负载的协议识别技术需要事先对每种协议深入研究分析,找出该协议在会话交互或者是数据传递的时候有别于其他协议的特殊字段。在协议识别的过程中分析会话流中的每个数据帧的负载部分,查找特殊字段,如果能够找到某个特殊字段,该会话流就识别为该特殊字段对应的协议类型,如果匹配不到特殊字段,那么就认为未能识别该会话流。基于负载的协议识别技术的优点是不光能够识别一些协议的控制会话流,而且对那些协议的可变端口数据传输的会话流识别效果也非常好,例如,PASV FTP,可变端口通信的流媒体数据等等。理论上基于负载的协议识别技术只要有足够的精力分析出每种协议的特殊字段,就能够识别除了加密会话流以外的所有协议的会话流,但是特殊字段的分析是非常困难和耗时的。
(3)基于测度的协议识别方法也叫做基于行为特征的协议识别方法,利用协议规范的不同所造成的流特征的差异来区别各个协议。例如,WEB 数据流通常为短流小报文,而P2P流通常为长流大报文。基于测度的协议识别算法需要有各协议的训练数据流,用训练数据流训练协议识别器,在协议识别过程中识别器通过某种算法得到的数据和事先训练的数据作匹配,把会话流标记为匹配最相似的数据对应的协议类型。理论上说,每种协议由于其规范不同,测度总会有所不同,因此,基于测度的算法理论上可以识别所有的协议,但是当前算法只能把数据流分为几大类,并没有达到协议识别的最终目的。
国内外很多学者和网络爱好者基本都在上述三种基本的协议识别方法的基础上改进并提出一些优化的方法。
陈亮等[2]在应用层协议识别综述一文中通过研究七种常用应用层协议的技术文档,找出了每种协议的作为判别依据的特殊字段,若特殊字段唯一,就将该特殊字段作为该协议识别的依据,若特殊字段不唯一,就将出现频率最高的字段作为该协议识别的依据。论文网