実際にルーターで優先制御や帯域制御を使うには,通過するパケットを見分けて,処理に適した待ちキューに振り分けるしくみが必要になる。

 例えばIP電話のパケットを最優先で転送する場合。ルーターは受け取ったパケットからIP電話のものを選び出し,最優先の待ちキューに入れて処理しなければならない。ルーターにとってこの作業は意外に難しい。通信の優先度や種類を見分ける方法に標準と呼べるものがなく,場合によって見分け方を変えなければいけないからだ。

自動的には優先してくれない

 インターネットでは優先制御や帯域制御を使わないのが一般的。それぞれのアプリケーションのパケットをルーターでどう扱うかという統一的な基準は決められていない。優先制御や帯域制御を使うにしても,製品によって持っている機能はまちまちだ。使用するアプリケーションや回線の種類,ユーザーの使い方などの条件が変われば,どういうパケットをどう扱えばいいかという答えも変わってくる。

 このためルーターは,パケットの種類を自動的に判別して適切にQoSの処理を行うようにはできていない。ルーターに対して,どのような方法でパケットを区別して,区別したパケットをそれぞれどのように扱うかをユーザーが設定しなければならない。

 ルーターがパケットを識別するのに使う情報は,おもに4種類ある。(1)IPアドレス,(2)TCPとUDPのポート番号,(3)IPヘッダーのTOS(トス)*1フィールド,(4)VLAN(ブイラン)*2タグ――である(図3-1)。

図3-1●ルーターはQoS制御のためにパケットを1個ずつ識別する
図3-1●ルーターはQoS制御のためにパケットを1個ずつ識別する
適切なキューに送り込むために,あらかじめ設定した内容とヘッダーを見比べてパケットを分別する。

 このうち,IPアドレスおよびTCPとUDPのポート番号は,通信している端末やアプリケーションを示す。つまり,端末やアプリケーション単位にQoSを設定するのに使うわけだ。

 一方,TOSフィールドやVLANタグには,QoS制御専用の情報を入れるフィールドが用意されている。これらはおもに,ルーターやLANスイッチで判断したパケットの優先度をほかのルーターなどに伝える場面で使われる。

よく使う情報はアドレスとポート番号

 まず,(1)のIPアドレスと(2)のポート番号から見ていく。パケットの識別にはIPアドレスとTCPとUDPのポート番号がよく使われる。ただし,それぞれに一長一短がある。

 IPアドレスは送信元とあて先の端末の両方もしくは片方を指定する。IP電話機やVoIP(ゲートウエイ)*3など,特定のアプリケーション専用の端末を固定のIPアドレスで使っているなら,IPアドレスを指定することで,対象のパケットを確実に見分けられる。

 ただし,IPアドレスだけでは判断がつかないことも多い。パソコンのように同一の端末で優先度の違う複数のアプリケーションが動いているようなケースがそうである。IPアドレスの情報だけでパケットを識別しようとすると,優先しなくてもいい通信まで優先してしまうことになる。また,DHCP(ディエイチシーピー)*4でIPアドレスを自動的に割り振る環境だと,IPアドレスを見てもどの端末か判断できない。

 その場合は,TCP/UDPポート番号を使えばいい。多くのアプリケーションは固定したポート番号を使うため,優先度を識別する手がかりになる。

 しかし,この方法も完全ではない。アプリケーションによっては使用するポート番号が毎回変わるものや手作業で設定できるものもある。設定してもきちんと優先されなかったり,逆に優先するべきでないものが優先されてしまったりすることがあるのだ。

 つまり,ルーターで正しくパケットを識別するためには,IPアドレスとTCP/UDPポート番号を同時に見て判断することが必要になる(図3-2)。

図3-2●一つの情報だけでは識別できないことがある
図3-2●一つの情報だけでは識別できないことがある
アプリケーションによっては,優先度が高いものと区別できないものもある。このため普通は,端末を収容するルーターで優先度を確実にチェックする。
[画像のクリックで拡大表示]

ヘッダーにはQoS用ビットがある

 次は(3)TOSフィールドと(4)VLANタグについて見ていこう。これらはIPアドレスやポート番号と異なり,QoS専用の情報である。ただし両方とも,パソコンなどの端末から送られてくるパケットに書き込まれていないケースが多い。

 TOSフィールドはIPヘッダーに含まれる長さ8ビットの情報で,そのうち上位3ビットが優先度を表示するIPプレシデンスである。値は10進数で0から7までで,優先度が高いほど数字を大きくすることが決まっているが,ほとんど使われてこなかった。

 しかし,QoS機能を持つルーターが登場し,IPプレシデンスの値でQoS制御するパケットを識別する機能が一般的になった。さらに,IPプレシデンスだけでなく,それに続く3ビットも合わせて識別情報に使う方法もある*5。ビット数を多くした分,優先制御と帯域制御の情報を分けるなど,複雑な情報が送れるようになる。

 VLANタグは,標準のMACフレームに追加してVLANの識別に使う情報だが,この中にも優先度を示すフィールドが3ビット分決められている。この情報もIPプレシデンスと同じように使う。こちらはLANスイッチやIP電話機が,優先度を示すために付け加えることが多い。

自己申告はあてにならない

 IPパケットのTOSフィールドを使うときに気をつけなければいけないのは,ときどき,端末がきままな値をTOSフィールドに書き込んで送ってくる場合があること。

 例えば,マイクロソフトのチャット・ソフトNetMeeting(ネットミーティング)の一部バージョンは,IPプレシデンスに勝手に高い優先度を埋め込んでパケットを送出していた。こうしたアプリケーションがあると,TOSフィールドで識別させても,思ったように機能しないケースも出てくる。

 そのため,端末を直接収容するLANスイッチやルーターでは,TOSフィールドを信用せず,IPアドレスとTCP/ UDPポート番号を同時にチェックして,そのパケットの優先度を判断する。これで,確実にパケットの優先度をチェックできる。

 さらに,ルーターやLANスイッチでその優先度に合わせてTOSフィールドを書き換えるといった処理をするのがベストだ。こうした処理をすることで,ほかのルーターなどにもその優先度の情報が確実に伝えられる。そのうえ,ネットワークの中核にあるルーターはTOSフィールドだけ見てQoS処理を実行できるので,処理の負荷が軽減するのである(図3-3)。

図3-3●同一網内のルーターから送られてきたパケットはいちいち分類し直さない
図3-3●同一網内のルーターから送られてきたパケットはいちいち分類し直さない
送信元のそばのルーターが優先度を決めてIPヘッダーの中にあるTOSフィールドを書き換える。網内のルーターでTOS値を統一しておけば一貫したQoS制御ができる。
[画像のクリックで拡大表示]

通信サービスのQoS機能と連係

 ただし,ネットワーク全体でQoS機能を実現するには大きなハードルがある。それは,TOSフィールドと優先制御や帯域制御の処理内容の対応が,ネットワーク内で徹底していなければならないということだ。仮にあるルーターが「IPプレシデンス=2」のパケットをCQで重み付け80%と設定して動いているのに,ほかのルーターが「IPプレシデンス=2」のパケットをPQの非優先の待ちキューに入れるように処理していたのでは,足並みがそろわず,有効なQoS制御を実現できないからである。

 逆にいえば,この対応付けがきちんとしていれば,異なるネットワークを接続してもうまくQoS制御は働く。通信事業者の優先制御サービスを利用する場合がこのケースに当たる。

 例えばNTTコミュニケーションズのIP-VPNサービス*6の場合,IPプレシデンス値によって,IPパケットを「2以上」,「1」,「0」の3種類に分ける。そしてこれらを,優先度90:9:1のCBWFQ相当の優先キューを使って優先制御する。ユーザーは,自分の網内でも「2以上」,「1」,「0」の区分で優先度を分ければ,一貫したQoSが施せるようになる。