14. 目的関数のガイドライン
目的関数(OF: Objective Function)は、ルーティングメトリックと制約と組み合わせて、参加するDODAGと、そのDODAG内の親としての多数のピアを選択することを可能にします。OFは、親の順序付きリストを計算するために使用されます。OFは、DODAGバージョン内のデバイスのランク(Rank)を計算する責任もあります。
目的関数は、DIOメッセージ内で目的コードポイント(OCP: Objective Code Point)を使用して示され、DODAGを構築するために使用しなければならない方法を示します。目的コードポイントは、[RFC6552]および関連するコンパニオン仕様で指定されています。
14.1. 目的関数の動作
ほとんどの目的関数は、ノードで同じ抽象的な動作に従うことが期待されています:
-
親の選択は、潜在的なネクストホップ情報が更新されたことを示すイベントが発生するたびにトリガーされます。これは、DIOメッセージの受信、タイマーの経過、すべてのDODAG親が利用不可、または候補ネイバーの状態が変更されたことを示すトリガーが発生したときに発生する可能性があります。
-
OFはノード上のすべてのインターフェイスをスキャンします。ほとんどのアプリケーションシナリオでは通常1つのインターフェイスしかないかもしれませんが、複数のインターフェイスが存在する場合があり、インターフェイスはRPL操作に使用可能または使用不可として構成される場合があります。インターフェイスは、優先順位で構成することも、リンク層に依存する可能性があり、この仕様の範囲外であるいくつかのヒューリスティックによって別のインターフェイスよりも優れていると動的に学習することもできます。最後に、インターフェイスは、目的関数に必要な基準(たとえば、セキュリティの程度)に一致する場合と一致しない場合があります。その結果、一部のインターフェイスは計算から完全に除外される場合があります(たとえば、それらのインターフェイスがいくつかのアドバタイズされた制約を満たすことができない場合)。一方、他のインターフェイスは多かれ少なかれ優先される場合があります。
-
OFは、可能なインターフェイス上のすべての候補ネイバーをスキャンして、それらがDODAGのルーターとして機能できるかどうかを確認します。それらは多数存在する可能性があり、候補ネイバーは使用される前にいくつかの検証テストに合格する必要がある場合があります。特に、一部のリンク層では、ルーターをネクストホップとして有効にするために、ルーターとのアクティビティに関する経験が必要です。
-
OFは、候補のランクに、DODAGバージョン内のノードと候補の相対位置を表す値を加算することにより、比較のためにノードのランクを計算します。
-
ランクの増加は、少なくともMinHopRankIncreaseでなければなりません。
-
ループ回避とメトリックの最適化を整合させるために、ランクの増加はメトリック値の増加を反映すべきです。たとえば、ETXのような純粋に加法的なメトリックの場合、ランクの増加はメトリックの増加に比例させることができます。
-
ノードのランクを増加させる候補ネイバーは、親の選択の対象とはなりません。
-
-
ポリシー関数によって指定されたOFのセットと互換性のないOFをアドバタイズする候補ネイバーは無視されます。
-
すべての候補ネイバーをスキャンするとき、OFは現在の最良の親を保持し、その機能を現在の候補ネイバーと比較します。OFは、目的を達成するために重要な多数のテストを定義します。ルーター間のテストは順序関係を決定します。
-
ルーターがその関係について等しい場合、ルーター間で次のテストが試行されます。
-
そうでない場合、2つのルーターのうち最良のものが現在の最良の親になり、スキャンは次の候補ネイバーで続行されます。
-
一部のOFには、ノードがいずれかのルーターに参加した場合に生じるランクを比較するテストが含まれる場合があります。
-
-
スキャンが完了すると、優先親が選出され、ノードのランクは、優先親のランクにその親とのランクのステップを加えたものとして計算されます。
-
代替の親を選出するために、他のスキャンのラウンドが必要になる場合があります。次のラウンドでは:
-
同じDODAGにない候補ネイバーは無視されます。
-
ノードよりもランクが高い候補ネイバーは無視されます。
-
ノードとランクが等しい候補ネイバーは、親の選択では無視されます。
-
ノードよりもランクが低い候補ネイバーが優先されます。
-