基于IPv6的无线传感器网络边界路由器的设计方案
节点适配层接收到适配层数据包时,首先检查该数据包是否分片,如果是一个分片的数据包,则在将所有数据分片重新组合成完整的IP数据包后,再传送到IP网络层处理;若某一个分片丢失,则丢弃该IP数据包的所有后续分片。对于IP层下发的数据包,节点适配层判断IP报文长度是否超过链路层MTU长度,若超过链路层MTU长度,则将此IP数据包分片后发送;若不超过链路层MTU长度,则按照不分片格式发送。
适配层的每一种数据帧都有调度编码位域(8位),不同的调度编码位域表示不同的解析方式,主要包括不分片、分片、IP包头压缩、UDP报头压缩以及预留功能等多种类型。其中,11000xxx表示本数据帧是已分片适配层数据帧的第一个分片,11100xxx则表示本数据帧是已分片适配层数据帧的后续分片。
datagram_size:11 b,表示链路层未分包之前的IP数据包的总长度,该IP数据包所有链路层分片的该字段的值都应该相同。
datagram_tag:16 b,分片标识,用来区分同一数据源节点的不同IP数据包。同一个IP数据包的所有链路层分片都具有相同的分片标识,数据源节点每成功发送一个完整的IP数据包都更新(加1)该字段的值。
datagram_offset:8 b,分片偏移量,表示该分片在所有分片中的偏移量(以8 B为单位),该字段只出现在第二个及后续分片中。2.2.3适配层报头压缩机制
标准IPv6网络层报文和UDP报文的报头分别有40 B和8 B,由此带来的数据传输报头开销极大,因此本文适配层对IP报文和UDP报文的包头格式进行了压缩处理。由于TCP报文并不适合无线传感器网络这种多跳、数据传输延迟较大的网络[11],故本文暂不考虑TCP报文。根据无线传感器网络的上下文信息,IPv6版本号和负载长度可以省略,通信流类型、流标签、下一包头、跳数限制以及源地址和目的地址设置压缩控制域进行部分压缩。IPv6网络层报文头部压缩格式如图7所示。
011xxxxx为调度编码位域,其中最右端5位用于报头压缩编码。各编码字段定义如下:
TF:2 b,通信流类型和流标签。其中通信流类型由查分服务代码点DSCP和显示拥塞反馈ECN,当TF=11时,通信流类型和流标签全都省略;当TF=00时,通信流类型和流标签都不压缩;当TF=01时,DSCP省略;当TF=10时,流标签省略。
NH:1 b,下一包头。NH=0,表示下一包头未压缩;NH=1时,下一包头已压缩。
HLIM:2 b,跳数限制。当HLIM等于00、01、10和11时,分别表示未压缩、1跳、64跳和255跳。
M:1 b,指示目的地址类型。当M=0时,目的地址不是多播地址;当M=1时,目的地址为多播地址。
SAC:1 b,表示源地址的压缩方式,当它为0时表示使用的是无状态头部压缩;为1时表示使用的是基于上下文的头部压缩。
SAM用来控制不同压缩方式下源地址压缩方式。
DAC与DAM的控制目的地址的压缩方式,具体含义与SAC和SAM相似。
传输层UDP报文紧跟在IPv6网络层包头后面,UDP包头压缩比较简单,是否压缩由前述NH字段指定。标准UDP报文头部中的长度域省略,源端口号、目的端口号以及校验和域的压缩方式由P和C字段表示,校验和域暂不压缩。UDP报文头部具体压缩格式如图8所示。
众所周知,TCP/IP端口号为16位,通常以0xf0和0xf0b开始,其压缩方式由P字段指定,具体如下:
00:不压缩;01:目的端口号前8位(0xf0)省略,其他部分和源端口号保留;10:源端口号前8位(0xf0)省略,其他部分和目的端口保留;11:目的端口和源端口的前12位(oxf0b)省略,其他部分保留。
2.3 IP网络层与传输层设计
标准TCP/IP协议占用资源较多,而无线传感器网络属于资源受限网络,因此边界路由器的设计要特别注意协议栈资源占用。uip IPv6(uIPv6)协议栈专为资源受限的设备设计,RAM的占用量只有1.7 KB,代码量只有[12]11.5 KB,因此选择移植uip IPv6协议栈作为基于IPv6的无线传感器网络协议的IP层和传输层。
uip IPv6协议栈的IP网络层和传输层使用同一个数据缓存区,因此可以将IP网络层和传输层统一处理。本设计中各功能模块由轻量级操作系统Contiki统一调度,因而设计一个IP网络层任务集中处理从适配层接收到的数据包和应用层需要发送的数据包。
3测试与分析
3.1测试平台搭建
边界路由器负责WSN网络与IPv6网络之间的通信,本文实验验证了边界路由器的工作性能。实验测试平台包括一个边界路由器、一个传感器节点和一台Linux主机,其中边界路由器通过UART接口与Linux主机的USB口连接,链路层运行slip协议。边界路由器和传感器节点的IPv6地址配置为aaaa::215:8d00:b:6840和aaaa::215:8d00:b:67d3,Linux主机端运行slip守护程序来监听USB口,其IPv6地址为aaaa::1.
3.2测试结果分析
通过在Linux主机上向传感器节点(IPv6地址为aaaa::215:8d00:b:67d3)发送ping6报文,来测试传感器节点的可达性,以验证边界路由器的正常工作,实验结果如图9所示。
IPv6 无线传感器网络 边界路由器 JN5148 相关文章:
- IPv6 3G应用分析(01-05)
- 基于SOCKS地IPv4向IPv6过渡技术(01-08)
- 移动IPv6路由关键技术及其优化(01-08)
- 吴建平:建设IPv6切莫重“养鸡”轻“生蛋”(01-19)
- IPv6研发与应用(01-24)
- 刘东谈IPv6标准化(01-24)