トラフィック制御 / Quality of Service
QoS(Quality of Service)関連機能について解説します。
本製品は、ユーザーが定義したポリシーマップに基づき、各トラフィッククラスに任意のサービスレベルを割り当てるポリシーベースQoS機能を備えています。
ポリシーマップでは、クラスマップを用いてパケットをトラフィッククラスに分類し、それぞれに異なるサービスレベル(帯域や優先度、経路)を割り当てることができます。クラスマップでは、IPアドレスやTCP/UDPポート、DSCP(DiffServ Code Point)などに基づいたトラフィック分類が可能です。
同一ポート上において、ハードウェアパケットフィルターとポリシーマップを併用することは可能です。該当ポートで受信したパケットの処理は、ハードウェアパケットフィルター、ポリシーマップの順に行われます。ただし、次項で述べる制限事項があるので注意してください。
ハードウェアパケットフィルターにマッチしたパケットに対して、ポリシーマップによるQoSは適用されません(ここでの「マッチ」とは、破棄(deny)だけでなく明示的な転送許可(permitなど)も含みます)。ハードウェアパケットフィルターで破棄(deny)のアクションだけを使用する場合は両者を併用しても問題はありませんが、ハードウェアパケットフィルターで破棄以外のアクションを使用する場合は、ハードウェアパケットフィルターとポリシーマップを併用せずに、ポリシーマップのフィルタリング機能を使ってフィルタリングを行ってください。
同一スイッチポート上においてWeb認証とポリシーベースQoSは併用できません。
用語一覧
ここでは、本解説編で使用する用語について簡単にまとめます。以後の説明でよくわからない言葉が出てきたときは、こちらをご参照ください。
以下に述べるのは本解説編の説明のための定義です。一般に使われている用語の意味とは必ずしも一致しない場合がありますのでご注意ください。
■ QoS 3属性
QoS処理の過程でパケットに割り当てられたり、参照・変更されたりする3つの属性値。CoS、DSCP、帯域クラスのこと。ただし、CoS値は内部CoS値と外部CoS値があるため、厳密には4種類(内部CoS値と外部CoS値については後述)。
CoSとDSCPは、パケットのヘッダーに格納されうる値。パケット受信時にすでに値がセットされている場合もあれば、されていない場合もある。いずれの場合も、QoS処理の過程で変更が可能。
一方、帯域クラスは、パケット受信後に割り当てられる内部的な属性値。帯域クラスの値が意味を持つのは、パケットを送信キューに格納するところまで。後続の機器にこれらの情報を(間接的ながら)伝えるには、DSCPを使う。
■ CoS
IEEE 802.1p Class of Serviceの略。VLANタグヘッダー内にある3ビットのフィールドで0~7の値をとる。パケットを受信した機器に対して、パケット取り扱い時の優先度を示す目的で設けられている。802.1p対応機器は、この値に基づいてパケットの優先制御ができる。また、送信時に値を書き換えることで、後続の機器に対して、新たな優先度を指示できる。802.1pユーザープライオリティーとも呼ぶ。
なお、本製品のQoS機能では次の2つのCoS値を使い分けている。
- 内部CoS値:パケットを格納する送信キューを決定するとき、cos-queueマップの参照キー(インデックス値)として用いる値
- 外部CoS値:タグ付きポートからパケットを送信するとき、該当パケットのCoSフィールドにセットする値
パケット受信時には、内部CoS値と外部CoS値は同じ。プレマーキングでは外部CoS値のみ変更可能。
■ DSCP
DiffServ Code Pointの略。IPヘッダーのDiffServフィールド(TOSフィールドとも呼ばれる)内にある6ビットのフィールドで0~63の値をとる。パケットを受信した機器に対して、該当パケットのトラフィッククラスを示すために使われる。DSCP値の意味は各機器が独自に管理し、それに基づいてパケットを処理する。
パケットのDSCP値にしたがってQoSを制御するネットワーク上の領域をDiffServドメインと呼ぶ。DiffServドメインの入り口にあたる機器では、IPアドレスやプロトコル、ポート番号など、DSCP以外の条件をもとにパケットを分類し、DiffServドメイン内で規定されたDSCP値を付加する。これにより、DiffServドメイン内ではDSCP値による統一的なQoSの実施が可能になる。
■ 帯域クラス
トラフィッククラスの帯域使用量に応じてパケットを3つのクラス(Green、Yellow、Red)に分類したもの。特定のパケットが、トラフィッククラスの帯域基準値にどの程度適合しているかを示す。帯域クラスGreenは、あまり帯域を使っていないため、優先的に帯域を割り当てることのできるクラス。帯域クラスYellowは、中程度の帯域使用量のクラス。帯域クラスRedは、最大帯域の設定を超過しているクラスであり、キューイング前に無条件で破棄する設定(ポリシング設定)が可能。また、送信キューの混雑時には、Red、Yellow、Greenの順にパケットの破棄が開始される。
■ トラフィック分類
パケット受信後最初に行われるQoS処理。クラスマップを用いて、受信パケットをトラフィッククラスに分類する。本処理は、受信ポートにポリシーマップが適用されているときだけ行われる。
■ クラスマップ
パケットをトラフィッククラスに分類するための条件を定義するもの。IPアドレス、TCP/UDPポート、CoS、DSCPなど、さまざまな条件を指定できる。クラスマップは単体で使用するものではなく、ポリシーマップにまとめあげた上で受信スイッチポートに適用して使用する。
■ ポリシーマップ
QoS機能の中核的設定要素。トラフィック分類、プレマーキング、メータリング、ポリシング、CoS値書き換えの各処理を行うために必要な情報をひとつにまとめる機能を持つ。
ポリシーマップは、ユーザー定義のクラスマップ(複数)と暗黙のデフォルトクラスマップ(1つ)から構成され、各クラスマップによって分類・識別されたトラフィッククラスに対するプレマーキング、メータリング、ポリシング、CoS値書き換えの各動作もあわせて指定することができる。
ポリシーマップをスイッチポートに適用すると、該当ポートで受信したパケットに対し、ポリシーマップ内のクラスマップによるトラフィック分類が行われ、トラフィッククラスごとに指定されたQoS処理が行われるようになる。
■ プレマーキング
トラフィッククラスに分類されたパケットに対して最初に行われるQoS処理。パケットのQoS 3属性(外部CoS値、DSCP値、帯域クラス)を任意の値に書き換えることができる。書き換え処理は、DSCP値をキーにpremark-dscpマップを参照して行われる。本処理は、受信ポートにポリシーマップが適用されており、なおかつプレマーキングが有効なとき(trust dscpコマンドが設定されているとき)だけ行われる。
■ premark-dscpマップ
プレマーキング時に使用するQoS 3属性(外部CoS値、DSCP値、帯域クラス)の書き換え表。プレマーキング前のDSCP値(0~63)をキーとして、書き換え後の3属性値を調べるために使う。
■ メータリング
プレマーキング後に行われるQoS処理。ポリサーにおける帯域基準値の設定に基づき、各トラフィッククラスが実際にどの程度の帯域を使用しているかを計測し、その結果に基づいてパケットを3つの帯域クラス(Green、Yellow、Red)に分類する。本処理は、受信ポートにポリシーマップが適用されており、なおかつ、該当トラフィッククラスに対してポリサーが設定されているときだけ行われる。
■ ポリサー
トラフィッククラスの帯域使用量をあらかじめ設定された基準値以内に抑えるための仕組み。トラフィッククラスの帯域使用量を計測し、各パケットを帯域クラスに分類(メータリング)する。帯域クラス分類後の処理としては、帯域超過パケットの破棄(ポリシング)か、DSCP値を選択できる。
本製品のポリサーはシングルレートの一種類のみ。
■ ポリシング
メータリング後に行われるQoS処理の1つ。メータリングの結果、帯域クラスRedに分類されたパケット(帯域超過パケット)を破棄することで、該当トラフィッククラスの帯域使用量をあらかじめ指定された帯域基準値の範囲内に抑える。本処理は、受信ポートにポリシーマップが適用されており、なおかつ、該当トラフィッククラスに対してポリサーが設定されているときだけ行われる。
■ 送信キュー
本製品のスイッチポートは、それぞれ4レベルの送信キュー(キュー番号0~3)を備えている。各キューに対しては、送信スケジューリング方式(PQ、WRR)、WRR時の重み付け値などを設定できる。PQ使用時は、番号の大きいキューほど優先度が高くなる。パケットをどの送信キューに格納するかは、内部CoS値をキーとしてcos-queueマップ(後述)を参照することにより決定する。
■ 送信キュー割り当て
出力ポートの決定後、最初に行われるQoS処理。内部CoS値をキーとしてcos-queueマップを参照し、該当パケットの格納先送信キューを決定する。なお、本製品のQoS機能では、割り当てる送信キューを直接指定することはできない。
■ cos-queueマップ
内部CoS値と送信キューの対応表。各CoS値(0~7)に対応する送信キュー番号(0~3)が格納されている。パケットに送信キューを割り当てるときに参照する。
■ 送信キュー管理
各種の転送判断やQoS処理を経て送信ポートに到着したパケットは、ここまでの処理で決定された送信キューに格納される。このとき、キューが混雑していた場合はパケットを廃棄するが、そのときの方式(送信キュー管理方式)として本製品はテールドロップ方式を採用している。
■ テールドロップ方式
送信キュー管理方式の1つ。キューが混雑しているとき、帯域クラスごとに設定された最大キュー長を超過したパケットを無条件に破棄する。
■ 送信スケジューリング
パケット処理の最終段階であるキューからの送信処理を、どのような順序で行うかを規定するもの。本製品では、PQ(絶対優先スケジューリング)とWRR(重み付きラウンドロビンスケジューリング)の2種類から選択できる。
■ PQ方式
Priority Queueingの略。送信スケジューリング方式の1つ。絶対優先スケジューリングとも言う。上位キュー(番号の大きなキュー)が空になるまで下位のキューからはパケットを送信しない。この方式はシンプルだが、上位キューに割り当てられるパケットが多いときに、下位キューのパケットが送信されなくなるという欠点がある。
■ WRR方式
Weighted Round Robinの略。送信スケジューリング方式の1つ。重み付きラウンドロビンスケジューリングとも言う。各キュー間の送信比率を設定し、その比率にしたがってパケットを送信する。たとえば、最上位キューから最下位キューまで、10:5:5:5:2:2:1:1の比率でパケットを送信するような設定が可能。この方式だと、上位キューに割り当てられるパケットが多いときでも、一定比率下位キューからパケットを送信することが可能。
■ シェーピング
パケットを送信するときの速度(送信間隔)を調整することで、ネットワークに流れ込むトラフィックを一定のレートにならす機能。シェーピングを行うには、送信スイッチポートに送信レートの上限値を設定する。
設定手順例
詳細な説明に入る前に、QoS機能の設定がどのようなものかを示すため、具体的な設定手順の例を示します。
個々の設定項目については後で詳しく説明するため、ここでは触れません。
受信時CoS値によるQoS設定例
受信パケットのCoS値に基づくシンプルなQoS設定を示します。
この例では、CoS値に基づく送信キュー割り当て(cos-queueマップ)と送信スケジューリング方式の設定だけを初期値から変更しています。
- QoS機能を有効にします。
QoS関連コマンドの多くは、QoS機能を有効にしておかないと実行できないので、最初にmls qos enableコマンドを実行してQoS機能を有効化しておいてください。
awplus(config)# mls qos enable ↓
- cos-queueマップを編集して、パケットのキュー割り当てを変更します。これには、mls qos map cos-queueコマンドを使います。
ここでは、受信したパケットのCoS値0~7に対して、送信キュー0, 0, 1, 1, 2, 2, 3, 3を割り当てるよう設定します。
awplus(config)# mls qos map cos-queue 0 to 0 ↓
awplus(config)# mls qos map cos-queue 1 to 0 ↓
awplus(config)# mls qos map cos-queue 2 to 1 ↓
awplus(config)# mls qos map cos-queue 3 to 1 ↓
awplus(config)# mls qos map cos-queue 4 to 2 ↓
awplus(config)# mls qos map cos-queue 5 to 2 ↓
awplus(config)# mls qos map cos-queue 6 to 3 ↓
awplus(config)# mls qos map cos-queue 7 to 3 ↓
タグなしパケットはCoS値「0」と見なされます。
BPDU(スパニングツリープロトコル)、LACP、EPSR使用時は、これらのプロトコルが送信キュー3を使うため、その他のパケットを送信キュー3に割り当てないでください。初期設定ではCoS値「6」、「7」が送信キュー「3」にそれぞれマップされているので、BPDU、 LACP、EPSR使用時は送信キュー「3」を使わないよう、mls qos map cos-queueコマンドでマッピングを変更してください。
- 送信スケジューリングの設定を行います。
初期設定はPQ(絶対優先スケジューリング)ですが、ここではポート1.0.1~1.0.24に対し、すべての送信キューでWRRスケジューリングを用いるよう設定します。各キューからの送信比率は、上位キューから10:5:2:1とします。
awplus(config)# interface port1.0.1-1.0.24 ↓
awplus(config-if)# wrr-queue weight 10 queues 3 ↓
awplus(config-if)# wrr-queue weight 5 queues 2 ↓
awplus(config-if)# wrr-queue weight 2 queues 1 ↓
awplus(config-if)# wrr-queue weight 1 queues 0 ↓
設定は以上です。
ポリシーマップによるQoS設定例
ポリシーマップを利用したQoSの設定は、ポリシーマップを作成し、受信スイッチポートに適用することで行います。
次にポリシーマップを利用したQoSの基本的な設定手順例を示します。
- QoS機能を有効にします。
QoS関連コマンドの多くは、QoS機能を有効にしておかないと実行できないので、最初にmls qos enableコマンドを実行してQoS機能を有効化しておいてください。
awplus(config)# mls qos enable ↓
- ホストからのIPパケットを許可するハードウェアアクセスリストacl1を作成します。これにはaccess-list hardware(list)コマンド、access-list hardware(seq entry)コマンドを使います。QoS処理を適用するIPパケットに対しては、通常permitアクションを指定してください。
awplus(config)# access-list hardware acl1 ↓
awplus(config-ip-hw-acl)# permit tcp 192.168.1.100/24 any eq 22 ↓
ハードウェアアクセスリストの概要と作成方法については、「トラフィック制御」の「アクセスリスト」をご覧ください。
- クラスマップを作成して、ホストからのパケットをそれぞれ個別のトラフィッククラスに分類できるようにします。
クラスマップの作成はclass-mapコマンドで行います。class-mapコマンドでクラスマップ名を指定するとクラスマップモードに移動するので、同モードの各コマンドを使って分類条件を指定してください。ここでは、match access-groupコマンドを使って、ハードウェアアクセスリストの条件に合致したパケットを該当トラフィッククラスに分類するよう設定しています。
awplus(config)# class-map cmap1 ↓
awplus(config-cmap)# match access-group acl1 ↓
awplus(config-cmap)# exit ↓
- ポリシーマップを作成します。最初にpolicy-mapコマンドでポリシーマップの名前を指定して、ポリシーマップモードに移動します。
awplus(config)# policy-map pmap1 ↓
awplus(config-pmap)#
- ポリシーマップにクラスマップを関連付け、該当クラスマップによって識別されたトラフィッククラスに対する処理を指定します。
クラスマップの関連付けはclassコマンドで行います。同コマンドを実行すると、ポリシーマップ・クラスモードに移動するので、同モードのコマンドを使って処理内容を指定します。
ここでは、クラスマップcmap1によって識別されたトラフィッククラスのパケットに対し、外部CoS値、内部CoS値の両方を「3」に書き換えるよう設定しています
awplus(config-pmap)# class cmap1 ↓
awplus(config-pmap-c)# remark new-cos 3 both ↓
awplus(config-pmap-c)# exit ↓
- ポリシーマップpmap1を受信スイッチポートであるポート1.0.1に適用します。
awplus(config)# interface port1.0.1 ↓
awplus(config-if)# service-policy input pmap1 ↓
awplus(config-if)# exit ↓
設定は以上です。
ポリシーマップとクラスマップ
次に、QoS機能の中核的設定要素であるポリシーマップと、ポリシーマップの骨格を形成するクラスマップについて説明するとともに、それぞれの設定方法を解説します。
クラスマップ
クラスマップは、パケットをトラフィッククラスに分類するための条件を定義する仕組みです。1つのクラスマップは、1つのトラフィッククラスの分類条件を定義します。
クラスマップの全体構造は次のとおりです。
- クラスマップ
- match節(分類条件)
- アクション(許可・破棄など)
各クラスマップは、1つ以上のmatch節と、1つのアクションで構成されます。
- match節は、パケットと照合するための条件です。match節が複数ある場合は、すべてのmatch節にマッチする必要があります(AND検索)
- アクションは、マッチしたパケットを許可(permit)するか破棄(deny)するかの指定です。許可されたパケットに対してはさまざまなQoS処理を適用できます(具体的な処理内容はポリシーマップで指定します)
パケットの分類条件として使用できる情報には次のものがあります。
- ハードウェアMACアクセスリストで識別できる諸条件(ハードウェアIPv6アクセスリストとは併用不可)
- ハードウェアIPアクセスリストで識別できる諸条件(ハードウェアIPv6アクセスリストとは併用不可)
- 始点・終点IPアドレス
- IPプロトコルタイプ(IP、TCP、UDP、ICMP、任意のプロトコルタイプ)
- 始点・終点ポート番号(TCP/UDPのみ)
- ICMPメッセージタイプ(ICMPのみ)
- ハードウェアIPv6アクセスリストで識別できる諸条件(ハードウェアIP/MACアクセスリストとは併用不可)
- 始点IPv6アドレス
- 終点IPv6アドレス
- 上位プロトコル(IPv6すべて、TCP、UDP、ICMPv6、任意のプロトコルタイプ)
- レイヤー2アドレス種別(ユニキャスト、マルチキャスト、ブロードキャスト)
- レイヤー3プロトコルタイプ(フレームフォーマットとプロトコル番号)
- 入力VLAN ID
- VLANタグヘッダーのCoS値
- ダブルタグパケットの内側VLANタグヘッダーのVLAN ID
- IPヘッダーのDSCP値(優先度値とは併用不可)
- IP/IPv6ヘッダーの優先度値(DSCP値とは併用不可)
- TCPヘッダーの制御フラグ値
また、クラスマップのアクションは次のようにして決まります。
- match節にmatch access-group節が含まれている場合、match access-group節で指定したアクセスリストのアクションがクラスマップのアクションとなります
- match節にmatch access-group節が含まれていない場合、クラスマップのアクションはpermitとなります
■ クラスマップの作成手順は次のとおりです。
- 分類条件として、ハードウェアIPアクセスリストやハードウェアMACアクセスリストで識別するものを使用する場合は、適宜ハードウェアアクセスリストを定義します。
awplus(config)# access-list 3021 permit tcp 192.168.20.0/24 192.168.10.0/24 ↓
ハードウェアアクセスリストの概要と作成方法については、「トラフィック制御」の「アクセスリスト」をご覧ください。
- グローバルコンフィグモードのclass-mapコマンドでクラスマップ名を指定し、クラスマップモードに入ります。
awplus(config)# class-map tcp20to10 ↓
- クラスマップモードには、名前がmatch~で始まるコマンドが多数あります。これらはクラスマップに分類条件(match節)を追加するためのコマンドです。これらのコマンドを実行して、必要な分類条件をすべて指定してください。分類条件を複数指定した場合、該当クラスマップにマッチするにはすべての条件を満たす必要があります。
awplus(config-cmap)# match access-group 3021 ↓
- exitコマンドでクラスマップモードを抜ければ、該当クラスマップの設定は完了です。
awplus(config-cmap)# exit ↓
■ クラスマップの内容を変更するには、再度class-mapコマンドでクラスマップ名を指定し、クラスマップモードに入ります。
awplus(config)# class-map tcp20to10 ↓
awplus(config-pmap)#
■ クラスマップを削除するには、class-mapコマンドをno形式で実行します。
awplus(config)# no class-map tcp20to10 ↓
■ ハードウェアアクセスリストの設定はshow access-listコマンドで確認できます。
awplus# show access-list ↓
Hardware IP access list 3021
permit tcp 192.168.20.0/24 192.168.10.0/24
■ クラスマップの設定はshow class-mapコマンドで確認できます。
awplus# show class-map ↓
CLASS-MAP-NAME: tcp20to10
QOS-ACCESS-LIST-NAME: 3021
ポリシーマップ
ポリシーマップは、受信パケットに対してさまざまなQoSを適用するためのメカニズムで、トラフィック分類、プレマーキング、メータリング、ポリシング、CoS値書き換えの各処理を行うために必要な情報をひとつにまとめる機能を持ちます。
ポリシーマップの全体構造は次のとおりです。
- ポリシーマップ
- トラフィッククラス1(クラスマップ1で識別)
- プレマーキング設定
- ポリサー設定(メータリング、ポリシングの設定)
- CoS値書き換え設定
- トラフィッククラス2(クラスマップ2で識別)
- プレマーキング設定
- ポリサー設定(メータリング、ポリシングの設定)
- CoS値書き換え設定
- ...
- トラフィッククラスn(クラスマップnで識別)
- プレマーキング設定
- ポリサー設定(メータリング、ポリシングの設定)
- CoS値書き換え設定
- デフォルトトラフィッククラス(どのクラスマップにもマッチしなかった場合)
- プレマーキング設定
- ポリサー設定(メータリング、ポリシングの設定)
- CoS値書き換え設定
ポリシーマップは、ユーザー定義のクラスマップ(複数)と暗黙のデフォルトクラスマップ(1つ)から構成され、各クラスマップによって分類・識別されたトラフィッククラスに対するプレマーキング、メータリング、ポリシング、CoS値書き換えの各動作もあわせて指定することができます。
ポリシーマップをスイッチポートに適用すると、ポリシーマップ内の各クラスマップによって受信パケットがトラフィッククラスに分類され、各トラフィッククラスに対してあらかじめ指定したQoS処理が行われるようになります。パケットとクラスマップの照合は、クラスマップをポリシーマップに関連付けした順序で行われます。
また、denyアクションのクラスマップを用いることで、パケットフィルタリングを行うこともできます。
■ ポリシーマップの作成手順は次のとおりです。必要なクラスマップの作成は済んでいるものとします。
- グローバルコンフィグモードのpolicy-mapコマンドでポリシーマップ名を指定し、ポリシーマップモードに入ります。
awplus(config)# policy-map test ↓
- ポリシーマップモードのclassコマンドでクラスマップ名を指定し、ポリシーマップ・クラスモードに移動します。
awplus(config-pmap)# class downWeb ↓
- ポリシーマップ・クラスモードの各コマンドを使って、クラスマップによって識別されたトラフィッククラスに対する処理内容を指定します。
awplus(config-pmap-c)# police single-rate 50000 10240 10240 action drop-red ↓
awplus(config-pmap-c)# exit ↓
■ ポリシーマップをスイッチポートに適用するには、インターフェースモードのservice-policy inputコマンドを使います。これにより、該当ポートで受信したパケットに対してポリシーマップで定義したQoS処理が適用されます。
awplus(config)# interface port1.0.1 ↓
awplus(config-if)# service-policy input test ↓
■ トランクグループにポリシーマップを適用するときは、次の点にご注意ください。
- スタティックチャンネルグループ(手動設定のトランクグループ)の場合は、インターフェース名「saX」(Xはスタティックチャンネルグループ番号)に対してポリシーマップを適用します。たとえば、スタティックチャンネルグループ「1」にポリシーマップmypolicyを適用するには、次のようにします。
awplus(config)# interface sa1 ↓
awplus(config-if)# service-policy input mypolicy ↓
QoSストームプロテクション機能が有効になっているポリシーマップは、「saX」インターフェースに適用できないため、スタティックチャンネルグループのメンバーポートに対してポリシーマップを適用する必要があります。その場合はstatic-channel-groupコマンドで「member-filters」を指定し実行したあとにservice-policy inputコマンドを実行してください。
awplus(config)# interface port1.0.1-1.0.2 ↓
awplus(config-if)# static-channel-group 1 member-filters ↓
awplus(config-if)# service-policy input mypolicy ↓
- LACPチャンネルグループ(自動設定のトランクグループ)の場合は、該当グループに所属しているすべてのスイッチポートに対してポリシーマップを適用します。たとえば、スイッチポート1.0.1~1.0.10からなるLACPチャンネルグループ「1」にポリシーマップmypolicyを適用するには、次のようにしてください。
awplus(config)# interface port1.0.1-1.0.10 ↓
awplus(config-if)# service-policy input mypolicy ↓
インターフェース名「poX」(XはLACPチャンネルグループ番号)に対してポリシーマップを適用することはできないので注意してください。
awplus(config)# interface po1 ↓
awplus(config-if)# service-policy input mypolicy ↓
% Service policy cannot be attached to a dynamic aggregator interface.
■ スイッチポートからポリシーマップの適用を解除するには、service-policy inputコマンドをno形式で実行します。
awplus(config)# interface port1.0.1 ↓
awplus(config-if)# no service-policy input test ↓
■ ポリシーマップの内容を変更するには、再度policy-mapコマンドでポリシーマップ名を指定し、ポリシーマップモードに入ります。
awplus(config)# policy-map test ↓
awplus(config-pmap)#
■ ポリシーマップを削除するには、policy-mapコマンドをno形式で実行します。
awplus(config)# no policy-map test ↓
■ ポリシーマップの設定はshow policy-mapコマンドで確認できます。
awplus# show policy-map ↓
■ スイッチポートに適用されているポリシーマップの情報はshow mls qos interfaceコマンドで確認できます。
awplus# show mls qos interface port1.0.1 ↓
QoS処理フロー詳細
ここでは、個々のQoS機能について、全体的なQoS処理の流れにしたがって解説します。
次に、パケットを受信してから送信するまでの、QoS処理の大まかな流れを示します。一見すると非常に複雑ですが、通常はすべての段階を設定する必要はありません。
なお、図の左側では、QoS処理過程で使用される「QoS 3属性」(CoS値は内部CoS値と外部CoS値があるため合計4種類)がどこで参照(使用)され、どこで書き換え(割り当て)られるのかを示しています。

表 1:QoS処理の流れ
受信スイッチポート |
1 |
受信 |
スイッチポートでパケットを受信 |
ポリシーマップによるQoS処理(受信ポートにポリシーマップが適用されている場合のみ) |
2 |
パケット分類 |
クラスマップにより、パケットをトラフィッククラスに分類する。どのクラスマップにもマッチしなかったパケットは、デフォルトトラフィッククラスに分類する。なお、パケットとクラスマップの照合は、クラスマップをポリシーマップに関連付けした順序で行われる |
3 |
プレマーキング |
プレマーキングの設定がなされている場合、パケットのDSCP値をキーにpremark-dscpマップを参照して、受信パケットの3属性(外部CoS値、DSCP値、帯域クラス)を書き換える |
4 |
メータリング |
トラフィッククラスでポリサーの設定がなされている場合、該当トラフィッククラスがどの程度帯域を使用しているかを計測し、受信パケットを帯域クラスに分類する |
5 |
ポリシング |
ポリサーのアクションがポリシングの場合は、帯域クラスRedに分類されたパケット(帯域超過パケット)を破棄する |
6 |
CoS値書き換え |
remark new-cosコマンドの設定にしたがい、内部・外部CoS値を書き換える。内部CoS値は送信キューの決定にのみ使われる。外部CoS値はタグ付きポートからパケットを出力するとき、パケットのCoSフィールドに設定される |
送信時のQoS処理(すべてのパケットが対象) |
7 |
送信キュー決定 |
パケットの内部CoS値(0~7)をキーとしてcos-queueマップを参照し、パケットに割り当てる送信キュー(0~3)を決定する。 |
8 |
送信キューへの格納 |
ここまでの処理で決定した送信キューにパケットを格納する。キューが混雑している場合は、テールドロップ方式により既定の最大キュー長を超えたパケットを破棄する |
9 |
送信キューからの取り出し |
設定されたスケジューリング方式にしたがい、送信キューからパケットを出力する。PQ(絶対優先)、WRR(重み付きラウンドロビン)のいずれか、あるいは、両者の併用も可能。なお、送信ポートに送信レートの上限値が設定されている場合は、指定されたレートでパケットを送信するシェーピング動作を行う |
送信スイッチポート |
10 |
送信 |
スイッチポートからパケットを送信 |
以下では、各ステップにおける処理内容と設定方法について詳しく解説します。
ポリシーマップによるQoS処理
受信ポートにポリシーマップが適用されている場合は、受信ポートにおいて、ポリシーマップに基づいた一連のQoS処理(トラフィック分類、プレマーキング、メータリング、ポリシング、CoS値書き換え)が行われます。
受信ポートにポリシーマップが適用されていない場合、これらの処理は行われず、送信時のQoS処理に移ります。
トラフィック分類
ポリシーマップの処理で最初に行われるのは、クラスマップによってパケットをトラフィッククラスに分類することです。
受信パケットとクラスマップの照合は、ポリシーマップにクラスマップを追加した順序で行われます。
トラフィック分類後のポリシーマップ処理(プレマーキング、CoS値書き換え)は、トラフィッククラス単位で行われます。
なお、クラスマップとポリシーマップの作成、および、クラスマップのポリシーマップへの関連付けについては、本解説編の「ポリシーマップとクラスマップ」をご覧ください。
プレマーキング
プレマーキングは、クラスマップによってトラフィッククラスに分類されたパケットに対して行われる最初のQoS処理です。
本製品のQoS機能では、各パケットは次の3つの属性を持ちます。これらの属性は、QoS処理の各段階において、割り当てられたり、変更されたり、参照されたりします。
- CoS(0~7)
- DSCP(0~63)
- 帯域クラス(Green、Yellow、Red)
プレマーキングでは、これらの3属性(ここでのCoSは「外部CoS値」であることに注意)を書き換える(変更する)ことができます。書き換えは、パケットのDSCP値をキーにpremark-dscpマップを参照することで行います。
■ ポリシーマップでプレマーキングが有効かどうかは、show policy-mapコマンドで確認できます。「Trust state: DSCP」の表示があれば、プレマーキングは有効です。
awplus# show policy-map ↓
POLICY-MAP-NAME: example
State: detached
Default class-map action: permit
Trust state: DSCP
CLASS-MAP-NAME: default
CLASS-MAP-NAME: public1
CLASS-MAP-NAME: public2
■ premark-dscpマップの内容は、show mls qos maps premark-dscpコマンドで確認できます。
awplus# show mls qos maps premark-dscp 1 ↓
PREMARK-DSCP-MAP:
DSCP 1
--------------------------------
New DSCP 1
New CoS 7
New Bandwidth Class green
メータリングとポリシング
本製品の帯域制御は、ポリサーによって指定された帯域基準値(トラフィックレートとバーストサイズ)をもとに、各トラフィッククラスが実際にどの程度の帯域を使用しているかを計測し、その結果に基づいてパケットを3つの帯域クラスに分類することによって行います。
帯域使用量の計測と帯域クラスへの分類処理はメータリングと呼ばれ、プレマーキングの後に行われます。
メータリングでは、トラフィッククラスに属するパケットを次に示す3つの「帯域クラス」に分類します。
表 2:3つの帯域クラス
帯域クラス |
帯域使用量 |
取り扱いの一例 |
Green |
少ない |
帯域割り当ての優先度は最高 |
Yellow |
中程度 |
帯域割り当ての優先度は中。キューが混雑したときは(Redの次に)優先的に破棄 |
Red |
使いすぎ |
帯域割り当ての優先度は最低。キューへの格納前に破棄、あるいは、キューが混雑したとき優先的に破棄 |
帯域クラス分類後、ポリシングが行われます。ポリシングは、帯域クラスRedを破棄してトラフィッククラスの使用帯域を一定値までに制限する動作です。
■ トラフィッククラスに対してメータリングを行うには、トラフィッククラスの設定時にポリサーという設定要素を指定する必要があります。
ポリサーは、トラフィッククラスの帯域基準値(トラフィックレートとバーストサイズ)と帯域クラス分類後の処理を指定するための設定要素で、以下があります。
- シングルレート(トラフィックレートは最大値のみ指定可)
以下、それぞれの設定方法について説明します。
■ 個々のトラフィッククラスに対してメータリングを行いたい場合は、各トラフィッククラスにポリサーを適用します。
■ ポリサーの設定時には、actionパラメーターで帯域クラス分類後の処理(アクション)を指定する必要があります。
- drop-red(ポリシング)
帯域クラスRedに分類されたパケット(帯域超過パケット)を破棄することで、該当トラフィッククラスの帯域使用量を最大トラフィックレート+許容バーストサイズ以下に抑える
■ メータリングの設定は、show policy-mapコマンドで確認できます。
awplus# show policy-map ↓
POLICY-MAP-NAME: pmap1
State: attached
Default class-map action: permit
CLASS-MAP-NAME: default
Policer single-rate action drop-red:
average rate(24000 kbps) minimum burst(16384 B) maximum burst(16384 B)
Policer counters enabled
シングルレートポリサー
シングルレートポリサーでは、1つのトラフィックレート(MAXRATE)と2つのバーストサイズ(MINBURST、MAXBURST)、あわせて3つの帯域基準値に基づいて、トラフィッククラス内の各パケットを帯域クラスに分類します。
シングルレートポリサーはおもに、トラフィッククラスが使用できる最大帯域を一定値までに制限するときに使用します。
本製品のポリシングは、ポートで受信したすべてのトラフィックに対して動作する仕様です。特定のトラフィッククラスに適用した場合でも、そのポートで受信したすべてのトラフィックに対してポリシングが動作しますのでご注意ください。
awplus(config)# policy-map test1 ↓
awplus(config-pmap)# class default ↓
awplus(config-pmap-c)# police single-rate 10240 16384 16384 action drop-red ↓
awplus(config)# interface port1.0.1 ↓
awplus(config-if)# service-policy input test1 ↓
表 3:シングルレートポリサーの判定基準
帯域クラス |
帯域使用量 |
判定基準 |
Green |
少ない |
バースト量 <= MINBURST |
Yellow |
中程度 |
MINBURST < バースト量 <= MINBURST + MAXBURST |
Red |
使いすぎ |
バースト量 > MINBURST + MAXBURST |

ここでのバースト量とは、トラフィックの流入量がMAXRATEを超えた場合に、MAXRATEの超過分としてカウントされるデータ量を示しています。トラフィック量がMAXRATE以下であれば、バースト量は0になります。
トラフィックレートが瞬間的にMAXRATEをオーバーしても、超過している時間が短ければ、バースト量はMINBURST以内にとどまり、すべてのパケットが帯域クラスGreenとして扱われることになります。
これに対し、MAXRATEをオーバーしている時間が長くなると、バースト量がMINBURSTを超えることがあります。この場合、MINBURSTを超えてカウントされたパケットには、帯域クラスYellowが割り当てられます。さらに時間が経過すると、バースト量がMINBURST + MAXBURSTを超えますが、この超過分は帯域クラスRedとなります。
シングルレートポリサー使用時は、ポリシング設定により帯域クラスRedのパケットを無条件で破棄することで、該当トラフィッククラスの帯域使用量をMAXRATE + MINBURST + MAXBURST以内に抑えることができます。これは、最大帯域幅を制限する設定となります。
CoS値の書き換え
CoS値の書き換えは、送信キューの割り当て前に行われるQoS処理です。
トラフィッククラスに属するパケットの外部CoS値、内部CoS値を書き換えることで、送信時に任意のCoS値をセットしたり、使用する送信キューを変更したりすることが可能です。
CoS値書き換えの設定はremark new-cosコマンドで行います。ポリサーの設定をしなくてもCoS値の書き換えは行えます。
■ 特定のトラフィッククラスに属するパケットに対してCoS値の書き換えを行うには、該当トラフィッククラスを対象とするポリシーマップ・クラスモードにおいて、remark new-cosコマンドを実行し、書き換え後のCoS値を指定します。
本製品では内部CoS値、外部CoS値の個別書き換えはできず、つねに内部CoS値・外部CoS値の両方を書き換える動作(both)になります。
■ CoS値書き換えの設定は、show policy-mapコマンドで確認できます。
show policy-mapコマンドの表示では、「CoS」が外部CoS値(送出パケットにセットされる値)、「CoS-Queue Map Index」が内部CoS値(cos-queueマップの参照キー)を表しています。
awplus# show policy-map example2 ↓
POLICY-MAP-NAME: example2
State: detached
Default class-map action: permit
CLASS-MAP-NAME: default
CLASS-MAP-NAME: midprio
Remark CoS and CoS-Queue Map Index to 4
送信時のQoS処理
転送判断(L2スイッチング処理)やQoS処理を経て送信ポートに到着したパケットは、cos-queueマップに基づいて決定された送信キューに格納され、実際に送信されるのを待ちます。
以下では、送信キューの決定、送信キューへの格納と取り出し(送信)に関するQoS処理について解説します。これらの処理はポリシーマップの有無にかかわらずすべてのパケットに対して行われます。
送信キューの割り当て
本製品は、パケットの内部CoS値をキーにcos-queueマップ(show mls qos maps cos-queue)を検索して送信キューを決定します。
内部CoS値とは、送信キュー割り当て時にのみ参照されるCoS値のことです。タグ付きパケットの場合、受信時にパケットが持っていたCoS値が内部CoS値の初期値となります。タグなしパケットの場合、内部CoS値「0」が初期値となります。内部CoS値は、CoS値書き換え処理によって任意の値に変更することも可能です。
■ パケットに対する送信キュー割り当ての動作を変更するには、mls qos map cos-queueコマンドを使ってcos-queueマップを編集します。
たとえば、パケットの内部CoS値0~7に対して、送信キュー0, 0, 1, 1, 2, 2, 3, 3を割り当てるには次のように設定します。
awplus(config)# mls qos map cos-queue 0 to 0 ↓
awplus(config)# mls qos map cos-queue 1 to 0 ↓
awplus(config)# mls qos map cos-queue 2 to 1 ↓
awplus(config)# mls qos map cos-queue 3 to 1 ↓
awplus(config)# mls qos map cos-queue 4 to 2 ↓
awplus(config)# mls qos map cos-queue 5 to 2 ↓
awplus(config)# mls qos map cos-queue 6 to 3 ↓
awplus(config)# mls qos map cos-queue 7 to 3 ↓
■ cos-queueマップを初期設定に戻すには、mls qos map cos-queueコマンドをno形式で実行します。
awplus(config)# no mls qos map cos-queue ↓
■ cos-queueマップの設定は、show mls qos maps cos-queueコマンドで確認できます。
awplus# show mls qos maps cos-queue ↓
COS-TO-QUEUE-MAP:
COS : 0 1 2 3 4 5 6 7
--------------------------------------
QUEUE: 1 0 0 1 2 2 3 3
キューへの格納
送信ポートに到着したパケットは、ここまでの処理で決定された送信キューに格納されますが、格納先のキューが混雑していた場合は、テールドロップ方式によりパケットを破棄し、キューの混雑を解消します。
テールドロップ方式は、既定の最大キュー長を超過したパケットを無条件に廃棄するシンプルなキュー管理方式です。本製品では次のように帯域クラスごとに異なる最大キュー長が設定されています(設定変更は不可)。
- 帯域クラスGreen:利用可能バッファーの100%
- 帯域クラスYellow:利用可能バッファーの80%
- 帯域クラスRed:利用可能バッファーの60%
キューからの送信
送信スケジューリング
送信キューに格納されたパケットをどのような順序で出力するかは、キューごとに設定した送信スケジューリング方式によって決まります。
本製品は以下の2つのスケジューリング方式をサポートしています。初期状態では、すべての送信キューでPQ方式を使用するよう設定されています。
- PQ方式(絶対優先スケジューリング)
上位キューが空になるまで下位のキューからパケットを送信しない。
- WRR方式(重み付きラウンドロビンスケジューリング)
各キュー間の送信比率を設定し、その比率にしたがってパケットを送信する。
各スイッチポートにおいて、どちらか一方の方式が使用できます。
■ 送信ポートで使用するスケジューリング方式、および、WRRにおけるキューの重み付け値(送信比率)は、インターフェースモードのpriority-queueコマンド、wrr-queue weightコマンドで設定します。
■ 送信キューのスケジューリング方式、WRR使用時の重み付け(送信比率)設定は、show mls qos interfaceコマンドで確認できます。スケジューリング方式は「Scheduler」欄を、WRR使用時の重み付け値は「Weight」欄をご覧ください。
シェーピング
パケット送信時の速度(送信間隔)を調整することで、ネットワークに流れ込むトラフィックを一定のレートにならす機能をシェーピングと呼びます。
本製品では、スイッチポートに対して送信レートの上限値を設定することで、シェーピングを行うことが可能です。
■ スイッチポートに対して送信レートの上限値を設定するには、インターフェースモードのegress-rate-limitコマンドを使います。
たとえば、ポート1.0.13の送信レートを50Mbpsに制限するには、次のように指定します。
awplus(config)# interface port1.0.13 ↓
awplus(config-if)# egress-rate-limit 50m ↓
% Egress rate limit has been set to 5XXXX Kb
送信レートの設定値には粒度(設定可能な値の最小単位)があります。そのため、egress-rate-limitコマンドで入力した値によっては、上記例のように指定値が最小単位の倍数に丸められることがあります。
■ スイッチポートの送信レート上限値は、show interfaceコマンドで確認できます。「Egress Rate Limit」欄をご覧ください。
awplus> show interface port1.0.13 ↓
Interface port1.0.13
...
Egress Rate Limit 5XXXX Kb
...
ポリシーマップのフィルタリング機能
ポリシーマップは、QoSだけでなくパケットフィルタリングにも使用できます(QoSとフィルタリングの併用も可能です)。
パケットフィルタリングは、インターフェースモードのaccess-groupコマンドを使ってスイッチポートにハードウェアアクセスリストを適用することでも実現できますが、ポリシーマップのほうが使用できる条件が多く、より柔軟なフィルタリングを行えます。
また、本製品には、ハードウェアパケットフィルターにマッチしたパケットに対して、ポリシーマップによるQoSが適用されないという仕様があるため、ポリシーマップによるQoSを利用しながらパケットフィルタリングを行いたい場合は、ハードウェアパケットフィルターを使用するのではなく、以下に述べるポリシーマップのフィルタリング機能を使ってください。
設定例
次にポリシーマップを利用したパケットフィルタリングの設定例を示します。
ここでは、192.168.10.0/24から192.168.20.0/24へのTCP接続(セッション開始)を禁止するよう設定します。
仕様により、1つのクラスマップでSynパケットだけを破棄する設定はできないため、ここでは2つのクラスマップを用意し、(1) Syn=Onのパケットは原則破棄、(2) ただしSyn=OnかつAck=Onのパケットは例外的に許可、という2つの条件を併用することでセッション確立を禁止します。
なお、192.168.10.0/24のネットワークは、ポート1.0.1~1.0.2に接続されているものと仮定します。
- QoS機能を有効にします。
QoS関連コマンドの多くは、QoS機能を有効にしておかないと実行できないので、最初にmls qos enableコマンドを実行してQoS機能を有効化しておいてください。
awplus(config)# mls qos enable ↓
- 192.168.10.0/24から192.168.20.0/24へのTCPパケットを識別するハードウェアIPアクセスリストを作成します。これにはaccess-list(hardware ip)コマンドを使います。
ここでは、Syn=OnかつAck=Onのパケットを許可するためのアクセスリスト3011と、Syn=Onのパケットを破棄するためのアクセスリスト3012を作成します。
なお、ハードウェアIPアクセスリストでは、TCP制御フラグの指定はできません。これは、クラスマップのmatch tcp-flags節を使って指定します。
awplus(config)# access-list 3011 permit tcp 192.168.10.0/24 192.168.20.0/24 ↓
awplus(config)# access-list 3012 deny tcp 192.168.10.0/24 192.168.20.0/24 ↓
ハードウェアアクセスリストの概要と作成方法については、「トラフィック制御」の「アクセスリスト」をご覧ください。
- 192.168.10.0/24から192.168.20.0/24へのTCPパケットに関して、Syn=OnかつAck=Onのパケットを許可するクラスマップpermitSA10と、Syn=Onのパケットを破棄するクラスマップdenyS10を作成します。
クラスマップの作成はclass-mapコマンドで行います。同コマンドを実行するとクラスマップモードに移動するので、同モードのコマンドを使って分類条件を指定してください。ここでは、match access-groupコマンドを使って、前の手順で作成したハードウェアアクセスリストを指定し、match tcp-flagsコマンドでTCP制御フラグのマッチ条件を指定します。
awplus(config)# class-map permitSA10 ↓
awplus(config-cmap)# match access-group 3011 ↓
awplus(config-cmap)# match tcp-flags syn ack ↓
awplus(config-cmap)# exit ↓
awplus(config)# class-map denyS10 ↓
awplus(config-cmap)# match access-group 3012 ↓
awplus(config-cmap)# match tcp-flags syn ↓
awplus(config-cmap)# exit ↓
- 2つのクラスマップを束ねるポリシーマップacl10を作成します。最初にpolicy-mapコマンドでポリシーマップの名前を指定します。これにより、ポリシーマップモードに移動します。
awplus(config)# policy-map acl10 ↓
awplus(config-pmap)#
- ポリシーマップにクラスマップを関連付け、該当クラスマップによって識別されたトラフィッククラスに対する処理を指定します。ここでは、192.168.10.0/24から192.168.20.0/24へのTCP Syn + Ackパケットを許可、同TCP Synパケットを拒否、その他すべてのパケットを許可するよう設定します。
クラスマップの関連付けはclassコマンドで行います。同コマンドでクラスマップ名を指定するとポリシーマップ・クラスモードに移動します。QoSの設定では同モードのコマンドを使ってマッチしたパケットに対する処理内容を指定できますが、ここではパケットの許可・破棄だけが目的なので、それ以外の処理内容を指定する必要はありません。
awplus(config-pmap)# class permitSA10 ↓
awplus(config-pmap-c)# exit ↓
awplus(config-pmap)# class denyS10 ↓
awplus(config-pmap-c)# exit ↓
awplus(config-pmap)# exit ↓
- ポリシーマップacl10をネットワーク192.168.10.0/24の接続されているスイッチポート1.0.1~1.0.2に適用します。
awplus(config)# interface port1.0.1-1.0.2 ↓
awplus(config-if)# service-policy input acl10 ↓
設定は以上です。
制御パケットの優先制御
CPU宛て通信の負荷が非常に高い環境では、BPDU、ARPなどの制御パケットを適切に処理できず、これら制御プロトコルの動作に支障をきたす場合があります。
このような事態を避けるため、本製品では初期状態でCPU宛てのパケットを下記のとおり自動的に優先制御するようになっています。この動作を変更することはできません。
表 4
パケットの種類 |
使用するCPU宛てキュー |
AMF(アライドテレシスマネージメントフレームワーク) |
3 |
BPDU(スパニングツリープロトコル) |
EPSR |
EAP |
LACP |
Loop Detect |
LLDP |
ARP Reply |
DHCP Snooping |
2 |
IGMP |
1 |
ARP Request |
ユニキャストパケット(スイッチングパケット) |
ブロードキャストパケット |
マルチキャストパケット |
(C) 2016 - 2021 アライドテレシスホールディングス株式会社
PN: 613-002310 Rev.Y