2.3 6LoWPAN

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

    2.3 6LoWPAN - 图1

    图2.1. 协议栈中的 6LoWPAN

      6LoWPAN 要实现的主要目标是:

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

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

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

    图2.2 6LoWPAN 头部