ルーターを通過するパケットの種類を分けて,それぞれの帯域を確保したり制限するのが帯域制御である。通信の種類に応じて,ADSLなどWAN回線の限られた帯域を分配したり,場合によっては絞り込んだりする。

 帯域制御の応用範囲は広い。例えばIP電話の帯域を確保できる。また,Webアクセスなど重要度の低い通信は,回線が込んできたら一定の帯域に制限するといった使い方ができる。

複数技術を組み合わせて実現する

 実は,簡単な帯域制御ならパート1で紹介したCQを使って実現できる。仮に,1Mビット/秒のインタフェースの出口に60:30:10で重みを付けた3本の待ちキューを設定してみる。すると,帯域をフルに活用している状態では,それぞれに600kビット/秒,300kビット/秒,100kビット/秒の帯域を分配できる。

 ただ,CQだけでは帯域の上限は制限できない。例えば,ルーターからADSLモデムに送られるパケット量をあらかじめ抑えておきたいようなケースは,CQではどうにもならない。

 このため,待ちキューごとにパケットが流れる量を制限する機能を持つルーターがある。この機能をポリシング*1と呼ぶ。待ちキューに溜まったパケットを送り出すときのペースを制限して,設定した値より多く帯域を消費しないようにするのである。

待ちキューから取り出す速度を制御

 優先制御技術とポリシングを組み合わせれば,最も優先する通信の帯域を制限しながら,その範囲内で待ち時間を最短にするといったQoS制御が可能になる(図2-1)。図では,PQで待ちキューを最優先,優先,その他の三つに分けて,それぞれ200kビット/秒以上のパケットを流さないようなポリシング設定を組み合わせている。

図2-1●待たせることで帯域を制限する
図2-1●待たせることで帯域を制限する
使える上限の帯域を調整するために,キューから一定時間内で送出できる情報量を制限する。優先制御技術と組み合わせると,結果として帯域を保証できる。
[画像のクリックで拡大表示]

 図のようにWAN側のインタフェース速度が500kビット/秒なら,最優先と優先のトラフィックに200kビット/秒の帯域を保証できる。その他のトラフィックは,500kビット/秒から最優先と優先で保証している合計400kビット/秒の帯域を差し引いた100kビット/秒が常に確保されることになる。

徐々に捨てて巧妙に帯域を制御する

 このようにパケットの流れる量を制限すれば,パケットの種類によって帯域の上限を設定できる。しかし,この方法には大きな問題がある。制限帯域以上のパケットが届いてしまうと,待ちキューにパケットが溜まる一方になってしまう点である。最終的には,ルーターが蓄えきれなくなったパケットを廃棄してしまう。

 こうなると,多くの通信のパケットが一斉に捨てられることになる。その結果,TCPを使っている通信だと再送制御が働き*2,再びその分のパケットがルーターに押し寄せてくる。そうなるといつまでたっても待ちキューにパケットがいっぱい溜まっている状態が続き,悪循環を起こしてしまう。帯域制御の副作用といえる状況だ。

 そこで,こうした状況に陥らないように,待ちキューの行列が長くなりはじめた時点で徐々にパケットを捨て始める。これがRED(レッド)*3と呼ばれるふくそう制御技術*4である(図2-2)。待ちキューが一定の水準を超えたら,パケットをときどき捨てていく。運の悪い一部のTCPコネクションのパケットが捨てられるわけだ。

図2-2●込み具合に応じてパケットを捨てる割合を徐々に増やす
図2-2●込み具合に応じてパケットを捨てる割合を徐々に増やす
パケットを捨てると,端末間のTCPコネクションのフロー制御が働くことになる。このことによって間接的に帯域を制御する。
[画像のクリックで拡大表示]

 TCPコネクションで通信している端末は,パケットが抜けたことに気付くと相手の端末にパケットの送出量を落とすようにメッセージを送る。具体的には,確認応答なしで送ってよいデータのサイズ(ウインドウ・サイズ)をいったん初期値まで落とすのである*5。こうした機能をフロー制御という。これで,全体のパケット量が減るので,混雑はしだいに緩和されていく。

 このように帯域を落とすTCPコネクションを少しずつ増やすことで,帯域制御の副作用を抑えるわけだ。