由表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)的压缩并不会给压缩效率带来很高的收益,因此本文中并未讨论下一个报头的压缩方案,后续工作中可以考虑增加对下一个报头的压缩支持。