[index] CentreCOM x310シリーズ コマンドリファレンス 5.4.8

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

用語一覧
設定手順例
受信時CoS値によるQoS設定例
ポリシーマップによるQoS設定例
ポリシーマップとクラスマップ
クラスマップ
ポリシーマップ
QoS処理フロー詳細
ポリシーマップによるQoS処理
トラフィック分類
プレマーキング
メータリングとポリシング
シングルレートポリサー
ツインレートポリサー
リマーキング
CoS値の書き換え
送信時のQoS処理
送信キューの割り当て
キューへの格納
キューからの送信
送信スケジューリング
シェーピング
設定例
特定のDSCP値を持つパケットを指定の送信キューに割り当てる
特定IPアドレスからのパケットにDSCP値をセットし、指定の送信キューに割り当てる
ポリシーマップのフィルタリング機能
設定例
制御パケットの優先制御

QoS（Quality of Service）関連機能について解説します。
本製品は、ユーザーが定義したポリシーマップに基づき、各トラフィッククラスに任意のサービスレベルを割り当てるポリシーベースQoS機能を備えています。
ポリシーマップでは、クラスマップを用いてパケットをトラフィッククラスに分類し、それぞれに異なるサービスレベル（帯域や優先度、経路）を割り当てることができます。クラスマップでは、IPアドレスやTCP/UDPポート、DSCP（DiffServ Code Point）などに基づいたトラフィック分類が可能です。

> Note

> > 同一ポート上において、ハードウェアパケットフィルターとポリシーマップを併用することも可能です。その場合、該当ポートで受信したパケットの処理は、ハードウェアパケットフィルター、ポリシーマップの順に行われます。両方を通過しないとパケットは出力されません。詳細は「トラフィック制御」/「ハードウェアパケットフィルター」の解説編、「フィルター処理の流れ」をご覧ください。

> Note

> > 同一スイッチポート上においてリモートミラーリングとQoSは併用できません。

> Note

> > 同一スイッチポート上においてWeb認証とポリシーベースQoSは併用できません。

## 用語一覧

ここでは、本解説編で使用する用語について簡単にまとめます。以後の説明でよくわからない言葉が出てきたときは、こちらをご参照ください。

> Note

> > 以下に述べるのは本解説編の説明のための定義です。一般に使われている用語の意味とは必ずしも一致しない場合がありますのでご注意ください。

■ 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値のみ、リマーキングでは内部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値、帯域クラスの再書き換え（リマーキング）を選択できる。
ポリサーには、帯域基準値の数によってシングルレートとツインレートの2種類がある。
■ ポリシング
メータリング後に行われるQoS処理の1つ。メータリングの結果、帯域クラスRedに分類されたパケット（帯域超過パケット）を破棄することで、該当トラフィッククラスの帯域使用量をあらかじめ指定された帯域基準値の範囲内に抑える。本処理は、受信ポートにポリシーマップが適用されており、なおかつ、該当トラフィッククラスに対してポリサーが設定されているときだけ行われる。
■ リマーキング
メータリング後に行われるQoS処理の1つ。メータリングによって決定された帯域クラスの情報を利用して、パケットのDSCP値と帯域クラス値を再変更することで、キュー格納時の動作に影響を与えたり、後続の機器に情報を提供したりする。本処理は、受信ポートにポリシーマップが適用されており、なおかつ、該当トラフィッククラスに対してポリサーが設定されているときだけ行われる。
■ CoS値の書き換え
リマーキングの後、送信キューの割り当て前に行われるQoS処理。トラフィッククラスに属するパケットの外部CoS値、内部CoS値を書き換えることで、送信時に任意のCoS値をセットしたり、使用する送信キューを変更したりする。書き換え対象は、内部CoS値だけ、外部CoS値だけ、内部CoS値と外部CoS値の両方の3つから選択できる。
■ 送信キュー
本製品のスイッチポートは、それぞれ8レベルの送信キュー（キュー番号0～7）を備えている。各キューに対しては、送信スケジューリング方式（PQ、WRR）、WRR時の重み付け値などを設定できる。PQ使用時は、番号の大きいキューほど優先度が高くなる。パケットをどの送信キューに格納するかは、内部CoS値をキーとしてcos-queueマップ（後述）を参照することにより決定する。
■ 送信キュー割り当て
出力ポートの決定後、最初に行われるQoS処理。内部CoS値をキーとしてcos-queueマップを参照し、該当パケットの格納先送信キューを決定する。リマーキングで明示的に内部CoS値を割り当てなかった場合は、受信時のCoS値が内部CoS値になる（タグなしパケットはCoS値「0」扱い）。なお、本製品のQoS機能では、割り当てる送信キューを直接指定することはできない。しかし、リマーキング時に任意の内部CoS値を割り当てることはできるので、これとcos-queueマップを利用して間接的に送信キューを割り当てることが可能。
■ cos-queueマップ
内部CoS値と送信キューの対応表。各CoS値（0～7）に対応する送信キュー番号（0～7）が格納されている。パケットに送信キューを割り当てるときに参照する。
■ 送信キュー管理
各種の転送判断や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マップ）と送信スケジューリング方式の設定だけを初期値から変更しています。

1. QoS機能を有効にします。
   QoS関連コマンドの多くは、QoS機能を有効にしておかないと実行できないので、最初にmls qos enableコマンドを実行してQoS機能を有効化しておいてください。

       awplus(config)# mls qos enable ↓

2. cos-queueマップを編集して、パケットのキュー割り当てを変更します。これには、mls qos map cos-queueコマンドを使います。
   ここでは、受信したパケットのCoS値0～7に対して、送信キュー2, 2, 3, 3, 4, 5, 6, 7を割り当てるよう設定します。

       awplus(config)# mls qos map cos-queue 0 to 2 ↓
       awplus(config)# mls qos map cos-queue 1 to 2 ↓
       awplus(config)# mls qos map cos-queue 2 to 3 ↓
       awplus(config)# mls qos map cos-queue 3 to 3 ↓
       awplus(config)# mls qos map cos-queue 4 to 4 ↓
       awplus(config)# mls qos map cos-queue 5 to 5 ↓
       awplus(config)# mls qos map cos-queue 6 to 6 ↓
       awplus(config)# mls qos map cos-queue 7 to 7 ↓

   > Note

   > > タグなしパケットはCoS値「0」と見なされます。

3. 送信スケジューリングの設定を行います。
   初期設定はPQ（絶対優先スケジューリング）ですが、ここではポート1.0.1～1.0.24に対し、すべての送信キューでWRRスケジューリングを用いるよう設定します。各キューからの送信比率は、上位キューから10:10:5:5:2:2:1:1とします。

       awplus(config)# interface port1.0.1-1.0.24 ↓
       awplus(config-if)# wrr-queue weight 10 queues 7 6 ↓
       awplus(config-if)# wrr-queue weight 5 queues 5 4 ↓
       awplus(config-if)# wrr-queue weight 2 queues 3 2 ↓
       awplus(config-if)# wrr-queue weight 1 queues 1 0 ↓

設定は以上です。

### ポリシーマップによるQoS設定例

ポリシーマップを利用したQoSの設定は、ポリシーマップを作成し、受信スイッチポートに適用することで行います。
次にポリシーマップを利用したQoSの基本的な設定手順例を示します。

1. QoS機能を有効にします。
   QoS関連コマンドの多くは、QoS機能を有効にしておかないと実行できないので、最初にmls qos enableコマンドを実行してQoS機能を有効化しておいてください。

       awplus(config)# mls qos enable ↓

2. 3台のホストからのトラフィックを識別するため、3つのハードウェアIPアクセスリストを作成します。これにはaccess-list(hardware ip)コマンドを使います。QoS処理を適用するトラフィックに対しては、通常permitアクションを指定してください。

       awplus(config)# access-list 3001 permit ip 192.168.1.1/32 any ↓
       awplus(config)# access-list 3002 permit ip 192.168.1.2/32 any ↓
       awplus(config)# access-list 3003 permit ip 192.168.1.3/32 any ↓

   > Note

   > > ハードウェアアクセスリストの概要と作成方法については、「トラフィック制御」の「アクセスリスト」をご覧ください。

3. クラスマップを作成して、各ホストからのパケットをそれぞれ個別のトラフィッククラスに分類できるようにします。クラスマップの作成はclass-mapコマンドで行います。class-mapコマンドでクラスマップ名を指定するとクラスマップモードに移動するので、同モードの各コマンドを使って分類条件を指定してください。ここでは、match access-groupコマンドを使って、ハードウェアアクセスリストの条件に合致したパケットを該当トラフィッククラスに分類するよう設定しています。

       awplus(config)# class-map host1 ↓
       awplus(config-cmap)# match access-group 3001 ↓
       awplus(config-cmap)# exit ↓
       awplus(config)# class-map host2 ↓
       awplus(config-cmap)# match access-group 3002 ↓
       awplus(config-cmap)# exit ↓
       awplus(config)# class-map host3 ↓
       awplus(config-cmap)# match access-group 3003 ↓
       awplus(config-cmap)# exit ↓

4. ポリシーマップを作成します。最初にpolicy-mapコマンドでポリシーマップの名前を指定して、ポリシーマップモードに移動します。

       awplus(config)# policy-map three-hosts ↓
       awplus(config-pmap)#

5. ポリシーマップにクラスマップを関連付け、該当クラスマップによって識別されたトラフィッククラスに対する処理を指定します。
   クラスマップの関連付けはclassコマンドで行います。同コマンドを実行すると、ポリシーマップ・クラスモードに移動するので、同モードのコマンドを使って処理内容を指定します。
   ここでは、トラフィッククラスhost1には最低50Mbpsの帯域を保証するよう設定します。また、トラフィッククラスhost1、host2、host3には、それぞれ80Mbps、30Mbps、20Mbpsの帯域制限を設けます。帯域制限を機能させるため、action drop-redを指定し、最大トラフィックレート（＋バーストサイズ許容量）を上回るレートで受信したパケットをキュー格納前に無条件で破棄するよう設定しています。

       awplus(config-pmap)# class host1 ↓
       awplus(config-pmap-c)# police twin-rate 50000 80000 10000 10000 action drop-red ↓
       awplus(config-pmap-c)# exit ↓
       awplus(config-pmap)# class host2 ↓
       awplus(config-pmap-c)# police single-rate 30000 10000 10000 action drop-red ↓
       awplus(config-pmap-c)# exit ↓
       awplus(config-pmap)# class host3 ↓
       awplus(config-pmap-c)# police single-rate 20000 10000 10000 action drop-red ↓
       awplus(config-pmap-c)# exit ↓

6. ポリシーマップthree-hostsを受信スイッチポートであるポート1.0.1～1.0.3に適用します。

       awplus(config)# interface port1.0.1-1.0.3 ↓
       awplus(config-if)# service-policy input three-hosts ↓
       awplus(config-if)# exit ↓

設定は以上です。

## ポリシーマップとクラスマップ

次に、QoS機能の中核的設定要素であるポリシーマップと、ポリシーマップの骨格を形成するクラスマップについて説明するとともに、それぞれの設定方法を解説します。

### クラスマップ

クラスマップは、パケットをトラフィッククラスに分類するための条件を定義する仕組みです。1つのクラスマップは、1つのトラフィッククラスの分類条件を定義します。
クラスマップの全体構造は次のとおりです。

- クラスマップ
  - match節（分類条件）
  - アクション（許可・破棄など）

各クラスマップは、1つ以上のmatch節と、1つのアクションで構成されます。

- match節は、パケットと照合するための条件です。match節が複数ある場合は、すべてのmatch節にマッチする必要があります（AND検索）
- アクションは、マッチしたパケットを許可（permit）するか破棄（deny）するかの指定です。許可されたパケットに対してはさまざまなQoS処理を適用できます（具体的な処理内容はポリシーマップで指定します）

パケットの分類条件として使用できる情報には次のものがあります。

- ハードウェアMACアクセスリストで識別できる諸条件（ハードウェアIPv6アクセスリストとは併用不可）
  - 送信元・宛先MACアドレス
- ハードウェア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値
- IP/IPv6ヘッダーのDSCP値（優先度値とは併用不可）
- IP/IPv6ヘッダーの優先度値（DSCP値とは併用不可）
- TCPヘッダーの制御フラグ値

また、クラスマップのアクションは次のようにして決まります。

1. match節にmatch access-group節が含まれている場合、match access-group節で指定したアクセスリストのアクションがクラスマップのアクションとなります
2. match節にmatch access-group節が含まれていない場合、クラスマップのアクションはpermitとなります

■ クラスマップの作成手順は次のとおりです。

1. 分類条件として、ハードウェアIPアクセスリストやハードウェアMACアクセスリストで識別するものを使用する場合は、適宜ハードウェアアクセスリストを定義します。

       awplus(config)# access-list 3021 permit tcp 192.168.20.0/24 192.168.10.0/24 ↓

   > Note

   > > ハードウェアアクセスリストの概要と作成方法については、「トラフィック制御」の「アクセスリスト」をご覧ください。

2. グローバルコンフィグモードのclass-mapコマンドでクラスマップ名を指定し、クラスマップモードに入ります。

       awplus(config)# class-map tcp20to10 ↓

3. クラスマップモードには、名前がmatch～で始まるコマンドが多数あります。これらはクラスマップに分類条件（match節）を追加するためのコマンドです。これらのコマンドを実行して、必要な分類条件をすべて指定してください。分類条件を複数指定した場合、該当クラスマップにマッチするにはすべての条件を満たす必要があります。

       awplus(config-cmap)# match access-group 3021 ↓

4. 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アクションのクラスマップを用いることで、パケットフィルタリングを行うこともできます。
■ ポリシーマップの作成手順は次のとおりです。必要なクラスマップの作成は済んでいるものとします。

1. グローバルコンフィグモードのpolicy-mapコマンドでポリシーマップ名を指定し、ポリシーマップモードに入ります。

       awplus(config)# policy-map test ↓

2. ポリシーマップモードのclassコマンドでクラスマップ名を指定し、ポリシーマップ・クラスモードに移動します。

       awplus(config-pmap)# class downWeb ↓

3. ポリシーマップ・クラスモードの各コマンドを使って、クラスマップによって識別されたトラフィッククラスに対する処理内容（プレマーキング、メータリング、ポリシング/リマーキング、CoS値書き換え）を指定します。

       awplus(config-pmap-c)# police single-rate 50000 10240 10240 action drop-red ↓
       awplus(config-pmap-c)# exit ↓

4. トラフィッククラスの数だけ手順2～3を繰り返します。
5. どのクラスマップにもマッチしなかったパケットは、暗黙のうちに存在するデフォルトクラスマップによって、デフォルトトラフィッククラスに分類されます。デフォルトトラフィッククラスに対する処理内容（プレマーキング、メータリング、ポリシング/リマーキング、CoS値書き換え）を指定するには、classコマンドにキーワードdefaultを指定してポリシーマップ・クラスモードに入り、通常のトラフィッククラスと同様の設定を行います。

       awplus(config-pmap)# class default ↓
       awplus(config-pmap-c)# police single-rate 10000 10240 10240 action drop-red ↓
       awplus(config-pmap-c)# exit ↓

   > Note

   > > デフォルトクラスマップのアクションは、ポリシーマップモードのdefault-actionコマンドで変更できます。

6. exitコマンドでポリシーマップモードを抜ければ、該当ポリシーマップの設定は完了です。

       awplus(config-pmap)# exit ↓

■ ポリシーマップをスイッチポートに適用するには、インターフェースモードのservice-policy inputコマンドを使います。これにより、該当ポートで受信したパケットに対してポリシーマップで定義したQoS処理が適用されます。

    awplus(config)# interface port1.0.1 ↓
    awplus(config-if)# service-policy input test ↓

■ トランクグループにポリシーマップを適用するときは、次の点にご注意ください。

> Note

> > 複数のスイッチチップ（インスタンス）にまたがるトランクグループ（スタティックチャンネルグループ、LACPチャンネルグループとも）ではメータリングが動作しません。複数インスタンスにまたがるトランクグループに対しては、メータリング（ポリサー）設定（police single-rateコマンド、police twin-rateコマンド）を含むポリシーマップを適用しないでください（適用してもメータリングが動作しません）。

- スタティックチャンネルグループ（手動設定のトランクグループ）の場合は、インターフェース名「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 ↓

      POLICY-MAP-NAME: test
        State: attached
        Default class-map action: permit

        CLASS-MAP-NAME: default
          Policer single-rate action drop-red:
           average rate(9984 kbps)  minimum burst(10240 B) maximum burst(10240 B)

        CLASS-MAP-NAME: tcp20to10
          QOS-ACCESS-LIST-NAME: 3021
          Policer single-rate action drop-red:
           average rate(20032 kbps)  minimum burst(10240 B) maximum burst(10240 B)

■ スイッチポートに適用されているポリシーマップの情報はshow mls qos interfaceコマンドで確認できます。

    awplus# show mls qos interface port1.0.1 ↓

    Interface: port1.0.1

      INPUT-POLICY-MAP-NAME: test
        CLASS-MAP-NAME: default
          Policer single-rate action drop-red:
           average rate(9984 kbps)  minimum burst(10240 B) maximum burst(10240 B)
        CLASS-MAP-NAME: tcp20to10
          QOS-ACCESS-LIST-NAME: 3021
          Policer single-rate action drop-red:
           average rate(20032 kbps)  minimum burst(10240 B) maximum burst(10240 B)
    ...

## 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 | ポリシング/リマーキング | トラフィッククラスでポリサーの設定がなされている場合、ポリサーのアクションがリマーキングなら、帯域クラスをキーにremarkマップを参照して受信パケットのDSCP値と帯域クラスを書き換える。ポリサーのアクションがポリシングの場合は、帯域クラスRedに分類されたパケット（帯域超過パケット）を破棄する
6 | CoS値書き換え | remark new-cosコマンドの設定にしたがい、内部・外部CoS値を書き換える。内部CoS値は送信キューの決定にのみ使われる。外部CoS値はタグ付きポートからパケットを出力するとき、パケットのCoSフィールドに設定される
7 | IPルーティング | 受信パケットがIPルーティングの対象なら、IP転送表を参照してネクストホップを決定し、出力ポートを決定する。
送信時のQoS処理（すべてのパケットが対象）
8 | 送信キュー決定 | パケットの内部CoS値（0～7）をキーとしてcos-queueマップを参照し、パケットに割り当てる送信キュー（0～7）を決定する。リマーキングで内部CoS値の割り当てや変更をしていない場合、パケット受信時のCoS値がそのまま内部CoS値となる（タグなしパケットはCoS値「0」と見なす）
9 | 送信キューへの格納 | ここまでの処理で決定した送信キューにパケットを格納する。キューが混雑している場合は、テールドロップ方式により既定の最大キュー長を超えたパケットを破棄する
10 | 送信キューからの取り出し | 設定されたスケジューリング方式にしたがい、送信キューからパケットを出力する。PQ（絶対優先）、WRR（重み付きラウンドロビン）のいずれか、あるいは、両者の併用も可能。なお、送信キューや送信ポートに送信レートの上限値が設定されている場合は、指定されたレートでパケットを送信するシェーピング動作を行う
送信スイッチポート
11 | 送信 | スイッチポートからパケットを送信

以下では、各ステップにおける処理内容と設定方法について詳しく解説します。

### ポリシーマップによるQoS処理

受信ポートにポリシーマップが適用されている場合は、受信ポートにおいて、ポリシーマップに基づいた一連のQoS処理（トラフィック分類、プレマーキング、メータリング、ポリシング、リマーキング、CoS値書き換え）が行われます。
受信ポートにポリシーマップが適用されていない場合、これらの処理は行われず、送信時のQoS処理に移ります。

#### トラフィック分類

ポリシーマップの処理で最初に行われるのは、クラスマップによってパケットをトラフィッククラスに分類することです。
受信パケットとクラスマップの照合は、ポリシーマップにクラスマップを追加した順序で行われます。
トラフィック分類後のポリシーマップ処理（プレマーキング、メータリング、ポリシング、リマーキング、CoS値書き換え）は、トラフィッククラス単位で行われます。
なお、クラスマップとポリシーマップの作成、および、クラスマップのポリシーマップへの関連付けについては、本解説編の「ポリシーマップとクラスマップ」をご覧ください。

#### プレマーキング

プレマーキングは、クラスマップによってトラフィッククラスに分類されたパケットに対して行われる最初のQoS処理です。
本製品のQoS機能では、各パケットは次の3つの属性を持ちます。これらの属性は、QoS処理の各段階において、割り当てられたり、変更されたり、参照されたりします。

- CoS（0～7）
- DSCP（0～63）
- 帯域クラス（Green、Yellow、Red）

プレマーキングでは、これらの3属性（ここでのCoSは「外部CoS値」であることに注意）を書き換える（変更する）ことができます。書き換えは、パケットのDSCP値をキーにpremark-dscpマップを参照することで行います。

- premark-dscpマップは、DSCP値をキーとして書き換え後の各属性値を調べるための表で、mls qos map premark-dscpコマンドで内容を編集できます。
  たとえば、DSCP値1を持つパケットに外部CoS値7を割り当て、DSCP値2を持つパケットに外部CoS値4を割り当てるには、次のようにします。

      awplus(config)# mls qos map premark-dscp 1 to new-cos 7 ↓
      awplus(config)# mls qos map premark-dscp 2 to new-cos 4 ↓

- 対象ポリシーマップでプレマーキングを行うには、ポリシーマップモードのtrust dscpコマンドを使います。
  たとえば、ポリシーマップexampleにおいて、premark-dscpマップによるプレマーキングを行うよう設定するには、次のようにします。

      awplus(config)# policy-map example ↓
      awplus(config-pmap)# trust 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を破棄してトラフィッククラスの使用帯域を一定値までに制限する動作です。また、リマーキングは帯域クラスの情報を用いて、パケットのQoS 4属性を再度変更する動作です。
■ トラフィッククラスに対してメータリングを行うには、トラフィッククラスの設定時にポリサーという設定要素を指定する必要があります。
ポリサーは、トラフィッククラスの帯域基準値（トラフィックレートとバーストサイズ）と帯域クラス分類後の処理を指定するための設定要素で、次の2種類があります。

- シングルレート（トラフィックレートは最大値のみ指定可）
- ツインレート（トラフィックレートは最小値と最大値を指定可）

以下、それぞれの設定方法について説明します。

> Note

> > 複数のスイッチチップ（インスタンス）にまたがるトランクグループ（スタティックチャンネルグループ、LACPチャンネルグループとも）ではメータリングが機能しません。複数インスタンスにまたがるトランクグループに対しては、メータリング（ポリサー）設定（police single-rateコマンド、police twin-rateコマンド）を含むポリシーマップを適用しないでください（適用してもメータリングが動作しません）。

■ 個々のトラフィッククラスに対してメータリングを行いたい場合は、各トラフィッククラスにポリサーを適用します。

- トラフィッククラスにシングルレートポリサーを適用するには、ポリシーマップ・クラスモードのpolice single-rateコマンドを使います。
  たとえば、クラスマップtraffic1によって識別されたトラフィッククラスに対し、帯域基準値として最大トラフィックレート20000Kbps、最小バーストサイズ10240Byte、最大バーストサイズ10240Byteを設定し、帯域クラス分類後の処理としてポリシングを指定するには、次のようにします。

      awplus(config)# policy-map example ↓
      awplus(config-pmap)# class traffic1 ↓
      awplus(config-pmap-c)# police single-rate 20000 10240 10240 action drop-red ↓

- トラフィッククラスにツインレートポリサーを適用するには、ポリシーマップ・クラスモードのpolice twin-rateコマンドを使います。
  たとえば、クラスマップtraffic2によって識別されたトラフィッククラスに対し、帯域基準値として最小トラフィックレート30000Kbps、最大トラフィックレート80000Kbps、最小バーストサイズ10240Byte、最大バーストサイズ10240Byteを設定し、帯域クラス分類後の処理としてポリシングを指定するには、次のようにします。

      awplus(config)# policy-map example ↓
      awplus(config-pmap)# class traffic2 ↓
      awplus(config-pmap-c)# police twin-rate 30000 80000 10240 10240 action drop-red ↓

■ ポリサーの設定時には、actionパラメーターで帯域クラス分類後の処理（アクション）を指定する必要があります。アクションの選択肢は次の2つです。

- drop-red（ポリシング）
  帯域クラスRedに分類されたパケット（帯域超過パケット）を破棄することで、該当トラフィッククラスの帯域使用量を最大トラフィックレート＋許容バーストサイズ以下に抑える
- remark-transmit（リマーキング）
  帯域クラスをキーとしてremarkマップを検索し、パケットのDSCP値と帯域クラス値を変更する。これにより、キューイング時の動作に影響を与えたり、後続の機器に情報を提供したりする

リマーキングの設定方法については後で説明します。
■ メータリングの設定は、show policy-mapコマンドで確認できます。

    awplus# show policy-map ↓

      POLICY-MAP-NAME: example
        State: detached
        Default class-map action: permit

        CLASS-MAP-NAME: default

        CLASS-MAP-NAME: traffic1
          Policer single-rate action drop-red:
           average rate(20032 kbps)  minimum burst(10240 B) maximum burst(10240 B)

        CLASS-MAP-NAME: traffic2
          Policer twin-rate action drop-red:
           minimum rate(30016 kbps) maximum rate(80000 kbps) minimum burst(10240 B)
    maximum burst(10240 B)

##### シングルレートポリサー

シングルレートポリサーでは、1つのトラフィックレート（MAXRATE）と2つのバーストサイズ（MINBURST、MAXBURST）、あわせて3つの帯域基準値に基づいて、トラフィッククラス内の各パケットを帯域クラスに分類します。
シングルレートポリサーはおもに、トラフィッククラスが使用できる最大帯域を一定値までに制限するときに使用します。

表 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以内に抑えることができます。これは、最大帯域幅を制限する設定となります。

##### ツインレートポリサー

ツインレートポリサーでは、2つのトラフィックレート（MINRATE、MAXRATE）と2つのバーストサイズ（MINBURST、MAXBURST）、あわせて4つの帯域基準値に基づいて、トラフィッククラス内の各パケットを帯域クラスに分類します。
ツインレートポリサーはおもに、トラフィッククラスに一定の帯域を保証しつつ、なおかつ、使用できる最大帯域を一定値までに制限するときに使用します。

表 4：ツインレートポリサーの判定基準
帯域クラス | 帯域使用量 | 判定基準
Green | 少ない | バースト量(MIN) <= MINBURST
Yellow | 中程度 | バースト量(MIN) > MINBURST かつ バースト量(MAX) <= MAXBURST
Red | 使いすぎ | バースト量(MAX) > MAXBURST

ここでのバースト量(MIN)とは、トラフィックの流入量がMINRATEを超えた場合に、MINRATEの超過分としてカウントされるデータ量を示しています。トラフィック量がMINRATE以下であれば、バースト量(MIN)は0になります。
同様に、バースト量(MAX)とは、トラフィックの流入量がMAXRATEを超えた場合に、MAXRATEの超過分としてカウントされるデータ量を示しています。トラフィック量がMAXRATE以下であれば、バースト量(MAX)は0になります。
トラフィックが瞬間的にMINRATEをオーバーしても、超過している時間が短ければ、バースト量(MIN)はMINBURST以内にとどまり、すべてのパケットが帯域クラスGreenとして扱われることになります。
これに対し、MINRATEをオーバーしている時間が長くなると、バースト量(MIN)がMINBURSTを超えることがあります。この場合、MINBURSTを超えてカウントされたパケットには、帯域クラスYellowが割り当てられます。
さらにトラフィックが増えると、今度はトラフィック流入量がMAXRATEを超過することがありますが、その時間が長引きバースト量(MAX)がMAXBURSTを超えると、超過分のパケットには帯域クラスRedが割り当てられます。
ツインレートポリサー使用時は、ポリシング設定により帯域クラスRedのパケットを無条件で破棄することで、該当トラフィッククラスの帯域使用量をMAXRATE + MAXBURST以内に抑えることができます。これは、使用可能な最大帯域を制限する設定となります。
また、送信キュー管理機能（テールドロップ）においては、帯域クラスRedとYellowを優先的に破棄することで、帯域クラスGreenのパケットを確実に送信できるようにしています。これは、最小帯域を保証する動作となります。

#### リマーキング

リマーキングは、メータリング（帯域クラスへの分類）後に行われるQoS処理の1つです。
リマーキングでは、メータリングによって決定された帯域クラスの情報を利用して、パケットのDSCP値と帯域クラスを再度変更します。これにより、キュー格納時の動作に影響を与えたり、後続の機器にトラフィッククラスの情報を提供したりします。リマーキング処理は、remarkマップと呼ぶ書き換え対応表にしたがって行われます。
リマーキングが行われるのは、ポリサーの設定でremark-transmitアクションを指定した場合です。一方、ポリサーでdrop-redアクションを指定した場合はポリシング（帯域クラスRedに分類されたパケットの破棄）が行われます。
■ 特定のトラフィッククラスに属するパケットに対してリマーキングを行うには、該当トラフィッククラスにいずれかの種類のポリサーを設定し、帯域クラス分類後の処理（アクション）としてremark-transmitを指定します。
たとえば、クラスマップtraffic7によって識別されたトラフィッククラスに対してリマーキングを行うよう設定するには、次のようにします。

    awplus(config)# policy-map example ↓
    awplus(config-pmap)# class traffic7 ↓
    awplus(config-pmap-c)# police single-rate 70000 10240 10240 action remark-transmit ↓

■ リマーキング処理は、remarkマップという書き換え対応表に基づいて行われます。remarkマップは、帯域クラスをキーとして書き換え後のDSCP値と帯域クラス値を調べるための表で、remark-mapコマンドで内容を編集できます。
たとえば、帯域クラスがGreenのパケットにDSCP値7を、帯域クラスがYellowのパケットにDSCP値4を、帯域クラスがRedのパケットにDSCP値0を割り当てるには、次のようにします。

    awplus(config-pmap-c)# remark-map bandwidth-class green to new-dscp 7 ↓
    awplus(config-pmap-c)# remark-map bandwidth-class yellow to new-dscp 4 ↓
    awplus(config-pmap-c)# remark-map bandwidth-class red to new-dscp 1 ↓

■ 各トラフィッククラスのリマーキング設定は、show policy-mapコマンドで確認できます。ポリサーのアクション（action）が「remark-transmit」になっているトラフィッククラスでは、リマーキングが行われます。また、remarkマップの内容も表示されます。

    awplus# show policy-map example ↓

      POLICY-MAP-NAME: example
        State: detached
        Default class-map action: permit

        CLASS-MAP-NAME: default

        CLASS-MAP-NAME: traffic1
          Policer single-rate action drop-red:
           average rate(20032 kbps)  minimum burst(10240 B) maximum burst(10240 B)

        ...

        CLASS-MAP-NAME: traffic7
          QOS-ACCESS-LIST-NAME: 3002
          Policer single-rate action remark-transmit:
           average rate(70016 kbps)  minimum burst(10240 B) maximum burst(10240 B)
          Remark Map:
                             Green   Yellow   Red

                       DSCP    7       4       1
            Bandwidth Class    -       -       -

#### CoS値の書き換え

CoS値の書き換えは、メータリングの一環として行われるリマーキングの後、送信キューの割り当て前に行われるQoS処理です。
トラフィッククラスに属するパケットの外部CoS値、内部CoS値を書き換えることで、送信時に任意のCoS値をセットしたり、使用する送信キューを変更したりすることが可能です。
CoS値書き換えの設定はremark new-cosコマンドで行います。コマンド名からはリマーキングの一部であるように感じられますが、実際にはリマーキングとは独立した処理です。そのため、ポリサーの設定をしなくてもCoS値の書き換えは行えます。

> Note

> > remark new-cosコマンドでは、本製品（CPU）宛てのパケットを格納するCPU宛ての送信キューを指定することも可能です。これには、同コマンドの new-cpu-queue パラメーターを使います。

■ 特定のトラフィッククラスに属するパケットに対してCoS値の書き換えを行うには、該当トラフィッククラスを対象とするポリシーマップ・クラスモードにおいて、remark new-cosコマンドを実行し、書き換え後のCoS値を指定します。
省略可能なキーワードinternal、external、bothを指定することで、それぞれ「内部CoS値のみ書き換え」、「外部CoS値のみ書き換え」、「内部・外部CoS値とも書き換え」の指示が可能です（キーワード省略時はbothと見なされる）。

- クラスマップhighprioによって識別されたトラフィッククラスのパケットに対し、内部CoS値だけを「7」に書き換えるには、次のようにします。

      awplus(config)# policy-map example2 ↓
      awplus(config-pmap)# class highprio ↓
      awplus(config-pmap-c)# remark new-cos 7 internal ↓

  これにより、該当パケットはcos-queueマップ（show mls qos maps cos-queue）のCoS=7インデックスで指定される送信キューに格納されます（cos-queueマップの初期設定では送信キュー「7」）。
  なお、remark new-cosコマンドでinternalを指定した場合は内部CoS値だけを書き換えるため、タグ付きポートから送信されるときにパケットにセットされる外部CoS値は受信時のCoS値、あるいは、プレマーキング時に書き換えたCoS値となります。
- クラスマップmidprioによって識別されたトラフィッククラスのパケットに対し、内部CoS値、外部CoS値の両方を「4」に書き換えるには、次のようにします。

      awplus(config)# policy-map example2 ↓
      awplus(config-pmap)# class midprio ↓
      awplus(config-pmap-c)# remark new-cos 4 both ↓

  これにより、該当パケットはcos-queueマップ（show mls qos maps cos-queue）のCoS=4インデックスで指定される送信キューに格納されます（cos-queueマップの初期設定では送信キュー「4」）。また、タグ付きポートからの送信時にはCoSフィールドに「4」がセットされます。
  なお、remark new-cosコマンドでキーワードinternal、external、bothのいずれも指定しなかった場合はbothを指定したものと見なされます。したがって、先ほどのコマンドは次のように実行しても同じです。

      awplus(config-pmap-c)# remark new-cos 4 ↓

- クラスマップmarkoneによって識別されたトラフィッククラスのパケットに対し、外部CoS値だけを「1」に書き換えるには、次のようにします。

      awplus(config)# policy-map example2 ↓
      awplus(config-pmap)# class markone ↓
      awplus(config-pmap-c)# remark new-cos 1 external ↓

  これにより、該当パケットがタグ付きポートから送信されるときはCoSフィールドに「1」がセットされます。
  なお、remark new-cosコマンドでexternalを指定した場合は外部CoS値だけを書き換えるため、送信キューの選択時にcos-queueマップを参照するときは、受信時のCoS値が使用されます。

■ CoS値書き換えの設定は、show policy-mapコマンドで確認できます。「Remark CoS-Queue Map Index to X」は内部CoS値だけをXに書き換える（internal設定）、「Remark CoS and CoS-Queue Map Index to X」は内部CoS値と外部CoS値の両方をXに書き換える（both設定）、「Remark CoS to X」は外部CoS値だけをXに書き換える（external設定）の意味です。

> Note

> > 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: highprio
          Remark CoS-Queue Map Index to 7

        CLASS-MAP-NAME: midprio
          Remark CoS and CoS-Queue Map Index to 4

        CLASS-MAP-NAME: markone
          Remark Cos to 1

### 送信時のQoS処理

各種の転送判断（L2スイッチング処理やIPルーティング処理）や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, 3, 4, 5を割り当てるには次のように設定します。

    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 3 ↓
    awplus(config)# mls qos map cos-queue 6 to 4 ↓
    awplus(config)# mls qos map cos-queue 7 to 5 ↓

■ 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:   2   2   3   3   4   5   6   7

#### キューへの格納

送信ポートに到着したパケットは、ここまでの処理で決定された送信キューに格納されますが、格納先のキューが混雑していた場合は、テールドロップ方式によりパケットを破棄し、キューの混雑を解消します。
テールドロップ方式は、既定の最大キュー長を超過したパケットを無条件に廃棄するシンプルなキュー管理方式です。本製品では次のように帯域クラスごとに異なる最大キュー長が設定されています（設定変更は不可）。

- 帯域クラスGreen：利用可能バッファーの100%
- 帯域クラスYellow：利用可能バッファーの80%
- 帯域クラスRed：利用可能バッファーの60%

#### キューからの送信

##### 送信スケジューリング

送信キューに格納されたパケットをどのような順序で出力するかは、キューごとに設定した送信スケジューリング方式によって決まります。
本製品は以下の2つのスケジューリング方式をサポートしています。初期状態では、すべての送信キューでPQ方式を使用するよう設定されています。

- PQ方式（絶対優先スケジューリング）
  上位キューが空になるまで下位のキューからパケットを送信しない。
- WRR方式（重み付きラウンドロビンスケジューリング）
  各キュー間の送信比率を設定し、その比率にしたがってパケットを送信する。

送信スイッチポートにおいては、これらの各方式を組み合わせて使うこともできます。具体的には、次の組み合わせが可能です。

- PQのみ
- WRRのみ
- PQ + WRR（PQ方式のキューが空のときだけ、WRR方式のキューから送信する）

■ 送信ポートで使用するスケジューリング方式、および、WRRにおけるキューの重み付け値（送信比率）は、インターフェースモードのpriority-queueコマンド、wrr-queue weightコマンドで設定します。

- 初期状態ではすべてのキューがPQ方式に設定されています。特定のキューでWRRを使用するよう設定するには、wrr-queue weightコマンドを使います。
  たとえば、ポート1.0.13のすべての送信キューでWRRを使用するよう設定するには、次のようにします。ここでは、キュー7～0からの送信比率を、10:10:5:5:2:2:1:1に設定しています。

      awplus(config)# interface port1.0.13 ↓
      awplus(config-if)# wrr-queue weight 10 queues 6 7 ↓
      awplus(config-if)# wrr-queue weight 5 queues 4 5 ↓
      awplus(config-if)# wrr-queue weight 2 queues 2 3 ↓
      awplus(config-if)# wrr-queue weight 1 queues 0 1 ↓

- さらに、同一スイッチポート上でPQとWRRを併用することもできます。

      awplus(config)# interface port1.0.15 ↓
      awplus(config-if)# priority-queue 7 ↓
      awplus(config-if)# wrr-queue weight 10 queues 6 ↓
      awplus(config-if)# wrr-queue weight 5 queues 4 5 ↓
      awplus(config-if)# wrr-queue weight 2 queues 2 3 ↓
      awplus(config-if)# wrr-queue weight 1 queues 0 1 ↓

  この例では、キュー7でPQを使用し、キュー6～0ではWRRを使用するよう設定しています。
  キュー7はPQなので、キュー7に割り当てられたパケットは、他のキューに割り当てられたどのパケットよりも優先的に送信されます。残りのキュー6～0からは、キュー7が空のときだけ、10:5:5:2:2:1:1の比率でパケットが順番に送信されます。

■ 送信キューのスケジューリング方式、WRR使用時の重み付け（送信比率）設定は、show mls qos interfaceコマンドで確認できます。スケジューリング方式は「Scheduler」欄を、WRR使用時の重み付け値は「Weight」欄をご覧ください。

    awplus# show mls qos interface port1.0.15 ↓

    Interface: port1.0.15

      Number of egress queues: 8

      Egress Queue:         0
        Status:             Enabled
        Scheduler:          Weighted Round-Robin
        Weight:             1
        Queue Limit:        12%
        Egress Rate Limit:  0 Kb

      Egress Queue:         1
        Status:             Enabled
        Scheduler:          Weighted Round-Robin
        Weight:             1
        Queue Limit:        12%
        Egress Rate Limit:  0 Kb

      Egress Queue:         2
        Status:             Enabled
        Scheduler:          Weighted Round-Robin
        Weight:             2
        Queue Limit:        12%
        Egress Rate Limit:  0 Kb

      Egress Queue:         3
        Status:             Enabled
        Scheduler:          Weighted Round-Robin
        Weight:             2
        Queue Limit:        12%
        Egress Rate Limit:  0 Kb
      Egress Queue:         4
        Status:             Enabled
        Scheduler:          Weighted Round-Robin
        Weight:             5
        Queue Limit:        12%
        Egress Rate Limit:  0 Kb

      Egress Queue:         5
        Status:             Enabled
        Scheduler:          Weighted Round-Robin
        Weight:             5
        Queue Limit:        12%
        Egress Rate Limit:  0 Kb

      Egress Queue:         6
        Status:             Enabled
        Scheduler:          Weighted Round-Robin
        Weight:             10
        Queue Limit:        12%
        Egress Rate Limit:  0 Kb

      Egress Queue:         7
        Status:             Enabled
        Scheduler:          Strict Priority
        Queue Limit:        12%
        Egress Rate Limit:  0 Kb

##### シェーピング

パケット送信時の速度（送信間隔）を調整することで、ネットワークに流れ込むトラフィックを一定のレートにならす機能をシェーピングと呼びます。
本製品では、送信キューやスイッチポートに対して、送信レートの上限値を設定することで、シェーピングを行うことが可能です。
■ キューに対して送信レートの上限値を設定するには、インターフェースモードのwrr-queue egress-rate-limitコマンドを使います。
たとえば、ポート1.0.12の送信キュー0～2の送信レートをそれぞれ5Mbpsに制限するには、次のようにします。帯域制限の粒度は651Kbpsなので、指定値が651Kbpsの倍数（5208Kbps = 651Kbps x 8）に丸められている点に注意してください。

    awplus(config)# interface port1.0.12 ↓
    awplus(config-if)# wrr-queue egress-rate-limit 5m queues 0 1 2 ↓
    % Egress rate limit of port1.0.12 has been set to 5208 Kb

■ スイッチポートに対して送信レートの上限値を設定するには、インターフェースモードのegress-rate-limitコマンドを使います。
たとえば、ポート1.0.13の送信レートを50Mbpsに制限するには、次のように指定します。帯域制限の粒度は64Kbpsなので、指定値が64Kbpsの倍数（50176Kbps = 64Kbps x 784）に丸められている点に注意してください。

    awplus(config)# interface port1.0.13 ↓
    awplus(config-if)# egress-rate-limit 50m ↓
    % Egress rate limit has been set to 50176 Kb

■ キューごとの送信レート上限値は、show mls qos interfaceコマンドで確認できます。「Egress Rate Limit」欄をご覧ください。

    awplus# show mls qos interface port1.0.12 ↓

    Interface: port1.0.12

      Number of egress queues: 8

      Egress Queue:         0
        Status:             Enabled
        Scheduler:          Weighted Round-Robin
        Weight:             1
        Queue Limit:        12%
        Egress Rate Limit:  5208 Kb

      Egress Queue:         1
        Status:             Enabled
        Scheduler:          Weighted Round-Robin
        Weight:             1
        Queue Limit:        12%
        Egress Rate Limit:  5208 Kb

      Egress Queue:         2
        Status:             Enabled
        Scheduler:          Weighted Round-Robin
        Weight:             2
        Queue Limit:        12%
        Egress Rate Limit:  5208 Kb

      Egress Queue:         3
        Status:             Enabled
        Scheduler:          Weighted Round-Robin
        Weight:             2
        Queue Limit:        12%
        Egress Rate Limit:  0 Kb
    ...

■ スイッチポートの送信レート上限値は、show interfaceコマンドで確認できます。「Egress Rate Limit」欄をご覧ください。

    awplus> show interface port1.0.13 ↓
    Interface port1.0.13
      Scope: both
      Link is UP, administrative state is UP
      Thrash-limiting
        Status Not Detected, Action learn-disable, Timeout 1(s)
      Hardware is Ethernet, address is 0000.cd24.0367 (bia 0000.cd24.0367)
      index 5013 metric 1 mtu 1500
      duplex-full speed 100 polarity auto
      <UP,BROADCAST,RUNNING,MULTICAST>
      VRF Binding: Not bound
      Egress Rate Limit 50176 Kb
        input packets 235512, bytes 16850873, dropped 0, multicast packets 12
        output packets 8746698, bytes 9367135608, multicast packets 2007 broadcast p
    ackets 11

### 設定例

QoSの各種処理を組み合わせた具体的な設定コマンド例をいくつか紹介します。

#### 特定のDSCP値を持つパケットを指定の送信キューに割り当てる

■ IPフォンなどが送出する DSCP値 40 のパケットを、内部CoS値 5に対応する送信キューに割り当てる設定
（内部CoS値と送信キューの対応（cos-queueマップ）は、mls qos map cos-queueコマンドで変更、show mls qos maps cos-queueコマンドで確認が可能です）

    mls qos enable

    class-map test1
     match dscp 40

    policy-map qos_test1
     class test1
      remark new-cos 5 internal

    interface port1.0.1-1.0.24
     service-policy input qos_test1

#### 特定IPアドレスからのパケットにDSCP値をセットし、指定の送信キューに割り当てる

■ 送信元IPアドレスが 192.168.2.2 のパケットにDSCP値 40 をセットし、内部CoS値 5に対応する送信キューに割り当てる設定
（内部CoS値と送信キューの対応（cos-queueマップ）は、mls qos map cos-queueコマンドで変更、show mls qos maps cos-queueコマンドで確認が可能です）

    mls qos enable
    access-list 3001 permit ip 192.168.2.2/32 any

    class-map test2
     match access-group 3001

    policy-map qos_test2
     class test2
      remark new-cos 5 internal
      remark-map to new-dscp 40
      police single-rate 64 16777216 16777216 action remark-transmit

    interface port1.0.1-1.0.24
     service-policy input qos_test2

## ポリシーマップのフィルタリング機能

ポリシーマップは、QoSだけでなくパケットフィルタリングにも使用できます（QoSとフィルタリングの併用も可能です）。
パケットフィルタリングは、インターフェースモードのaccess-groupコマンドを使ってスイッチポートにハードウェアアクセスリストを適用することでも実現できますが、ポリシーマップのほうが使用できる条件が多く、より柔軟なフィルタリングを行えます。

### 設定例

次にポリシーマップを利用したパケットフィルタリングの設定例を示します。
ここでは、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に接続されているものと仮定します。

1. QoS機能を有効にします。
   QoS関連コマンドの多くは、QoS機能を有効にしておかないと実行できないので、最初にmls qos enableコマンドを実行してQoS機能を有効化しておいてください。

       awplus(config)# mls qos enable ↓

2. 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 ↓

   > Note

   > > ハードウェアアクセスリストの概要と作成方法については、「トラフィック制御」の「アクセスリスト」をご覧ください。

3. 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 ↓

4. 2つのクラスマップを束ねるポリシーマップacl10を作成します。最初にpolicy-mapコマンドでポリシーマップの名前を指定します。これにより、ポリシーマップモードに移動します。

       awplus(config)# policy-map acl10 ↓
       awplus(config-pmap)#

5. ポリシーマップにクラスマップを関連付け、該当クラスマップによって識別されたトラフィッククラスに対する処理を指定します。ここでは、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 ↓

6. ポリシーマップ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宛て通信の負荷が非常に高い環境では、RIP、VRRP、ARPなどの制御パケットを適切に処理できず、これら制御プロトコルの動作に支障をきたす場合があります。
このような事態を避けるため、本製品では初期状態でCPU宛てのパケットを下記のとおり自動的に優先制御するようになっています。この動作を変更することはできません。

表 5
パケットの種類 | 使用するCPU宛てキュー
VCS（バーチャルシャーシスタック） | 7
AMF（アライドテレシスマネージメントフレームワーク） | 6
BPDU（スパニングツリープロトコル）
EPSR
EAP
LACP
Loop Detect
LLDP
ARP Reply | 3
IGMP
224.0.0.x宛てパケット（RIPバージョン2、OSPF、PIM、VRRPなど）
ARP Request | 2
ユニキャストパケット（ルーティングパケット）
ユニキャストパケット（スイッチングパケット） | 0
ブロードキャストパケット
マルチキャストパケット

(C) 2014 - 2018 アライドテレシスホールディングス株式会社

PN: 613-001988 Rev.S