QoSを導入したネットワークではフレームやパケット を判別し重要度に応じた取り扱いをしてくれます。全ての通信を平等に扱うのをとりやめ一定の規則に基づいた不公平を導入します。たとえば重要度が高く遅延 に敏感ですぐに送信しなければならないアプリケーションのフレームやパケットは送信待ちのほかの種類のものより先に送ります。
また同じアプリケーションを使っていてもユーザの種類や場所によって優先度を変えることもあります。逆に重要度が低くかつ今すぐ送信しなくてもよいフレー ムやパケットがあれば後回しにします。さらに必要に応じ重要度の低いフレームやパケットを廃棄し他の重要度の高い通信を守ります。
QoSを導入することでネットワークの帯域が増大するわけではありません。もし全てのアプリケーションの優先度が同じであれば不公平な取り扱いはできませ んからQoSを適用できません。しかし現実のネットワークでは重要度や遅延と廃棄に対する敏感さはアプリケーションやユーザの種類によって大きく異なって います。この性質を利用して故意に不公平な取り扱いをしてネットワークの限られた帯域をやりくりすることがQoSの役割です。
■Catalyst QoSの実装
CatalystのQoSの実装、アーキテクチャは機種ごとに異なり大きくわけて以下の3つに分類されます。
- Catalyst6500
- Catalyst4500E
- Catalyst2960/3560/3750
また、Catalyst QoSの共通の特徴として以下が挙げられます。
- ハードウェア処理される (CPU負荷などには影響はない)
- ルータの輻輳制御のように必要時のみ発動するの ではなく設定をいれた時点で動作が変わる
- トラフィックが混雑していない環境で導入しても 意味はない
ここでは Catalyst4500Eを前提にQoSを紹介します。
■Catalyst QoSのフロー
図で表しますと以下のようになります。
一般的かどうかわかりませんが、Catalystで帯域制限を行うことはできなくはないですが、あまり実務でやったことがありません。Catalyst側 では優先制御、ルータ側では帯域制御というようにルータ・スイッチで役割分担をしながら導入することが多いです。
■クラス分け / マーキング
フレームまたはパケットをクラス分けする際に基準とするのが以下のものです。
- CoS ( Layer2 3bit )
- IP Precedence ( Layer3 3bit )
- DSCP ( Layer3 6bit )
- ACL ( Access Control List )
CoSについてはLayer2のフレームに付加される のでパケットでは伝えることができません。なおかつタグ付きのフレーム(Trunk)に限定されます。また、上記の値をフレーム(パケット)が到達した時点のものを使用するか上書きするか選択することができます。既に値 付けされたものを信用する(Trust)設定と上書きをするACLを用いたPolicy-Mapの両方を行うことが可能で す。
4つの選択基準がありますが、基本的にはどれを使用してもOKです。要件次第という部分もあるかと思いますが、Layer2レベルでの優先制御で Trunk接続しているのであればCoSでやればいいですしLayer3レベルであればIP PrecedenceかDSCPのどちらでも構いません。混在させることも可能ですがあまり意味はなく、policy-mapが設定されていれば Trustなどが設定されていても上書きされます。
■クラス分け/マーキング
4500のインターフェイスはデフォルトでTrust状態です。2960/3750などでは明示的に Trust設定が必要でしたが4500ではその必要はありません。着信したパケットのマーキングを上書きしたい場合はpolicy-mapを使用します。 下記ではインターフェイスGi0/1に着信するパケットはすべてDSCPをef ( 46 ) にセットしています。下記では物理インターフェイスに適用していますが、Port-Channelインターフェイスがある場合は、それに適用することも可能です。
(config)# access-list 100 permit ip any any (config)# class-map match-all QoS (config-cmap)# match access-group 100 (config)# policy-map QoS (config-pmap)# class QoS (config-pmap-c)# set dscp ef (config)# interface GigabitEthernet0/1 (config-if)# switchport access vlan 100 (config-if)# switchport mode access (config-if)# service-policy input QoS |
DSCPやip precedenceで指定できる値は下記のようになります。
(config-pmap-c)# set dscp ? <0-63> Differentiated services codepoint value af11 Match packets with AF11 dscp (001010) af12 Match packets with AF12 dscp (001100) af13 Match packets with AF13 dscp (001110) af21 Match packets with AF21 dscp (010010) af22 Match packets with AF22 dscp (010100) af23 Match packets with AF23 dscp (010110) af31 Match packets with AF31 dscp (011010) af32 Match packets with AF32 dscp (011100) af33 Match packets with AF33 dscp (011110) af41 Match packets with AF41 dscp (100010) af42 Match packets with AF42 dscp (100100) af43 Match packets with AF43 dscp (100110) cs1 Match packets with CS1(precedence 1) dscp (001000) cs2 Match packets with CS2(precedence 2) dscp (010000) cs3 Match packets with CS3(precedence 3) dscp (011000) cs4 Match packets with CS4(precedence 4) dscp (100000) cs5 Match packets with CS5(precedence 5) dscp (101000) cs6 Match packets with CS6(precedence 6) dscp (110000) cs7 Match packets with CS7(precedence 7) dscp (111000) default Match packets with default dscp (000000) ef Match packets with EF dscp (101110) |
(config-pmap-c)# set ip precedence ? <0-7> Precedence value critical Match packets with critical precedence (5) flash Match packets with flash precedence (3) flash-override Match packets with flash override precedence (4) immediate Match packets with immediate precedence (2) internet Match packets with internetwork control precedence (6) network Match Packets with network control precedence (7) priority Match packets with priority precedence (1) routine Match packets with routine precedence (0) |
■キューイング
4500EではデフォルトでQoSが有効となっており、2つの出力キューが存在ます。下記のQueue1がルーティングプロトコルやARPなどの自身でやりとりをするキューであり、Queue8がそれ以外のトラフィックが配置されます。
# show int gi3/1 counters detail <省略> Port Tx-Bytes-Queue-1 Tx-Bytes-Queue-2 Tx-Bytes-Queue-3 Tx-Bytes-Queue-4 Gi3/1 638250252 0 0 0 Port Tx-Bytes-Queue-5 Tx-Bytes-Queue-6 Tx-Bytes-Queue-7 Tx-Bytes-Queue-8 Gi3/1 0 0 0 10642464717123 Port Tx-Drops-Queue-1 Tx-Drops-Queue-2 Tx-Drops-Queue-3 Tx-Drops-Queue-4 Gi3/1 0 0 0 0 Port Tx-Drops-Queue-5 Tx-Drops-Queue-6 Tx-Drops-Queue-7 Tx-Drops-Queue-8 Gi3/1 0 0 0 0 Port Dbl-Drops-Queue-1 Dbl-Drops-Queue-2 Dbl-Drops-Queue-3 Dbl-Drops-Queue-4 Gi3/1 0 0 0 0 Port Dbl-Drops-Queue-5 Dbl-Drops-Queue-6 Dbl-Drops-Queue-7 Dbl-Drops-Queue-8 Gi3/1 0 0 0 0 Port Rx-No-Pkt-Buff RxPauseFrames TxPauseFrames PauseFramesDrop Gi3/1 0 0 0 0 Port UnsupOpcodePause Gi3/1 0 |
デフォ ルトではこのような配置になっていますが、ルータなどでよく利用するMQC ( Modular QoS CLI ) にて優先制御や帯域制御を実施することが可能です。その際、ユーザで任意のclassを作成することができますが、上記のようにoutput queueは全部で8つであり、うち1つがclass-defaultとなるので7つまで任意のclassを作成可能ということになります。
■優先制御
4500EではMQCを使用して優先制御を設定します。下記ではDSCPにEFがセットされたトラフィックを優先制御するよう設定しています。トラフィックの条件づけにはACLを使用することも可能です。
(config)# class-map match-all EF (config-class)# match dscp ef (config)# policy-map QoS (config-pmap)# class EF (config-pmap-c)# priority (config)# interface GigabitEthernet0/1 (config-if)# service-policy type output QoS |
ちなみに上記の優先制御を有効にした場合、Queue1の管理パケットは自動でPQに配置されるようになります。
■帯域制御 / 帯域保証
帯域制御と帯域保証の設定も可能です。下記ではcos値が0と2のトラフィックについてそれぞれ帯域保証を行なっています。但し、上記の優先制御設定 ( priority ) を設定している場合はbandwith remaing percentを使用する必要があります。bandwidth percentとの違いは他のクラスで一切使用せず専用の帯域となる、という点が異なります。
(config)# class-map match-all CoS0 (config-class)# match cos 0 (config)# class-map match-all CoS2 (config-class)# match cos 2 (config)# policy-map QoS # CoS0のトラフィックの帯域保証を10Mに指定 (config-pmap)# class CoS0 (config-pmap-c)# bandwidth 10000 # CoS2のトラフィックの最大帯域を20%に指定 (config-pmap)# class CoS2 (config-pmap-c)# bandwidth percent 20 (config)# interface GigabitEthernet0/1 (config-if)# service-policy type output QoS |
帯域制御はポリシング/シェイピングの両方をサポートしています。以下はcos3のトラフィックに対して100M の制限をかけるシェイピングの設定例です。ポリシングはin / out の両方をサポートしていますがシェイピングはoutのみでなおかつ物理ポートにのみ適用可なので注意してください。
(config)# class-map match-all CoS3 (config-class)# match cos 3 (config)# policy-map QoS (config-pmap)# class CoS3 (config-pmap-c)# shape average 100000000 (config)# interface GigabitEthernet0/1 (config-if)# service-policy output QoS |
■QoS のshowコマンド
Catalyst4500Eで確認できるQoSコマン ドはshow policy-map interfaceと最初に書いたshow interface giX/Y counters detailです。
# show int gi3/1 counters detail Port InBytes InUcastPkts InMcastPkts InBcastPkts Gi3/1 21508297038783 22479016327 31526759 5690743 Port OutBytes OutUcastPkts OutMcastPkts OutBcastPkts Gi3/1 10643102730079 11687544322 6335205 106 Port InPkts 64 OutPkts 64 InPkts 65-127 OutPkts 65-127 Gi3/1 678517 74926638 7492869084 4411339504 Port InPkts 128-255 OutPkts 128-255 InPkts 256-511 OutPkts 256-511 Gi3/1 511671825 261716450 513266470 140241752 Port InPkts 512-1023 OutPkts 512-1023 Gi3/1 531815550 134069990 Port InPkts 1024-1518 OutPkts 1024-1518 InPkts 1519-1548 OutPkts 1519-1548 Gi3/1 2292773204 153483379 11173159179 6518101920 Port InPkts 1549-9216 OutPkts 1549-9216 Gi3/1 0 0 Port Tx-Bytes-Queue-1 Tx-Bytes-Queue-2 Tx-Bytes-Queue-3 Tx-Bytes-Queue-4 Gi3/1 638250252 0 0 0 Port Tx-Bytes-Queue-5 Tx-Bytes-Queue-6 Tx-Bytes-Queue-7 Tx-Bytes-Queue-8 Gi3/1 0 0 0 10642464717123 Port Tx-Drops-Queue-1 Tx-Drops-Queue-2 Tx-Drops-Queue-3 Tx-Drops-Queue-4 Gi3/1 0 0 0 0 Port Tx-Drops-Queue-5 Tx-Drops-Queue-6 Tx-Drops-Queue-7 Tx-Drops-Queue-8 Gi3/1 0 0 0 0 Port Dbl-Drops-Queue-1 Dbl-Drops-Queue-2 Dbl-Drops-Queue-3 Dbl-Drops-Queue-4 Gi3/1 0 0 0 0 Port Dbl-Drops-Queue-5 Dbl-Drops-Queue-6 Dbl-Drops-Queue-7 Dbl-Drops-Queue-8 Gi3/1 0 0 0 0 Port Rx-No-Pkt-Buff RxPauseFrames TxPauseFrames PauseFramesDrop Gi3/1 0 0 0 0 Port UnsupOpcodePause Gi3/1 0 |