Contiki相关协议的研究

2016-06-30  本文已影响518人  happy1993

IPv6

  1. 寻址方式
      和 IPv4 中的点分十进制格式不同,IPv6 的 128 位地址以 16 位为一组,每个 16 位的分组写成 4 个十六进制的数,中间用冒号分隔,称为冒号分十六进制格式。如2001:250:7801:b112:c903:a7ff:2825:f10c 就是一个合法的 IPv6 地址。
      IPv6 的地址可分为三种类型:单播地址、泛播地址和组播地址:
    单播:一个单接口的标识符。送往一个单播地址的包将被传送至该地址标识的接口上。
    泛播(one-to-nearest):一组接口(一般属于不同节点)的标识符。送往一个泛播地址的包将被传送至该地址标识的接口之一(根据选路协议对于距离的计算方法选择“最近”的一个)。
    组播(one-to-many):一组接口(一般属于不同节点)的标识符。送往一个组播地址的包将被传送至有该地址标识的所有接口上。
  2. 报头格式
      IPv4 的报头有 10 个固定长度的字段、两个地址和几个长度不定的可选字段,因此报头总长度也是不固定的。而IPv6 的报头由六个固定字段(共8个字节)和两个地址(源地址和目的地址各占 16个字节)组成,其长度为固定的40字节
    IPv6报头结构
    字段含义:
    版本(Version):4 位,IP 版本号,IPv6 固定为 6。
    流量类型(Traffic Class):8 位,用于指示数据包的服务类型(CoS)。
    流标记(Flow Label):20 位,用于多层交换和快速交换。流标记由源节点使用,指定一系列的数据包作为一个数据流,到目的地址路径中的路由器需要对这种数据包进行特殊处理
    负载长度(Payload Length):16 位,指示负载的长度,包括 IPv6 报头长度。
    下一个报头(Next Header):8 位,这个字段指示了紧跟在 IPv6 报头后面的下一个报头类型,例如上层协议是TCP,该字段的值就是 TCP 的类型编号6。这里使用了菊花链的方式添加扩展报头,处理起来非常灵活。
    跳数限制(Hop Limit):8 位,类似于 IPv4 中的 TTL字段,数据包每被转发一次,该字段的值就减一,当该值变成 0 时,该数据包会被丢弃
    源地址(Source Address):128 位,数据包的 IPv6 源地址。
    目的地址(Destination Address):128 位,数据包的 IPv6 目的地址
  3. 邻居发现机制
      IPv6 邻居发现协议,它主要作用有:发现邻居物理地址、路由器发现、重复地址检测、检验邻居的可达性和状态、无状态地址自动配置和重定向。
      IPv6 邻居发现协议使用邻接点请求(Neighbor Solicitation)、邻接点公告(Neighbor Advertisement)、路由器请求(Router Solicitation)、路由器公告(Router Advertisement)和 ICMPv6 重定向 5 种报文来完成这些工作。所有这些报文均使用 ICMPv6 包发送,对应的Type 值分别是135,136,133,134,137。

IEEE 802.15.4关键技术

IEEE 802.15.4 是为低功耗低速率应用设计的一种标准无线通信技术,由电器和电子工程师协会(IEEE)的 802.15 个人局域网(PAN)工作组开发。其最大通信速率为250Kb/s,最大功率为 1m W,传输范围通常在几十米之内。IEEE 802.15.4 标准规定了OSI 模型中的物理层(PHY)和媒体访问控制层(MAC),其中 PHY 层规定了数据通过物理无线介质进行发送和接收的方式;而 MAC 层则规定了处理从 PHY 层传来信息的方式。
  因为 IEEE 802.15.4 是为低速率应用设计的,所以数据包很小,规定最大为 127 字节。在 MAC 层又在每个数据包的前面加了一个长度不定的报头,因此对于上层协议或应用数据来说,可用的数据在 86 到 116 个字节之间。所以上层协议通常会添加一些其他机制,将较大的数据包分成多个802.15.4 数据帧,本论文中所使用的 6LoWPAN 就是这样的一种机制。

  1. 802.15.4物理层
      物理层确定了无线信道进行调制和信道编码的无线电频率。802.15.4 规定了三个无需授权即可使用的无线电频带。在美国,免许可的频段范围为 902~928MHz,在欧洲为 868~868.8MHz,在其他地区为 2400~2483.5MHz。信道 11 至 26 定义在带宽为2.4GHz 的频段上,在我国这几个信道比较常用,其信道间隔为 5MHz。
      物理层还提供对指定信道进行能量测量的机制。MAC 层利用该机制来决定是否可以使用某一信道进行数据传输。无线信道能量检测机制也可用来进行空闲信道评估(Clear Channel Assignment,CCA),通过该机制,物理层可以估算出是否有其他节点正在利用该信道进行数据传输。

  2. 媒体访问控制层
      MAC 层的作用是控制对无线介质的访问。因为所有发送者和接收者共用无线介质,所以 MAC 层提供了一个机制,可以确定何时介质闲置,何时可以安全传输数据。IEEE 802.15.4 的 MAC 层提供信道访问控制、输入帧校验以及帧接收确认等功能。
      信道访问控制是通过物理层提供的 CCA 机制实现的。当要发送数据时,MAC 层会请求物理层执行一次 CCA 检测,如果结果表示有另一个节点正在进行数据传输,MAC 层就停止发送自己的数据包,并等待一定时间然后重新尝试发送数据包。
      输入帧校验是通过对整帧数据进行循环冗余校验(CRC)来实现的。CRC 可用来检测帧内数据传输是否出错,在帧发送时由发送端先进行计算并附加在帧数据内。如果接收端计算出来的 CRC 值和帧数据给出的 CRC 不一致,则说明数据接收出错,即丢弃该数据包。
      当接收到的数据包要求进行 ACK 确认时,MAC 层会发送一个 ACK 帧。只有当数据帧的目的地址和自身设备地址一致,且计算出的 CRC 值也和帧数据中的 CRC 值一致时,才会发送 ACK 帧。ACK 帧不是只发送给数据帧的发送端,而是向所有节点进行广播。因此,很多 802.15.4 的上层协议都有自己的确认机制。

  3. 802.15.4的帧格式
      802.15.4 数据包包括三部分:报头、数据和报尾,其格式如图 所示。

802.15.4帧格式

  802.15.4 的包结构包括物理层的一部分和 MAC 层的一部分。其中,物理层增加了一个报头,MAC 层增加了一个报头和一个报尾。物理层的报头包括一个前同步码、一个帧起始定界符(SFD)和一个长度字段。前同步码为 4 个字节,用来同步发送者和接收者,使接收者能够正确地接收下面的数据包。SFD 为 1 个字节,意味着前同步码的结束和帧的开始。长度字段为 1 个字节,告诉接收者该数据包的长度。包的最大长度为 127字节。
  物理层报头后面紧跟着的是 MAC 层报头。MAC 层的报头包括两个字节的帧控制字段,用来告知接收者应该如何解析剩下的报头,以及该数据帧是否需要确认。帧控制字段的后面是序列号字段,占 1 个字节。该序列号用来关联数据帧和相应的确认帧,数据帧和它的确认帧的序列号应该相同。
  序列号字段的后面为地址字段,内容为数据包发送者和接收者的地址和 PAN 标识,所有的地址都是可选的。接收者可根据地址字段来判断接收到的数据包是不是发给自己的。后面是可选的安全字段,包含了用来进行安全处理的数据。
  真正的数据在 MAC 层报头之后,长度为 86 到 116 个字节。802.15.4 的标准中并没有规定数据部分的结构,而是由上层协议来定义。
  在 802.15.4 数据包的最后为帧校验序列(FCS),包含 CRC 校验值,用来检测该数据包是否全部被正确接收。

6LoWPAN适配层技术研究

由于 IPv6 要求的最小 MTU 为 1280 字节,而 802.15.4 链路层除去自身开销后最多只能为网络层提供 102 个字节的负载空间,因此必须在 IPv6 网络层和 802.15.4 的 MAC层之间再插入一层,来对二者之间的差异进行适配。IETF 的 6Lo WPAN 工作组制定的相关协议就是来实现这个工作的。
  6Lo WPAN 适配层主要提供的服务有三个方面,首先负责大数据包的分片和重组;其次负责 IPv6 中报头的压缩;最后当链路层使用多跳时通过链路层转发数据。下面分别介绍 6Lo WPAN 的封装头栈、分片和报头压缩几个方面。
  和 IPv6 类似,6Lo WPAN 适配层协议也使用了头栈,需要哪些报头就在后面添加,不需要的报头可以省略,有效地减少了协议本身的流量开销。目前 6LoWPAN 支持三种头,分别是网状寻址头、分片头和 IPv6 头压缩头,如果存在相应的头就必须按照这个顺序来封装。6LoWPAN 定义了一个封装头栈,在每个 IPv6 数据包之前,封装头的第一个字节表示下一个头的类型。若前 2 位等于 11 则说明下一个头是分片头,若等于 01 说明后面是一个 IPv6 数据包,采用何种压缩方式又后 6 位决定。封装头栈的格式如图所示

IPv6封装头栈
  1. 网状寻址头
      网状寻址头要和网下路由方法协同使用,无法直接进行通信的传感器节点在链路层通过多跳路由使用链路层的地址。下图 中分配字节的前2 位如果是 10 就说明这是一个网状寻址头,其具体类型和每个字段的意义如图所示
6LoWPAN网状头格式

  其中V字段表示数据发起者的地址类型,如果为 0 说明发起者的地址为 64 位 EUI地址,如果为 1 说明发起者地址为 16 位短地址。F 字段表示数据最终目的地的地址类型,如果为 0 说明最终目的地的地址为 64 位 EUI 地址,如果为 1 说明最终目的地的地址为 16 位短地址。Hop left 字段表示剩余跳数,占 4 位。后面的两个字段是发起者和最终目的地的链路层地址。

  1. 分片与重组
      当 802.15.4 帧的最大传输负载能够容纳完整的 IPv6 数据包时,数据包可以在一帧内发出不需要分片,当 IPv6 数据包长度超过了 802.15.4 帧所能支持的最大负载长度时,就要将数据包分成多个链路层的分片。后面的分片比第一个分片多了一个偏移量的字段。需要进行分片的数据帧要添加如图所示的报头格式。


    分片报文格式

      数据报大小表示原始 IPv6 包的长度,占 11 位,所支持的最大负载报文长度为2048 字节,可以满足 IPv6 报文的 MTU 要求。原始数据包的每个链路层分片的此字段应该相同。数据报标签为占 9 位,同一个报文的所有分片的数据报标签字段都应该相同。此字段可与源地址、目的地址和数据报大小联合起来唯一地标识分片帧。后面分片帧的此字段值应该递增,当到 65535 后重新从 0 开始。数据报偏移量,占 16 位。该字段只存在于第二个和以后的分片中,指出后续分片中的负载相对于原负载报文头部的偏移量重组的时候,当收到第一个链路层分片后会启动重组定时器,如果定时器超时了还没有收到所有分片,就丢弃已收到的所有分片,重组定时器的最大值为 60 秒

3.6LoWPAN头压缩
  IPv6 数据包的报头长度为 40 字节,而 UDP 数据包的报头也有 8 个字节,这么长的报头会减少 MAC 层所传输的有效负载长度,传输效率十分低下。因此,必须对报头进行压缩。因此提出了LOWPAN_IPHC 和 LOWPAN_NHC压缩技术。
  IPHC 需要 13 位,其中 5 位从分配字节的最右边部分获取,具体编码格式如图 所示。

IPHC编码格式

  IPHC 编码格式的各个字段含义如下:
  TF 字段(Traffic Class,Flow Label):占两位,指示是否对 IPv6 头中的 TC 和流标签进行压缩。此值为 00 时,TC 和流标签都不压缩;为 01 时,TC 按 ECN 方式压缩为2 位,流标签不压缩;为 10 时,TC 不压缩,流标签字段压缩,即完全省略;为 11时,TC 和流量标签都压缩。
  NH 字段(Next Header):占一位,指示下一个头是否压缩。此值为 0 时不压缩,携带完整的 8 位下一个头字段;为 1 时采用 NHC 方式压缩。
  HLIM 字段(Hop Limit):占 2 位,指示跳数限制是否压缩。此值为 00 时不压缩;为 01 时跳数限制设为 1;为 10 时跳数限制设为 64;为 11 时跳数限制设为 255.
  CID 字段(Context Identifier Extension):占 1 位,上下文标识符扩展。此值为
0时,不适用上下文信息;为 1 时,附加一个 8 位的 CID 字段,紧跟在 DAM 字段后。
  SAC 字段(Source Address Compression):占 1 位,指示源地址压缩方式。此值为0 时,源地址压缩使用无状态压缩;此值为 1 时,源地址压缩使用有状态基于上下文的方式压缩。
  SAM 字段(Source Address Mode):占 2 位,指示源地址模式。当 SAC 为 0 时,如果此值为 00 就携带 128 位地址;为 01 时省略前 64 位,由链路本地前缀加 0 构成,后 64 位不压缩;为 10 时,省略前 112 位,由链路本地前缀加 0 构成,后 16 位不压缩;为 11 时,地址全部省略,前 64 位由链路本地前缀加 0 构成,后 64 位通过链路层地址计算得出。当 SAC 为 1 时,如果该字段值为 00 表示使用未指定地址(::);为 01时,64 位前缀由上下文获取,后 64 位不压缩;为 10 时,地址由上下文信息和携带的后 16 位构成;为 11 时,地址全部省略,前 64 位由上下文信息获得,后 64 位由链路层地址计算得到。
  M 字段(Multicast):占 1 位,多播压缩。此值为 0 说明目的地址不是多播地址,为 1 时说明目的地址是多播地址。
  DAC 字段(Destination Address Compression):占 1 位,指示目的地址压缩方式。此值为 0 时,目的地址压缩使用无状态压缩;此值为 1 时,目的地址压缩使用有状态基于上下文的方式压缩。
  DAM 字段(Destination Address Mode):占 2 位,指示目的地址模式,此字段和 M字段以及 DAC 字段配合使用,当 M=0 且 DAC=0 时,如果此字段为 00 就携带 128 位地址;为 01 时省略前 64 位,由链路本地前缀加 0 构成,后 64 位不压缩;为 10 时,省略前 112 位,由链路本地前缀加 0 构成,后 16 位不压缩;为 11 时,地址全部省略,前64 位由链路本地前缀加 0 构成,后 64 位通过链路层地址计算得出。当 M=0 且 DAC=1时,00 为保留值,如果此值为 01,则 64 位前缀由上下文获取,后 64 位不压缩;为 10时,地址由上下文信息和携带的后 16 位构成;为 11 时,地址全部省略,前 64 位由上下文信息获得,后 64 位由链路层地址计算得到。当 M=1 且 DAC=0 时,如果此值为 00则不压缩,携带完整的 128 位地址;为 01 时压缩为 48 位,地址形式为 FFXX::00XX:XXXX:XXXX;为 10 时压缩为 32 位,地址形式为 FFXX::00XX:XXXX;为 11 时压缩为 8 位,地址形式为 FF02::00XX。当 M=1 且 DAC=1 时,00 表示压缩为 48 位,形式为FFXX:XXLL:PPPP:PPPP:PPPP:PPPP:XXXX:XXXX,其中X 表示携带地址的半字节,P 表示用于编码前缀的半字节,L 表示编码前缀长度的半字节。前缀信息 P 和 L 可从上下文中获得。01、10 和 11 三种组合目前保留未用。

RPL路由协议

在网络中路由协议扮演着重要的角色,它负责网络拓扑构建、路由选择以及数据转发等功能。传统有线网络中的路由协议需要发送大量数据包来维护网络拓扑结构,而且需要大量的存储空间来保存路由表项,因此并不适合传输速率、存储能力、处理能力都受限的无线传感器网络。因此,IETF 的 ROLL 工作组制定了一种针对低功耗有损网络的路由协议,即 RPL。RPL 协议能适应低速设备和互联网之间的数据转发,并且考虑了节点数量较大和链路不稳定等情况,很适合用于物联网的部署中。

上一篇下一篇

猜你喜欢

热点阅读