WRED(Weighted Random Early Detection)とは
WRED(Weighted Random Early Detection)は、ネットワーク機器で輻輳が発生する前に、出力インターフェースのキューにたまったパケットをランダムに廃棄する仕組みです。これにより、TCPアプリケーションに「回線が混雑し始めている」というシグナルを与え、送信側がウィンドウサイズを縮小したり再送制御を行ったりして、輻輳を回避することができます。結果として、キューがいっぱいになってから一気にドロップが発生する事態を避け、ネットワーク全体を安定させることができます。
テールドロップとは
WREDを使わない場合に標準で利用される仕組みがテールドロップです。テールドロップでは、キューが満杯になった瞬間に、それ以降到着するパケットをすべて廃棄します。これにより多くのTCPアプリケーションが同時に再送を行うため、回線帯域の有効利用ができなくなったり、通信全体が不安定になることがあります。
REDとWREDの違い
RED(Random Early Detection)は、キューがしきい値を超えた時にランダムにパケットを捨てる仕組みですが、パケットの優先度は考慮しません。一方、WREDは名前の通り「Weighted(重み付き)」の処理を行い、IP Precedence値やDSCP値といったパケットの優先度を見て判断します。これにより、重要度の低いトラフィックから優先的に廃棄し、音声や制御トラフィックのように品質が重視される通信を保護できます。
WREDのしきい値
WREDでは、最小しきい値(Minimum Threshold)と最大しきい値(Maximum Threshold)を設定します。
- キューが最小しきい値以下なら、全パケットを通常転送
- 最小しきい値を超えると、優先度に応じてランダムにパケットをドロップ
- 最大しきい値を超えると、全パケットを廃棄(テールドロップと同じ状態)
この仕組みにより、ネットワークは「ドロップなし」「ランダムドロップ」「テールドロップ」という3段階で動作します。
WREDのCiscoルータでの設定方法
WREDはインターフェースレベルでもクラスレベルでも有効化できますが、現在の運用ではクラス単位で適用する CBWRED(Class-Based WRED) が一般的です。
クラス内でWREDを有効にする場合は、非常にシンプルに次の1行を設定するだけです。
(config-pmap-c)# random-detect
このコマンドを入れると、デフォルトでは IP Precedence値に基づくWRED が有効になります。もし DSCP値ベース で動作させたい場合は次のように指定します。
(config-pmap-c)# random-detect dscp-based
しきい値の設定
WREDの動作は、パケットの優先度ごとに定義された「プロファイル」によって管理されます。
- Minimum threshold(ランダムドロップを始める平均キューサイズ)
- Maximum threshold(すべてのパケットを捨て始める平均キューサイズ)
- Mark probability denominator(ドロップの確率を表す値。10なら10分の1の確率で破棄)
デフォルトの値があらかじめ用意されていますが、必要に応じて変更可能です。
(config-pmap-c)# random-detect [ precedence | dscp ] value min-threshold max-threshold mark-prob-denominator
基本的な設定例
以下はWREDをクラスに適用するシンプルな例です。
policy-map P-RULE1
class C-VOICE
priority percent 10
class C-DATA2
bandwidth percent 25
random-detect
class C-DATA3
bandwidth percent 25
random-detect
class class-default
fair-queue
random-detect
この例では、音声は絶対優先処理され(LLQとして動作)、データトラフィックはWREDにより優先度を考慮しながらランダムドロップされます。
しきい値を調整した設定例
デフォルトのプロファイルをカスタマイズする場合は、以下のようにIP Precedence値ごとにしきい値を指定します。
class-map C-DATA1
match ip precedence 1 2
class-map C-DATA2
match ip precedence 3 4
policy-map P-RULE1
class C-DATA1
bandwidth percent 20
random-detect
random-detect precedence 1 22 36 10
random-detect precedence 2 24 36 10
class C-DATA2
bandwidth percent 30
random-detect
random-detect precedence 3 26 40 10
random-detect precedence 4 28 40 10
class class-default
fair-queue
random-detect
この例では、Precedence値ごとに「最小しきい値」「最大しきい値」「ドロップ確率」を個別に設定しています。これにより、優先度の低いパケットがより早く捨てられるようになります。