【转帖LINUX】IP分片重组分析
本文档的Copyleft归yfydz所有,使用GPL发布,可以自由拷贝,转载,转载时请保持文档的完整性,严禁用于任何商业用途。
msn: yfydz_no1@hotmail.com
来源:http://yfydz.cublog.cn
1. 前言
对IP碎片的重组是防火墙提高安全性的一个重要手段,通过提前进行碎片重组,可以有效防御各种碎片攻击,Linux内核的防火墙netfilter就自动对IP碎片包进行了重组,本文介绍Linux内核中的IP重组过程,内核代码版本2.4.26。
2. 处理流程
实现IP重组的基本函数为ip_defrag(),在net/ipv4/ip_fragment.c中实现,基本过程是建立碎片处理队列,队列中每个节点是一个链表,这个链表保存同一个连接的碎片,当碎片都到达之后进行数据包重组,或者在一定时间(缺省30秒)内所有碎片包不能到达而释放掉。
2.1 数据结构
在处理分片包时,将skb包的cb字段保存碎片控制信息struct ipfrag_skb_cb。
#define FRAG_CB(skb) ((struct ipfrag_skb_cb*)((skb)->cb))
struct ipfrag_skb_cb
{
struct inet_skb_parm h;
int offset;
};
ipq队列节点结构:
/* Describe an entry in the "incomplete datagrams" queue. */
struct ipq {
// 下一个
struct ipq *next; /* linked list pointers */
// 最新使用链表
struct list_head lru_list; /* lru list member */
// 以下4项用来匹配一组IP分配
u32 saddr;
u32 daddr;
u16 id;
u8 protocol;
// 状态标志
u8 last_in;
#define COMPLETE 4 // 数据已经完整
#define FIRST_IN 2 // 第一个包到达
#define LAST_IN 1 // 最后一个包到达
// 接收到的IP碎片链表
struct sk_buff *fragments; /* linked list of received fragments */
// len是根据最新IP碎片中的偏移信息得出的数据总长
int len; /* total length of original datagram */
// meat是所有碎片实际长度的累加
int meat;
spinlock_t lock;
atomic_t refcnt;
// 超时
struct timer_list timer; /* when will this queue expire? */
// 前一项队列地址
struct ipq **pprev;
// 数据进入网卡的索引号
&
相关文档:
可安装在U盘上的操作系统 Puppy Linux 4.1 Beta
一、 U盘安装Puppy Linux方法
1、下载安装FlashBoot。可以在google上搜一下下载
运行FlashBoot,按下图红色框选择,点【下一步】
选择你下载的iso镜像,【下一步】
选择你的U盘盘符,不要选错了。点【下一步】
这一步要注意,默认选择的是不格盘。 ......
http://blog.csdn.net/dinitial/archive/2009/02/22/3923447.aspx
前一个阶段主要是在Windowsxp下,通过ADS1.2、H-JTAG和DNW来对代码进行编辑和调试。现在转到Linux下,利用RedHat9.0+虚拟机作为开发环境,这里将这两天来对环境的配置及其遇到的问题总结一下。
开发板为GEC2410,在 ......
http://blog.csdn.net/dinitial/archive/2009/02/22/3923559.aspx
Gdb+gdbserver+insight环境的搭建
1. 下载gdb源代码 http://ftp.gnu.org/gnu/gdb/
2. 配置安装gdb+gdbser
$ tar jxvf gdb-6.6.tar.bz2
$ cd x/gdb
$ ./configure --target=arm-linux --prefix ......
2008-07-07 22:04状 态检测(stateful inspection)是由CheckPoint公司最先提出的,可算是防火墙技术的一项突破性变革,把包过滤的快速性和代理的安全性很好地结合在一起, 目前已经是防火墙最流行的检测方式。状态检测的根本思想是对所有网络数据建立“连接”的概念,此“连接”是面向“连接&rdquo ......
2008-07-07 22:09
6,TCP filter的原理:
当filter收到某个连接的第一个报文时,会为该连接在全局连接表中创建一个表项,并用报文中携带的源、目的IP和端口这个四元组创建original tuple和reply tuple,这两个tuple分别从不同方向来标识这个连接。后续的报文会根据其携带的四元组找到相应的连接表项,然后根据表项所记录 ......