基于块状链表结构的6lowpan数据包重装缓存方法

文档序号:7870597阅读:128来源:国知局
专利名称:基于块状链表结构的6lowpan数据包重装缓存方法
技术领域
本发明涉及一种61owpan数据重装缓存方法,属于无线传感网络的应用技术领域。
背景技术
61owpan协议的发展促使基于IP的无线传感网络应用的发展。目前,Contiki OS是其中主流的实现轻量级IP协议的操作系统。Contiki OS通过61owpan协议实现Ipv6数据包基于IEEE802. 15. 4协议的传输,操作系统中所搭载的协议栈为轻量级的IPV6协议栈——UIPv6协议栈(Uip)。
Uip有很低的内存需求。在默认配置中它仅需要大约IKB的RAM和几KB ROM。在 Uip协议栈中,Uip通过将待重组的数据包存入单独的缓存区来实现IP分片的重组,将该缓冲区与用于Uip测试的数据包缓冲区相互隔离可以有效的防止IP分片遭到改写。当所有的IP分片都被重组完毕时,生成的IP数据包传递给传输层。由于Uip仅为重组的分片分配一个单独的缓冲区,所以Uip不支持多个数据包同时重组。采用这个设计的原因是在当今网络中,IP分片相对而言不太普遍。然而,在61owpan协议实现过程中,61owpan适配层会对从IP层传输下来的数据包进行检测与处理,如果IPV6的数据包载荷超过了 802. 15. 4数据包的MTU值,则61owpan适配层会对IPV6数据包进行分片;同理当61owpan适配层接收到通信设备驱动器发来的802. 15. 4数据包时,61owpan协议会检测该数据包是否为数据包分片,若是数据包分片,则需要接收到所有分片后对数据包进行重组后,形成完整的IPV6数据再传输给上层协议。因此,利用Uip协议栈中原先的重装缓存设计将导致基于61owpan的智能应用中,无法接收多个智能物件并发发送的数据包分片。经仿真实验表明,当一个sink节点接收来自2个以上的感知节点发来的数据时,将导致丢包的状况。对IP网络而言,在一些已公开的专利与论文中有一些针对IP数据包分片的缓存方法。对于IPV6数据包分片,在《基于网络协议版本6的分片重组方法》专利中提出一种分片树的数据结构,从根节点往下,第一层是地址不同,第二层是地址相同,端口不同,第三层(叶节点)是地址相同,端口相同,标示不同。具体数据都存储在叶节点上,当系统接收到数据包时,根据分片树查找分片信息,并对分片进行存储与重装。该存储方式的优点在于能够快速有效的查找与建立新的数据分片节点。但是此方法消耗大量的内存空间,不适用于无线传感器网络。而在UIPv6协议栈中,也考虑到了 IPV6数据包分片的可能性,但基于IP数据包分片的发生几率较小,UIPv6协议栈只为IP数据包的分片设计了一个单独的缓冲区,并且当同时接收到其他数据包分片时,将丢弃不是正在处理过程中的IP数据包分片。但是对61owpan数据包而言,由于要适配802. 15. 4数据包的最大传输单元,分片与重组功能的实现是61owpan适配层的主要任务之一。61owpan适配层接收到数据包分片的情况较为普遍,因此单一缓存将不能满足61owpan协议的应用需求。
在Iinux系统的网络技术开发中,套接字缓冲区sk-buff结构,存储了已接收或正要传输的数据的报头。内核在一个双向链表中维护所有的sk-buff结构,结构中包含了指向缓冲区的指针以及很多其他维护信息字段。该结构采用结构体做为链表节点,能够灵活的存储不同套接字信息。但是该结构由巨大的变量堆组成,试图满足所有人的所有需求,比较繁琐。因此,如何针对轻量级的IPV6网络数据包,提出新的61owpan数据重装缓存机制,将其运用于基于61owpan的无线传感器网络环境中,不受限于无线传感器的硬件条件,目前还没有相关的技术报道。

发明内容
本发明所要解决的技术问题是针对Sk-buff结构的存储方式,考虑到轻量级的IPV6网络数据包应用环境与存储内容的不同,采用块状链表结构实现其缓存机制,利用数组与链表相结合的方式对61owpan数据包分片进行存储与重装。 本发明为解决上述技术问题采用以下技术方案
一种基于块状链表结构的61owpan数据包缓存方法,在基于61owpan的无线传感器网络中,根据接收节点对于接收到数据包分片时缓存的状态分为以下A、B、C三种情况处理
A、当链表为空链表,即不存在其他已经缓存的数据包分片,此时对所接收到的数据包分片处理过程如下
Al、读取数据包分片的首部,根据首部字段size的值判断该数据包负载的总大小,然后根据该数据包负载的总大小建立缓冲区,同时根据首部字段tag的值判断该数据包分片所属于的数据包标示信息;
A2、为61owpan分片数据包建立由next、scis、tag、size、Ip-1en组成的五元组;其中各字段定义如下next代表下一节点指针,在每个节点中所表示的意义相同;scis为指向所分配缓冲区的开端的指针;tag用于标示属于同一数据包的一组分片;siZe代表缓冲区的大小,与整个数据包大小一致;Ip-1en表示已经处理过的数据包分片长度,其随着处理数据包分片的数量的增加而增加;
A3、将scis指针指向缓冲区地址;将next指针指向链表的头指针,插入五元组;
A4、继续接收其他数据包分片,返回步骤Al ;
B、当链表为非空链表,即存在其他已经缓存的数据包分片,此时对所接收的数据包分片处理过程如下
B1、读取数据包分片的首部,根据首部字段size的值判断该数据包负载的总大小,根据首部字段tag的值判断该数据包分片所属于的数据包标示信息;
B2、根据BI中所读取的tag的值,在链表中查找是否已存在相同tag值的链表节点,若存在相同tag值的链表节点,则转B3 ;若不存在相同tag值的链表节点,则转B4 ;
B3、根据所查找到的链表节点中的scis指针,将该数据包分片存储至已分配好的缓冲
区;
B4、为该61owpan分片数据包建立由next、scis、tag、size、Ip-1en组成的五元组,根据size的大小建立缓冲区,scis指针指向缓冲区地址;将该节点插入到上一节点后,保存指针;B5、返回步骤BI继续接收其他数据包分片;
C、当链表的最后一个节点已存储了正在接收的数据包分片信息,则丢弃该数据包分片。本发明还提出一种采用基于块状链表结构的61owpan数据包缓存方法对61owpan数据包进行分片处理的方法,采用单向链表的结构对缓存进行维护与管理,包括以下步骤
步骤(1),首先对接收到的数据包报文首部进行解析,判断是否为数据包分片,若是完整的61owpan数据包,则直接对数据包进行首部解压缩,将处理后的IPV6数据包直接交由Uipv6协议栈进行处理;若是数据包分片,则转步骤(2);
步骤(2),对IPV6数据包分片首部进行解析,判断该数据包分片的合法性,若合法则转 步骤(3),若不合法则直接丢弃;
步骤(3),读取IPV6数据包分片首部中的tag值,遍历块状链表,查询是否已经对该数据包的其他分片进行缓存,若没有接收过该数据包的其他分片,则转步骤(4);若已经存在缓存,则转步骤(5);
步骤(4),判断该数据包分片是否为该IPV6数据包的第一个分片
若是第一个分片,则对该IPV6数据包首部进行解压缩,根据首部字段size的值判断该数据包负载的总大小,然后根据该数据包负载的总大小建立缓冲区,并读取块状链表中的scis指针信息来定位缓存位置;将数据按缓存位置存储至缓存空间后,增加该链表节点中的IP-1en的长度,进入步骤(6);
若不是第一个分片,则直接读取块状链表中的scis指针信息来定位缓存位置;将数据按缓存位置存储至缓存空间后,增加该链表节点中的IP-1en的长度,进入步骤(6);
步骤(5),查询缓存空间是否已满,若缓存空间已满,则丢弃该分片;若还有剩余缓存空间,则根据该IPV6数据包首部tag值查找所对应的链表节点中的scis指针,将该分片存储至已分配好的缓冲区,增加该链表节点中的IP-1en的长度,进入步骤(6);
步骤(6),判断IP-1en数值是否等于size的大小,当该IP-1en数值与size大小一致时,表示该缓冲区中的数据包已经重装完成,则需要释放该缓冲区空间,并删除该链表节点;具体方法是定位到IP-1en数值与size数值相等的节点,利用下一节点数据复制到该节点位置;若该节点位置正好是尾节点,则需要遍历整个链表,找到该节点的上一节点,连接上一节点指针至尾节点。作为本发明的对61owpan数据包进行分片处理的方法进一步的优化方案,在缓冲区中设置定时器,定时清空重装失败的分片数据,并删除该缓冲区所对应的链表节点;具体如下定位到该缓存区SCiS指针所在的链表节点,利用下一节点数据复制到该节点位置;若该节点位置正好是尾节点,则需要遍历整个链表,找到该节点的上一节点,连接上一节点指针至尾节点。本发明采用以上技术方案与现有技术相比,具有以下技术效果1、块状链表由于数组大小固定,且存储顺序不受限制,不会因数据问题而导致链表退化。2、解决61owpan实现过程中,对于多节点并发发送数据包时,由于单一缓存机制的限制导致的数据包丢包情况。
3、本发明所提出的利用块状链表结构对多个缓存区进行维护与管理,并没有改变61owpan实现过程中的重装机制,包括偏移量,位图信息,首部信息,只是对这些信息加以利用,其实现可行性较高。4、考虑到无线传感网络的应用环境,为提高内存利用率,提出对比已处理分片长度与数据长度对比测试方法,及时释放缓冲区。


图1是基于本发明的61owpan分片数据包设计的五元组结构图。图2是后续分片首部示意图。图3是第一分片首部示意图。
具体实施例方式下面结合附图对本发明的技术方案做进一步的详细说明
目前,对于61owpan分片与重装的整个过程中,涉及三个缓存区
一个是packet-buf,其大小与一个802. 15. 4数据包的大小相同,用来存储需要802. 15. 4 MAC层解析的数据包。一个是重装缓存,用来存储已经经过802. 15. 4 MAC层解析过的61owpan数据包分片(若解析后不是61owpan分片而是一个完整的61owpan数据包,则不需要重组,而是直接由61owpan解析后交由IPV6层),其大小是一个完整61owpan数据包的大小(可以从第一个分片的首部得知)。另一个缓存区是uipbuf,用于存储重装后的IPV6数据包。由于目前的contiki系统中,重装缓存只有一个,并发的61owpan分片在协议中的处理方法是,当61owpan层接收到不是正在重装的数据包分片时,将该分片丢弃。这是多个传感节点同时给sink节点发送数据时出现丢包的主要原因。因此,本发明提出一个61owpan协议中基于块状链表的缓存方法,采用块状链表结构维护重装缓存,并在此重装缓存机制的基础上,提出了对并发数据包分片接收的处理方法,改善61owpan实现过程中,多节点并发发送数据包的丢包现象。(—)基于块状链表的缓存方法
如图1所示,本发明提出的块状链表,它将数组和链表的优点结合起来,各种操作的时间复杂度均为0(sqrt(n))。从整体上看,块状链表是一个链表,而在链表的每个节点上,以数组的形式存储一组元素。在本发明中,为61owpan分片数据包设计了五元组,其中各字段定义如下
Next :在每个结点中所表示的意义相同,代表下一结点指针;
Scis :是一个指针,指向所分配缓冲区的开端;
Tag :标示了一组属于同一数据包的分片;
Size :是该缓冲区的大小,与整个数据包大小一致;
ip-len :表示已经处理过的分片长度,它会随着处理分片的数量增加而增加。对于智能物件来说,其数据速率通常低于通用计算机的数据速率,缓存管理策略也不必为满足高吞吐量而优化,相反,内存是稀有资源,所以缓存管理机制必须能够在少量内存的情况下高效地工作。因此,在本发明中,采用单向链表的结构对缓存进行维护与管理。在基于61owpan的无线传感器网络中,感知节点(智能物件)与sink (基站节点)或者网关节点接收到数据包分片时缓存的状态有以下三种(链表内存已经申请)
A、链表为空链表,不存在其他已经缓存的数据包分片,此时对所接收到的数据包分片处理过程如下
Al、读取数据包分片首部,判断该数据包负载的总大小,以及数据包分片的tag标示等信息。A2、建立next, scis, tag, size, F的五元组,根据size大小建立缓冲区,scis指针指向缓冲区地址。A3、由于链表为空链表,将next指针指向链表的头指针,插入五元组。A4、继续接收其他分片。B、链表为非空链表,对所接收的数据包分片处理过程如下
B1、读取数据包分片首部,判断该数据包负载的总大小,以及数据包分片的tag标示等信息。B2、根据所读取的tag值,在链表中查找是否已存在相同tag值的链表节点,若存在相同tag值的链表节点,则转B3 ;若不存在相同tag值的链表节点,则转B4。B3、根据所查找到的链表节点中的scis指针,将该分片存储至已分配好的缓冲区。B4、建立next, scis, tag, size, F的五元组,根据size大小建立缓冲区,scis指针指向缓冲区地址。将该节点插入到上一节点后,保存指针。B5、继续接收其他分片。C、由于内存大小限制,链表的最后一个节点已存储了正在接收的数据包分片信息,则若再接收到新的数据包分片,而该分片的tag标示不存在在链表中,则丢弃该分片。在数据包分片接收过程中,所创建的数据缓存以及重装过程与原单一缓存重装机制保持一致,即数据包分片根据位图排列,待接收到所有数据包分片后(缓存区满),缓存区中的数据(IPV6数据包)交由UIPv6协议栈的IP层处理。在本发明中,为了能及时的释放缓存,在五元组中设置了已经处理的IP分片长度ip-len,即在该链表节点所代表的缓冲区中的分片正处于接收状态时,它会随着处理分片数量的增加而增加ip-len的数值,当该ip-len数值与size大小一致时,表示该缓冲区中的数据包已经重装完成,则需要释放该缓冲区空间,并删除该链表节点。具体方法是定位到ip-len数值与size数值相等的节点,利用下一节点数据复制到该节点位置。若该节点位置正好是尾节点,则需要遍历整个链表,找到该节点的上一节点,连接上一节点指针至尾节点。在61owpan重装过程中会出现重装失败的情况,比如分片包丢失,偏移位重叠等。因此为保证资源利用率与重装效率,在缓存中设置定时器,定时清空重装失败的分片数据,并删除该缓冲区所对应的链表节点。方法是定位到该缓存区指针所在的链表节点,利用下一节点数据复制到该节点位置。若该节点位置正好是尾节点,则需要遍历整个链表,找到该节点的上一节点,连接上一节点指针至尾节点。
(二)基于块状链表缓存的61owpan数据包分片处理方法
在Contiki OS中实现61owpan协议的无线传感器网络,对数据包分片的处理机制如下当61owpan适配层接收到来自MAC层的数据包时,首先对报文首部进行解析,判断该数据包是否为数据包分片;若为数据包分片,则通过分片首部判断该分片是否为数据包的第一个分片;若为数据包的第一个分片,则对IPv6首部进行解压缩,若不是第一个分片,则读取分片首部信息,对分片进行缓存。当61owpan适配层正在处理某一数据的数据包分片时,若接收到来自其他数据的数据包分片时,则直接丢弃该分片。其原因是,在Contiki OS中实现61owpan协议时只使用了单一独立的缓存机制,因此无法同时处理并发的数据包分片。图2为除了第一片以外的后续链路分片首部。第一字节(dispatch类型)表明了该首部的类型为分片首部(lllOOnnn)。后3位分配给分片datagram_size标识,从而节省首部空间。Datagram_size : 11位字段。主要表示在链路层分片前的整个IP数据包大小(IPv6 首部+IPv6载荷)。同一数据包的所有分片的datagram_size值应相同。将这一字段写入所有分片首部中,无论哪个分片先到达接收节点,接收节点均可迅速的凭此字段分配出相应大小的接收缓存。11位的长度使得重装单元可达2047个字节,满足网络层MTU1280字节的要求。Datagram_tag :16位数据包标志,同样,同一数据包的所有分片的此标志相同。结合初始节点和最终目的节点的链路层地址以及datagram_Size,可以有效的区分不同的待重装的数据包。发送节点每成功分片一个数据包,datagram_tag加I,直到65535时清O。Datagram_offset :该标志表示了各分片在重装后的IPv6数据包中所处的位置。以8字节为单位,所以8位就能表示整个2047个字节。第一个分片的偏移值为0,出于最优化考虑,在第一分片首部中将这一字段省去,同时dispatch字节改为ΙΙΟΟΟηηη。如图3所
/Jn ο本发明提出了基于块状链表的数据包分片缓存方法,支持61owpan适配层同时处理来自不同数据的数据包分片的重装。其处理过程如下
(I)首先对接收到的数据包报文首部进行解析,判断是否为数据包分片,若是完整的61owpan数据包,则直接对数据包进行首部解压缩,将处理后的IPV6数据包直接交由Uipv6协议栈进行处理;若是数据包分片,则转(2)。(2)对数据包分片首部进行解析,判断该数据包分片的合法性,合法转(3),不合法则直接丢弃。(3)读取分片首部中的tag值,遍历块状链表,查询是否已经对该数据其他分片进行缓存,若已经存在缓存,则转(5),若没有接收过该数据的其他分片,则转(4)。(4)判断该数据包分片是否为第一个分片,若是,则对IPV6首部进行解压缩,并定位块状链表中的缓存位置,读取指针信息,存储数据,增加IP-1en长度,判断IP-1en是否等于size (用于释放缓存空间);若不是第一个分片,则直接定位块状链表中的缓存位置,读取指针信息,存储数据,增加IP-1en长度,判断IP-1en是否等于size (用于释放缓存空间)。(5)查询缓存空间是否已满,若块状链表中的节点均已经存在正在接收的数据包分片,则丢弃该分片;若还有剩余缓存空间,则依据上述块状链表的缓存方法的非空链表插入方法进行缓存。
本发明所提出的是一种对并发数据包分片同时缓存与处理的方法,对于单一的缓存机制以及位图的存储与利用,重装的过程,本发明对原61owpan中的实现方法不做改动。
权利要求
1.一种基于块状链表结构的61owpan数据包缓存方法,其特征在于,在基于61owpan的无线传感器网络中,根据接收节点对于接收到数据包分片时缓存的状态分为以下A、B、C三种情况处理 A、当链表为空链表,即不存在其他已经缓存的数据包分片,此时对所接收到的数据包分片处理过程如下 Al、读取数据包分片的首部,根据首部字段size的值判断该数据包负载的总大小,然后根据该数据包负载的总大小建立缓冲区,同时根据首部字段tag的值判断该数据包分片所属于的数据包标示信息; A2、为61owpan分片数据包建立由next、scis、tag、size、Ip-1en组成的五元组;其中各字段定义如下next代表下一节点指针,在每个节点中所表示的意义相同;scis为指向所分配缓冲区的开端的指针;tag用于标示属于同一数据包的一组分片;siZe代表缓冲区的大小,与整个数据包大小一致;Ip-1en表示已经处理过的数据包分片长度,其随着处理数据包分片的数量的增加而增加; A3、将scis指针指向缓冲区地址;将next指针指向链表的头指针,插入五元组; A4、继续接收其他数据包分片,返回步骤Al ; B、当链表为非空链表,即存在其他已经缓存的数据包分片,此时对所接收的数据包分片处理过程如下 B1、读取数据包分片的首部,根据首部字段size的值判断该数据包负载的总大小,根据首部字段tag的值判断该数据包分片所属于的数据包标示信息; B2、根据BI中所读取的tag的值,在链表中查找是否已存在相同tag值的链表节点,若存在相同tag值的链表节点,则转B3 ;若不存在相同tag值的链表节点,则转B4 ; B3、根据所查找到的链表节点中的scis指针,将该数据包分片存储至已分配好的缓冲区; B4、为该61owpan分片数据包建立由next、scis、tag、size、Ip-1en组成的五元组,根据size的大小建立缓冲区,scis指针指向缓冲区地址;将该节点插入到上一节点后,保存指针; B5、返回步骤BI继续接收其他数据包分片; C、当链表的最后一个节点已存储了正在接收的数据包分片信息,则丢弃该数据包分片。
2.一种采用权利要求1所述的基于块状链表结构的61owpan数据包缓存方法对61owpan数据包进行分片处理的方法,其特征在于,采用单向链表的结构对缓存进行维护与管理,包括以下步骤 步骤(1),首先对接收到的数据包报文首部进行解析,判断是否为数据包分片,若是完整的61owpan数据包,则直接对数据包进行首部解压缩,将处理后的IPV6数据包直接交由Uipv6协议栈进行处理;若是数据包分片,则转步骤(2); 步骤(2),对IPV6数据包分片首部进行解析,判断该数据包分片的合法性,若合法则转步骤(3),若不合法则直接丢弃; 步骤(3),读取IPV6数据包分片首部中的tag值,遍历块状链表,查询是否已经对该数据包的其他分片进行缓存,若没有接收过该数据包的其他分片,则转步骤(4);若已经存在缓存,则转步骤(5);步骤(4),判断该数据包分片是否为该IPV6数据包的第一个分片若是第一个分片,则对该IPV6数据包首部进行解压缩,根据首部字段size的值判断该数据包负载的总大小,然后根据该数据包负载的总大小建立缓冲区,并读取块状链表中的 scis指针信息来定位缓存位置;将数据按缓存位置存储至缓存空间后,增加该链表节点中的IP-1en的长度,进入步骤(6);若不是第一个分片,则直接读取块状链表中的scis指针信息来定位缓存位置;将数据按缓存位置存储至缓存空间后,增加该链表节点中的IP-1en的长度,进入步骤(6);步骤(5),查询缓存空间是否已满,若缓存空间已满,则丢弃该分片;若还有剩余缓存空间,则根据该IPV6数据包首部tag值查找所对应的链表节点中的scis指针,将该分片存储至已分配好的缓冲区,增加该链表节点中的IP-1en的长度,进入步骤(6);步骤(6),判断IP-1en数值是否等于size的大小,当该IP-1en数值与size大小一致时,表示该缓冲区中的数据包已经重装完成,则需要释放该缓冲区空间,并删除该链表节点;具体方法是定位到IP-1en数值与size数值相等的节点,利用下一节点数据复制到该节点位置;若该节点位置正好是尾节点,则需要遍历整个链表,找到该节点的上一节点,连接上一节点指针至尾节点。
3.根据权利要求2所述的采用基于块状链表结构的61owpan数据包缓存方法对 61owpan数据包进行分片处理的方法,其特征在于在缓冲区中设置定时器,定时清空重装失败的分片数据,并删除该缓冲区所对应的链表节点;具体如下定位到该缓存区scis指针所在的链表节点,利用下一节点数据复制到该节点位置;若该节点位置正好是尾节点,则需要遍历整个链表,找到该节点的上一节点, 连接上一节点指针至尾节点。
全文摘要
本发明公开了一种基于块状链表结构的6lowpan数据包重装缓存方法,针对sk-buff结构的存储方式,考虑到轻量级的IPV6网络数据包应用环境与存储内容的不同,采用块状链表结构实现其缓存机制,利用数组与链表相结合的方式对6lowpan数据包分片进行存储与重装。包括基于块状链表结构的数据缓存方法,以及采用基于块状链表结构的数据缓存方法对6lowpan数据包进行分片处理的方法。本发明解决6lowpan实现过程中,对于多节点并发发送数据包时,由于单一缓存机制的限制导致的数据包丢包情况,且块状链表由于数组大小固定,且存储顺序不受限制,不会因数据问题而导致链表退化。
文档编号H04L12/861GK103023808SQ20121058098
公开日2013年4月3日 申请日期2012年12月28日 优先权日2012年12月28日
发明者孙知信, 骆冰清 申请人:南京邮电大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1