2.3 6LoWPAN

我们已经知道,最底层(TCP/IP协议栈的物理层和数据链路层)负责对LoWPAN中设备进行互连,且在该层之上使用IPv6也能带来一些好处。6lowpan是位于网际层和底层之间的适配层,负责解决一些重要的问题。

图2.1. 协议栈中的6LoWPAN

6lowpan要实现的主要目标是: 1.分离、重组分层:IPv6规范[RFC2460]指定由数据链路层提供给IPv6层的最小MTU为1280字节。IEEE802.15.4中的协议数据单元最小为81字节。为了解决这个问题,必须在IP层之下提供一个分离、重组的适配层。 2.压缩头部:鉴于在最差情形下,IEEE802.15.4帧的最大IP包大小为81字节,而IPv6的头部占40字节(这里还不考虑可选扩展头部),所以留给上层协议TCP、UDP的大小只有41字节。UDP的头部占8字节,TCP的头部占20字节。因此,UDP协议的数据只占33字节,TCP协议的数据只占21字节。此外,正如上面说的,我们还需要一个分离、重组适配层,这也会占据一定的字节数,从而留给数据的字节数会更一步减小。因此,如果采用这样的协议,开销太大,因此必须对头部进行压缩。 3.自动配置地址:为了减小主机端的负载,需要为6LoWPAN指定一个方法来创建IPv6无状态自动配置地址。此外,也需要创建一个从被分配的EUI-64到IEEE802.15.4设备的IPv6接口标识符(Interface Identifier)。 4.组网路由协议:需要一个路由协议来支持多跳组网。其重点应该放到正在使用一个已经存在的路由协议(或者设计一个新协议)的时候,这样路由分包就能填充在一个IEEE802.15。4帧中。IETF 6lowpan工作组定义的这种机制是基于IEEE802.15.4层上面的一些需求。 5.IEEE802.15.4定义了四种类型的帧:信号帧,MAC命令帧,确认帧和数据帧。IPv6包必须由数据帧运载。 6.数据帧可以选择请求是否需要被确认:推荐在帧中携带IPv6包。 7.允许在帧中省略原地址或者/和目的地址。原地址和目的地址都需要被包含在IEEE802.15.4帧的头部。 8.包含源PAN ID和目的PAN ID字段。6LoWPAN标准假设一个PAN映射到一个指定的IPv6链接。 9.同时支持64位扩展地址和16位短地址。 10.由于在IEEE802.15.4天生不支持多播,因此在IEEE802.15.4网络中,IPv6层的多播包必须被当做数据链路层的广播帧进行运载。

6LoWPAN自适应格式被设计用于传输受限链路上的IPv6数据报。受限的带宽、内存或者无线传感器网络中的能耗都是链路受限的具体体现。对于每个目标和需求,6lowpan规范都提供了一个方案:

  1. 使用组网编址头支持转发子IP。
  2. 使用分离头部来支持IPv6最小MTU的需求。
  3. 当需要在IEEE802.15.4上发送IPv6多播包时,使用广播头。
  4. 使用IPv6数据报的无状态头部压缩,将相当大的IPv6和UDP头部下降到几个字节(最好的情形下)。这种头部被用于封装LoWPAN和用于形成所谓的头部栈。在头部栈中,每个头部都包含一个头部类型,接着是零个或者更多的头部字段。当多个LoWPAN头出现在相同的包里时,它们必须按照如下的顺序:组网编址头,广播头和分离头。

图2.2 6LoWPAN头部