Linux下IP――分片与重组
http://blog.csdn.net/Suprman/archive/2006/08/30/1144759.aspx
原理介绍
为一个数据包片再次分片
为数据包分片和为数据包片再次分片之间的细微差别就在于网关处理MF比特的不同。但一个网关为原来为分片的数据包分片时,除了末尾的数据包片,它将其余所有分片上的MF比特都置为一,最后一片为0。然而,当网关为一个非末尾的数据包片再次分片时,它会把生成的所有子分片中的MF比特全部设置为1,因为所有这些子分片都不可能是整个数据包的末尾的数据包片。
对于分片,需要拷贝IP首部和选项,以及数据。而选项的拷贝要注意:根据协议标准,某些选项只应当出现在的一个数据包片中,而其他一些则必须出现在所有的数据包中。
数据包重组
数据结构
为了使数据包的重组效率更高,用于保存数据包的数据结构必须能够做到:
在一组数据包片中快速插入新的数据包片;
有效地判断一个完整的数据包是否已经全部抵达;
具有数据包片超时机制(ip_expire),并且,如果在重组完成之前定时器溢出,则删除数据包片。
为构成某一个特定数据包的一组数据包片快速定位;
互斥操作
重组程序代码使用了一个互斥信号量。Ipfrag_lock
在链表中加入一个数据包片
查找方式:链表的线性查找
溢出时的丢弃
分片列表空间以全满的情况下:丢弃对应的数据包的所有分片。Ip_evictor
测试是否组成一个完整的数据包ip_frag_queue
判断IP_MF位是否为0!
将数据包片组装成完整的数据包LAST_IN,ip_frag_reasm
数据包片链表的维护管理
为了使丢失数据包片的数据包不再浪费存储资源 ,并防止因为标示符字段的重新使用而给IP带来混乱,但已经不可能再受到剩余数据包片时,IP必须定期检查数据包片列表。
Ipq_unlink
Ipq_put
Ipq_kill
Ipqhashfn
Linux下的实现
IP分片
如何提高分片处理的效率
ip_fragment(非UDP使用)
典型调用者
ip_sendà ip_fragment(skb, ip_finish_output);一般从转发来
&nbs
相关文档:
一:前言
最近在研究android的sensor driver,主要是E-compass,其中用到了Linux input子系统.在网上也看了很多这方面的资料,感觉还是这篇分析的比较细致透彻,因此转载一下以便自己学习,同时和大家分享!
(这篇博客主要是以键盘驱动为例的,不过讲解的是Linux Input Subsystem,可以仔细的研究一下!)
键盘驱动将检 ......
已经某个端口号被占用,如何根据端口号得到占用它的进程的ID呢
用lsof
,lsof在ubuntu下的安装命令为apt-get install lsof
若已知端口号为15000,则对应查找命令为lsof -i | grep 15000
本机显示结果为:
host 3386
trinea 4u IPv4 16907 & ......
本文详细介绍了音频CD的基本知识,以及如何在Linux下编写实用的CD播放软件,内容涵盖音轨处理、播放控制和音量调节等诸多方面。
在目前的多媒体应用中,CD所承担的重要作用早已勿庸置疑,本文详细介绍了音频CD的基本知识,以及如何在Linux下编写实用的CD播放软件,内容涵盖音轨处理、播放控制和音量调节等诸多方面。
音频 ......
入侵检测系统(IDS)是对计算机和网络系统资源上的恶意使用行为进行识别和响应的处理系统,它像雷达警戒一样,在不影响网络性能的前提下,对网络进行警戒、检测,从计算机网络的若干关键点收集信息,通过
分析这些信息,查看网络中是否有违反安全策略的行为和遭到攻击的迹象,从而扩展了系统管理员的安全管理能力 ......