◆ トークンバケットアルゴリズムの種類
Cisco IOSでサポートされているトークンバケットのアルゴリズムには以下の大きく2種類があります。
・ Single Token Bucket( シングルトークンバケット )
・ Dual Token Bucket( デュアルトークンバケット )
簡単に言えば、policeコマンドで「violate-action」アクションコマンドを設定しない場合は、シングル
トークンバケットが採用されて、「violate-action」アクションコマンドを設定した場合には、デュアル
トークンバケットが採用されます。
◆ デュアルトークンバケットのアルゴリズム
デュアルトークンバケットでは、使用されるトークンバケットは「2つ」です。そのトークンバケットの
1つは「conform bucket」であり、もう1つは「exceed bucket」と言います。そのconform bucketの
サイズは「normal burst size」で指定し、exceed bucketのサイズは「maximum burst size」で指定。
そして、初期状態でconform bucketとexceed bucketには、この指定値のトークンが満杯にあります。
定期的に補充されるトークンはconform bucketに補充されますが、conform bucketが満杯になった場合
続いてのトークンはexceed bucketに補充されていきます。そして、conform bucketとexceed bucketの
両方のバケツが満杯となった場合、それ以降のトークンは廃棄されることになります。
パケットが着信した時に、そのパケットサイズが現在のconform bucketの値よりも小さい場合、または
同等の値であればパケットが転送されます。パケットは転送される際に、conform bucketからその分の
トークンが取り除かれます。ここまではシングルトークンバケットのアルゴリズムと同じ動きとなります。
そして、着信するパケットが、conform bucketの現在の値よりも大きい場合には、廃棄するのではなくて
exceed bucketを確認します。そして、そのパケットサイズが現在のexceed bucketの値よりも小さい場合
または、同等の値である場合パケットが転送されます。この場合、conform bucketの中にあるトークンは
削除されず、exceed bucketからパケットを転送する分のトークンを削除します。現在のconform bukect
の値より大きく、現在のexceed bucketの値よりも大きいパケットが着信した場合には、ドロップされます。
◆ シングルレート:デュアルトークンバケットの動作例
実際に設定したpoliceコマンドの値に対するシングルトークンバケットの動作を見ていきましょう。なお
動作を分かりやすく説明するために、帯域制限を「8kbps」という非常に低い値をコマンド設定しています。
また、Normal Burstサイズを「1000byte」、Maximum Burstサイズを「2000byte」と設定しています。
# police 8000 1000 2000 conform-action transmit exceed-action set-dscp-transmit
0 violation-action drop |
この設定を行った直後の初期状態でconform bucketには「1000byte」分のトークンがあります。仮に
450byteのパケットが着信した時、conform bucket内には「450byte」分のパケットを転送するために
十分なトークンがあるので、設定コマンドの「conform-action」に合致してパケットは転送(transmit)
されます。同時にconform bucketから450byteのトークンが削除されることから、残りは550byteです。
続いて、仮に、0.25秒後にパケットが着信するとします。その場合にはconform bucketに250byte分の
トークンが補充されることになります。 トークンの定期的な補充レートは ((0.25× 8000)/ 8) によって
算出することができます。「8000」はCIRの8000bps「 /8」はbyte算出のための「8byte」を指します。
さて、0.25秒後に250byteのトークンが追加されたことからconform bucketは現在800byteとなります。
次に、その0.25秒後に着信したパケットのサイズが「900byte」であるとします。そのパケットは転送は
するために十分なトークンを得られないため、設定コマンドの「exceed-action」に合致してパケットは
廃棄(drop)されます。その場合、conform bucket内にある800byte分のトークンは取り除かれません。
以上の内容はシングルトークバケットと同じであり、以下が「デュアルトークバケット」ならではの動作。
ここでexceed bucketが発動します。初期状態でexceed bucketには2000byte分のトークンがあります。
900byteのパケットを転送するのに十分なトークンがあるため、exceed actionに従い、つまりパケットの
DSCP値を 0 にしてからパケットを転送します。exceed bucketは残り1100byte分のトークンがあります。
例えば、0.4秒後には400byteのトークンがconform bucketに入るが、現在800byteのconform bucketは
200byteで満杯の1000byteに達するため、残りの200byteはexceed bucketに入り、1300byeとなります。
そして、その0.4秒後に着信したパケットサイズが1500byteとします。現在1000byteのconform bucketは
転送処理できず、現在1300byteのexceed bucketも処理できず、そのパケットは廃棄されることになります。
|