跳到主要内容

18. 可管理性考虑 (Manageability Considerations)

本节旨在考虑 RPL 的可管理性, 以及 RPL 将如何在 LLN 中运行. 本节范围是按照 [RFC5706] 中给出的建议, 考虑可管理性的以下方面: 配置, 监控, 故障管理, 计量以及协议性能.

18.1. 简介 (Introduction)

现有多数 IETF 管理标准是 MIB 模块 (基于管理信息结构 (Structure of Management Information, SMI) 的数据模型), 用于监控和管理网络设备.

对于若干协议, IETF 社区使用了 IETF 标准管理框架, 包括简单网络管理协议 (Simple Network Management Protocol) [RFC3410], 管理信息结构 (Structure of Management Information) [RFC2578], 以及用于管理新协议的 MIB 数据模型.

如 [RFC5706] 所指出, 操作和管理方面的通用策略已经扩展为更开放地面向一组工具和管理协议的策略, 而不是严格依赖 SNMP 这样的单一协议.

2003 年, Internet Architecture Board (IAB) 召开了关于网络管理的研讨会 [RFC3535], 讨论了一些 IETF 网络管理协议的优缺点, 并将它们与操作需求进行比较, 特别是配置需求.

讨论的一个问题是 SNMP [RFC3410] 二进制格式对用户不友好. 对 LLN 而言, 必须注意, 在撰写本文时, CoRE 工作组正积极研究 LLN 中设备的资源管理. 不过, 我们认为本节对 RPL 应如何部署, 运行和管理提供了重要指导.

如 [RFC5706] 所述:

管理信息模型应包括对哪些内容可管理, 协议哪些方面需要配置, 允许哪些类型的操作, 可能发生哪些协议特定事件, 哪些事件可以计数, 以及应针对哪些事件通知操作员的讨论.

以下各节会详细讨论这些方面.

RPL 将用于各种设备, 这些设备的内存等资源可能从几 KB 到数百 KB 甚至 MB 不等. 当内存高度受限时, 可能无法满足本节列出的所有要求. 不过, 以穷尽方式列出所有这些要求仍然有价值, 实现者随后可以根据设备上的可用资源确定其中哪些要求可以满足.

18.2. 配置管理 (Configuration Management)

本节讨论配置管理, 列出与配置管理相关的协议参数.

某些 RPL 参数是可选的. 配置要求仅适用于已使用的选项.

18.2.1. 初始化模式 (Initialization Mode)

"Architectural Principles of the Internet" [RFC1958] 第 3.8 节指出: "尽可能避免选项和参数. 任何选项和参数都应动态配置或协商, 而不是手动配置". 在 LLN 中尤其如此, 因为设备数量可能很大, 手动配置不可行. RPL 设计已经考虑了这一点, 由 DODAG 根向加入 DODAG 的设备提供若干参数, 从而避免路由器上的繁琐配置以及潜在误配置来源 (例如 Trickle 计时器的值等). 不过, RPL 实现还应允许配置其他 RPL 参数, 本节对此进行讨论.

18.2.1.1. 启动时 DIS 运行模式 (DIS Mode of Operation upon Boot-Up)

当节点首次上电时:

  1. 节点可以决定保持静默, 等待从感兴趣的 DODAG (通告受支持 OF 和度量/约束的 DODAG) 接收 DIO 消息, 并且在加入 DODAG 之前不发送任何组播 DIO 消息.

  2. 节点可以决定发送一个或多个 DIS 消息 (可选地请求特定 DODAG 的 DIO), 作为对附近 DODAG 的初始探测; 如果经过某个可配置时间段后没有收到 DIO 消息回复, 则节点可以决定作为 floating DODAG 的根并开始发送组播 DIO 消息.

RPL 实现 SHOULD 允许配置上述首选运行模式以及所需参数 (在第二种模式中: DIS 消息数量和相关计时器).

18.2.2. DIO 和 DAO 基本消息及选项配置 (DIO and DAO Base Message and Options Configuration)

考虑到 RPL 将被用于广泛应用, RPL 规定了若干协议参数. 话虽如此, 本规范特别注意限制必须在每个 RPL 路由器上配置的这些参数数量. 相反, 可以使用若干默认值, 并且在需要时这些参数可以由 DODAG 根提供, 从而允许动态参数设置.

RPL 实现 SHOULD 允许配置以下路由协议参数. 如上所述, 需要注意大量参数是在 DODAG 根上配置的.

18.2.3. LLN 中每个路由器都要配置的协议参数 (Protocol Parameters to Be Configured on Every Router in the LLN)

RPL 实现 MUST 允许配置以下 RPL 参数:

  • RPLInstanceID [DIO message, in DIO Base message]. 虽然 RPLInstanceID 必须在 DODAG 根上配置, 但也必须作为策略在每个节点上配置, 以确定该节点是否应加入特定 DODAG. 注意, 如果节点成为 floating DODAG 的根, 则可以在该节点上配置第二个 RPLInstanceID.

  • 支持的 Objective Code Point (OCP) 列表.

  • 支持的度量列表: [RFC6551] 规定了用于 DODAG 形成的若干度量和约束. 因此, RPL 实现应允许配置节点可以接受和理解的度量列表. 如果收到的 DIO 带有无法理解或不支持的度量和/或约束, 则如第 8.5 节所规定, 该节点会作为叶节点加入.

  • Prefix Information, 以及 valid lifetime, preferred lifetime 和 'L'/'A' 标志. [DIO message, Prefix Information Option]. RPL 实现 SHOULD 允许配置是否必须随 DIO 消息携带 Prefix Information 选项, 以分发用于自动配置的 Prefix Information. 在这种情况下, RPL 实现 MUST 允许配置要在 PIO 中通告的前缀列表以及对应标志.

  • Solicited Information [DIS message, in Solicited Information option]. 注意, RPL 实现 SHOULD 允许配置何时以及在什么情况下应发送此类消息, 以及 RPLInstance ID, 'V'/'I'/'D' 标志的值.

  • 'K' 标志: 节点何时应在 DAO 消息中设置 'K' 标志 [DAO message, in DAO Base message].

  • MOP (Mode of Operation) [DIO message, in DIO Base message].

  • Route Information (和 preference) [DIO message, in Route Information option].

18.2.4. LLN 中每个非 DODAG 根路由器都要配置的协议参数 (Protocol Parameters to Be Configured on Every Non-DODAG-Root Router in the LLN)

RPL 实现 MUST 允许配置 Target prefix [DAO message, in RPL Target option].

此外, 在某些情况下, 节点可能希望指定一个 Target, 以允许对该 Target 进行特定处理 (优先级等). 此类处理规则超出本规范范围. 使用时, RPL 实现 SHOULD 允许按每个 Target 配置 Target Descriptor (例如使用访问列表).

DODAG 父节点集合为空的节点可以成为 floating DODAG 的 DODAG 根. 它也可以设置其 DAGPreference, 使其较不受偏好. 因此, RPL 实现 MUST 允许配置节点在此情况下应发起的一组动作:

  • 启动自己的 (floating) DODAG: 除 DAGPreference 外, 还必须配置新的 DODAGID.

  • 毒化断开的路径 (见第 8.2.2.5 节中的过程).

  • 触发本地修复.

18.2.5. DODAG 根上要配置的参数 (Parameters to Be Configured on the DODAG Root)

此外, 还有若干其他参数只在 DODAG 根上配置, 并在 DIO 消息携带的选项中通告.

如第 8.3 节所规定, RPL 实现使用 Trickle 计时器来控制 DIO 消息发送. Trickle 算法的运行由一组可配置参数决定, 这些参数 MUST 可配置, 并随后由 DODAG 根沿 DODAG 在 DIO 消息中通告.

  • DIOIntervalDoublings [DIO message, in DODAG Configuration option]

  • DIOIntervalMin [DIO message, in DODAG Configuration option]

  • DIORedundancyConstant [DIO message, in DODAG Configuration option]

此外, RPL 实现 SHOULD 允许配置以下 RPL 参数集合:

  • Path Control Size [DIO message, in DODAG Configuration option]

  • MinHopRankIncrease [DIO message, in DODAG Configuration option]

  • DODAGPreference 字段 [DIO message, DIO Base object]

  • DODAGID [DIO message, in DIO Base option] 和 [DAO message, when the 'D' flag of the DAO message is set]

DAG 根行为: 在某些情况下, 如果节点无法加入 grounded DODAG, 它可能不希望永久作为 floating DODAG 根运行. 例如, 电池供电节点可能不希望长时间充当 floating DODAG 根. 因此, RPL 实现 MAY 支持配置节点是否可以在配置的一段时间内充当 floating DODAG 根.

DAG Version Number Increment: RPL 实现可以允许通过 DODAG 根上的配置, 通过更新 DODAGVersionNumber 来刷新 DODAG 状态. RPL 实现 SHOULD 允许配置 DODAG 根是否使用周期性或事件触发机制来控制 DODAGVersionNumber 变化 (这会按第 3.2.2 节规定触发全局修复).

DAO 消息是可选的, 用于要求 Downward 路由操作的 DODAG. 本节处理与 DAO 消息相关的一组参数, 并提供配置建议.

如第 9.5 节所述, 建议延迟向 DAO parent 发送 DAO 消息, 以最大化执行路由聚合的机会. 因此, 收到 DAO 消息后, 节点应启动 DelayDAO 计时器. 默认值为 DEFAULT_DAO_DELAY. RPL 实现 MAY 允许配置 DelayDAO 计时器.

在 Storing 运行模式下, 作为常规路由表更新和维护的一部分, storing 节点可以递增 DTSN, 以可靠触发其直接子节点的一组 DAO 更新. RPL 实现 MAY 允许配置一组规则, 用于指定 DTSN 递增的触发条件 (手动或基于事件).

当 DAO 条目超时或失效时, 节点 SHOULD 合理尝试向每个 DAO parent 报告 No-Path. 尝试次数 MAY 可配置.

实现应支持对 DAO 消息发送进行速率限制. 相关参数 MAY 可配置.

如第 10 节所述, 本文档描述的安全功能在实现上是可选的, 给定实现可以支持所述安全功能的一个子集 (包括空集).

为此, 支持所述安全功能的实现可以在概念上实现一个安全策略数据库. 为支持安全机制, RPL 实现 SHOULD 允许配置以下参数的一个子集:

  • 接受的 Security Mode [Unsecured mode, Preinstalled mode, Authenticated mode]

  • 接受的 KIM 值 [Secure RPL control messages, in Security section]

  • 接受的 Level 值 [Secure RPL control messages, in Security section]

  • 接受的 Algorithm 值 [Secure RPL control messages, in Security section]

  • 支持 Authenticated 或 Preinstalled key 模式的密钥材料.

此外, RPL 实现 SHOULD 允许为 DODAG 根配置以下参数的一个子集:

  • 通告的 Level 值 [Secure DIO message, in Security section]

  • 通告的 KIM 值 [Secure DIO message, in Security section]

  • 通告的 Algorithm 值 [Secure DIO message, in Security section]

18.2.8. 默认值 (Default Values)

本文档为以下 RPL 变量集合规定默认值:

  • DEFAULT_PATH_CONTROL_SIZE
  • DEFAULT_DIO_INTERVAL_MIN
  • DEFAULT_DIO_INTERVAL_DOUBLINGS
  • DEFAULT_DIO_REDUNDANCY_CONSTANT
  • DEFAULT_MIN_HOP_RANK_INCREASE
  • DEFAULT_DAO_DELAY

建议在协议中规定默认值; 话虽如此, 如 [RFC5706] 中所讨论, 默认值可能越来越没有意义. RPL 是一种预期用于多种上下文的路由协议, 其中节点数量, 链路类型和节点类型等网络特征预期会显著变化. 因此, 这些默认值很可能随着上下文和技术演进而变化. 实际上, LLN 相关技术 (例如硬件, 链路层) 在过去几年中已经发生剧烈演进, 并且预期此类技术在未来几年中还会发生相当大的变化和演进.

建议值并非基于广泛的当前最佳实践, 并被认为是保守值.

18.3. RPL 运行监控 (Monitoring of RPL Operation)

应监控若干 RPL 参数, 以验证路由协议和网络本身的正确运行. 本节列出感兴趣的监控参数集合.

18.3.1. 监控 DODAG 参数 (Monitoring a DODAG Parameters)

RPL 实现 SHOULD 提供以下参数的信息:

  • DODAG Version number [DIO message, in DIO Base message]

  • 'G' 标志状态 [DIO message, in DIO Base message]

  • MOP 字段状态 [DIO message, in DIO Base message]

  • DTSN 的值 [DIO message, in DIO Base message]

  • Rank 的值 [DIO message, in DIO Base message]

  • DAOSequence: 每个唯一 DAO 消息都会递增, 并在 DAO-ACK 消息中回显 [DAO and DAO-ACK messages]

  • Route Information [DIO message, Route Information Option] (每个父节点的 IPv6 前缀列表以及 lifetime 和 preference]

  • Trickle 参数:

    • DIOIntervalDoublings [DIO message, in DODAG Configuration option]
    • DIOIntervalMin [DIO message, in DODAG Configuration option]
    • DIORedundancyConstant [DIO message, in DODAG Configuration option]
  • Path Control Size [DIO message, in DODAG Configuration option]

  • MinHopRankIncrease [DIO message, in DODAG Configuration option]

仅可在 DODAG 根上监控的值:

  • Transit Information [DAO, Transit Information option]: RPL 实现 SHOULD 允许配置是否应在 DODAG 根上显示收到的 Transit Information 选项集合. 在这种情况下, 收到的 Transit Information 的 RPL 数据库也应包含 Path Sequence, Path Control, Path Lifetime 和 Parent Address.

18.3.2. 监控 DODAG 不一致和环路检测 (Monitoring a DODAG Inconsistencies and Loop Detection)

DODAG 不一致检测在 RPL 网络中特别关键. 因此, 建议 RPL 实现提供适当的监控工具. RPL 实现 SHOULD 提供一个计数器, 报告节点检测到与某个 DODAG 父节点不一致的次数, 例如 DODAGID 已改变.

在可能时, 应提供关于不一致检测的更细粒度信息. RPL 实现 MAY 提供计数器, 报告以下不一致的次数:

  • 从 Rank 较高的节点收到设置了 'O' 位 (Down) 的分组

  • 从 Rank 较低的节点收到清除了 'O' 位 (Up) 的分组

  • 设置了 'F' 位的分组数量

  • 设置了 'R' 位的分组数量

18.4. RPL 数据结构监控 (Monitoring of the RPL Data Structures)

18.4.1. 候选邻居数据结构 (Candidate Neighbor Data Structure)

候选邻居列表中的节点是通过相同方式发现并有资格潜在成为父节点的节点 (具有足够高的本地置信度). RPL 实现 SHOULD 提供一种方式, 允许使用某些反映本地置信度 (邻居稳定程度) 的度量来监控候选邻居列表.

如果候选邻居数量超过最大授权值, RPL 实现 MAY 提供一个计数器, 报告候选邻居被忽略的次数.

18.4.2. 面向目的地的有向无环图 (DODAG) 表 (Destination-Oriented Directed Acyclic Graph (DODAG) Table)

对于每个 DODAG, RPL 实现预期跟踪以下 DODAG 表值:

  • RPLInstanceID

  • DODAGID

  • DODAGVersionNumber

  • Rank

  • Objective Code Point

  • DODAG 父节点集合

  • 沿 DODAG 向 Upward 提供的前缀集合

  • 用于控制该 DODAG 的 DIO 消息发送的 Trickle 计时器

  • DAO parent 列表

  • DTSN

  • 节点状态 (路由器或叶节点)

RPL 实现 SHOULD 允许监控上述参数集合.

18.4.3. 路由表和 DAO 路由条目 (Routing Table and DAO Routing Entries)

RPL 实现维护与 DODAG 和 DAO 条目相关的若干信息元素 (针对 storing 节点). 对于 non-storing 节点, 只维护有限信息 (路由表基本简化为一组 DODAG 父节点以及上述 DODAG 特征); 而对于 storing 节点, 该信息会用路由条目增强.

RPL 实现 SHOULD 允许监控以下参数:

  • Next Hop (DODAG parent)

  • Next Hop Interface

  • 每个 DODAG parent 的路径度量值

DAO Routing Table 条目在概念上包含以下元素 (仅针对 storing 节点):

  • Advertising Neighbor Information

  • IPv6 地址

  • DAO parent 已向其报告此条目的 Interface ID

  • 重试计数器

  • DAO Content 的逻辑等价物:

    • DAO-Sequence
    • Path Sequence
    • DAO Lifetime
    • DAO Path Control
  • Destination Prefix (或 address 或 Mcast Group)

RPL 实现 SHOULD 提供每个 DAO Routing Table 条目状态的信息.

18.5. 故障管理 (Fault Management)

故障管理是用于故障排查, 验证协议正确运行模式和网络设计的关键组件; 它也是网络性能监控的关键组件. RPL 实现 SHOULD 允许提供以下与故障管理相关的信息:

  • 内存溢出以及原因 (例如路由表溢出等)

  • 分组无法发送到被标记为有效的 DODAG parent 的次数

  • 收到路由器没有对应 RPLInstanceID 的分组次数

  • 触发本地修复过程的次数

  • DODAG 根触发全局修复的次数

  • 收到格式错误消息的数量

  • 有分组需要转发但没有下一跳 (DODAG parent) 的秒数

  • 没有下一跳 (DODAG parent) 的秒数

  • 节点因收到带有无法理解度量/约束的 DIO, 且被配置为在此情况下作为叶节点加入, 而作为叶节点加入 DODAG 的次数 (见第 18.6 节)

RECOMMENDED 至少通过错误日志消息报告故障. 也可以使用其他协议报告此类故障.

18.6. 策略 (Policy)

RPL 实现可以使用策略规则来确定节点是否被允许加入邻居通过 DIO 消息通告的特定 DODAG.

本文档规定单个 DODAG 内的操作. DODAG 由以下元组 (RPLInstanceID, DODAGID) 表征. 此外, 如上所述, DIO 消息用于通告其他 DODAG 特征, 例如用于构建 DODAG 的路由度量和约束, 以及正在使用的 Objective Function (由 OCP 指定).

第一类策略规则包括指定 RPL 节点加入 DODAG 必须满足的以下条件:

  • RPLInstanceID

  • 支持的路由度量和约束列表

  • Objective Function (OCP 值)

RPL 实现 MUST 允许配置这些参数, 并 SHOULD 指定如果通告的 DODAG 不符合本地策略, 节点是否必须简单忽略该 DIO, 或者如果仅不支持所支持路由度量和约束列表以及 OF, 节点是否应作为叶节点加入. 此外, RPL 实现 SHOULD 允许将 DODAGID 添加为策略的一部分.

RPL 实现 SHOULD 允许配置节点加入 DODAG 可接受或首选的 Objective Function (OF) 集合, 这些 OF 由其 Objective Code Point (OCP) 引用; 并允许配置如果节点候选邻居中没有任何一个通告所配置允许的 Objective Function, 或者通告的度量/约束无法理解/不受支持时应采取什么动作. 在这种情况下可以采取两种动作:

  • 节点按第 8.5 节所规定作为叶节点加入 DODAG.

  • 节点不加入 DODAG.

LLN 中的节点可以从包括 RPL 在内的不同路由协议学习路由信息. 在这种情况下, 希望通过管理偏好控制应偏向哪条路由. 实现 SHOULD 允许为学习到该路由的路由协议指定管理偏好.

内部数据结构 (Internal Data Structures): 某些 RPL 实现可能限制候选邻居列表的大小, 以限定内存使用; 在这种情况下, 某些原本可行的候选邻居可能不会被考虑, 并会直接从候选邻居列表中丢弃.

RPL 实现 MAY 提供候选邻居列表大小的指示器.

18.7. 故障隔离 (Fault Isolation)

RECOMMENDED 隔离那些开始以不可接受速率发出格式错误消息的邻居.

18.8. 对其他协议的影响 (Impact on Other Protocols)

RPL 对其他协议的影响非常有限. 当路由器 (例如 LBR) 上需要多个路由协议时, 预期设备支持这些路由协议之间的路由重分发功能, 以允许两个路由域之间的可达性. 此类重分发 SHOULD 由用户可配置策略控制.

就网络流量方面的影响而言, RPL 通过 Trickle 计时器 (第 8.3 节) 等机制被设计为限制控制流量. 因此, RPL 对其他协议的影响应极其有限.

18.9. 性能管理 (Performance Management)

性能管理始终是协议的重要方面, RPL 也不例外. IP 性能监控 (IP Performance Monitoring, IPPM) 工作组已经规定了若干感兴趣的度量; 话虽如此, 考虑到监控这些度量在设备资源和所需带宽方面的成本, 它们很难适用于 LLN. 不过, RPL 实现 MAY 支持其中某些度量, 其他感兴趣参数列于下方:

  • 修复次数以及以秒为单位的修复时间 (平均值, 方差)

  • 设备因路由表中缺少可达邻居而无法转发分组的次数和持续时间

  • RPL 在带宽和所需内存方面的资源消耗监控

  • 发送和接收的 RPL 控制消息数量

18.10. 诊断 (Diagnostics)

在某些情况下, 节点应被置于 "verbose" 模式以改进诊断. 因此, RPL 实现 SHOULD 提供将节点置入和退出 verbose 模式的能力, 以获取额外诊断信息.