DiffServとは

DiffServとは、パケットを分類して目印を付けて、優先度が高いものを早く転送するというQoS制御の仕組みです。QoSを実装するときには、主にDiffServの制御を行うことになります。

DiffServのプロセス

DiffServモデルでのQoS制御は、次のプロセスで行います。

分類
アプリケーションの種類に応じてトラフィックを分ける
マーキング
分類したトラフィックに優先順位となる目印を付ける
キューイング
複数のキューを使用し、マーキングなどに応じてキューに振り分ける
スケジューリング
キューに割り当てた優先度や帯域幅にしたがってトラフィックを送信
図 DiffServのプロセスの概要
図 DiffServのプロセスの概要

分類

まず、ルータやスイッチは受信したパケットを分類します。分類する基準は任意に決めることができます。主なものとして、「CoS(Class of Service)」「IPアドレス」「IP Precedence」「DSCP(Differentiated Service Code Point)」「TCP/UDPポート番号」などがあります。これらのどの基準を採用するかは、設定で決めます。

CoSやIP Precedence、DSCPはマーキングでも使います。クライアントコンピュータやサーバに近いネットワークのエッジ部分でCoSやIP Precedence、DSCPを使ってパケットをマーキングします。ネットワークのコア部分では、エッジでマーキングしたCoS、IP Precedence、DSCPを使った分類を行います。

CoS

CoS(Class of Service)はIEEE802.1QやISLなどのトランクプロトコルのヘッダ内にある3ビットのフィールドです。次の図は、IEEE802.1QのCoSです。

図 CoS(Class of Service)
図 CoS(Class of Service)

ISLでも同様に3ビットのPriorityフィールドがあり、CoSの分類・マーキングに利用することができます。レイヤ2のCoSは3ビットなので、0~7までの8通りのマーキングができます。アプリケーションの種類によってCoSの値が以下の表のように決められています。

CoS値 アプリケーションの種類
7 Reserved
6 Reserved
5 音声データ
4 ビデオ
3 呼制御
2 高優先データ
1 中優先データ
0 ベストエフォートデータ

なお、この対応はあくまでも目安なので、この通りの値を利用する必要はありません。

IP Precedence/DSCP

IP Precedence、DSCPはともにIPヘッダ内の優先順位フィールドにあります。優先順位フィールドの解釈の仕方の違いでIP PrecedenceとDSCPに分かれます。下記のようにIP Precedenceは、優先順位フィールドの上位3ビットでパケットの優先順位を表し、DSCPは優先順位フィールドの上位6ビットでパケットの優先順位を表します。

図 IP PrecedenceとDSCP
図 IP PrecedenceとDSCP

優先順位の下位2ビットは、ECN(Explicit Congestion Notification)ビットとしてネットワークの輻輳を通知する目的で利用されています。

マーキング

分類した結果、パケットに目印を付けるのがマーキングです。マーキングは、「CoS」「IP Precedence」「DSCP」などで行います。他にもフレームリレーヘッダのDEビットやATMヘッダのCLPビット、MPLSラベルのExperimentalビットでマーキングすることがあります。CoS、DEビット、CLPビット、Experimentalビットはレイヤ2におけるマーキング情報です。一方、IP Precedence、DSCPはレイヤ3におけるマーキング情報です。レイヤ2のマーキング情報は特定のレイヤ2リンク上でしか使えません。そのため、エンドツーエンドでQoSを考える場合は、DSCP/IP Precedenceのレイヤ3のマーキングを行います。DiffServモデルのQoSはエンドツーエンドで考えなければ意味がないので、ほとんどの場合、マーキングはレイヤ3で行います。

IP PrecedenceとDSCPの対応、主なDSCP値をまとめたものが次の表です。

IP Precedence(3ビット)   DSCP(6ビット)      
名前 ビット PHB CS 廃棄確率 名前 ビット(10進数)
Routine 0 000 Default 0 Default 000 000(0)
Priority 1 001 AF 1 1 AF11 001 010(10)
          2 AF12 001 100(12)
          3 AF13 001 110(14)
Immediate 2 010 AF 2 1 AF21 010 010(18)
          2 AF22 010 100(20)
          3 AF23 010 110(22)
Flash 3 011 AF 3 1 AF31 011 010(26)
          2 AF32 011 100(28)
          3 AF33 011 110(30)
Flash Override 4 100 AF 4 1 AF41 100 010(34)
          2 AF42 100 100(36)
          3 AF43 100 110(38)
Critical 5 101 EF EF 101 110(46)
Internetwork Control 6 110 (48-55)
Network Control 7 110 (56-63)

DSCPのPHB(Per Hop Behavior)は、デバイスがどのようにパケットを転送するかということを表しています。PHBとしてDefault、AF(Assured Forwarding)、EF(Expedited Forwarding)があります。Defaultは優先制御を行いません。AFは優先度に応じた転送を行います。EFは絶対優先の転送を行うことを意味しています。CS(Class Selector)とは、IP Precedenceとの互換を表しています。そして、廃棄確率はパケットの廃棄されやすさを表します。1が最も廃棄されにくく、3が最も廃棄されやすいことを表しています。AFはパケットの優先度と廃棄確率からAF11~AF43まで12のトラフィッククラスがあります。

IP PrecedenceやDSCPの設定は、上記の表の名前でも10進数の値でもどちらでも可能です。

キューイング(Queuing)

マーキングしたパケットをインタフェースから出力するために、キューに入れることを「キューイング」といいます。キューとは、インタフェースからパケットを送信する前に一時的にパケットを待機させるメモリ上の領域です。優先度に応じてパケットを適切なキューへとキューイングします。キューイングすることによって、パケットを送信する順番を変更することができます。

スケジューリング

そして、キューイングしたパケットをどのような順番で出力インタフェースからネットワーク上に送出していくかを決定するのがスケジューリングです。

キューイングおよびスケジューリングの方法として、次のようにさまざまあります。

  • FIFO(First In First Out)
  • WFQ(Weighted Fair Queuing)
  • PQ(Priority Queuing)
  • CQ(Custom Queuing)
  • CB-WFQ(Class Based Weighted Fair Queuing)
  • LLQ(Low Latency Queuing)
  • WRR(Weighted Round Robin)
  • SRR(Shaped Round Robin)

FIFO その名前のとおり、パケットを到着した順番に送信するキューイング方式です。ここでいうキューイングは、DiffServのプロセスのキューイングとスケジューリングを含めた意味で使っています。
パケットを順番どおり転送するということは、QoSをかけているとは言えずベストエフォート型の転送になります。FIFOは帯域幅が2Mbpsよりも大きいインタフェースのデフォルトのキューイング方式です。
WFQ アプリケーションのフローごとにダイナミックにキューを作成しパケットをキューイングします。そして、各フローのIP Precedenceによってインタフェースの帯域幅を配分するようにスケジューリングします。WFQによって、サイズの大きいパケットのフローのため、サイズの小さいパケットのフローが転送されなくなってしまうといった問題を解決することができます。
WFQは帯域幅が2Mbps以下のインタフェースのデフォルトのキューイング方式です。
PQ 優先度がHigh、Medium、Normal、Lowの4つのキューを作成しパケットをキューイングします。優先度がHighのキューの中のパケットを優先してスケジューリングし、Highのキューの中のパケットがすべて転送されないと、他のキューのパケットは転送されません。
VoIPやメインフレームなどの遅延に敏感なパケットをHighのキューにキューイングして優先的に転送するように使うことが多いです。ただし、Highのキューに常にパケットが入っている状態だと、他のキューのパケットはずっと転送されないことに注意する必要があります。
CQ 各キューに帯域幅を割り当ててスケジューリングする。ただし、正確な帯域幅の割り当てはできない。
CB-WFQ パケットを管理者が定めたクラスごとのキューへキューイングします。クラスは、管理者が自由に決められます。そして、各クラスのキューに対してインタフェースの帯域幅を明示的に割り当てられるように転送キューへスケジューリングします。
WFQはフローごとに自動的にキューが作成されるのですが、CB-WFQは管理者が明示的に決定したクラスごとに作成することができるので、より柔軟な制御が可能です。
LLQ CB-WFQと同じく管理者が決定したクラスごとのキューを作成しパケットをキューイングします。クラスごとのキューのうち1つを絶対優先キューとして必ず優先的に転送されるように設定することができます。そして、絶対優先キューとその他のキューに対して帯域幅を保証できるようにスケジューリングされていきます。
LLQを使うと、VoIPパケットを優先して転送しながら、他のアプリケーションプロトコルのパケットの帯域を保証するといった柔軟性のある制御を行うことができます。
WRR 4つのキューにパケットをキューイングし、順番にスケジューリングします。その際、設定による重み付けが可能です。
SRR WRRと同様に4つのキューにパケットをキューイングし、順番にスケジューリングします。スケジューリングの際に、同時にシェイピングを行うことが可能です。

また、スケジューリングしてパケットをネットワークに出力するときに利用する帯域幅の制限をかけることもできます。帯域幅の制限には、主に次の2つあります。

  • シェイピング
  • ポリシング

シェイピングは、パケットを出力するときに設定した帯域幅の上限を超過してしまうと、パケットをバッファリングして、帯域幅を超過したパケットのスケジューリングを遅延させます。一方、ポリシングは設定した帯域幅の上限を超過すると、超過分のパケットを破棄します。

DiffServモデルの適用

このようにDiffServモデルは、「パケットを分類して目印を付けて、優先度が高いものを早く転送する」という非常にシンプルな考え方です。ただし、ネットワーク上の単体のルータやスイッチのみで設定してもあまり意味がありません。ネットワーク全体のルータ/スイッチで一貫性のある設定を行う必要があります。

図のようにネットワークのエッジにおいてパケットの分類・マーキングを行い、ネットワークのコアの部分ではエッジのマーキングにしたがって、キューイング・スケジューリングを行います。

図 DiffServの適用
図 DiffServの適用