Contiki相关协议的研究

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。
  • 3.1重复地址检测
      在 IPv6中重复地址检测(DAD)由工作在第三层的 ICMPv6 来实现,属于邻居发现协议的一部分,其原理和 IPv4 中的 ARP 类似,也是节点发送一个请求,如果收到回应的报文,则该地址已被占用,否则自己可以使用该地址。
      具体过程如下:
      首先,配置了 IPv6 临时地址的节点向该地址对应的请求节点多播地址发送一个类型为 135 的 ICMPv6 数据包,即 NS 消息,其中 Target 字段的内容就是要检测的临时地址,源地址为::,即未知地址,目的地址为请求节点多播地址,即被请求节点地址的低24 位前缀ff02::1:ff00::/104,链路层目的地址为被请求节点多播地址的 MAC 地址映射,映射方法为 3333 加多播地址的后 32 位。
      如果其他节点收到这个请求包后,发现要检测的地址对自己来说也是个临时地址,就放弃使用该地址,也不发送回应数据包。如果被检测的地址对自己来说是一个正在使用的地址,就发送类型为 136 的 ICMPv6 数据包,即 NA 消息,其中目的地址为链路本地范围所有节点的多播地址 ff02::1,链路源地址为自己的 MAC 地址,Target 字段仍为这个要检测的 IPv6 地址。这样发送 NS 的节点收到这个 NA 后就知道这个临时地址已被某个节点使用了,自己则放弃该地址。
      IPv6 的这种重复地址检测的方式代替了 IPv4 下的 ARP 协议,属于 ND 范畴,而承载 ND 协议的 ICMPv6 数据包工作在第三层,这种变化的主要优势在于可以利用三层的多播技术来限制报文的传输范围,还可以防止 ARP 欺骗、使用 IPSec 提高安全性和避免广播带来的网络性能损耗。
  • 3.2无状态地址自动配置
      在无状态地址自动配置(SLAAC)中使用了 RS 和 RA 两种报文来发现路由器和获得路由前缀。在 IPv6 网络中,路由器以一定的时间间隔发送 RA 消息,节点收到后会获得地址前缀;或者当节点产生链路本地地址后发送 RS 消息到所有路由器所在的多播组,促使路由器立刻发送 RA 消息。
      具体过程如下:



      首先,当一个接口被激活时,先通过前缀 fe80::/64 和接口地址组合得到链路本地地址,并通过重复地址检测机制验证该地址是否可用。
      然后,节点发送一个类型为 133 的 ICMPv6 数据包,即 RS 消息,到路由多播地址ff02::2,源地址为链路本地地址。每个节点在启动时只能发送三个路由请求,以防止路由请求在链路上泛滥。
      路由器收到 RS 信息后会立即发出一个类型为 134 的 ICMPv6 数据包,即 RA 消息,到链路节点多播地址 ff02::1,源地址为链路本地地址。节点收到 RA 消息后,会从中提取前缀等信息,和自己的接口 ID 组成全局 IPv6 地址。获得 IP 地址后还要经过重复地址检测才能正式启用该地址。

  • 3.3地址解析
      在 IPv4 中,节点之间通信时,如果是同网段的,就通过 ARP 协议来获取对方的MAC 地址,如果是跨网段的,那主机就获得网关的 MAC 地址,把数据包发给网关,数据包出网关后通过路由协议到达和目的节点同网段的目的路由器,然后到达目的节点。
      在 IPv6 中用邻居发现协议替代了 ARP 协议来获取二层的链路地址。IPv6 定义了一个叫 Destinationcache 的数据表项,其中包含到达目的地址的下一跳和到达目的地址的 PMTU。当节点要发送数据时,它就查找 Destinationcache 来获得下一跳的地址,然后根据该地址来查找邻居缓存表,以便确定链路层地址。
      如果在 Destinationcache 中没有找到匹配的表项,那么分两种情况来添加与目的地址相匹配的表 项 。如果 目的地址 和本机 在同一网 段中,就将该目 的地址加入
    Destinationcache 中的下一跳域,然后查找邻居缓存表,获得目的地址对应的 MAC 地址。如果在不同网段中,则在路由表中查找得到的下一跳填入到Destinationcache 中,然后再查找邻居缓存表,获得下一跳的 MAC 地址。
      如果邻居缓存表中没有对方的链路层地址,则启动解析过程。首先,节点 A 发送一个 NS 消息,目的地址为节点 B 对应的请求节点多播地址,前缀为 ff02::1ff00::/104,Target 字段内容为待解析的地址。同时也包含了节点 A 本身的链路层地址,以便节点
    B 封装回应的 NA 报文。
      节点 B 收到 NS 报文后,发现节点 A 要解析自己的二层链路地址,就发送一个包含自己二层链路信息的 NA 消息,同时节点 B 也获得了节点 A 的链路层信息,并放到自己的邻居缓存表中。节点 A 收到 NA 消息后,就将其中的链路地址放到自己的邻居缓存表中。至此,节点 A 和节点 B 就可以根据邻居缓存表进行通信了。

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 协议能适应低速设备和互联网之间的数据转发,并且考虑了节点数量较大和链路不稳定等情况,很适合用于物联网的部署中。

  • 1 RPL协议的拓扑结构
      低功耗有损网络通常要预先确定网络的拓扑结构,因此,RPL 首先需要发现链路,然后才能进行路由选择。RPL 路由协议的组织拓扑为一个有向无环图(Directed Acyclic Graph , DAG ),并被划分为一个或多个面向目的地的 DAG ( Destination Oriented DAG,DODAG)。RPL 使用四个标识符来识别和维持拓扑结构。
      第一个标识符是 RPL Instance ID,即 RPL 实例 ID。RPL 实例 ID 用来标识一组DODAG,一个网络中可以有多个 RPL 实例 ID,每个 RPL 实例 ID 独立定义一组DODAG,可以根据不同的目标函数(Objective Functions,OF)进行优化和路由选择。具有相同 RPL 实例 ID 的 DODAG 被称为一个 RPL 实例,同一个 RPL 实例中的DODAG 使用相同的 OF。
      第二个标识符是 DODAG ID。DODAG ID 的作用范围在 RPL 实例内,在一个网络中,RPL 实例 ID 和 DODAG ID 相结合可以唯一地表示一个 DODAG。一个 RPL 实例中可以有多个 DODAG,每个 DODAG 都有自己唯一的 DODAG ID。
      第三个标识符是 DODAG Version Number,即 DODAG 版本号。它的作用范围在DODAG 内,DODAG 可通过增加版本号的方式重建拓扑结构,RPL 实例 ID、DODAG ID 和 DODAG 版本号相结合可唯一地标识一个 DODAG 版本。
      第四个标识符是 Rank,即等级。等级的单位是 DODAG 版本,等级是节点在DODAG 版本中位置的分等级表示,定义了该节点相对于其他节点关于一个 DODAG根节点的惟一位置。


    RPL网络拓扑图

      RPL 协议中规定,DODAG 为若干有向边连接的顶点,这些有向边之间不能构成直接的环路。RPL 通过建立从叶节点到根节点之间的路径集合来构建 DODAG。与传统的树形拓扑结构相比,DODAG 能够提供额外的路径。在一个 RPL 网络中,可以有一个或多个 RPL 实例。在每个 RPL 实例中可以有一个或多个 DODAG,每个 DODAG都有一个自己的 Root,即根节点。一个节点可以加入到多个不同的 RPL 实例中,但是在一个实例内只能属于一个 DODAG。

  • 2 上行路由和DODAG构造
      根据 RPL 的目标函数(Objective Function,OF)可创建指向 DODAG 根节点的上行路由,RPL 节点通过 DODAG 信息对象(DODAG Information Object,DIO)消息创建和维护 DODAG。
      DODAG 的根节点可通过增加 DODAG 版本号的方式进行全局拓扑修复。这会产生一个新的 DODAG 版本,在新的版本中节点可以选择一个新的位置,其等级不受旧版本中等级的影响。RPL 也可以进行局部修复,这需要 DIO 消息指定相应的参数。为了避免消耗多余的流量,RPL 网络通常更倾向于局部修复而不是全局修复。
      有些 DODAG 能够连接到能满足特定应用目标需求的主机上,这种 DODAG 被称为接地的(Grounded)。特定的应用目标由用户自己定义,比如接入到互联网。不能满足这个目标的 DODAG 被称为是浮动的(Floating),只需要提供到 DODAG 中节点的路由即可。
      构建 DODAG 的具体过程如下:
      首先,一些节点根据相应的 DODAG 配置被设置为根节点。
      然后,节点通过向所有 RPL 节点发出链路本地多播 DIO 消息,来通告自己的存在、与 DODAG 的关系、路由代价和相关的度量信息。
      接下来,节点侦听这些 DIO 消息并根据其中的信息来加入一个新的 DODAG,即选择父节点,或者根据指定的目标函数和其邻居的等级值来维护现有的 DODAG。
      最后,节点通过 DODAG 版本中的父节点为 DIO 消息中指定的目的地提供路由表项。决定加入到新 DODAG 中的节点可以提供一个或多个 DODAG 父节点作为默认路由下一跳。
  • 3 下行路由和目的地通告
      RPL 使用目的地通告对象(Destination Advertisement Object,DAO)消息来创建下行路由。对于那些需要 P2MP 或 P2P 流量的应用来说,DAO 消息是一个可选的功能。RPL 支持两种模式的下行流量:存储(完全有状态)或非存储(完全源路由)。在这两种模式下,P2P 数据包都要先向上流向根节点然后在向下流向最终的目的地。不同的是,在非存储模式下,数据包会一直向上经过所有路径流到根节点然后才会向下流。而在存储模式下,数据包可以通过源节点和目的节点共同的祖先节点直接向下流到目的地,这个共同的祖先节点通常要比根节点更早到达,因此可以减少跳数,加速转发。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,015评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,262评论 1 292
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,727评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,986评论 0 205
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,363评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,610评论 1 219
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,871评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,582评论 0 198
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,297评论 1 242
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,551评论 2 246
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,053评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,385评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,035评论 3 236
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,079评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,841评论 0 195
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,648评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,550评论 2 270

推荐阅读更多精彩内容

  • 原文:Thread Stack Fundamentals 介绍 一般特点 Thread协议栈是可靠,经济高效,低功...
    公子小水阅读 8,254评论 0 4
  • 网络层简介 1. 概念 为解决经由多条链路的交付问题,从而设计了网络层。其主要负责主机到主机的交付,并且在分组经过...
    顾慎为阅读 2,973评论 0 0
  • 简介 用简单的话来定义tcpdump,就是:dump the traffic on a network,根据使用者...
    保川阅读 5,903评论 1 13
  • 定义 网络协议为计算机网络中进行数据交换而建立的规则、标准或约定的集合。网络协议主要由三个要素组成:语义、语法及时...
    FlyAndroid阅读 922评论 0 10
  • 1 人生到了这个年龄就有些感悟了。 一些决定也需要尽早下来。 年轻的时候有大把的时光有大把的精力,这种情况可能一去...
    大红胡子叔叔阅读 543评论 0 3