本文提出一种基于HASH表和SYN计算的TCP会话重组方法,它利用HASH表快速定位的特征和TCP包头中的SYN进行多连接TCP会话重组,可解决IP数据包乱序到达和TCP数据包重传问题。
一、 引言
在网络安全领域,TCP会话重组是一个必须解决的关键技术,它广泛应用在入侵检测系统、病毒监控系统、远程监控系统等产品中。只有重组后的数据包才能成为程序可理解的信息,从而对其进行监控。当前大部分入侵检测系统都实现了高效的TCP会话重组,它的难点在于解决多连接问题、IP包乱序到达和TCP会话重传问题。笔者在实际工程经验中摸索了一种基于HASH表和SYN计算的TCP会话重组方法。
二、TCP会话重组
传输控制协议TCP(Transmission Control Protocol,RFC 793,RFC 1122,RFC 813,RFC 816,RFC 879,RFC 896,RFC 889,RFC 964)是一个在网络中提供主机到主机高可靠性通信的协议,根据RFC793规定,TCP头的结构如图1所示:
图1 TCP包首部
RFC793中规定,TCP头中的序号(Sequence Number)用于指定该数据包在整个会话中的位置,该序号是TCP会话重组的关键。
图2 TCP会话重组流程
图2中描述的流程简单地说明了利用HASH表和SYN计算进行TCP会话重组的过程,最终程序将每一个会话完整地保存到不同的文件中。在重组过程中,程序主要用到了两种关键技术:“HASH表”和TCP会话文件写指针“SYN计算”方法。“HASH表”解决了同时处理多个TCP会话的问题。“SYN计算”可以快速地计算TCP会话写入重组数据文件的位置,同时可以有效地解决IP包乱序到达和TCP会话重传问题。
1.HASH表
由于程序经常需要同一时刻监控多个TCP会话数据包,这些数据包掺杂在一起,因而程序在进行会话重组时需要同时处理这些不同连接的TCP包。为达到这个目的,我们采用一个HASH表来记录不同的连接信息。HASH表每个节点内包含以下信息:
■ TCP_Session_IDT:TCP会话标识。由TCP协议可知,每个TCP会话由源IP地址、目的IP地址、源TCP端口号和目的TCP端口号惟一标识,我们的TCP会话标识也由这四个元素组成,HASH表查找也是基于这四个元素实现。
■ File_IDT:文件标识。将不同TCP会话数据保存在不同名的重组数据文件内,因此每个会话都有一个文件标识相对应。
■ File_Init_Write_Pointer:写文件初始指针。该初始指针并不表示每个重组数据文件由此指针指向的位置开始写,而是用来计算后续文件指针的。
■ File_Last_Visit_time:文件最近一次被访问的时间,用于计算TCP会话超时。基于现有网络状况的考虑,TCP会话超时是不可避免的情况,应当有专门的机制来对此进行处理。我们设置了一个专门的进程来判断TCP会话是否超时,当某个文件长时间没有被访问则说明该文件对应的TCP会话已经超时,可以结束有关此会话的收集。
利用HASH表快速查找定位的特性,我们解决了多个TCP会话同时处理的问题以及快速对多个会话进行处理的问题。
(责任编辑:adminadmin2008)