无线传感器网络是由大量按需随机分布的集成有传感器、数据处理单元和通信模块的微型节点以自组织方式构成的无线网络。传感器网络具有成本低、能耗代、灵活性高等优点,可以应用于国防军事、环境监测、交通管理、医疗卫生、反恐抗灾等领域,具有重要的研究价值和应用前景。无线传感器网络节点的资源非常有限,因此需要一个轻量级的无线通信规范。IEEE 802.15.4标准定义了一个短距离、低复杂度、低功耗、低数据速率的介质访问控制层(MAC)和物理层(PHY)规范,该标准的技术特点决定了它特别适合传感器网络、智能家庭网络、工业控制网络等节点众多、数据率较低的应用环境。IPv6作为下一代网络协议,具有地址资源丰富、地址自动配置、安全性高、移动性好等优点,可以满足无线传感器网络在地址、安全、移动及与现有网络融合等方面的需求。因此,IPv6与IEEE 802.15.4在传感器网络上的结合有着无可比拟的应用前景。
2004年11月IETF成立了6LoWPAN(IPv6 overLow power WPAN)工作组,研究IPv6在IEEE 802.15.4网络上的应用方案。6LoWPAN工作小组对适配层技术、报头压缩技术、路由技术、IPv6技术等提出了相应的解决办法。IPv6要求支持1 280 B的MTU,而IEEE802.15.4标准规定的物理层最大帧为127 B,除去物理层25 B的帧负载,在无安全机制的情况下MAC层最大帧长度为102 B,因此需要在网络层之下引入适配层来协调二者的关系。由于IPv6标准报头是40 B,为了在IEEE 802.15.4上更加有效的传输IPv6数据包,提高净荷的传输效率,报头压缩是一个很好的解决办法。
本文以北京交通大学下一代互联网互联设备国家工程实验室自主开发和研制的微型传感路由器所构建的IPv6无线传感器网络为基础,设计并实现了一种更为高效的IPv6报头压缩方法,并对压缩性能进行了分析。
1 平台简介
本文基于IPv6无线传感器网络平台的拓扑结构及协议层次如图1所示。IPv6无线传感器网络节点设备可以自组织形成多跳Mesh网络,将采集到的温度、湿度、光强等环境信息发送给网关设备。网关设备通过以太网直连的方式与服务器进行通信,并把收到的来自传感器节点的数据提交给服务器,服务器端完成对整个 IPv6传感器网络的控制和环境信息的人性化显示。
传感器节点采用ATmega128作为处理器、使用CC2420作为射频芯片,能量供应模块可以使用9 V直流稳压电源或使用9 V干电池直接供电,同时配备温湿度传感器和光强传感器对环境信息进行采集。节点通信协议分为5层,物理层采用IEEE 802.15.4通信规范,使用OQPSK方式进行调制,发送频段使用2.4 GHz,传输速率可达250 Kb/s。适配层实现数据包的分片和重组、报头压缩以及Mesh路由等功能。网络层运行精简的微型IPv6协议栈,该协议栈代码量小、简易轻型并且可以与使用完整的IPv6协议栈的对等节点进行通信。应用层主要运行传感器网络应用级程序,比如数据采集、环境监控等。节点的层次协议设计完全遵守 RFC4919和RFC4944中定义的规范。
2 IPv6报头压缩
2.1 现有方案分析
到目前为止,6LoWPAN报头压缩方案主要有两种。其中一种是RFC4944中定义的方案。该方案在最理想的情况下可以将IPv6完整的40 B压缩到2 B(HC1字节和跳数限制字节),同时支持UDP,TCP,ICMP下一个报头的压缩,HC1字节编码IPv6报头中各字段的压缩方式,IPv6报头中未经压缩的内容按顺序存放在未压缩字段中。
如图2所示,版本、传输类型和流标签(全部为零)、净荷长度(可以从IEEE 802.15.4 MAC头中净荷长度字段推断出来)均可以压缩掉,下一个报头字段携带在HC1字节中,跳数限制字段不压缩,存放在未压缩字段中。标准中规定IPv6地址采用无状态的配置式,地址由64位前缀和64位接口标识符(Interface ID,IID)生成。IEEE 802.15.4定义了两种寻址模式:IEEE 64位扩展地址和16位短地址。每一个IEEE802. 15.4设备都有一个分配的EUI-64标识符,该标识符用作64位扩展地址进行寻址,具有全球惟一性,并且通过该EUI-64标识符可以生成一个 IPv6接口标识符,实现IPv6地址的自动配置。16位短地址是在节点成功加入网络后,由节点所在PAN内的协调者动态分配,只能保证在该PAN内的惟一性,不能用作实现IPv6地址的自动配置。因此如果IPv6地址为本地链路地址(前缀为fe80::/64),并且IEEE 802.15.4寻址模式为64位扩展地址,就可以将IPv6地址压缩掉,否则就要将其在未压缩字段中携带。
图3为HC1字节具体编码格式。
另一种是现有报头压缩草案中定义的方案。该方案提出了对本地链路地址、全球单播地址、多播地址等IPv6地址的压缩方法,同时解决了源压缩方案不具有协议层次性的弊端。而且该压缩方案支持IPv6扩展报头的压缩和流标签、服务类型的区分。但是这种压缩方案过于复杂,对于处理能力有限、能量受限、硬件资源匮乏并且以环境监测为主要应用的传感器节点来说并不实用。因此本文提出一种基于RFC4944的IPv6报头压缩改进方案。2.2 改进方案
虽然 RFC4944中提到的压缩方案已经很精简,但是这种方法仍然存有冗余。方案中对于IPv6报头的跳数限制字段并没有压缩,而是始终占用1 B存放在未压缩字段中。但是在实际中,1,64,255这三种跳数限制已经可以满足大部分的应用需求,因此本文提出一种支持对跳数限制压缩的IPv6报头压缩方法,最理想情况下可以将IPv6报头压缩到1B。
如果将跳数限制压缩,就要从HC1字节中节省出两个比特,用来标识跳数限制的4种状态(未压缩、1、64、255),HC1字节中前4个比特都用来描述IPv6源地址和目的地址的压缩状态,存在一定的冗余性。因为根据上文的分析,不需要1个比特来专门标识IPv6接口标识符的压缩状态,如果IEEE 802.15.4寻址模式为64位扩展地址,接口标识符可以直接压缩掉,如果寻址模式为16位短地址,接口标识符不可以压缩,需要携带在未压缩字段中。因此HC1字节中只需要2个比特标识IPv6地址前缀的压缩状态,可以节省下2个比特用来标识跳数限制的压缩状态。具体压缩方案如图4所示。
2.3 实现流程
为了实现IPv6报头压缩与解压缩的功能,在适配层和网络层之间加入压缩控制层,网络层的数据经过压缩控制层的处理之后交给适配层处理,同样适配层的数据经过压缩控制层之后交给网络层处理,处理流程如图5所示。系统头文件中定义一个预编译开关来控制IPv6报头是否要进行压缩,当开关打开时,数据包将会进入压缩器进行处理。压缩器首先要完成节点本地环境的检测,主要包括对IEEE 802.15.4地址模式、IPv6地址前缀类型、服务类型和流标签状态、下一个首部类型、跳数限制需求和下一个首部压缩状态的检测,之后根据节点本地环境进行HC1字节和未压缩字段的填充。
数据包的解压缩过程正好是数据包压缩的逆程,解压缩器首先要根据IEEE 802.15.4地址类型还原接口标识符,然后通过解码HC1字节可以将IPv6报头中压缩掉的字段恢复出来,最后在配合未压缩字段的内容就可以还原完整的IPv6报头。
3 功能测试及性能分析
3.1 功能测试
该系统中节点使用64位扩展地址作为底层的寻址模式,6LoWPAN网络的内部使用IPv6本地链路地址进行通信,在单跳情况下使用Sniffer无线嗅探仪捕捉到的压缩前后数据包内容如图6所示。根据具体的IPv6报头格式并按照上文提到的IPv6报头压缩方案将原40 B的IPv6报头压缩到1 B,压缩前总数据包长度为85 B,压缩后总数据包长度为46 B,压缩效率为(85-46)/85=45.9%,对于多跳情况下,适配层会增加一个Mesh头部,该头部长度为17 B,因此对应于多跳情况下压缩效率为[(85+17)-(46+17)]/(85+17)=38.2%。基于以上事实,下文通过存储开销、网络生存时间、丢包率、平均时延4个方面对报头压缩进行性能分析。
3.2 存储开销
节点的程序代码存放在ATmega128的ROM中,大小为128 KB,数据空间为ATmega128的RAM,大小为4 KB。在把报头压缩开关打开和关闭的情况下,使用AVR Studio4工具分别对同一序进行编译,软件输出结果如表1所示。
由表1可知报头压缩使程序的代码空间增加了1 742 B,只占节点ROM的1.32%,但是却没有增加额外的数据空间。AVR Studio 4工具给出的程序所使用的RAM大小只是程序中所使用的全局变量的大小,结果说明打开报头压缩选项并未增加全局变量的使用,经计算报头压缩所需的局部变量不会超过20B。
3.3 网络生存时间
网络生存时间对于传感器网络是一个非常重要的性能参数。然而传感器网络大部分的能量均消耗在数据包的发送和处理器的指令处理上。一方面,报头压缩可以减少数据包的长度,节省单位数据包的发送能耗。另一方面,报头压缩会增加处理器额外的指令处理,增加单位数据包的发送能耗。为了验证报头压缩是否能够增加网络的生存时间,做如下实验:采用同一节点,使用9 V干点池供电,分别在报头压缩和不压缩的情况下单跳与网关通信(链路质量很好,无其他无线设备干扰,发送功率均为1 mW),在服务器端记录当电池能量耗尽时压缩和不压缩两种情况下节点发送数据包的总个数,实验结果如表2所示。
由表2可见节点启用报头压缩发送的数据包总数要大于关闭报头压缩的情况,显然报头压缩可以有效的提高网络生存时间。
3.4 丢包率
由于使用报头压缩会使节点发送的数据包长度变短,因此在相同的节点发包速率下会减小MAC层的碰撞概率,理论上会减少丢包的发生。为了验证上述结论,就要尽可能地减少无线信道对丢包率的影响,实验方案如下:选取10个传感器节点与网关组成星型网路,通信距离均在1 m以内,发送功率均为1 mW。在不同的发包频率下使节点发送100个数据包,在服务器统计总共收到的数据包个数,计算网络的整体丢包率。实验分为2组,分别采用压缩和不压缩的方式进行数据包发送,结果如图7所示。
由图可见网络的丢包率与节点发送数据包的频率和长度有关,发送频率越高、数据包越长,则网络产生的信道冲突的可能性越大,丢包率也就越高。
3.5 平均时延
节点发送数据包的速率为250 Kb/s,采用压缩方案单个数据包可以节省39 B,因此单个数据包的发送时间可以减少39×8/250=1.24 ms。当然报头压缩和解压缩需要额外的处理时间,本节点ATmega128工作频率为8 MHz,处理性能为8 MIPS,处理1 000条指令的时间也仅需125μs,因此综合来讲报头压缩可以有效的减少网络时延,尤其是在大规模网络部署的情况下。本文中采用Ping6命令对网络时延进行测试,实验分为2组分别对应压缩和不压缩的情况,每组实验使用5个节点组成5跳网络,在服务器端对每跳节点进行100次ICMP响应请求,记录平均返回时间,实验结果如图8所示。
由图可见网络的平均延时基本与跳数为线性增加的关系,单跳情况下压缩与不压缩的网络时延之差大概在2.5 ms左右。因为Ping命令测试的是往返时间,所以这与理论分析相吻合,随着跳数的增加时延之差基本线性增长。
4 结语
本文设计并实现了一种IPv6报头压缩机制,理想情况下可以将IPv6报头压缩到1 B,在节点单跳和多跳通信的情况下压缩效率分别为45.9%和38.2%。实验结果表明,本文所设计的报头压缩方案可以在占用较小额外存储空间的情况下,减小丢包率、延长网络生存时间、降低网络时延。由于对下一个报头(UDP,TCP,ICMP)的压缩并不会给压缩效率带来很高的收益,因此本文中并未讨论下一个报头的压缩方案,后续工作中可以考虑增加对下一个报头的压缩支持。