パケットをどの回線に流すかを判断するルーティングテーブルを生成するルーティングプロトコル。如何に、最適なパスを選択しかつ、複雑な経路であっても到達性を確保するための重要な技術です。
このルーティングプロトコルに、回線の使用率を考慮させた方がパス的には最短で有っても混んでいるパスを避けることが出来ると考えられます。広義の「adaptive routing」ですね。
30年前にciscoのEIGRPがbandwidth、概ね5分間平均の回線使用率を経路制御のメトリックに反映する実装を行ったことがあります。でも、実用されることはありませんでした。基本的に、回線の使用率を考慮して経路判断を行うとその判断によって回線使用率が変化しそれによって再び経路判断が変更されるという制御ループが発生してしまうからです。
様々なタイマーを用いたり試行錯誤されましたが、結局は人間が意図的に回線使用率を考慮して経路を変更するTE(Traffic Enginnering)運用に落ち着いたのです。
基本的は実装はhash tableによる振り分けです。全てのflowの帯域差は少ない場合には概ね良好に機能します。ですので、インターネットのバックボーン等の膨大な細いflowが流れる箇所では十分な場合もあります。
しかし、データセンター内のflowはその帯域差が大きく離散します。複数の巨大な帯域を要求するflow(Elephant flows)をたまたま同じ経路を流してしまえば通信品質の低下を招きます。ですのでflowのサイズもしくは回線使用率を判断要素に加えたくなるのです。
cumulus@switch:~$ nv set interface swp51 router adaptive-routing enable on
flowletによりパケット間隔を計測
そもそも、何故こんなに複数パスの振り分けに苦労するのでしょうか。それは到達順序を担保する必要があるからです。何らかの語りで一連の"flow"を認識し、同一フローは同じ経路に流さないといけません。
トンネルによりカプセル化されたパケットは全て同一flowとして扱われる。
ある程度コスト差を許容し必ずしもbestでないパスにも流す。