免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2629 | 回复: 2
打印 上一主题 下一主题

自己设计的一个IP分片重组算法,请大家看看有什么问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-03-15 10:42 |只看该作者 |倒序浏览

先来看看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和其他攻击没有考虑清楚,欢迎大家拍砖

论坛徽章:
0
2 [报告]
发表于 2012-03-15 11:36 |只看该作者
基本思路跟内核中的实现是一致的,不过内核并不是直接用一个65535大小的数组,而是通过hash来减小了这个数组的大小,毕竟同时用到的数组项不会很多。

正如你说的,还有很多细节的东西需要考虑,这些才是麻烦的地方。

论坛徽章:
0
3 [报告]
发表于 2012-03-15 14:56 |只看该作者
谢谢答复,我希望谁能介绍一下内核的分片处理算法,毕竟我的方法对链表操作还是比较耗费时间的
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP