刚开始学习物联网的时候,就是从contiki出发,当时就了解了RPL,现在,将之前的翻译整理一下,留作记录:
官方地址:https://datatracker.ietf.org/doc/rfc6550/
习惯用RFCreader来看:http://www.rfcreader.com/#rfc8138_line97
Internet Engineering Task Force (IETF) T. Winter, Ed.
Request for Comments: 6550
Category: Standards Track P. Thubert, Ed.
ISSN: 2070-1721 Cisco Systems
版权©归 2012 IETF Trust 和本文档撰写者(们)所有。保留所有权利
RPL: IPv6 Routing Protocol for Low-Power and Lossy Networks
低功耗有损网络(Low-Power and Lossy Networks, LLNs)是一类路由与连接受限的网络。LLN s路由一般在处理能力、内存和能量(电池)上受到限制。它们之间的互连具有高丢失率、低数据速率和不稳定的特点。LLNs 可由几十个到上千个路由构成。支持的数据流包括点对点(LLN 内设备间)、点对多点(从中心控制点到 LLN 内的设备子集),以及多点对点(从 LLN 内的多个设备到中心控制点)。文档规定低功耗有损网络的 IPv6 路由协议(IPv6 Routing Protocol for Low-Power and Lossy Networks, RPL),该协议提供的机制支持从 LLN 内多个设备到中心控制点的多点对点流量,以及从中心控制点到 LLN 内多个设备的点对多点通信。也可以支持点对点通信。
### 第一到第三章
目录
第1章 序言
1-1 设计原则
1-2 预期的链路层类型
第2章 术语
第3章 协议综述
3-1 拓扑结
3-1-1 构造拓扑结
3-1-2 RRL标识符
3-1-3 实例、DODAGs和DODAG版本
3-2 上行路由和DODAG架构
3-2-1 目标函数(OF)
3-2-2 DODAG修复
3-2-3 安全
3-2-4 接地DODAG和浮动DODAG
3-2-5 本地DODAGs
3-2-6 管理偏好
3-2-7 数据-路径合法性和环路检测
3-2-8 分布式算法运行
低功耗有损网络(LLNs)由大量受限节点(它们在处理能力、存储能力上受到限制;以及
在能量上会因用电池供电或能量净化受到限制)组成。这些路由器通过有损链路互连,
一般仅支持不稳定的低速数据,分组交付率相对较低。这些网络的另一个特点是流量模
式不仅有简单的点对点,而且有点对多点或多点对点多种模式。此外,这样的网络有可
能由上千个节点构成。这些特点对路由解决方案提出了独特的挑战:IETF ROLL 工作
组针对在[RFC5867]、[RFC5826]、[RFC5673]和[RFC5548]中规定的低功耗有损网络(LLN)路由协议,定义了特定应用路由要求。
本文档规定 LLNs 的 IPv6 路由协议(IPv6 Routing Protocol for LLNs, RPL)。注意,虽然
RPL是按照上述多个要求文档中所列要求制定的,但是RPL的应用绝不限于这些应用。
RPL 被设计满足在[RFC5867]、[RFC5826]、[RFC5673]和[RFC5548]中详细阐明的要求。
网络可以同时运行多个 RPL 实例(instance)。每个这样的实例可以适应不同、以及潜在不相容的约束或性能标准。本文档定义单个实例如何运行。
为了拓宽 LLN 应用领域,RPL 把分组处理和转发从路由优化目标中分离出去。这类目
标例子包括尽量减少能量、尽量缩短延时或满足约束。本文档介绍 RPL 运行模式。其
他伙伴文档规定路由目标函数(Objective Functions)。RPL实现在支持具体 LLN 应用时,
将根据应用要求包括必要的 Objective Function(s)。运行 RPL 需要双向链路。在一些 LLN 环境,这些链路可能展现不对称的特性。将路由用作父节点前需要验证路由器的可达性。RPL 期望在选择父节点阶段触发外部机制,以检验链路特性和邻居可达性。邻居不可达检测(Neighbor Unreachability Detection, NUD)是这样的机制,但是也可以选用替代方案,包括双向转发检测(Bidirectional Forwarding Detection, BFD) [RFC5881]以及来自较低层的提示(通过如[RFC5184]那样的第 2 层(L2)触发器)。通常,更看重可对流量起反应的检测机制,以便尽量减小监测未使用链路的成本。
RPL 也期望在数据分组中接入和传送某些控制信息(称为“RPL Packet Information”)的
外部机制。RPL Packet Information 在第 11-2 节定义,该信息能够与带 RPL Instance 和RPL 路由状态验证的数据分组关联。RPL 选项[RFC6553]是这类机制的例子。除了使用严格的源路由 (该路由用于在第 9 章详细介绍的 Non-Storing 模式中的下行(Downward)分组)以外,该机制是所有分组需要的,该机制在性质上可阻止无限循环,减轻对 RPLPacket Information 的需要。将来的伙伴规范可能提出替代方法,以便在 IPv6 分组中携带 RPL Packet Information,以及可能扩展 RPL Packet Information 来支持附加功能。
RPL 提供在动态形成的网络拓扑上传播信息的机制。这种传播能够尽量减少节点中的
配置,使节点能够尽可能自主运行。这种机制使用 Trickle [RFC6206]优化传播,如第
8-3 节所述。
在一些应用中,RPL 集合了拥有独立前缀的路由的拓扑结构。这些前缀是否可以聚
合取决于路由器的起源。路由拥有的前缀作为 on-link 通告。
RPL 也引入一种能力,将公共前缀与子网绑在一起,在子网内路由。源可以注入有关
由 RPL传播的子网的信息,并且源是那个子网的官方。因为许多 LLN 链路有非传递性,
RPL 在子网上传播的公共前缀绝不能作为 on-link 通告。
尤其是,RPL可以传播 IPv6 Neighbor Discovery (ND)信息,诸如 Prefix Information Option 。(PIO) [RFC4861]和 Route Information Option (RIO) [RFC4191]。虽然 ND 信息不会与路由通告混淆并且它绝不会在另一个路由协议中被直接重新分配,由 RPL 传播的 ND 信息保留所有它的路由器到主机(少数情况下有路由器到路由器的扩展)的原始语义。RPL节点常常兼有主机和路由器的行为。作为主机,它处理在[RFC4191]、[RFC4861]、[RFC4862]和[RFC6275]中规定的选项。作为路由器,RPL 节点可以通告来自特定链路所要求选项的信息,例如,在 ND Router Advertisement (RA)消息中,具体操作超出本文档范围。
本规范的一组其他文档将对应用形式提供进一步指导,这些应用语句规定了适合楼
宇自动化(Building Automation)、家庭自动化(Home Automation)、工业(Industrial)和城市应用场景的一组操作要点。
兼容 IP 分层架构,RPL 不依赖任何特定链路层技术的具体特征。RPL 被设计能运行在
各种不同链路层上,包括受限、可能有损的链路层,或者典型的与极度受限的主机设备
或路由器设备一起使用的链路层,这样的技术包括但不限于低功耗无线技术或电力线通
信(Power Line Communication , PLC)技术。
当在 RPL 和具体链路层技术间设计链路层接口时,实施者可在[RFC3819]中获得有益帮
助。
此外,本文档使用来自[ROLL-TERMS]的术语,并且引入下述术语:
本章的目标是以[RFC4101]倡导的风格介绍 RPL。协议细节在后续章节介绍。
本节介绍可形成的基本 RPL 拓扑结构,介绍构建这些拓扑结构的规则,即,指导 DODAG形成的规则。
LLNs,如 Radio Networks,一般没有预先定义的拓扑结构,例如,由点对点导线强制
形成的拓扑结构,所以,RPL 必须发现链路,接着有节制地选择对端。
在许多情况,由于 Layer 2 范围仅部分重叠,RPL 形成非传递/Non-Broadcast Multi-Access (NBMA)网络拓扑结构,RPL 根据这些网络拓扑计算路由。
RPL 路由优化中来自一个或多个根的流量,这些根充当该拓扑结构的汇接点(sink)。
因此,RPL 如 Directed Acyclic Graph (DAG)那样安排拓扑结构,DAG 被划分成一个或
多个 Destination Oriented DAGs (DODAGs),每个汇接点一个 DODAG。如果 DAG 有多个根,那么,可以预期这些根通过公共骨干网(如传输链路)连接。
RPL 使用 4 个值来标识和维护拓扑结构:
RPL Instance 包括一个或多个 DODAG 根。RPL Instance 可以提供到某些目的地前缀的
路由,可以通过 DODAG 根或 DODAG 内替代路径到达。这些 DODAG 根可以独立工
作,也可以在网络上协同工作,网络不局限为 LLN。
RPL Instance 可能包括:
RPL 提供向上(Up)朝向 DODAG 根的路由,形成按照 Objective Function (OF)优化的
DODAG。RPL 节点通过 DODAG Information Object (DIO)消息构建和维护这些 DODAG。
目标函数(Objective Function, OF)定义RPL节点如何选择和优化 RPL Instance 中的路由。OF 由 DIO Configuration 选项中的 Objective Code Point (OCP)标识。OF 定义节点如何将一个或多个度量和约束(度量和约束在[RFC6551]中定义)转换成称作 Rank 的值,Rank近似为节点离开 DODAG 根的距离。OF 也定义节点如何选择父代。更多细节参阅第 14章、[RFC6551]、[RFC6552]和相关伙伴规范
通过增加 DODAGVersionNumber,DODAG 根发起全局修复操作。这将启动新的
DODAG Version。在新 DODAG Version 中的节点可以选择新位置,节点的 Rank 不受
在旧 DODAG Version 中它们的 Rank 的限制。
RPL 也支持可以用于该 DODAG Version 内本地修复的机制。当根据 DODAG 根进行配
置和由 DODAG 根中的策略进行控制时,DIO 消息规定必要的参数。
RPL 支持消息保密性和完整性。它的设计使得当可获得且适合时,可以使用链路层机
制;然而,如果没有链路层机制,RPL 可以使用它自己的机制。RPL 有 3 种基本安全
模式。
第一种称作“无安全的”,发送 RPL 控制消息但不使用任何附加安全机制。无安全模式
不是说 RPL 网络是不安全的:RPL 网络可以使用其他已有的安全基元(例如,链路层安
全),满足应用安全需要。
DODAGs 可以接地或浮动:DODAG 根通告是哪一种情况。接地 DODAG 提供到主机
的连接,这些主机被要求满足限定的应用目标。不预期浮动 DODAG 能够满足此目标;
在大多数情况,浮动DODAG仅提供去DODAG内节点的路由。举例来讲,浮动 DODAGs
可用于修复期间保持互连。
通过形成 Local DODAG (它的 DODAG 根是预期的目的地),RPL 节点能够优化去 LLN
内目的地的路由。与全局 DAGs 不同,全局 DAGs 可由多个 DODAG 组成,本地 DAGs
有一个且仅有一个 DODAG,因此,仅有一个 DODAG 根。可根据需要构建 Local
DODAGs。
实现/部署可以通过管理偏好,规定某些 DODAG 根应当先于其他 DODAG 根使用。管
理偏好提供控制流量和工程 DODAG 形成的方法,以便更好地支持应用要求或需要。
LLNs 的低功耗和有损性质促使 RPL 使用按需(on demand)环路检测(使用数据分组)。因
为数据流量可能是偶发的,维持始终随物理拓扑结构变动而更新的路由拓扑会浪费能源。
在物理连接中 LLNs 一般呈现瞬间的、无碍流量的变化,但是,从控制平面密切跟踪这
些变化代价高昂。直到有数据发送前,连接中出现的瞬态和偶发变化不需要 RPL 处理。
RPL 这方面的设计汲取自现有的、高频率使用的 LLN 协议,以及关于 RPL 效用的大量
实验和部署证据
与数据分组一起传送的 RPL Packet Information 包括发射机的 Rank。分组的路由决定(上行或下行(Upward or Downward))和两个节点间 Rank 关系之间的不一致指出可能有环路。一旦收到这样的分组,节点发起本地修复操作。
例如,如果节点收到标记为上行(Upward)方向移动的分组,并且如果那个分组记载发射
机有比接收节点更低的(更小的)Rank,那么,接收节点能够断定该分组不是沿上行
(Upward)方向传播,以及断定 DODAG 不一致。
构建 DODAG 的分布式算法的高层概述如下: