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
相关文档:
例一:发送Signaling Packet:
Signaling Command是2个Bluetooth实体之间的L2CAP层命令传输。所以得Signaling Command使用CID 0x0001.
多个Command可以在一个C-frame(control frame)中发送。
如果要直接发送Signaling Command.需要建立SOCK_RAW类型的L2CAP连接Socket。这样才有机会自己填充Command Code,Identi ......
一:前言
最近在研究android的sensor driver,主要是E-compass,其中用到了Linux input子系统.在网上也看了很多这方面的资料,感觉还是这篇分析的比较细致透彻,因此转载一下以便自己学习,同时和大家分享!
(这篇博客主要是以键盘驱动为例的,不过讲解的是Linux Input Subsystem,可以仔细的研究一下!)
键盘驱动将检 ......
1. 查找Java项目中,main方法定义在哪个文件里.
切换到你要查找项目的目录下执行
grep -rlI '\
如果你觉得自己打字快,不怕麻烦执行如下命令也可以找到该文件
find -type f -name *.java -exec grep -l '\
2 快速的建立一个文件,并输入一些内容
cat >> filename ,输入一些内容然 ......
环境变量是和Shell紧密相关的,用户登录系统后就启动了一个Shell。对于Linux来说一般是bash,但也可以重新设定或切换到其它的 Shell。对于UNIX,可能是CShelll。环境变量是通过Shell命令来设置的,设置好的环境变量又可以被所有当前用户所运行的程序所使用。对于bash这个Shell程序来说,可以通过变量名来访问相应的环境变量 ......