跳到主要内容

3.5.1. Rank 比较 (DAGRank())

Rank 可以视为一个定点数, 其中整数部分与小数部分之间基点的位置由 MinHopRankIncrease 决定. MinHopRankIncrease 是某个节点与其任一 DODAG 父节点之间 Rank 的最小增量. DODAG 根配置 MinHopRankIncrease. MinHopRankIncrease 在跳成本精度与网络可支持的最大跳数之间形成折衷. 例如, 非常大的 MinHopRankIncrease 可以精确刻画给定一跳对 Rank 的影响, 但无法支持很多跳.

当目标函数计算 Rank 时, 目标函数作用于整个 Rank 数量, 即 16 位 Rank. 当比较 Rank 时, 例如用于确定父子关系或进行环路检测时, 应使用 Rank 的整数部分. Rank 的整数部分由 DAGRank() 宏按如下方式计算, 其中 floor(x) 是求不大于 x 的最大整数的函数:

           DAGRank(rank) = floor(rank/MinHopRankIncrease)

例如, 如果 16 位 Rank 数量为十进制 27, MinHopRankIncrease 为十进制 16, 则 DAGRank(27) = floor(1.6875) = 1. Rank 的整数部分为 1, 小数部分为 11/16.

按照本文档的约定, 使用宏 DAGRank(node) 可以解释为 DAGRank(node.rank), 其中 node.rank 是节点维护的 Rank 值.

如果 DAGRank(A) 小于 DAGRank(B), 则节点 A 的 Rank 小于节点 B 的 Rank.

如果 DAGRank(A) 等于 DAGRank(B), 则节点 A 的 Rank 等于节点 B 的 Rank.

如果 DAGRank(A) 大于 DAGRank(B), 则节点 A 的 Rank 大于节点 B 的 Rank.