无线传感网络
上QQ阅读APP看书,第一时间看更新

2.2 6LoWPAN

以前许多标准化组织和研究者认为计算机网络中的IP技术过于复杂,不适合低功耗、资源受限的无线传感网络,因此包括ZigBee等低功耗无线个域网都是采用非IP技术,基于IEEE 802.15.4实现IPv6通信的IETF 6LoWPAN草案标准的发布有望改变这一局面。6LoWPAN具有的低功率运行的潜力使它很适合应用在从手持机到仪器的设备中,而其对AES-128加密的内置支持为强健的认证和安全性打下了基础。智能设备互联网协议IPSO(IP for Smart Objects)产业联盟致力于6LoWPAN的发展与应用,旨在推动IP协议作为网络互连技术用于连接传感器节点或者其他的智能物件,以便于信息的传输。IPSO开始工作的第一个目标就是在IEEE 802.15.4标准上实现IPv6的互操作性。

2.2.1 6LoWPAN的基本特点

IETF 6LoWPAN工作组的任务是在定义如何利用IEEE 802.15.4链路支持基于IP通信的同时,遵守开放标准以及保证与其他IP设备的互操作性。这样做将消除对多种复杂网关(每种网关对应一种本地802.15.4协议)以及专用适配器和网关专有安全与管理程序的需要。然而,利用IP并不是件容易的事情,这是因为IP的地址和包头很大,传送的数据可能过于庞大而无法容纳在很小的IEEE 802.15.4数据包中。6LoWPAN工作组面临的技术挑战是找到一种将IP包头压缩到只传送必要内容的小数据包中的方法,他们采取量力而行(Pay as you go)的包头压缩方法,这种方法去除IP包头中的冗余或不必要的网络级信息,IP包头在接收时,从链路级802.15.4包头的相关域中得到这些网络级信息。

最简单的使用情况是一台与邻近802.15.4设备通信的802.15.4设备将非常高效率地得到处理。整个40字节的IPv6包头被缩减为1个包头压缩字节HC(Head Compression)和1个字节的“剩余跳数”。因为源和目的IP地址可以由链路级64位唯一ID(EUI-64)或802.15.4中使用的16位短地址生成。8字节用户数据报协议(User Datagram Protocol,UDP)传输包头被压缩为4字节。

随着通信任务变得更加复杂,6LoWPAN 也相应调整。为了与嵌入式网络之外的设备通信,6LoWPAN增加了更大的IP地址。当交换的数据量小到可以放到基本包中时,可以在没有开销的情况下打包传送。对于大型传输,6LoWPAN 增加分段包头来跟踪信息如何被拆分到不同段中。如果单一跳802.15.4可以将包传送到目的地,数据包就可以在不增加开销的情况下传送,多跳则需要加入网状路由(Mesh Routing)包头。

IETF 6LoWPAN取得的突破是得到一种非常紧凑、高效的IP实现,消除了以前造成各种专门标准和专有协议的限制,这在工业协议(如BACNet协议、LonWorks协议、Modbus协议、IPX/SPX协议等)领域具有特别的价值。这些协议最初开发是为了提供特殊行业特有的总线和链路(从控制器区域网总线到AC电源线)上的互操作性。几年前,这些协议的开发人员开发IP选择协议是为了利用以太网等“现代”技术。6LoWPAN的出现使这些老协议把它们的IP选择扩展到新的链路(如802.15.4)。因此,自然而然地可与专为802.15.4设计的新协议(如 ZigBee、ISA100.11a 等)互操作。受益于此,各类低功率无线设备能够加入 IP家庭中,与Wi-Fi、以太网以及其他类型的网络设备“称兄道弟”。

随着IPv4地址的耗尽,IPv6是大势所趋。物联网技术的发展,将进一步推动IPv6的部署与应用。IETF 6LoWPAN技术具有无线低功耗、自组织网络的特点,将是未来无线传感网络的重要技术之一。在ZigBee新一代智能电网标准中,SEP2.0(Smart Energy Protocol 2.0)协议就已经采用6LoWPAN技术。随着6LoWPAN的不断发展和完善,6LoWPAN将成为事实标准,全面替代ZigBee标准,未来ZigBee应用系统将无需网关而直接连入IP网,大大降低了ZigBee的部署难度,提高了ZigBee的易用性。

2.2.2 6LoWPAN的体系结构

6LoWPAN技术是一种在IEEE 802.15.4标准基础上传输IPv6数据包的网络体系,可用于构建无线传感网络。6LoWPAN规定其物理层和MAC层采用IEEE 802.15.4标准,上层采用TCP/IPv6协议栈,中间有个适配层完成IPv6与LoWPAN(Low Power Wireless Personal Area Networks)的网络衔接,适配层是IPv6网络和IEEE 802.15.4 MAC层间的一个中间层,其向上提供IPv6对IEEE 802.15.4媒介访问支持,向下则控制LoWPAN网络构建、拓扑及MAC层路由。其与TCP/IP的协议栈参考模型对比如图2-6所示。

图2-6 6LoWPAN体系架构

6LoWPAN协议栈参考模型与TCP/IP的参考模型大致相似,区别在于6LoWPAN底层使用的IEEE 802.15.4标准,而且因低速无线个域网的特性,在6LoWPAN的传输层没有使用TCP协议。

2.2.3 6LoWPAN的主要功能

由于在IPv6中,MAC支持的载荷长度远大于6LoWPAN底层所能提供的载荷长度,为了实现MAC层与网络层的无缝连接,6LoWPAN工作组在网络层和MAC层之间增加一个网络适配层,用来完成包头压缩、分片与重组以及网状路由转发等工作。由于最大传输单元MTU、组播及MAC层路由等原因,IPv6不能直接运行在IEEE 802.15.4的MAC层之上,适配层将起到中间层的作用,同时提供对上下两层的支持。6LoWPAN 的很多基本功能,如链路层的分片和重组、头部压缩、组播支持、网络拓扑构建和地址分配等均在适配层实现。适配层是整个6LoWPAN 的基础框架,6LoWPAN 的其他一些功能也是基于该框架实现的。整个适配层功能模块的示意图如图2-7所示。

图2-7 6LoWPAN功能模块

主要模块的功能叙述如下。

(1)链路层的分片和重组。IPv6规定数据链路层最小MTU为1,280字节,对于不支持该MTU的链路层,协议要求必须提供对IPv6透明的链路层的分片和重组。因此,适配层需要通过对 IP报文进行分片和重组来传输超过IEEE 802.15.4 MAC层最大帧长(127字节)的报文。

(2)组播支持。组播在 IPv6中有非常重要的作用,IPv6特别是邻居发现协议的很多功能都依赖于 IP 层组播。此外,无线传感网络的一些应用也需要 MAC 层广播的功能。IEEE 802.15.4的 MAC 层不支持组播,但提供有限的广播功能,适配层利用可控广播洪泛的方式来在整个无线传感网络中传播IP组播报文。

(3)头部压缩。在不使用安全功能的前提下,IEEE 802.15.4 MAC层的最大负载(Payload)为102字节,而IPv6报文头部为40字节,再除去适配层和传输层(如UDP)头部,将只有50个字节左右的应用数据空间。为了满足IPv6在IEEE 802.15.4 传输的MTU,一方面可以通过分片和重组来传输大于102字节的IPv6报文,另一方面也需要对IPv6报文进行压缩来提高传输效率和节省节点能量。为了实现压缩,需要在适配层头部后增加一个头部压缩编码字段,该字段将指出IPv6头部哪些可压缩字段将被压缩,除了对IPv6头部以外,还可以对上层协议(UDP、ICMPv6等)头部进行进一步压缩。

(4)网络拓扑构建和地址分配。IEEE 802.15.4标准对物理层和MAC层做了详尽的描述,其中 MAC 层提供了功能丰富的各种原语,包括信道扫描、网络维护等。但 MAC 层并不负责调用这些原语来形成网络拓扑并对拓扑进行维护,因此调用原语进行拓扑维护的工作将由适配层来完成。另外,6LoWPAN 中每个节点都是使用 EUI-64地址标识符,但是一般的LoWPAN网络节点能力非常有限,而且通常会有大量的部署节点,若采用64位地址将占用大量的存储空间并增加报文长度,因此,更适合的方案是在PAN内部采用16位短地址来标识一个节点,这就需要在适配层实现动态的16位短地址分配机制。

(5)MAC层路由。由于网络拓扑构建和地址分配相同,因此IEEE 802.15.4标准没有定义MAC层的多跳路由。6LoWPAN的适配层将在地址分配方案的基础上提供两种基本的路由机制—树状路由和网状路由。

2.2.4 6LoWPAN的帧格式

由于6LoWPAN网络有报文长度小、带宽小、功耗低的特点,为了减小报文长度,适配层帧头部分为两种格式,即不分片和分片,分别用于数据部分小于MAC层MTU(102字节)的报文和大于MAC层MTU的报文。当IPv6报文要在802.14.5链路上传输时,IPv6报文需要封装在这两种格式的适配层报文中,即 IPv6报文作为适配层的负载紧跟在适配层头部后面。特别当“M”或“B”bit被置为1时,适配层头部后面将首先出现MB或Broadcast字段, IPv6报文则出现在这两个字段之后。

1. 不分片报文格式

不分片报文头部格式如下表,各个字段含义如下。

LF:链路分片(Link Fragment),占2 位。此处应为00,表示使用不分片头部格式。

prot_type:协议类型,占8 位。指出紧随在头部后的报文类型。

M:Mesh Delivery字段标志位,占1位。若此位置为1,则适配层头部后紧随着的是“Mesh Delivery”字段。

B:Broadcast 标志位,占1位。若此位置为1,则适配层头部后紧跟“Broadcast”字段。

rsv:保留字段,全部置为0。

2. 分片报文格式

当一个包括适配层头部在内的完整负载报文不能在一个单独的 IEEE 802.15.4帧中传输时,需要对负载报文进行分片,此时适配层使用分片头部格式封装数据。分片头部格式如下。

分片头部格式的各个字段含义如下。

LF:链路分片(Link Fragment),占2位。当该字段不为0时,指出链路分片在整个报文中的相对位置,其具体定义如下。

prot_type:协议类型,占8位,该字段只在第一个链路分片中出现。

M:Mesh Delivery 字段标志位,占1 bit。若此位置为1,则适配层头部后紧跟“Mesh Delivery”字段。

B:Broadcast标志位,占1位。若此位置为1,则适配层头部后紧随跟“Broadcast”。若是广播帧,则每个分片中都应该有该字段。

datagram_size:负载报文的长度,占11位,因此支持的最大负载报文长度为2048字节,可以满足IPv6报文在IEEE 802.15.4上传输的1280字节MTU的要求。

datagram_tag:分片标识符,占9位,应与同一个负载报文的所有分片的 datagram_tag字段相同。

fragment_offset:报文分片偏移,占8位。该字段只出现在第二个以及后继分片中,指出后继分片中的Payload相对于原负载报文头部偏移。

3. 分片和重组

当一个负载报文不能在一个单独的IEEE 802.15.4帧中传输时,需要对负载报文进行适配层分片。此时,适配层帧使用4字节的分片头部格式,而不是2字节的不分片头部格式。另外,适配层需要维护当前的fragment_tag值,并在节点初始化时将其置为一个随机值。

(1)分片

当上层下传一个超过适配层最大负载长度的报文给适配层后,适配层需要发送该IP报文分片进行发送。适配层分片的判断条件为:负载报文长度+不分片头部长+Mesh Delivery(或Broadcast)字段长度+IEEE 802.15.4 MAC层的最大负载长度。在使用16位短地址,并且不使用IEEE 802.15.4安全机制的情况下,负载报文的最大长度为95个字节:127—25(MAC头部)—2(不分片头部)—5(MD的长度)。适配层分片的具体过程如2-8所示。

图2-8 6LoWPAN 适配层分片过程

① 第一个分片:将分片头部的LF字段设置为01,表示是第一个分片。

? Prot_type字段置为上层协议的类型。若是IPv6,则协议该字段置为1。另外,由于是第一个分片,offset必定为0,所以在该分片中不需要fragment_offset字段。

? 用当前维护的datagram_tag值来设置datagram_tag字段,datagram_size字段填写原始负载报文的总长度。

? 若需要在Mesh网络中路由,则Mesh Delivery字段应该紧跟在分片头部之后,并在负载报文小分片之前。

② 后继分片:分片头部的LF字段设置为11或10,表示中间分片或最后分片。

? fragment_offset 字段设置为当前报文小分片相对于原负载报文起始字节的偏移,需要注意的是,这里的偏移是以8字节为单位的,因此每个分片的最大负载报文小分片长度也必须是8字节边界对齐的,即负载报文小分片的最大长度实际上只有88字节。

? 当一个被分片报文的所有小分片都发送完成后datagram_tag加1,当该值超过511后,应该翻转为0。

? 当适配层收到一个分片后,根据以下两个字段判断该分片属于哪个负载报文:源MAC地址和适配层分片头部的datagram_tag字段。

(2)重组

对于同一个负载报文的多个分片,适配层需要进行重组,其重组过程如图2-9所示。

图2-9 6LoWPAN适配层重组过程

重组过程分为以下3步。

① 如果是第一次收到某负载报文的分片,则节点记录该分片的源 MAC 地址和datagram_tag字段以供后继重组使用。需要注意的是,这里的源MAC地址应该是适配层分片帧源发地址,若分片帧有Mesh Delivery字段,则源MAC地址应该是Mesh Delivery字段中的源地址(Originator Address)字段。

② 若已经收到该报文的其他分片,则根据当前分片帧的fragment_offset字段进行重组。若发现收到的是一个重复但不重叠的分片,则应使用新收到的分片替换。若本分片和前后分片重叠,则应丢弃当前分片,这样做的目的主要是简化处理,认为若出现这种情况一定是发送方出现了错误,不应该继续接收。

③ 若成功收到所有分片,则将所有分片按offset进行重组,并将重组好的原始负载报文递交给上层。同时,还需要删除在步骤①中记录的源MAC地址和datagram_tag字段信息。

重组一个分片的负载报文时,需要使用一个重组队列来维护已经收到的分片以及其他一些信息(源MAC地址和datagram_tag字段)。同时,为了避免长时间等待未达到的分片,节点还应该在收到第一个分片后启动一个重组定时器,重组超时时间为15s,定时器超时后,节点应该删除该重组队列中的所有分片及相关信息。