APP下载

网络数据流还原重组技术研究

2011-03-17李芳馨刘嘉勇

通信技术 2011年7期
关键词:序列号分片数据流

李芳馨,刘嘉勇

(四川大学 电子信息学院信息安全研究所,四川 成都 610065)

0 引言

传输控制协议(TCP,Transmission Control Protocol)重组主要应用于安全产品中,入侵检测中尤为常见,还有各类防火墙等。但是由于现今由于网络数据流的激增,为了减少中央处理器(CPU,Central Processing Unit)的处理压力,各类安全产品都纷纷采取硬件实现。硬件实现的好处非常多,可以自己提供缓存,大量减少内核与应用的交互,而且提高包截获的速度同时准确进行包过滤。设计繁杂的采集卡甚至可以在硬件上实现TCP处理,但是同时带来的成本问题也比较惊人。

而重组软件中常常使用的是网络入侵检测开发库(libnids,Library Network Intrusion Detection System),由于设计问题局限于对单个文件的处理,不适于对数据流的不间断处理,同时对数据包的处理极容易出现差错。

1 数据流重组流程详解

大量的数据极有可能是同时到来的,并且杂乱无章,首要的工作是要对数据流的信息进行筛选。这部分的筛选条件包括有数据包长度,数据包头,数据包内容等。首先是要剔除无用杂乱的信息,其中不含内容成分的数据包包括有长度有限且不含有特殊标志位的纯确认字符(ACK,ACK nowledge Character)确认包、Internet控制报文协议(ICMP ,Internet Control Message Protocol)数据包,地址解析协议(ARP,Address Resolution Protocol)数据包等等,进行网络互连协议(IP,Internet Protocol)还原的话要对硬件地址(MAC,Media Access Control)头进行解析分辨,确认需要进行处理的IP协议包,这个过程中由于网络类型的缘故还可能要考虑点到点连接协议(PPPoE,Point-to-Point Protocol over Ethernet)数据包的解析。接下来进行TCP重组的重点首先是要分辨出各个连接,分辨根据是四元组。这里面对的问题是IP分片,因为IP分片会导致网络层头部缺失。将需要还原的连接按四元组组建链条,将数据按照相应的顺序排列存储,继而根据数据包的内部信息进行进步一处理,将内容写入文件当中保存,即还原结束。这部分试图模拟计算机终端中的处理过程,意即在经过各个层次的数据包头剥离之后将数据本身推入应用层中。但是在网络尤其是骨干网中进行,则会面对数据量巨大,无应用层检错,数据回环、数据重复等种种问题。同时导致了数据处理变得复杂和内存紧张。以下提出一部分的解决方案。

(1)连接辨析

每个数据包都要进行读取和分析,以获取四元组分辨属于哪个连接来进行下一步的还原。四元组的匹配是个重要的问题,在没有IP分片的情况下可以考虑使用针对四元组的散列算法(Hash)方式节省空间,加快匹配速度,但是这样可能会由于Hash算法的复杂性影响整个程序[1]。

(2)IP分片处理

IP分片只有在第一个包中带有网络层数据包头,意即IP分片的后续内容中只能获取 IP地址而没有端口无法凑出四元组进行分辨,此类数据包可以模糊匹配,将它设定生存期后加入到IP相合的链条中去,根据该连接的实际情况进一步处理。连接在生存期中始终不出现第一个分片的话即认为连接并没有出现分片,将分片丢弃。IP头中的分片顺序作为IP分片排序方式,可以重组被分片的报文,但是重复的顺序无论如何处理都可能会导致一定的差错出现。

这样的处理可能会导致内存被重复数据占用。但实际上TCP连接中极力避免出现IP分片的出现,影响比较微小。即便是用户数据包协议(UDP,User Datagram Protocol),同时出现两个分片连接可能性也不大[2]。

(3)TCP标志位判断

TCP头中包含有当前数据包的标志位,含有创建、结束连接、数据确认等,有效辨别是必须的,同时可以提高数据处理速度。TCP建立连接需要三次握手,其中包含有两次建立连接(SYN,synchronize)标志置位,选择从SYN标志开始建立连接链,那就需要把重复的 SYN忽略掉。而出现的第一个结束连接(FIN,finish)包则意味着这次连接宣告结束,可以做结束处理,及时将连接完全清空,而对重复的FIN也要忽略。连接生存期的设定可以固定,同时也可以通过是否有新连接来判定是否连接已经结束。同样的四元组新出现SYN包或者复位(RST,Reset the connection)包,即该连接宣告结束,清空连接链,停止该连接的重组。

(4)TCP报文处理

由于 UDP不可靠性没有自检能力且没有前后顺序,只要将依次捕获的数据包的包头剥离,获取数据即可,但是必须要进行生存期处理,因为 UDP的结束没有数据包进行提示。但是可靠连接的TCP则相反,为了获取相对有效数据,就需要在程序中进行比较复杂的可靠性处理。

最重要的依据就是TCP头中的序列号字段,这部分标志着数据包中的内容在整个要还原内容的位置,可以辅助检错并部分纠错。正常情况下,序列号加上这次的数据长度即是下次序列号的大小。但是很容易出现小于或者大于预定的序列号的情况。

出现较小的序列号有几种可能性:①由于超时重传或者其他相关原因,出现的是纯粹重复的数据包,这个最容易处理,可以直接丢弃。或者是重叠的数据包,将预计的序列号大小减去实际的序列号大小,计算出重叠的数据长度,将这部分剔除即可获取真实的数据;②新的数据包虽然有重复,但实际上是由于上一个数据包被客户端认定为错误或者其他有必要重新传送的原因而再一次被传递,这个时候可以采取的措施是将新的数据包取代旧的相同序列号的数据包并入连接链中区,这样做可能会影响到紧跟在后面的数据包内容。这个时候难以确认新的数据包究竟是出于什么原因出现是个难题,究竟是时延太长还是新发送的内容,同时还会影响到数据排序后的进一步处理;③出现数据回环,32 bit的序列号在数据包流中不断递增,发送序号在增长到顶峰之后,开始重新启用较小的序列号开始重新计算。这个时候可以参考防止重复报文(PAWS,Protect Against Wrapped Sequence numbers)算法使用时间戳[3],时间戳对每个将要发送的窗口加一或者更大,可以作为判断基准。RST标志未置位、TCP曾收到过对端发送的有效非零时间戳,当前报文段中的时间戳小于原先收到的时间戳以上三个条件同时为真,则认定该报文段重复丢弃。反之,则保留重新计算序列号。如果连接出现了很长时间的空闲,则收到的报文段时间戳值也会回绕导致了PAWS测试失败。这个可能性虽然微小,但是依然不可忽视需要进一步研究。

出现较大的序列号则是明显出现了丢包的情况。也就是在预定的序列号和现在获取的数据包中间有缺失。这个缺失的数据包可能会在一段时间后再度捕获,但也可能是出现了捕获数据流不全出现丢包现象。即时分析中想要做出判断是十分困难的,只能进行短暂的等待以及容忍必要的缺失。否则会影响数据处理速度和内存占用。

(5)内存缓冲区占用处理

在使用软件进行重组还原的情况下,每个数据包的处理都要先将数据包的内容读入内存。并且还要进行实时分析,新的数据会不断涌入。这样为了保证内存不被拥堵,就要尽量快速的处理数据包,减少相关数据滞留在内存的时间,尽快将数据包送出内存[4]。

在此选择的处理方式向客户终端学习,将数据及时推入应用层。在这里表现为写入文件。这样在内存中保留文件句柄,不断将数据从内存写入硬盘,减少了内存的占用。要考量的则是写入的时机。这里同样参考终端主机操作系统的处理方式。

UDP的数据没有顺序性,不过在分片情况下重组时还是会出现数据排序的情况。在没有分片或者分片重组已经结束的情况下,每来一个数据包都可以直接剥离数据包头,将数据顶入应用层[5]。

TCP的数据情况要复杂得多,在经过一系列的判断后可能采取抛弃重复报文,剪裁重复报文段等手段。但是缺包情况则在必要情况下适当忽略,这部分参考标志位推入(PSH,push)标志,对于操作系统来说,出现PSH就要把数据推入应用层进行处理,在数据流重组的相同情况下,可以选择近似的处理,对丢失的包进行适当忽略,以防止程序崩溃和缓冲区拥堵[6]。采取此种解决方式可能会出现的问题即是无法完善处理包只是延时而并未丢失的情况。补充完善的一种方式就是重新写入文件,但这样需要保留前面所有连接内容的情况,付出的代价过大。事实上PSH字段出现,即意味着所发出的包基本已经到位,可以降低以上风险。

2 结语

网络流匹配还原是一项非常有用的工作。网络在现实生活中占有的比重越来越大,所承载的信息量也是越来越多,如何从同样日渐繁杂增多的数据量中获取有意义的数据是非常重要的[7]。而研究网络数据流的即时还原获取的信息更具有及时性。软件实现这个功能要尽量用有限的资源获取最大的信息量,并且要求有足够的稳定性[8]。

[1] 邓月华.基于宽带网络的TCP报文还原与应用研究[D].成都:四川大学, 2006.

[2] 刘益洪,戴冬梅.TCP/IP的拥塞控制策略[J].通信技术,2008,41(07):135-137.

[3] GARY R W, RICHARD STEVENS W.TCP/IP详解卷二:实现[M].北京:机械工业出版社,2010:636.

[4] 侯新宇,王晟,骆光明.基于接收端的TCP流量控制及优化研究[J].通信技术,2007,40(10):21-22,48.

[5] DANIEL P B, MARCO Cesati.深入理解Linux内核[M].第2版.北京:中国电力出版社,2005:223.

[6] 赵军伟,刘勋,董浩.基于TCP协议的远程监控系统的实现[J].中国测试,2010(01):23.

[7] 金瓯,施勇,薛质.基于TCP协议的网络数据实时篡改[J].信息安全与通信保密,2010(04):37.

[8] 张艺濒,张志斌,赵咏,等.TCP与UDP网络流量对比分析研究[J].计算机应用研究,2010(06):58.

猜你喜欢

序列号分片数据流
上下分片與詞的時空佈局
一种离线电子钱包交易的双向容错控制方法
汽车维修数据流基础(上)
分片光滑边值问题的再生核方法
CDN存量MP4视频播放优化方法
汽车维修数据流基础(下)
关于《国家税务总局 工业和信息化部关于加强车辆配置序列号管理有关事项的公告》的解读
基于模糊二分查找的帧分片算法设计与实现
recALL
基于数据流聚类的多目标跟踪算法