一种6LoWPAN协议中地址压缩控制表的维护方法转让专利

申请号 : CN201110130512.6

文献号 : CN102196058B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 华贵斌江勇赵倩吴双桥吴俊华

申请人 : 清华大学深圳研究生院

摘要 :

本发明公开了一种6LoWPAN协议中地址压缩控制表的维护方法,包括步骤:在协调器节点存有控制表和地址缓存表,协调器节点将包含地址缓存表中需要更新到控制表中的IPV6地址前缀和控制表中对应的索引号CID的报文发送到相邻的子节点;协调器子节点中的中间节点用该报文对上联控制表中对应地址进行更新,向所述协调器节点发送确认信息,并向与该中间节点连接的子节点转发该报文;子节点用该报文对本地的对应地址进行更新,并向中间节点发送确认信息,中间节点收到其所有相邻的子节点的确认信息后对下联控制表中对应地址更新;协调器节点接收到与其所有相邻的子节点的确认信息后,将控制表中对应地址更新。从而降低了网络的时延和负载。

权利要求 :

1.一种6LoWPAN协议中地址压缩控制表的维护方法,其特征是,包括如下步骤:a、在协调器节点存有控制表和地址缓存表,协调器节点将包含地址缓存表中需要更新到控制表中的IPV6地址前缀和控制表中对应的索引号CID的报文发送到相邻的子节点;

b、协调器子节点中的中间节点用该报文对上联控制表中对应地址进行更新,向所述协调器节点发送确认信息,并向与该中间节点连接的子节点转发该报文;

c、所述中间节点的子节点用该报文对本地的控制表或者上联控制表中对应地址进行更新,并向所述中间节点发送确认信息,所述中间节点收到其所有相邻的子节点的确认信息后对下联控制表中对应地址进行更新;

d、所述协调器节点接收到与其所有相邻的子节点的确认信息后,将所述控制表中对应地址进行更新;

其中,中间节点是能转发数据包的节点,步骤c中的所述中间节点的子节点包括端节点和中间节点,端节点是不能转发数据包的节点。

2.如权利要求1所述的6LoWPAN协议中地址压缩控制表的维护方法,其特征是:所述控制表由多个表项组成,每个表项包括对应索引号CID的IPV6地址前缀项和更新项,其中,更新项包括正在更新和没有更新两个状态,所述地址缓存表包括IPV6地址前缀项;

所述步骤a还包括:将所述控制表中索引号CID对应的表项的更新项设置为正在更新;

所述步骤b中,所述中间节点接收到所述报文后,用所述IPV6地址前缀对所述上联控制表中对应所述索引号CID的表项的IPV6地址前缀项进行更新;

所述步骤c中,所述端节点接收到所述报文后,用所述IPV6地址前缀对所述端节点的控制表中对应所述索引号CID的表项的IPV6地址前缀项进行更新;所述中间节点接受到该节点所有子节点的确认信息后,用所述IPV6地址前缀对所述下联控制表中对应所述索引号CID的表项的IPV6地址前缀项进行更新;

所述步骤d还包括:将所述表项的更新项设置为没有更新;所述步骤d中,所述协调器节点接收到与所述协调器节点连接的所有节点的确认信息后,用所述IPV6地址前缀对所述表项的IPV6地址前缀项进行更新。

3.如权利要求2所述的6LoWPAN协议中地址压缩控制表的维护方法,其特征是:所述表项还包括效力项和权重项;所述地址缓存表还包括与IPV6地址前缀项对应的权重项;其中,效力项具有有效和无效两个状态;还包括以下步骤:e、在所述地址缓存表中,将与有效的效力项对应的权重项的数值减N1,若权重项的数值小于或等于阈值M1,则将对应的效力项设置为无效;

f、在所述控制表中,将与有效的效力项对应的权重项的数值减N2,若权重项的数值小于或者等于阈值M2,则将对应的效力项设置为无效;

g、判断所述控制表中是否存在无效的效力项,若有则执行步骤h;

h、在所述地址缓存表的有效的效力项中,找出数值最大的权重项,将对应的效力项置为无效,其中,步骤a中需要更新到控制表中的IPV6地址前缀为所述数值最大的权重项对应的IPV6地址前缀,步骤a中所述的索引号CID为步骤g中所述无效的效力项对应的索引号CID,所述步骤d中还包括,将所述控制表中所述表项的效力项置为有效;

其中,N1、N2、M1和M2是正整数。

4.如权利要求3所述的6LoWPAN协议中地址压缩控制表的维护方法,其特征是:在步骤g中,若所述控制表不存在无效的效力项,则执行步骤i;

i、判断所述地址缓存表的有效的效力项中最大权重项的数值,是否大于K倍所述控制表的有效的效力项中最小权重项的数值,若是则执行步骤j;

j、其中,步骤a中需要更新到控制表中的IPV6地址前缀为所述最大权重项对应的IPV6地址前缀,步骤a中所述的索引号CID为所述最小权重项对应的索引号CID;将所述最小权重项的数值置为a与所述最大权重项的数值除以K的和;所述步骤d中还包括,将所述控制表中所述表项的效力项置为有效,将所述地址缓存表中所述最大权重项的效力项置为无效;步骤d中所述协调器节点对控制表的更新为:将所述最大权重项对应的IPV6地址前缀项与所述最小权重项对应的IPV6地址前缀项互换数值,其中a和K是正整数。

5.如权利要求4所述的6LoWPAN协议中地址压缩控制表的维护方法,其特征是:所述协调器节点在接收到数据包后执行以下步骤:步骤a1、所述协调器节点在接收到的数据包中提取源IPV6地址前缀和目的IPV6地址前缀,若数据包包含具有索引号CID的6LoWPAN包头,则执行步骤a2;否则执行步骤a3;

步骤a2、在所述控制表中,对与步骤a1中所述索引号CID对应的权重项的数值加N3;

a3、对所述地址缓存表执行以下步骤:

步骤a31、若存在所述源IPV6地址前缀或目的IPV6地址前缀,则将对应的权重项的数值加N4;否则查找是否存在状态是无效的效力项;

步骤a32、若存在状态是无效的效力项,则将所述源IPV6地址前缀或目的IPV6地址前缀写入与该效力项对应的IPV6地址前缀项中,并将该效力项的状态设置为有效,对应的权重项的数值设置为M3;

步骤a33、若不存在状态是无效的效力项,则在与数值最小的权重项对应的IPV6地址前缀项中,写入所述源IPV6地址前缀或目的IPV6地址前缀,并将对应的权重项的数值设置为M3;

其中N3、N4和M3是正整数。

6.如权利要求5所述的6LoWPAN协议中地址压缩控制表的维护方法,其特征是:在所述步骤a2中,若所述索引号CID对应的权重项的数值为一定数值M4,则保持该数值不变;

在所述步骤a31中,若所述对应的权重项的数值为一定数值M5,则保持该数值不变;其中M4和M5是正整数。

7.如权利要求6所述的6LoWPAN协议中地址压缩控制表的维护方法,其特征是:所述索引号CID长度是4比特,所述效力项长度是1比特,更新项长度是1比特,所述控制表的权重项长度是6比特,所述地址缓存表的权重项长度是7比特;所述N1=N2=N3=N4=1,M1=M2=0,K=2,M3=4,M4=63,M5=127。

8.如权利要求1所述的6LoWPAN协议中地址压缩控制表的维护方法,其特征是:当所述上联控制表与下联控制表不一致时,所述中间节点采用上联控制表与其父节点通信,采用下联控制表与其子节点通信;若同一IPV6地址前缀在上联控制表和下联控制表中对应不同的索引号CID,将收到的数据包的索引号CID转换为与下联控制表对应的索引号CID后,再进行转发。

说明书 :

一种6LoWPAN协议中地址压缩控制表的维护方法

技术领域

[0001] 本发明属于基于IPv6的低速无线个域网技术领域,尤其涉及一种6LoWPAN协议中地址压缩控制表的维护方法。

背景技术

[0002] 为了更好的理解本发明的背景技术,可以参考以下技术资料:
[0003] [1] RFC 4944, Transimission of IPv6 Packets over IEEE802.15.4 Networks[0004] [2] draft-ietf-6lowpan-hc-07, Compression Format for IPv6 Datagrams in6LoWPAN Networks
[0005] [3] draft-ietf-6lowpan-nd-09, Neighbor Discovery Optimization for Low-power and Lossy Networks
[0006] 无线个人局域网(WPAN)是一种采用无连接的个人局域网。2003年7月,IEEE为LR-WPAN推出了IEEE802.15.4技术标准,该协议主要定义了物理层(PHY)和媒体访问控制层(MAC)的协议,主要应用场合是自动化读表、自动化控制和传感器网络。IEEE802.15.4专注于低速率、低功耗的短距离无线连接,最高速率仅为250kbps,电池寿命可达6个月到2年,是一种经济高效、低复杂度、低功耗、低数据率和低成本的无线网络技术。
[0007] 最早在IEEE802.15.4上提出网络层协议的是ZigBee联盟,他们定义了网络层和应用层的数据帧格式和交互方式,然而ZigBee协议无法与现有的IP网络直接通信,因此人们又提出了 6LoWPAN协议,6LoWPAN是为了能使无线传感器网络和IPv6网络互联互通而设计的一个协议,可以说是IPv6为应用于无线传感器网络环境而设计的简化版。6LoWPAN所具有的低功率运行的潜力使它很适合应用于从手持机到仪器的设备中,同时对AES-128加密的支持也为无线网络提供了强健的安全性。
[0008] 为了能在802.15.4链路上高效的传输IPv6的报文,6lowpan在链路层和网络层之间引入了适配层,通过适配层来大量降低IPv6报文的传输开销。这种“pay as you go”式的包头压缩方法去除了IP包头中的冗余或不必要的网络信息,IP包头在接收时从链路级802.15.4包头的相关域中得到这些网络级信息。
[0009] IEEE802.15.4的物理层MTU值为127字节,数据帧控制开销最多要消耗25字节,因此数据链路层只有102字节可用;数据链路层安全算法要消耗21字节(AES-CCM-128占用21字节,AES-CCM-64占用13字节,AES-CCM-32占用9字节),对于网络层负载只有81字节可用;再考虑40字节IPv6包头和8字节UDP包头,剩余33字节给应用层使用;因此简化IPv6包头势在必行。
[0010] 6lowpan适配层报头压缩的基本原理是将ipv6包头中的字段提取出来组成新的包头,用一个字节的dispatch字段标识后续哪些字段使用何种方式进行了简化。在最佳情况下,40字节的IPv6地址可以压缩为一个字节的压缩字段和1字节的hop limit字段。6lowpan适配层数据包头格式如图所示1至3所示。
[0011] 为了实现IPv6包头的压缩功能,RFC4944定义了LOWPAN_HC1报头和LOWPAN_BC0报头,LOWPAN_HC1报头压缩的是IPv6报文,LOWPAN_BC0包头压缩的是广播报文。LOWPAN_HC1数据包头格式如图4所示,其中,
[0012] SA:IPv6源地址压缩控制
[0013] DA:IPv6目的地址压缩控制
[0014] TF:流量类别和流标签字段控制
[0015] NH:下一包头字段控制
[0016] HC2:HC2压缩控制(UDP、ICMP、TCP)
[0017] 源IPv6地址和目的IPv6地址在40字节的IPv6包头中一共占用了32字节,是最大的一部分开销。LOWPAN_HC1包头允许从链路层地址生成IPv6地址,具体方法是使用48bits的mac地址生成EUI-64地址,然后用本地链路网络前缀和生成的EUI-64[0018] 地址组合成本地链路的IPv6地址。由于LOWPAN_HC1只适用于压缩本地链路的IPv6地址,而对于全局地址无法适用,只能在后续包头中包含完整的32字节IPv6地址。因此有人提出了LOWPAN_IPHC报头,它依赖于一张整个网络共享的CONTEXT表,用4bits作为表项的索引CID,对应有16个表项,每个表项存储一个IPv6地址的64位前缀(采用定长64位IPv6地址前缀方案);这样我们就可以有16个被索引的网络,每个网络的64bits前缀可以用4bits的索引CID代替,对一个IPv6地址就节约了60bits的包头空间。如图5所示,6LOWPAN_IPHC 压缩报头格式,LOWPAN_IPHC的编码字段如下:TF:流量类别和流标签字段控制;NH:下一头字段控制;HLIM:跳数字段限制;CID:CONTEXT索引字段控制;SAC:IPv6源地址压缩控制;SAM:IPv6源地址压缩模式;M:多播压缩控制;DAC:IPv6目标地址压缩控制;DAM:IPv6目标地址压缩模式。
[0019] 当CONTEXT表维护算法得出某个地址前缀被数据包高频率使用时,需要将该前缀放入CONTEXT表中,协调器节点将CONTEXT表项进行更新操作,需要对整个网络进行同步;其中协调器节点将向各结点广播CONTEXT更新表项,其报文采用6lowpan邻居发现协议中的CONTEXT选项格式,报文格式如图6所示,其中CID项占4个比特的空间。
[0020] 基于IPv6的无线传感器网络使用6lowpan协议在网络内部进行通讯,为了适应IEEE802.15.4的短帧长数据帧和无线传感器网络的低功率特性,6lowpan协议在数据链路层和网络层之间增加了一个适配层,其主要目的是对网络层的IPv6包头及网络层以上的包头部分进行压缩,去除冗余数据,达到网络流量的优化效果。最新的6LoWPAN协议采用的使IPHC包头压缩算法,该算法的核心思想使维护一张全网同步的CONTEXT表,使用该表为包头压缩提供支持。
[0021] LOWPAN_IPHC压缩报头采用CONTEXT表来辅助压缩IPv6地址,然而要使的整个网络任意结点都能正确识别压缩后的6lowpan数据包,则必须将CONTEXT表同步到整个网络中,往往会造成较大的时延。而LOWPAN_IPHC采用CONTEXT表的初衷是为了用CID代替IPv6地址前缀,以达到减少包头,降低网络中流量的目的。但是CONTEXT表的引入本身又需要管理开销,这样又给整个网络中增加了管理数据流量。特别是CONTEXT表项的更新,CONTEXT每一项更新都需要保证更新项能被同步到整个网络的结点中去,因此造成了客观上的网络流量的增多。另一方面,如果CONTEXT表项更新算法设计的不好,在网络突发流量的时候可能会导致表项的频繁更新,从而加重网络负载。

发明内容

[0022] 为了解决上述时延较大的技术问题,进一步解决网络负载较大的技术问题,本发明提供了一种6LoWPAN协议中地址压缩控制表的维护方法,包括如下步骤: [0023] a、在协调器节点存有控制表和地址缓存表,协调器节点将包含地址缓存表中需要更新到控制表中的IPV6地址前缀和控制表中对应的索引号CID的报文发送到相邻的子节点;
[0024] b、协调器子节点中的中间节点用该报文对上联控制表中对应地址进行更新,向所述协调器节点发送确认信息,并向与该中间节点连接的子节点转发该报文; c、所述中间节点的子节点用该报文对本地的控制表或者上联控制表中对应地址进行更新,并向所述中间节点发送确认信息,所述中间节点收到其所有相邻的子节点的确认信息后对下联控制表中对应地址进行更新;
[0025] d、所述协调器节点接收到与其所有相邻的子节点的确认信息后,将所述控制表中对应地址进行更新;
[0026] 其中,中间节点是能转发数据包的节点,步骤c中的所述中间节点的子节点包括端节点和中间节点,端节点是不能转发数据包的节点。
[0027] 优选地,所述控制表由多个表项组成,每个表项包括对应索引号CID的IPV6地址前缀项和更新项,其中,更新项包括正在更新和没有更新两个状态,所述地址缓存表包括IPV6地址前缀项;
[0028] 所述步骤a还包括:将所述IPV6地址前缀对应的表项的更新项设置为正在更新;
[0029] 所述步骤b中,所述中间节点接收到所述报文后,用所述IPV6地址前缀对所述上联控制表中对应所述索引号CID的表项的IPV6地址前缀项进行更新;
[0030] 所述步骤c中,所述端节点接收到所述报文后,用所述IPV6地址前缀对所述端节点的控制表中对应所述索引号CID的表项的IPV6地址前缀项进行更新;
[0031] 所述步骤d还包括:将所述表项的更新项设置为没有更新;所述步骤d中,所述协调器节点接收到与所述协调器节点连接的所有节点的确认信息后,用所述IPV6地址前缀对所述表项的IPV6地址前缀项进行更新。
[0032] 优选地,所述表项还包括效力项和权重项;所述地址缓存表还包括与IPV6地址前缀项对应的权重项;其中,效力项具有有效和无效两个状态;还包括以下步骤:
[0033] e、在所述地址缓存表中,将与有效的效力项对应的权重项的数值减N1,若权重项的数值小于或等于阈值M1,则将对应的效力项设置为无效;
[0034] f、在所述控制表中,将与有效的效力项对应的权重项的数值减N2,若权重项的数值小于或者等于阈值M2,则将对应的效力项设置为无效;
[0035] g、判断所述控制表中是否存在无效的效力项,若有则执行步骤h;
[0036] h、在所述地址缓存表的有效的效力项中,找出数值最大的权重项,将对应的效力项置为无效,其中,步骤a中需要更新到控制表中的IPV6地址前缀为所述数值最大的权重项对应的IPV6地址前缀,步骤a中所述的索引号CID为步骤g中所述无效的效力项对应的索引号CID,所述步骤d中还包括,将所述控制表中所述表项的效力项置为有效;
[0037] 其中,N1、N2、M1和M2是正整数。
[0038] 优选地,在步骤g中,若所述控制表不存在无效的效力项,则执行步骤i;
[0039] i、判断所述地址缓存表的有效的效力项中最大权重项的数值,是否大于K倍所述控制表的有效的效力项中最小权重项的数值,若是则执行步骤j;
[0040] j、其中,步骤a中需要更新到控制表中的IPV6地址前缀为所述最大权重项对应的IPV6地址前缀,步骤a中所述的索引号CID为所述最小权重项对应的索引号CID;将所述最小权重项的数值置为a与所述最大权重项的数值除以K的和;所述步骤d中还包括,将所述控制表中所述表项的效力项置为有效,将所述地址缓存表中所述最大权重项的效力项置为无效;步骤d中所述协调器节点对控制表的更新为:将所述最大权重项对应的IPV6地址前缀项与所述最小权重项对应的IPV6地址前缀项互换数值,其中a和K是正整数。
[0041] 优选地,所述协调器节点在接收到数据包后执行以下步骤:
[0042] 步骤a1、所述协调器节点在接收到的数据包中提取源IPV6地址前缀和目的IPV6地址前缀,若数据包包含具有索引号CID的6LoWPAN包头,则执行步骤a2;否则执行步骤a3;
[0043] 步骤a2、在所述控制表中,对与步骤a1中所述索引号CID对应的权重项的数值加N3;
[0044] a3、对所述地址缓存表执行以下步骤:
[0045] 步骤a31、若存在所述源IPV6地址前缀或目的IPV6地址前缀,则将对应的权重项的数值加N4;否则查找是否存在状态是无效的效力项;
[0046] 步骤a32、若存在状态是无效的效力项,则将所述源IPV6地址前缀或目的IPV6地址前缀写入与该效力项对应的IPV6地址前缀项中,并将该效力项的状态设置为有效,对应的权重项的数值设置为M3;
[0047] 步骤a33、若不存在状态是无效的效力项,则在与数值最小的权重项对应的IPV6地址前缀项中,写入所述源IPV6地址前缀或目的IPV6地址前缀;
[0048] 其中N3、N4和M3是正整数。
[0049] 优选地,在所述步骤a2中,若所述索引号CID对应的权重项的数值为一定数值M4,则保持该数值不变;在所述步骤a31中,若所述对应的权重项的数值为一定数值M5,则保持该数值不变;其中M4和M5是正整数。
[0050] 优选地,所述索引号CID长度是4比特,所述效力项长度是1比特,更新项长度是1比特,所述控制表的权重项长度是6比特,所述地址缓存表的权重项长度是7比特;所述N1=N2=N3=N4=1,M1=M2=0,K=2,M3=4,M4=63,M5=127。
[0051] 优选地,当所述上联控制表与下联控制表不一致时,所述中间节点采用上联控制表与其父节点通信,采用下联控制表与其子节点通信;若同一IPV6地址前缀在上联控制表和下联控制表中对应不同的索引号CID,将收到的数据包的索引号CID转换为与下联控制表对应的索引号CID后,再进行转发。
[0052] 本发明针是6LOWPAN无线传感器网络上基于LOWPAN_IPHC的CONTEXT表维护算法。该方法在现有的LOWPAN_IPHC压缩包头和CONTEXT设计的基础上,具有如下优点:
[0053] 1.在CONTEXT表和CONTEXT地址缓存表中都有一项weight权重项,用该字段保存该IPv6地址前缀在6lowpan网络中出现的频率,使得我们可以在其中调度出高频率的IPv6地址前缀保存在CONTEXT表中。
[0054] 2.为能使得占少量几个比特空间的权重项能表示尽量多的出现频率值,在算法中采用了计时器定时对全部的权值进行递减操作,而在每个IPv6地址前缀在数据包中出现时又进行增操作,这样的方式可以保证近期活跃的IPv6地址前缀可以获得更高的权重。
[0055] 3.将流经协调器节点结点的数据包中的地址前缀进行统计,获得IPv6地址前缀的出现频率,并以频率权值的形式保存在CONTEXT地址缓存表中。
[0056] 4.在中间结点(路由器结点)中引入了上联CONTEXT表和下联CONTEXT表,使得分层同步算法成为可能,分层同步算法使每个结点仅同步自己的子结点,这样使得基于IPHC的6LowPAN协议在大规模网络应用时可能出现的CONTEXT表更新延迟问题得到有效的减缓。
[0057] 5.在更新CONTEXT表项的时候引入了防抖动系数,防止出现频率相近的IPv6地址前缀而产生的CONTEXT表项频繁更新问题。
[0058] 综上,本发明借鉴了操作系统中的缓存管理的思想,包括访问频率权值、地址缓存、更新字段、防抖动系数、LFU调度算法等,避免了由于频繁更新CONTEXT表项而导致的网络带宽资源浪费和能量消耗,保证近期活跃的IPv6地址前缀可以获得更高的权重,以使网络达到优化。同时又提出了CONTEXT表的分层同步算法,使得基于IPHC的6LowPAN协议在大规模网络应用时可能出现的CONTEXT表更新延迟问题得到有效的减缓。

附图说明

[0059] 图1是一般的IPV6数据报文格式;
[0060] 图2是LowPan_HC1压缩IPV6数据报文格式;
[0061] 图3是LowPan_HC1压缩IPV6数据报文并通过L2层Mesh方式传输格式;
[0062] 图4是6LOWPAN_HC1压缩报头格式;
[0063] 图5是6LOWPAN_IPHC压缩报头格式;
[0064] 图6是6LOWPAN邻居发现协议中的CONTEXT更新项格式;
[0065] 图7是CONTEXT表分层同步算法示意图。

具体实施方式

[0066] 以下将结合附图,对本发明的具体实施例作进一步详细说明。
[0067] 本发明的6LoWPAN协议中地址压缩控制表的维护方法的一种具体实施例,包括如下步骤:
[0068] a、在协调器节点存有控制表和地址缓存表,协调器节点将包含地址缓存表中需要更新到控制表中的IPV6地址前缀和控制表中对应的索引号CID的报文发送到相邻的子节点;
[0069] b、协调器子节点中的中间节点用该报文对上联控制表中对应地址进行更新,向所述协调器节点发送确认信息,并向与该中间节点连接的子节点转发该报文; c、所述中间节点的子节点用该报文对本地的控制表或者上联控制表中对应地址进行更新,并向所述中间节点发送确认信息,所述中间节点收到其所有相邻的子节点的确认信息后对下联控制表中对应地址进行更新;
[0070] d、所述协调器节点接收到与其所有相邻的子节点的确认信息后,将所述控制表中对应地址进行更新;
[0071] 其中,中间节点是能转发数据包的节点,步骤c中的所述中间节点的子节点包括端节点和中间节点,在步骤c中,当所述中间节点的子节点是端节点时,则用该报文对本地的控制表中对应地址进行更新,当所述中间节点的子节点是中间节点时,则用该报文对本地的上联控制表中对应地址进行更新;端节点是不能转发数据包的节点。
[0072] 本发明的6LoWPAN协议中地址压缩控制表的维护方法的更为具体的实施例中,首先在协调器节点中生成控制表,或者称之为CONTEXT表,用于CID索引IPV6地址前缀,网络中每个叶结点和根结点都保留一份CONTEXT表,中间结点保留2份CONTEXT表,分别为上联CONTEXT表(或者称为上联控制表)和下联CONTEXT表(或者称为下联控制表),其中协调器节点属于根节点;端节点属于叶节点,不能转发数据包;中间节点位于端节点和协调器节点之间,能转发数据包;其中CONTEXT表格式如下:
[0073]IPv6Prefix(64bits) Valid(1bit) Update(1bit) CIDWeight(6bits)

[0074] IPv6地址前缀项IPv6 Prefix:对应CID的64bits的IPV6地址前缀,占64比特;
[0075] 效力项Valid:表示该项是否有效,占1比特,1表示有效,0表示无效;
[0076] 更新项Update:表示该表项是否正在更新过程中,占1比特,1表示正在更新,0不在更新;
[0077] 权重项CID Weight:该表项的权值,占6比特,仅在协调器结点中有效。
[0078] CONTEXT表只有16个表项,每一项占据9字节内存,总张表占用144字节内存。索引号CID即是CONTEXT表的项数序号,例如,第零个表项,表示其对应的索引号CID则是
0,用二进制表述为0000。当然,可以在CONTEXT表中额外的比特来表示索引号CID,但这样会增大CONTEXT表的大小,更新起来对网络造成更大的负担。另外,本发明是针对通过CONTEXT表进行压缩的6lowpan邻居发现协议中的CONTEXT更新项格式中的CID进行的维护算法,因而索引号CID的比特位数可以根据该格式中CID的比特位数进行调整。由于中间节点和端节点只关注IPV6地址前缀和其对应的索引号CID,因而中间节点和端节点的CONTEXT表可以只包括IPv6地址前缀项IPv6 Prefix。
[0079] CONTEXT表由网络协调器结点维护,每次有表项更新时由协调器结点发送广播包,端结点和路由器结点接收到更新信息后对本地保存的CONTEXT表副本进行更新操作。
[0080] 接下来在协调器节点中生成CONTEXT地址缓存表,用于存储数据包中出现频率较高的IPv6地址前缀,CONTEXT地址缓存表格式如下:
[0081]IPv6Prefix(64bits) Valid(1bit) Weight(7bits)

[0082] IPv6地址前缀项IPv6 Prefix:对应CID的64bits的IPV6地址前缀;
[0083] 效力项Valid:表示该项是否有效,占1比特,1表示有效,0表示无效; [0084] 权重项CID Weight:该表项的权值,占7比特,仅在协调器结点中有效。
[0085] CONTEXT地址缓存表的表项数设置为256项(可以根据实际情况变更项数),每项占用9字节内存。CONTEXT表中的项必定来自于CONTEXT地址缓存表,维护算法在CONTEXT地址缓存表中挑选高频出现的IPv6地址前缀并依据调度算法更新到CONTEXT表中。为了减少更新CONTEXT表项所带来的网络流量,对于出现频率相近的IPv6地址前缀,我们倾向于保留已经在CONTEXT表中使用的IPv6地址前缀,即通过控制防抖系数a来减少其频繁更新。
[0086] 本发明的6LoWPAN协议中地址压缩控制表的维护方法另一种具体实施例中,协调器节点每接收到一个内网6lowpan数据包或外网IPv6数据包的处理流程如下:
[0087] 步骤1 从数据包中分别提取出源IPv6地址前缀和目的IPv6地址前缀,若接收到的数据包包含6lowpan包头且为携带CID压缩包头,则转步骤2;否则(若为若非6lowpan包头或6lowpan包头不带CID压缩),则转步骤3。
[0088] 步骤2 在CONTEXT表中查找对应的CID,并将CID weight 执行+1操作,若已为最大值63则不执行+1操作,维持CID weight的值不变,结束协调器节点此轮处理;
[0089] 步骤3 查找CONTEXT地址缓存表;
[0090] 步骤3.1 若在CONTEXT地址缓存表中找到该地址前缀,则将该项权重项Weight值+1(若该权重项Weight值已经为127,则不改动)
[0091] 步骤3.2 若在CONTEXT地址缓存表中未找到该地址前缀,则查找valid=0的表项。
[0092] 步骤3.3 若找到valid=0的表项,则将该源IPv6地址前缀或目的IPv6地址前缀填入该表项,并将valid置1,设置weight=4;
[0093] 步骤3.4 若没找到valid=0 的表项,则将该源IPv6地址前缀和目的IPv6地址前缀填入地址缓存表中weight值最小表项的IPv6地址前缀项中。
[0094] 本发明的6LoWPAN协议中地址压缩控制表的维护方法一种具体实施例中,协调器节点的定时器控制定期执行,检查是否有高频率出现的地址前缀需要放入CONTEXT表中。
[0095] 步骤4 (老化机制)遍历CONTEXT地址缓存表项,对每个valid=1的表项的weight值-1操作,若-1后weight值为0则置该valid值为0;
[0096] 步骤5 遍历CONTEXT表项,对每个valid=1的表项的CID weight值进行-1操作,若-1后CID weight值为0则置该valid值为0;
[0097] 步骤6 判断CONTEXT表中是否有valid=0的表项,若有则执行步骤7,否则执行步骤8;
[0098] 步骤7 则找出max{CONTEXT地址缓存表项中的weight值(valid=1)},即在地址缓存表中,找出valid=1且weight值最大的表项的IPv6地址前缀项,进行CONTEXT表项更新操作,采用CONTEXT表的分层同步流程进行更新(即步骤10-14),并将CONREXT缓存表项中对应的效力项valid置为0;实践中,也可以采用现有技术中,直接用CONTEXT地址缓存表项中weight值最大对应的地址对CONTEXT表项中valid=0对应的IPv6 Prefix进行更新,然后通过协调器节点发送到与其直接相连的节点,而并非采用CONTEXT表的分层同步的方法;重复步骤6;
[0099] 步骤8 判断max{CONTEXT地址缓存表项中的weight值(valid=1)}是否大于2倍的min{CONTEXT表项中的CID weight值(valid=1)} ;即判断valid=1的CONTEXT地址缓存表项中的最大weight值,是否大于2倍的valid=1的CONTEXT表项中的最小CID weight值,若是,继续步骤9,否则结束协调器节点此轮操作;
[0100] 步骤9 将max{CONTEXT地址缓存表项中的weight值}的CONTEXT地址缓存表项和min{CONTEXT表项中的CID weight值}的CONTEXT表项,即对valid=1的CONTEXT地址缓存表项中的weight值最大的对应的IPv6地址前缀项,以及valid=1的CONTEXT表项中的CID weight值最小的对应的IPv6地址前缀项,进行CONTEXT表项更新操作(即步骤15-17)。实践中,也可以采用现有技术中,直接用CONTEXT地址缓存表项中weight值最大对应的地址对CONTEXT表项中valid=0对应的IPv6 Prefix进行更新,然后通过协调器节点将更新的CONTEXT表项发送到与其直接相连的节点,而并非采用CONTEXT表的分层同步的方法;重复步骤8;
[0101] 本发明的6LoWPAN协议中地址压缩控制表的维护方法一种具体实施例中,CONTEXT表的分层同步流程。
[0102] 当CONTEXT表维护算法得出某个地址前缀被数据包高频率使用时,需要将该前缀放入CONTEXT表中,而此时CONTEXT表中尚有valid=0 的表项;协调器节点将CONTEXT表项进行更新操作,需要对整个网络进行同步,采用分层同步的方式可以减小大规模无线传感器网络同步造成的延时问题,该算法适用于树形无线传感器网络拓扑结构,如图7所示。T1是协调器节点,T2、T4和T6是中间节点,T3、T5、T7、T8和T9是端节点。T1、T2、T3和T4处于同一个同步周期1内,T2、T5、T6同处于同步周期2,T4、T7同处于同步周期3,T6、T8、T9同处于同步周期4。
[0103] 其具体步骤如下(此时已获取到待填的CONTEXT表项、和需要更新到该待填的CONTEXT表项的CONTEXT地址缓存表项):
[0104] 步骤10 将待填入的CONTEXT表项的update项设为1,表示该表项正在更新,此时并不修改该项中的其他项值。
[0105] 步骤11 协调器结点广播包含该表项的索引号CID和对应需要填入本表项的来自CONTEXT地址缓存表项的IPV6地址前缀该的更新项报文,即CONTEXT更新项,等待各子结点(包括与协调器节点连接的中间节点和与协调器节点连接的端节点)回应;在此步骤期间,无论子结点还是协调器结点都不使用该CID作为6lowpan适配层地址压缩参数;若在此步骤期间接收到携带该CID的6lowpan数据包,仍按原来的CONTEXT表项内容处理;
[0106] 步骤12 待所有子结点返回确认信息后,协调器节点将CONTEXT地址缓存表项的IPv6 prefix填入CONTEXT表项中,CONTEXT表项的valid设为1,update设置为0,CID weight设为weight/2+a(最大为63,其中a为防抖动系数,为整数,可根据具体情况选取);此步骤后协调器结点可以正常使用该CID进行通信;
[0107] 步骤13 中间节点(或者路由器结点)接受到父结点发送来的CONTEXT更新项后,使用该表项更新与该更新项的索引号CID相同的本地上联CONTEXT表项,向父结点返回确认信息,表示已经对上联CONTEXT表进行了更新,同时向自己的子结点广播CONTEXT更新项;此时该路由器结点的上联CONTEXT表和下联CONTEXT表项处于失调阶段,在失调阶段中间结点采用上联CONTEXT来解析和父结点通讯的6LowPAN包头,使用下联CONTEXT表来解析和子结点通讯的6LowPAN 包头;
[0108] 对于需要进行转发的数据包,若该6LowPAN包头CID字段在上联CONTEXT表和下联CONTEXT表中不一致(即该CID刚从父结点更新过来,尚未更新到本结点的子结点中去),则需要对原始数据包头的索引号CID更换成下联CONTEXT表中与该数据包的IPv6地址相对应的索引号CID后,再转发到子节点去。
[0109] 步骤14 待子结点返回确认后,将下联CONTEXT表项进行更新,此后该中间节点可以正常使用该CID进行通信,即可以通过上联或下联CONTEXT表项进行通信。
[0110] 本发明的6LoWPAN协议中地址压缩控制表的维护方法一种具体实施例中,[0111] 当CONTEXT表维护算法得出某个地址前缀被数据包高频率使用时,需要将该前缀放入CONTEXT表中,而此时CONTEXT表中已经没有valid=0 的表项;协调器节点将CONTEXT表项进行更新操作,需要对整个网络进行同步,其具体步骤如下(此时已有待填的CONTEXT表项、和需要更新到该待填的CONTEXT表项的IPv6地址前缀项的CONTEXT地址缓存表项的IPv6地址前缀项):
[0112] 步骤15 重复步骤10-11;
[0113] 步骤16 待所有子结点返回确认后,将CONTEXT地址缓存表项的IPv6 prefix和CONTEXT表项对应的IPv6 prefix的值互换,CONTEXT表项的valid设为1,将CONTEXT地址缓存表项相应的valid设为0,update设置为0,CID weight设为weight/2+a(最大为63,其中a为防抖动系数);此步骤后可以正常使用该CID进行通信;
[0114] 步骤17 重复步骤13-14;
[0115] 本发明借鉴了操作系统中的缓存管理的思想,包括访问频率权值、地址缓存、更新字段、防抖动系数、LFU调度算法等,避免了由于频繁更新CONTEXT表项而导致的网络带宽资源浪费和能量消耗,保证近期活跃的IPv6地址前缀可以获得更高的权重,以使网络达到优化。同时又提出了CONTEXT表的分层同步算法,使得基于IPHC的6LowPAN协议在大规模网络应用时可能出现的CONTEXT表更新延迟问题得到有效的减缓。充分考虑了维护算法对网络的负担,以及突发流量时CONTEXT表的更新机制,有使得表项稳定,可扩展性较好等特点,促使网络达到流量的优化。