Chinaunix

标题: 自己设计的一个IP分片重组算法,请大家看看有什么问题 [打印本页]

作者: sonicsky    时间: 2012-03-15 10:42
标题: 自己设计的一个IP分片重组算法,请大家看看有什么问题

先来看看IP V4头的格式,Identification字段是一个16位的短整型,查看RFC描述
This field is an identification field and is primarily used for uniquely identifying fragments of an original IP datagram;我暂且把它理解一个唯一的分片的分组ID
在我的程序里我用一个65536大小的FragQueue数组来记录所有分组队列;每个数组存储一个双链表,每个数组对应一个time_t记录当前时间以便于检查分组队列timeout,当X ID 的IP fragement packet到来时,找到相应的链表队列,确认flow(五元组)信息是否一致,然后比较offset找到合适的位置插入链表中,等X ID的IP分片凑齐之后,就取出来重组;同时还有另外一个线程做超时检测的机制

可能分片重组的函数中有关IP overlap和其他攻击没有考虑清楚,欢迎大家拍砖

作者: anbutu    时间: 2012-03-15 11:36
基本思路跟内核中的实现是一致的,不过内核并不是直接用一个65535大小的数组,而是通过hash来减小了这个数组的大小,毕竟同时用到的数组项不会很多。

正如你说的,还有很多细节的东西需要考虑,这些才是麻烦的地方。
作者: sonicsky    时间: 2012-03-15 14:56
谢谢答复,我希望谁能介绍一下内核的分片处理算法,毕竟我的方法对链表操作还是比较耗费时间的




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2