关于ip_free中的一些疑问

本文介绍了一个IP分片处理过程,包括创建IPQ结构实例作为双向链表头结点的方法,详细说明了分配内存、设置成员变量及管理分片包生命周期的具体步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

新建一个ipq结构的实例作为由ipfrag结构组成的双向

链表的头结点,创建成功后首先修改this_host所指向

ip_frag_memipq结构的大小(其初始值在创建hostfrags

结构时设置为0),设置其成员变量如下:

 

分配7264字节的IP包头――IP包头最长为15*4=60字节,

这里分配了64字节――8字节的ICMP首部数据)字节

内存作为ip包头并使ipq.iph指向其首地址,并将分片数

据中的IP头加8字节数据(可能是ICMP首部数据)复制

ipq.iph中,

 

更新this_host-> ip_frag_mem(即this_host-> ip_frag_mem += 72

使其始终表示现已分配给当前分片包的字节数;

 

ipq.ihlen设置为实际的IP包头长;

 

ipq.lenipq.fragments设置为0

 

ipq.hf设置为this_host,即该分片包所属的主机信息;

 

设置该ipq所对应的IP分片包的失效期限ipq.timer. expires

为当前时间加IP_FRAG_TIME(大约为30秒);

 

设置ipq.timer.data为该ipq的地址(在系统收到一个IP分片包后

30秒再没有收到任何和它属于同一IP包的分片数据时,

系统会丢弃那些属于同一个IP包但未完成的IP分片重组

的数据,系统会根据ipq.timer.data来释放资源);

ipq.timer.function指向该ipq失效时的处理函数,该函数用来释放资源;

ipq.timer设置完后将它加入到系统内的时间链表中;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值