14. Objective Function 指南 (Guidelines for Objective Functions)
Objective Function (OF) 与路由度量和约束结合使用, 允许选择要加入的 DODAG, 以及该 DODAG 中作为父节点的若干对等节点. OF 用于计算一个有序父节点列表. OF 还负责计算设备在 DODAG Version 内的 Rank.
Objective Function 在 DIO 消息中使用 Objective Code Point (OCP) 指示, 并指明必须用于构造 DODAG 的方法. Objective Code Point 在 [RFC6552] 和相关配套规范中规定.
14.1. Objective Function 行为 (Objective Function Behavior)
多数 Objective Function 预期在节点上遵循相同的抽象行为:
-
每当某个事件指示潜在下一跳信息已更新时, 就会触发父节点选择. 这可能发生在收到 DIO 消息, 计时器到期, 所有 DODAG 父节点不可用, 或某个触发指示候选邻居状态已变化时.
-
OF 扫描节点上的所有接口. 尽管在多数应用场景中通常可能只有一个接口, 但也可能存在多个接口, 并且某个接口可能被配置为可用于或不可用于 RPL 操作. 接口也可以配置偏好, 或通过某种可能依赖链路层且超出本规范范围的启发式方法动态学习为优于另一个接口. 最后, 接口可能匹配也可能不匹配 Objective Function 所要求的某个条件, 例如安全程度. 因此, 某些接口可能完全从计算中排除, 例如这些接口无法满足某些已通告约束; 而其他接口可能或多或少更受偏好.
-
OF 扫描可能接口上的所有候选邻居, 以检查它们是否可以作为某个 DODAG 的路由器. 候选邻居可能有很多, 并且候选邻居在可用之前可能需要通过某些验证测试. 特别是, 某些链路层要求先观察与路由器的活动经验, 才能将该路由器启用为下一跳.
-
OF 通过向候选者的 Rank 加上一个表示节点与候选者在 DODAG Version 中相对位置的值, 来计算节点用于比较的 Rank.
-
Rank 的增加量必须至少为 MinHopRankIncrease.
-
为了使环路避免和度量优化保持一致, Rank 的增加量应反映度量值的任何增加. 例如, 对于 ETX 这样的纯加性度量, Rank 增加量可以与度量增加量成比例.
-
会导致节点 Rank 增加的候选邻居不会被纳入父节点选择.
-
-
通告的 OF 与策略函数指定的 OF 集合不兼容的候选邻居会被忽略.
-
在扫描所有候选邻居时, OF 保持当前最佳父节点, 并将其能力与当前候选邻居进行比较. OF 定义若干对达成目标至关重要的测试. 路由器之间的测试确定一种序关系.
-
如果路由器在该关系上相等, 则在这些路由器之间尝试下一个测试,
-
否则, 两个路由器中较好的一个成为当前最佳父节点, 并继续扫描下一个候选邻居.
-
某些 OF 可以包含一个测试, 用于比较如果节点加入任一路由器将产生的 Rank.
-
-
扫描完成时, 选出首选父节点, 并将节点 Rank 计算为首选父节点 Rank 加上与该父节点对应的 Rank 步长.
-
可能需要其他轮次扫描来选出备用父节点. 在后续轮次中:
-
不在同一 DODAG 中的候选邻居会被忽略.
-
Rank 大于该节点的候选邻居会被忽略.
-
Rank 等于该节点的候选邻居在父节点选择中会被忽略.
-
Rank 小于该节点的候选邻居更受偏好.
-