重庆邮电大学 6LoWPAN调研报告
实现动态的16-bits短地址分配机制。
6)、路由协议:
现网络拓扑构建和地址分配相同,IEEE 802.15.4标准并没有定义MAC层的多跳路由。适配层将在地址分配方案的基础上提供两种基本的路由机制——树状路由和网状路由。适配层是整个6LowPAN的基础框架,6LowPAN的其它一些功能也是基于该框架实现的。整个适配层功能模块的示意图如图4.2所示。
IPv6网络层头部压缩移动性链路层的分片和重组异构网络互操作性组播支持MAC层路由IPv6报文的转发网络拓扑构建和地址分配6LowPAN其他功能IEEE 802.15.4 MAC层 图4.2适配层功能块
4.2、适配层报文格式
由于LowPAN网络有报文长度小、低带宽、低功耗的特点,为了减小报文长度,适配层帧头部分为两种格式,即不分片和分片,分别用于数据部分小于MAC层MTU(102字节)的报文和大于MAC层MTU的报文。当IPv6报文要在802.15.4链路上传输时,IPv6报文需要封装在这两种格式的适配层报文中,即IPV6报文作为适配层的负载紧跟在适配层头部后面。特别地,若”M”或“B”bit被置为1时,适配层头部后面将首先出现MD或Broadcast字段,IPv6报文则出现在这两个字段之后。
不分片报文格式
LFprot_typeMBrsvPayload /MD /Broadcast Hdr 图4.3
不分片头部格式的各个字段含义如下:
? LF:链路分片(Link Fragment),占2bits。此处应为00,表示使用不
分片头部格式。
23
重庆邮电大学 6LoWPAN调研报告
? prot_type:协议类型,占8bits。指出紧随在头部后的报文类型。 ? M:Mesh Delivery字段标志位,占1 bit。若此位置为1,则适配层头
部后紧随着的是”Mesh Delivery”字段。
? B:Broadcast标志位,占1 bit。若此位置为1,则适配层头部后紧随
着的是”Broadcast”字段。 ? rsv:保留字段,全部置为0。 2)分片报文格式
若一个包括适配层头部在内的完整负载报文不能够在一个单独的 IEEE 802.15.4帧中传输时,需要对负载报文进行分片,此时适配层使用分片头部格式封装数据。分片头部格式如下:
LFprot_typeMBrsvDatagram_sizeDatagram_tagPayload/ MD/Broadcast Hdr第一分片LFfragment_offsetMBrsvDatagram_sizeDatagram_tagPayload/ MD/Broadcast Hdr后继分片图4.4
分片头部格式的各个字段含义如下:
? LF:链路分片(Link Fragment),占2bits。当该字段不为0时,指出链路
分片在整个报文中的相对位置,其中具体定义如下表所示。
LF 00 01 10 11
? prot_type:协议类型,占8 bits,该字段只在第一个链路分片中出现。 ? M: Mesh Delivery字段标志位,占1 bit。若此位置为1,则适配层头部
后紧随着的是”Mesh Delivery”字段。
? B:Broadcast标志位,占1 bit。若此位置为1,则适配层头部后紧随着的
是”Broadcast”。若是广播帧,每个分片中都应该有该字段。
? datagram_size:负载报文的长度,占11 bits,所以支持的最大负载报文
长度为2048字节,可以满足IPv6报文在IEEE 802.15.4上传输的1280字节MTU的要求。
? datagram_tag:分片标识符,占9 bits,同一个负载报文的所有分片的
24
链路分片位置 不分片 第一个分片 最后一个分片 中间分片 重庆邮电大学 6LoWPAN调研报告
datagram_tag字段应该相同。
? fragment_offset:报文分片偏移,8 bits。该字段只出现在第二个以及后
继分片中,指出后继分片中的payload相对于原负载报文的头部的偏移。
4.3、分片与重组
当一个负载报文不能在一个单独的IEEE 802.15.4帧中传输时,需要对负载报文进行适配层分片。此时,适配层帧使用4字节的分片头部格式而不是2字节的不分片头部格式。另外,适配层需要维护当前的fragment_tag值并在节点初始化时将其置为一个随机值。 1) 分片
当上层下传一个超过适配层最大payload长度的报文给适配层后,适配层需要对该IP报文分片进行发送。适配层分片的判断条件为:负载报文长度+不分片头部长+Mesh Delivery(或Broadcast)字段长度> IEEE 802.15.4 MAC层的最大payload长度。在使用16-bits短地址并且不使用IEEE 802.15.4安全机制的情况下,负载报文的最大长度为95(127-25(MAC头部)-2(不分片头部)-5(MD的长度))字节。适配层分片的具体过程如下所示:
Payload 原始负载报文适配层分片01ProtocolMBSizeTag第一片MeshPayload Fragment11Offset MBSizeTag第二片MeshPayload Fragment10Offset MBSizeTag第三片MeshPayload Fragment
图4.5
对于第一个分片:
? 将分片头部的LF字段设置为01表示是第一个分片。
? Prot_type字段置为上层协议的类型。若是IPv6协议该字段置为1。另
外,由于是第一个分片,offset必定为0,所以在该分片中不需要fragment_offset字段。
? 用当前维护的datagram_tag值来设置datagram_tag字段;
datagram_size字段填写原始负载报文的总长度。
25
重庆邮电大学 6LoWPAN调研报告
? 若需要在Mesh网络中路由,Mesh Delivery字段应该紧随在分片头部
之后并在负载报文小分片之前。
对于后继分片:
? 分片头部的LF字段设置为11或10,表示中间分片或最后一分片。 ? fragment_offset 字段则设置为当前报文小分片相对于原负载报文起
始字节的偏移,需要注意的是这里的偏移是以8字节为单位的,因此每个分片的最大负载报文小分片长度也必须是8字节边界对齐的,也就是说负载报文小分片的最大长度实际上只有88字节。
当一个被分片报文的所有小分片都发送完成后datagram_tag加1,当该值超过511后应该翻转为0。 2) 重组
当适配层收到一个分片后,根据以下两个字段判断该分片是属于哪个负载报文的:源MAC地址和适配层分片头部的datagram_tag字段。
对于同一个负载报文的多个分片,适配层使用如下算法进行重组,其重组过程如下所示。
a. 如果是第一次收到某负载报文的分片,节点记录下该被分片的源MAC地址和datagram_tag字段以供后继重组使用。需要注意的是,这里的源MAC地址应该是适配层分片帧源发地址,若分片帧有Mesh Delivery字段的话,源MAC地址应该是Mesh Delivery字段中的Originator Address字段。
b. 若已经收到该报文的其它分片,则根据当前分片帧的fragment_offset字段进行重组。若发现收到的是一个重复但不重叠的分片,应该使用新收到的分片进行替换。若本分片和前后分片有重叠,则应该丢弃当前分片,这样的目的主要是简化处理,认为若出现这种情况一定是发送方出现了错误,不应该继续接收。
c. 若成功收到所有分片,将所有分片按offset进行重组,并将重组好的原始负载报文递交给上层。同时,还需要删除在步骤(a)中记录源MAC地址和datagram_tag字段信息。
26
重庆邮电大学 6LoWPAN调研报告
Payload 原始负载报文适配层重组01ProtocolMBSizeTag分片1MeshPayload Fragment11Offset MBSizeTag分片2MeshPayload Fragment10Offset MBSizeTag分片3MeshPayload Fragment
图4.6
重组一个分片的负载报文时需要使用一个重组队列来维护已经收到的分片以及其他一些信息(源MAC地址和datagram_tag字段)。同时,为了避免长时间等待未达到的分片,节点还应该在收到第一个分片后启动一个重组定时器,重组超时时间为15s,定时器超时后节点应该删除该重组队列中的所有分片及相关信息。
4.4、报头压缩
由于LowPAN网络的特性,在实现IPv6在IEEE 802.15.4上的头部压缩时应当考虑最少的预建上下文需求,也要求压缩方案尽量的简单直接。目前适配层支持3种压缩格式,分别是LOWPAN_HC1格式,用于IPv6头部压缩;HC_UDP格式,用于UDP头部压缩;HC_ICMP压缩格式,用于ICMPv6压缩。
4.4.1、HC1-IPv6报头压缩
首先分析一下IPv6的基本报头结构,如图4.7所示,由于IPv6报头是定长,在压缩设计上会比IPv4报头简单一些,它有六个域和两个地址空间,在起始的64比特之后是128比特的源地址和目的地址,全长总共是40个字节。
VersionTraffic ClassNext HeaderFlow LabelHop LimitPayload LengthSource AddressDestination Address图4.7
27