トラフィック制御 / Quality of Service

QoS(Quality of Service)機能は、ユーザー定義のルールにしたがってIPv4/IPv6パケットを分類し、出力(送信)時に優先順位や帯域配分をコントロールする機能です。分類したパケットへのマーキングや、出力インターフェースの帯域を制限することも可能です。


おもな構成要素

QoS機能の基本的な構成要素について説明します。


インターフェース

QoS機能は、初期設定ではルーティング可能インターフェース(IPv4/IPv6インターフェース)からのパケット出力時に適用されます。
出力インターフェースではパケットの分類に基づくマーキングと帯域制御/優先制御が可能です。
また、出力インターフェースでは、インターフェース全体としての送信帯域を制限することも可能です。

QoSポリシー

QoSポリシーは、おもにQoS機能で使用する出力キューの構造を定義します。
本製品のQoSはソフトウェアによって実現されるため、キュー制御方式(PQ、WRR、HTB)、キューの数、各キュー間の優先順位や帯域配分、最小・最大帯域、キュー長、DSCPマーキング値などを自由に設定できます。個々のキューは「クラス」という構成要素に対応し、QoSポリシーをルートとするツリー構造を形成します。また、ツリー内では最大3レベルまでクラスを階層化することが可能です。

QoSポリシー内には、下記のクラスが暗黙のうちに存在します。


1つのQoSポリシーが持てるクラスは最大128個ですが、これにはデフォルトクラスが含まれるため、ユーザー定義可能なクラスは127個です。

1つのQoSポリシーは複数のインターフェースに関連付けられますが、1つの出力インターフェースに関連付けられるQoSポリシーは1つだけです。

QoSルール

QoSルールは、パケットの分類条件と適用するキューを指定するものです。
分類条件の指定には、UTMのファイアウォール機能やNAT機能と同様、送信元と宛先のエンティティー定義、および、アプリケーション定義を用います。
また、条件にマッチしたパケットを格納するキューは、QoSポリシー内の末端クラス名によって指定します。

キュー制御方式

QoSポリシーツリー内の同一階層にあるクラスの間では、次の3つのキュー制御方式のいずれかを使用してクラス間の制御が行われます。


基本設定

QoS機能の基本的な設定方法を示します。
QoSの具体的な使用例については「設定例集」をご覧ください。

QoS機能の設定を行うには、最初にtraffic-controlコマンドを実行してトラフィックコントロールモードに入り、traffic-control enableコマンドでQoS機能を有効化します。
awplus(config)# traffic-control
awplus(config-tc)# traffic-control enable

出力インターフェースの総帯域(最大送信レート)を制限するには、interfaceコマンドで仮想帯域を設定します。
たとえば、eth1インターフェースの最大送信レートを50Mbpsに制限するには次のようにします。
awplus(config-tc)# interface eth1 virtual-bandwidth 50mbit

トラフィック単位でQoSを適用するには、QoSポリシーとQoSルールの設定が必要です。
QoSポリシーの設定はトラフィックコントロールモードのpolicyコマンドとサブモードの各種コマンドで行います。
QoSルールの設定はトラフィックコントロールモードのruleコマンドで行います。

QoSポリシーとQoSルールは両方そろって初めて意味をなしますので、以下ではいくつか具体的な例を挙げながら、QoSポリシーとQoSルールの設定方法を説明します。

なお、QoSルールの指定に使用する宛先エンティティーでは、出力インターフェースを特定するため、1つ以上のインターフェースと関連付けられている必要があります(ip subnet / ipv6 subnetコマンドで interface パラメーターが指定されていること)。
次に、以下の各例で使用しているゾーン「qos」の設定例を示します。
zone qos
 network wan
  ip subnet 0.0.0.0/0 interface eth1
 network lan
  ip subnet 192.168.10.0/24 interface vlan1

また、以下の各例において、アプリケーション定義は例示用の「AppA」、「AppB」、「AppC」(一部の例では「AppC1」、「AppC2」、「AppC3」)、を使用しています。これらはそれぞれ架空のアプリケーションA、B、C(C1、C2、C3)を表すものとお考えください。



DSCPマーキングの設定は、QoSポリシー内の各クラスで優先度やウェイト、最小・最大帯域の設定と同時に行います。
class(htb)class(priority)class(wrr)sub-class(htb)sub-class(priority)sub-class(wrr)sub-sub-class(htb)sub-sub-class(priority)sub-sub-class(wrr)の各コマンドにおいて、set-dscpパラメーターで対象パケットにセットするDSCP値を指定してください。
DSCPマーキングの設定は、PQ、WRR、HTBいずれのキュー管理方式でも行えます。
awplus(config-tc)# policy MYQOS priority
awplus(config-tc-policy)# class HIGH priority-level 11 set-dscp 31
awplus(config-tc-policy)# class MED priority-level 10 set-dscp 30
awplus(config-tc-policy)# class LOW priority-level 9 set-dscp 29

RED(Random Early Detection/Discard)は、キュー長が上限に達する前にパケットを徐々に破棄していくことで、キューの枯渇を予防したり、トランスポート層の輻輳回避メカニズムを有効に機能させたりするためのアルゴリズムです。REDを使用すれば、より細やかな帯域制御を実現できます。


REDの設定は、キュー長とパケット破棄率の関係を示す「REDカーブテンプレート」を定義し、QoSポリシー内の各末端クラスに適用することで行います。

REDカーブテンプレートは以下のパラメーターによって定義されます。
  • MIN:破棄開始点(パケットを破棄し始めるポイント)
  • MAX:完全破棄点(パケットを完全に破棄し始めるポイント)
  • LIMIT:キュー長
  • probability:キュー長がMAXのときに破棄するパケットの割合
各パラメーターを図示すると次のようになります。キュー長が MIN から MAX の間にある場合、パケットは 0 から probability(%)の間の確率でランダムに破棄されます。パケットの破棄率はキュー長が MAX に近づくにつれ高くなっていき、MAX のとき probability(%)となります。キュー長が MAX を超えると、すべてのパケットが破棄されます。キュー長が MIN 以下のときはパケットは破棄されません。


なお、REDアルゴリズムの動作上、MIN、MAX、LIMIT はバイト数として扱われますが、本製品の設定コマンドではこれらをパケット数 min、max、limit として指定し、それぞれに平均パケットサイズ avpkt(バイト)をかけることで、最終的な MIN、MAX、LIMIT を算出する仕組みになっています。

  • REDカーブテンプレートは、red-curveコマンドで作成します。
    初期状態ではデフォルトのREDカーブテンプレート「default」が定義されています。
    awplus(config-tc)# red-curve RED-drop avpkt 256 min 15 max 50 limit 100 probability 20
    
    この例では、平均パケットサイズ(avpkt)を256バイトと想定しているため、MIN、MAX、LIMITの実際値は次のようになります。
    • MIN = 256(バイト/パケット) × 15(パケット)= 3840(バイト)
    • MAX = 256(バイト/パケット) × 50(パケット)= 12800(バイト)
    • LIMIT = 256(バイト/パケット) × 100(パケット)= 25600(バイト)

    また、REDカーブテンプレートでは、キュー長が破棄開始点を超えた場合にパケットを破棄するのではなく、パケットに明示的輻輳通知(ECN)のマーキングを行って送信する設定も可能です。これには、red-curveコマンドのecnパラメーターを指定します。
    awplus(config-tc)# red-curve RED-ecn ecn
    
    この例では、avpkt、min、max、limit をいずれも省略しているため、それぞれ省略時値の576(バイト)、10(パケット)、32(パケット)、127(パケット)が使われ、MIN、MAX、LIMITの実際値は次のようになります。
    • MIN = 576(バイト/パケット) × 10(パケット)= 5760(バイト)
    • MAX = 576(バイト/パケット) × 32(パケット)= 18432(バイト)
    • LIMIT = 576(バイト/パケット) × 127(パケット)= 73152(バイト)

    さらに、ecnパラメーターに加えてecn-dropパラメーターを指定した場合は、破棄開始点から完全破棄点まではECNマーキングを行い、完全破棄点から最大キュー長までの間はパケットを破棄するようになります。
    awplus(config-tc)# red-curve RED-ecn-drop ecn ecn-drop
    

  • QoSポリシー内の末端クラスにREDカーブテンプレートを適用するには、class(htb)class(priority)class(wrr)sub-class(htb)sub-class(priority)sub-class(wrr)sub-sub-class(htb)sub-sub-class(priority)sub-sub-class(wrr)の各コマンドにおいて、red-curveパラメーターで適用するREDカーブテンプレートを指定してください。
    REDの設定は、PQ、WRR、HTBいずれのキュー管理方式でも行えます。
    awplus(config-tc)# policy MYQOS priority
    awplus(config-tc-policy)# class A priority-level 11 red-curve RED-drop
    awplus(config-tc-policy)# class B priority-level 10 red-curve RED-ecn
    awplus(config-tc-policy)# class C priority-level 9 red-curve RED-ecn-drop
    awplus(config-tc-policy)# class D priority-level 8 red-curve default
    

  • REDカーブの情報は、show traffic-control red-curveコマンドで確認できます。
    awplus# show traffic-control red-curve
    

QoS機能の有効・無効など全般的な情報はshow traffic-controlコマンドで確認できます。
awplus# show traffic-control

QoSルールの情報はshow traffic-control ruleコマンドで確認できます。
awplus# show traffic-control rule

QoSルールが有効かどうかをチェックするには、show traffic-control rule config-checkコマンドを使います。

QoSルールの作成時にはエンティティーとアプリケーションの両定義を使用しますが、これらの定義が不完全な場合(指定したアプリケーションやエンティティーが未定義である、アプリケーション定義でIPプロトコルが未指定、など)、該当ルールは有効にならず無視されてしまいます。

このような事態を避けるには、ルール作成後にshow traffic-control rule config-checkコマンドを実行してルールが有効かどうかをチェックしてください。
awplus# show traffic-control rule config-check
Rule 15:
  "To" entity does not exist
同コマンドでは、無効なルールがある場合、それが理由とともに示されます。

この例では、次の理由によりルール「15」が無効であることが示されています。
  • ルール内で指定した宛先エンティティーの定義が存在しない。

また、次の例では、すべてのルールが有効であることが示されています。
awplus# show traffic-control rule config-check
All rules are valid

QoSルールは次の場合に無効とされます。
  • The application does not exist(アプリケーション定義が存在しない)
  • The application does not have a protocol configured(アプリケーション定義でIPプロトコルが未指定)
  • The from entity does not exist(送信元エンティティー定義が存在しない)
  • The from entity does not have a subnet or host address(送信元ネットワーク定義にサブネットアドレスが関連付けられていない、あるいは、送信元ホスト定義にアドレスが関連付けられていない)
  • The from entity has a subnet with an interface that does not exist(送信元ネットワーク定義のサブネットアドレスとインターフェース指定に矛盾がある)
  • The to entity does not exist(宛先エンティティー定義が存在しない)
  • The to entity does not have a subnet or host address(宛先ネットワーク定義にサブネットアドレスが関連付けられていない、あるいは、宛先ホスト定義にアドレスが関連付けられていない)
  • The to entity does not have an interface(宛先ネットワーク定義のサブネットアドレスにインターフェースの指定がない)
  • The to entity has a subnet with an interface that does not exist(宛先ネットワーク定義のサブネットアドレスとインターフェース指定に矛盾がある)
  • The from and to entities do not have any subnet or host addresses in the same address family (IPv4/IPv6)(送信元と宛先のネットワーク、ホスト定義の間で、関連付けられたサブネットアドレス、ホストアドレスのアドレスファミリー(IPv4/IPv6)が異なっている)

QoSの統計情報はshow traffic-control countersコマンドで確認できます。
awplus# show traffic-control counters

インターフェースに設定した送信レートの上限値(仮想帯域)や、QoSルールによって予約された帯域などの情報は、show traffic-control interfaceコマンドで確認できます。
awplus# show traffic-control interface