QoS(ポリシング)

目次

ポリシングとシェーピングの概要

Cisco IOSでは、トラフィックの速度制御を行うために ポリシング(Policing)シェーピング(Shaping) という2つの仕組みを提供しています。

  • ポリシングは police コマンド(Class-Based Policing)や rate-limit コマンド(CAR)で実装
  • シェーピングは shape コマンド(Class-Based Shaping)のほか、GTS・DTS・FRTSといった仕組みで実装

現在のネットワークでは、ポリシングといえば「Class-Based Policing」、シェーピングといえば「Class-Based Shaping」を指すのが一般的です。

ポリシングとシェーピングの違い

例えば100MbpsのWAN回線の中で、特定のアプリケーションの通信を15Mbpsに制限したいとします。この時に両者を使った場合、制限値を超えたトラフィックの扱いが大きく異なります。

  • ポリシング:制限値を超えたパケットを即座に破棄、またはパケットの優先度を書き換える
  • シェーピング:制限値を超えたパケットを一旦バッファに貯め、後で送信(遅延は発生する)

その結果、ポリシングでは「ギザギザのノコギリ状」の通信グラフになり、シェーピングでは「平滑化された波状」の通信グラフになります。

一見するとシェーピングの方が優れていますが、バッファを使うためにメモリを多く消費し、また遅延が許されない音声トラフィックには不向きです。

ポリシングとシェーピングの比較

項目ポリシングシェーピング
基本動作超過パケットをドロップまたは優先度変更超過パケットをバッファに格納して後で送信
設定コマンドpolice(Class-Based Policing)、rate-limit(CAR)shape(Class-Based Shaping)、traffic-shape(GTS)、frame-relay traffic-shaping(FRTS)
着信I/F適用可不可
発信I/F適用可適用可
バースト処理そのまま伝搬、平滑化なし平滑化して送信
利点遅延が発生しない超過パケットが破棄されにくい
欠点超過パケットが破棄され送信レートが低下バッファ遅延が発生する

トークンバケットとは

ポリシングやシェーピングの根底には トークンバケットアルゴリズム が使われています。

  • 「トークン」はパケット送信に必要な権利を表す単位
  • 「バケット」はトークンをためる場所(バッファのイメージ)

一定間隔でトークンが補充され、トークンがある限りパケットを送信できます。トークンが不足すると、ポリシングではパケットが破棄され、シェーピングではパケットがキューにためられます。

トークンバケットの要素は次の3つです。

  • Mean rate(平均レート)
    CIR(Committed Information Rate)。単位はbps。バケットに補充されるトークンの平均速度。
  • Burst size(バーストサイズ)
    Bc(Committed Burst)。単位はbit。一定間隔ごとに補充されるトークンの量。
  • Time interval(時間間隔)
    Tc(Committed Time Interval)。単位は秒。トークンが補充される周期。

公式は以下のように表されます。
CIR(bps)= Bc(bit) ÷ Tc(sec)

これにより、通信レートを「平均レート」と「バーストの扱い」に基づいて制御することができます。

試験対策:ポリシングは破棄、シェーピングはバッファ という違いを確実に押さえておくこと、そしてトークンバケットアルゴリズムが両方の仕組みの基盤になっていることを理解しておくことが重要です。

ポリシングとは

ポリシングは、特定のトラフィックに対して利用できる帯域幅を制限する仕組みです。インターフェースの入力方向にも出力方向にも適用でき、制限を超えたトラフィックは廃棄したり、優先度を書き換えて転送したりします。代表的な実装方法には、Class-Based PolicingとCAR(Committed Access Rate)の2種類があります。現在のネットワークではClass-Based Policingが推奨されています。

Class-Based PolicingとCARの違い

項目Class-Based PolicingCAR
設定方法MQCでclassに対して適用インターフェースに直接設定
コマンドpolicerate-limit
トラフィック処理conform / exceed / violation の3段階conform / exceed の2段階
アルゴリズムシングルまたはデュアルトークンバケットシングルトークンバケット
レート方式シングルレートまたはデュアルレートシングルレート

シングルトークンバケットとデュアルトークンバケット

policeコマンドでviolate-actionを指定しない場合はシングルトークンバケットが使われ、CIR内か超過かの2段階で処理されます。violate-actionを指定した場合はデュアルトークンバケットが使われ、CIR以内(conform)、通常バーストを超過(exceed)、さらに超過(violation)の3段階で処理されます。

シングルレートとデュアルレート

policeコマンドでCIR値(bps)、Bc、Beを指定するだけならシングルレートです。pirを指定してCIRとPIRの2つの値を使う場合はデュアルレートになります。一般的にはシングルレートで利用されることが多いです。

Class-Based Policingの設定方法

Class-Based Policingでは、class-mapで分類したトラフィックに対してpoliceコマンドを設定します。アルゴリズムにはトークンバケット方式が用いられます。

コマンド構文(シングルレート)

policy-map POLICY-NAME
 class CLASS-NAME
  police bps burst-normal burst-max conform-action action exceed-action action violation-action action

パラメータ

  • bps:CIR(保証帯域、bps単位)
  • burst-normal(Bc):通常バーストサイズ(bytes単位)
  • burst-max(Be):拡張バーストサイズ(bytes単位)
  • conform-action:CIR以内の動作(既定はtransmit)
  • exceed-action:CIR超過時の動作(既定はdrop)
  • violation-action:さらに超過した場合の動作(既定はdrop)

主なアクション

  • transmit:パケットを転送する
  • drop:パケットを破棄する
  • set-dscp-transmit:DSCP値を書き換えて転送
  • set-prec-transmit:IP Precedence値を書き換えて転送
  • set-qos-transmit:QoSグループ値を書き換えて転送

インターフェースへの適用

interface INTERFACE-ID
 service-policy input | output POLICY-NAME

Bc値とBe値の算出方法(Cisco推奨)

  • 通常バースト(Bc)= CIR × 1/8 × 1.5
  • 拡張バースト(Be)= Bc × 2

試験対策:ポリシングは帯域を制限し、超過パケットは破棄または優先度変更で処理されることを押さえておきましょう。Class-Based Policingが推奨され、CARは古い方式です。シングルトークンとデュアルトークン、シングルレートとデュアルレートの違いを理解すること、さらにBcとBeの算出式を覚えておくと試験で有利になります。

トークンバケットアルゴリズムの種類

Cisco IOSで利用できるトークンバケットの仕組みには、大きく分けて2種類があります。
「シングルトークンバケット」と「デュアルトークンバケット」です。

仕組みを判断する基準は、policeコマンドにおける violate-action の有無です。
violate-actionを指定しなければシングルトークンバケット、指定した場合はデュアルトークンバケットが動作します。

シングルトークンバケットの仕組み

シングルトークンバケットでは、名前の通りバケットはひとつだけです。このバケットは conform bucket(コンフォームバケット) と呼ばれます。
バケットに蓄えられるトークン量は、policeコマンドで指定する Normal Burstサイズ によって決まります。初期状態では、バケットがこのサイズ分のトークンで満たされた状態からスタートします。

パケットが届いたとき、次のように処理されます。

  • パケットサイズが現在のバケット内トークン量以下であれば、パケットは転送され、その分のトークンが差し引かれる。
  • パケットサイズがバケット内トークン量を超えていれば、パケットは廃棄され、トークンは減らない。

バケットには時間の経過に応じて定期的にトークンが補充されます。補充のスピードはCIR(Committed Information Rate、帯域幅の上限値)によって決まります。

つまり、シングルトークンバケットは「貯金箱の中のお金が足りれば買い物できる。足りなければ買い物できない」というイメージに近い仕組みです。

シングルレート・シングルトークンバケットの動作例

具体的にpoliceコマンドを設定して動きを確認してみましょう。例として以下の設定を行います。

Cisco(config-pmap-c)# police 8000 1000 conform-action transmit exceed-action drop
  • CIR(帯域制限):8kbps
  • Normal Burstサイズ:1000byte

初期状態では、バケットに1000byte分のトークンが入っています。

例えば最初に 450byteのパケット が届いた場合、十分なトークンがあるため転送されます。同時に450byte分のトークンが差し引かれるので、残りは550byteとなります。

その0.25秒後に新しいパケットが到着するとします。時間が経過しているのでトークンが補充されます。補充量は次の計算式で求められます。 (0.25×8000)/8=250byte(0.25 \times 8000) / 8 = 250byte

これにより、バケットは550 + 250 = 800byte になります。

次に900byteのパケットが届いた場合、バケットには800byteしかないため条件を満たせず、パケットは破棄されます。このとき、バケット内の800byteは消費されずに残ります。

試験対策:
・シングルトークンバケットは violate-action未設定 のときに利用される。
・バケットサイズは Normal Burstサイズ によって決まる。
・トークンはCIRの値に応じて定期的に補充される。
・トークン不足時はパケットをドロップするが、その場合トークンは減らない。

ここはCCNA試験で問われやすい部分です。「転送時はトークンが減るが、破棄時はトークンが減らない」という動作をしっかり覚えておきましょう。

トークンバケットアルゴリズムの種類

Cisco IOSが扱うトークンバケットの仕組みには、大きく2つの種類があります。

  • シングルトークンバケット
  • デュアルトークンバケット

どちらが使われるかは、policeコマンドで violate-action を指定しているかどうかで決まります。

  • violate-actionを指定していなければ「シングル」
  • violate-actionを指定していれば「デュアル」

という動作になります。

デュアルトークンバケットの仕組み

デュアルトークンバケットでは、名前の通りバケットが2つ用意されます。
1つ目は conform bucket(コンフォームバケット)、もう1つは exceed bucket(エクシードバケット) です。

  • conform bucket のサイズは Normal Burstサイズ で決定
  • exceed bucket のサイズは Maximum Burstサイズ で決定

初期状態では両方のバケットが満杯の状態でスタートします。

トークンの補充ルール

新しいトークンはまずconform bucketに補充されます。もしconform bucketが満杯なら、次のトークンはexceed bucketに送られます。両方が満杯になった時点で、それ以上のトークンは捨てられます。

パケット処理の流れ

  1. パケットサイズがconform bucketの値以下であれば転送され、対応する分のトークンがconform bucketから差し引かれる。
  2. パケットサイズがconform bucketを超える場合は、exceed bucketを参照する。
    • exceed bucketに十分なトークンがあれば、exceed-actionに従って処理(例:DSCP値を書き換えて転送)。このときconform bucketのトークンは減らず、exceed bucketから消費される。
    • exceed bucketにも足りなければ、そのパケットは廃棄される。

つまり、デュアルトークンバケットは「優先の財布(conform)」と「予備の財布(exceed)」を使い分ける仕組みだと考えると理解しやすいです。

シングルレート・デュアルトークンバケットの動作例

次の設定を例に見ていきます。

# police 8000 1000 2000 conform-action transmit exceed-action set-dscp-transmit 0 violate-action drop
  • CIR:8kbps
  • Normal Burstサイズ:1000byte(conform bucket)
  • Maximum Burstサイズ:2000byte(exceed bucket)

動作シナリオ

初期状態では

  • conform bucket = 1000byte
  • exceed bucket = 2000byte

となっています。

  1. 450byteのパケットが到着
    • conform bucketに十分なトークンがあるため転送される。
    • conform bucketの残量は 1000 – 450 = 550byte。
  2. 0.25秒後に次のパケットが到着
    • トークン補充: (0.25 × 8000) / 8 = 250byte
    • conform bucketは 550 + 250 = 800byte となる。
    このとき900byteのパケットが到着すると、conform bucketには不足しているためexceed bucketを参照。exceed bucketには2000byteあるので処理可能。
    • exceed-actionに従ってパケットのDSCP値を0に書き換えて転送。
    • exceed bucketは 2000 – 900 = 1100byte に減少。
  3. さらに0.4秒後
    • 補充されるトークン = (0.4 × 8000) / 8 = 400byte
    • conform bucketは800 + 200 = 1000byte(満杯)
    • 溢れた200byteはexceed bucketに追加され、1100 + 200 = 1300byte
    このとき1500byteのパケットが到着すると、どちらのバケットにも不足しているため破棄される。

試験対策:
デュアルトークンバケットはviolate-action指定時に使われる
conform bucketはNormal Burst、exceed bucketはMaximum Burstでサイズが決ま
トークンはまずconform bucketに補充、満杯ならexceed bucketに移る
処理の優先順は conform → exceed → drop

CCNA試験では「どのバケットからトークンが消費されるか」「バケットが満杯や不足のときの動き」がよく問われるため、シングルとデュアルの違いを整理して覚えておくことが大切です。

◆まとめスライド

目次