QoSの設定 - Catalyst

CatalystでQoSを設定するコマンドの使い方について説明したページです。QoSの動作や意味については「QoS」をご参照下さい。

CatalystのQos

 CatalystではStrictとWRR、若しくはその発展形であるSRRを組合わせたQosをサポートしています。Strictとなるプライオリティキューにフレームがある限り他のフレームは送信されませんが、なくなると他のキューから重み付けに従って送信されます。

 装置によっても違いますが、例えば以下のように入力キュー2つと出力キュー4つを持っており、入力キュー2はデフォルトでプライオリティキューに設定されています。

QoSの設定1

 出力キュー1は帯域を保障されており、プライオリティキューにも設定可能です。その他のキューは重みづけされたラウンドロビンによって出力されます。

 例えばVoIPでは通常CoS5、DSCP46になりますが、このような装置ではデフォルトで入力キュー2、出力キュー1に割り当てられています。

 MLS(Multi Layer Switching)によるQoSを有効にしてCoS値やDSCP値が設定されたフレーム、又はパケットが届くと推奨されるポリシーに基づいて優先制御されます。

 尚、WRRとSRRの違いですが、WRRが重み付けに従って各キューから2つ、4つ、3つ、1つと送信するのに対し、SRRでは1つずつ送信し、次は重み付けによって送信しないキューがある等送信の仕方が異なります。

ポートベースのQoS設定

 Catalyst2960、3560、3750シリーズはポートベースのQoSをサポートしています。ポートベースではインターフェースに直接どのような動作をするのかを設定します。

 以下のようにコアスイッチB、Cがあり、エッジスイッチにパソコンとIP電話が接続された構成を例に説明します。

QoSの設定2

 VoIPの優先だけを考えた場合、スイッチAでは以下の設定を追加してQoSを有効にします。

【ポートベースのQoS設定】
Switch# configure terminal
Switch(config)# mls qos
Switch(config)# interface gigabitethernet1/0/4
Switch(config-if)# mls qos cos 5
Switch(config-if)# priority-queue out
Switch(config-if)# exit
Switch(config)# interface range gigabitethernet1/0/1 - 2
Switch(config-if-range)# mls qos trust cos
Switch(config-if-range)# priority-queue out
Switch(config-if-range)# exit
・mls qos
 QoS機能自体を有効にする設定です。
・mls qos cos 5
 gi1/0/4はIP電話からのフレームにCoS5を設定して優先するようになります。インターフェースがトランクポートで受信するフレームにCoS値が設定されている場合は変更しませんが、最後にoverrideオプションを付ける事で上書きする事も出来ます。尚、DSCPやIP Precedenceの値はポートベースでは設定出来ません。
・mls qos trust cos
 受信したフレームのCoSを信頼するという意味で、例えばIP電話からVoIPの通信が来てCoSが5だった場合はプライオリティキューに割り当てます。cos部分をdscp、ip-precedenceにする事でDSCPやIP Precedenceを信頼する事も出来ます。
・priority-queue out
 出力キュー1をプライオリティーキューに設定しています。

 gi1/0/3には何も設定していませんが、デフォルトではCoS0が設定され、入力キュー1、出力キュー2が割り当てられます。

 上記設定によりIP電話からのフレームは以下のようにキューイングされて絶対優先で送信されます。

QoSの設定3

 gi1/0/1やgi1/0/2からCoS5で受信するとmls qos trust cosの設定により、同様に絶対優先で転送されます。

 パソコンからのフレームでCoSが設定されていない場合は以下のようにキューイングされ、IP電話からのフレームがない場合のみ送信されます。

QoSの設定4

 スイッチDでも同様の設定、スイッチB、Cではそれぞれのインターフェースでtrustの設定を行うとIP電話の通信は遅延が一番小さい状態で通信が可能です。

 尚、それぞれのコマンドの最初にnoを付けて実行すると無効に出来ます。

MQCベースのQoS

 Catalyst2960、3560、3750シリーズ等ではMQC(Modular QoS CLI)ベースの設定方法も一部サポートしています。MQCベースではclass-mapやpolicy-map等でどのような条件ではどのように動作する等を定義し、service-policyコマンドでインターフェースに適用します。

 ポートベースで説明した時と同じ図を使って今度はDSCPを利用します。IP電話のアドレスは192.168.1.0/24を前提とします。

QoSの設定2

 この場合、スイッチAでは以下の設定を追加します。

【MQCベースのQoS設定】
Switch# configure terminal
Switch(config)# mls qos
Switch(config)# access-list 1 permit 192.168.1.0 0.0.0.255
Switch(config)# class-map match-all Class-VoIP
Switch(config-cmap)# match access-group 1
Switch(config-cmap)# exit
Switch(config)# policy-map VoIP
Switch(config-pmap)# class Class-VoIP
Switch(config-pmap-c)# set dscp 46
Switch(config-pmap-c)# exit
Switch(config-pmap)# exit
Switch(config)# interface gigabitethernet1/0/4
Switch(config-if)# service-policy input VoIP
Switch(config-if)# priority-queue out
Switch(config-if)# exit
・class-map match-all Class-VoIP
 Class-VoIPというクラスマップを作成しています。名前は自由に設定出来ます。match-allのため全ての条件に一致した場合に適用されます。
・match access-group 1
 アクセスリスト1番、つまり192.168.1.0/24のアドレス範囲から受信すると適用されます。
・policy-map VoIP
 VoIPというポリシーマップを作成しています。名前は自由に設定出来ます。
・class Class-VoIP
 適用するクラスマップを指定しています。例では作成したClass-VoIPというクラスマップに当てはまる時、つまり192.168.1.0/24のアドレス範囲から受信した時に次のset文を実行するという意味になります。
・set dscp 46
 DSCPを46にマーキングします。
・service-policy input VoIP
 ポリシーマップをGi1/0/4に適用しています。

 上記はinterfaceコマンドの上まででアドレス範囲192.168.1.0/24から受信した全てのフレームをDSCP46にセットするというポリシーを記述しています。実際に適用しているのはservice-policy input VoIPコマンドです。

 又、DSCPを使うようにしたため、gi1/0/1と1/0/2でDSCPを信頼する設定が必要です。

【MQCベースのDSCP信頼】
Switch(config)# policy-map Trust
Switch(config-pmap)# class Class-VoIP
Switch(config-pmap-c)# trust dscp
Switch(config-pmap-c)# exit
Switch(config-pmap)# exit
Switch(config)# interface range gigabitethernet1/0/1 - gigabitethernet1/0/2
Switch(config-if-range)# service-policy input Trust
Switch(config-if-range)# priority-queue out
Switch(config-if-range)# exit
・policy-map Trust
 Trustというポリシーマップを作成しています。名前は自由に設定出来ます。
・trust dscp
 受信したパケットのDSCPを信頼するという意味で、例えばIP電話からVoIPの通信が来てDSCPが46だった場合はプライオリティキューに割り当てます。dscp部分をcos、ip-precedenceにする事でCoSやIP Precedenceを信頼する事も出来ます。
・service-policy input Trust
 ポリシーマップをGi1/0/1とGi1/0/2に適用しています。

 それぞれのコマンドの最初にnoを付けて実行すると削除出来ます。

 クラスマップ定義を変える事でサービス指定して優先度を変更する事も出来ます。

【ftpのQosの設定】
Switch(config)# mls qos
Switch(config)# access-list 100 permit tcp any any eq ftp
Switch(config)# class-map match-all Class-ftp
Switch(config-cmap)# match access-group 100
Switch(config-cmap)# exit
Switch(config)# policy-map ftp
Switch(config-pmap)# class Class-ftp
Switch(config-pmap-c)# set dscp 20
Switch(config-pmap-c)# exit
Switch(config-pmap)# exit
Switch(config)# interface gigabitethernet1/0/3
Switch(config-if)# service-policy input ftp
Switch(config-if)# exit

 赤字の部分は適用するアクセスリストを設定しています。例では、ftp通信に対して適用する設定になります。

 上記の設定によりgi1/0/3からのftp通信は入力キュー1、出力キュー3で送信されます。

QoSの設定5

 ftpとその他の通信は、SRRで優先制御されます。

 デフォルトでは出力キュー2から3に変わっても重み付けが同じですが、デフォルトの出力キュー2が輻輳していた場合でもキュー3は割り当てられた帯域を使う事が出来ます。又、キュー3が輻輳していた場合でもキュー2は割り当てられた帯域を使う事が出来ます。このように通信毎にキューを分ける事で他の通信の影響を受ける事を避ける事が出来ます。

デフォルトのキューとCoS、DSCP割当

 例えば、Catalyst3560-X、3750-X等の入力キューはデフォルトで以下のCoS、DSCPが割り当てられています。

【入力キュー】
キュー Cos DSCP 保障帯域
1 0〜4,6,7 0〜39,48〜63 なし
2 5 40〜47 帯域の10%

 つまり、受信したフレームがCoS5であったりパケットがDSCP46であれば、QoSを有効にしてインターフェースでtrustの設定をするだけでキュー2に割り当てられ、絶対優先されます。

 Catalyst2960-X、3560-X、3750-Xの出力キューはデフォルトでは以下のCoS、DSCPが割り当てられています。

【出力キュー】
キュー Cos DSCP 保障帯域 重み 補足
1 5 40〜47 帯域÷25 25 音声
2 0,1 0〜15 なし 25 その他
3 2,3 16〜31 なし 25 動画等
4 4,6,7 32 〜 39,48〜63 なし 25 音声呼制御、データ制御等

 つまり、デフォルトで音声は帯域保障され、動画、制御系等は異なる出力キューに割り当てられるようになっているため、CoSやDSCP値が設定されたフレームを受信した場合、又は受信したインターフェースでマーキングするとそれぞれ異なるキューに割り当てられるようになり、推奨された優先度に従って送信されるようになります。

 又、重みはSRRで優先制御する時の優先度です。デフォルトではどのキューも同じ重みになっていて帯域保障されるキュー1以外は均等です。

MQCだけをサポートするCatalyst

 シャーシ型Catalystの最近のIOS、Catalyst3560や3750より後に出荷されたCatalyst3850等ではMQCベースのQoSのみサポートしています。

 このような装置ではQoSはデフォルトで有効になっており、インターフェースもデフォルトでCoSやDSCP等を信頼しています。つまり、mls qos、mls qos trust等明示的に設定する必要がありません。

 又、出力キューでのStrictはCatalyst3850の例では以下のように設定します。

【MQCモードでのStrict設定】
Switch(config)# class-map match-all Class-Strict
Switch(config-cmap)# match ip dscp 46
Switch(config-cmap)# exit
Switch(config)# policy-map Strict
Switch(config-pmap)# class Class-Strict
Switch(config-pmap-c)# priority level 1
Switch(config-pmap-c)# exit
Switch(config-pmap)# exit
Switch(config)# interface gigabitethernet1/0/4
Switch(config-if)# service-policy output Strict
Switch(config-if)# exit

 Catalyst3850ではプライオリティキューは2つありますが、priority level 1は最も低遅延で送信可能です。

QoSの統計情報表示

 mls qosコマンドをサポートしている場合は、以下でどのような値のCoSやDSCPを受信したか統計情報を表示出来ます。

【QoSのインターフェース統計】
Switch# show mls qos interface gigabitethernet1/0/4 statistics
dscp: incoming
-------------------------------
0 - 4 : 10 0 0 0 20
・・・
60 - 64 : 0 0 0 0
dscp: outgoing
-------------------------------
0 - 4 : 20 0 0 0 0
・・・
60 - 64 : 0 0 0 0
cos: incoming
-------------------------------
0 - 4 : 30 0 0 0 0
5 - 9 : 0 0 0
cos: outgoing
-------------------------------
0 - 4 : 20 0 0 0 0
5 - 9 : 10 0 0

 例えば一番上の0 - 4はその右にDSCP0、1、2、3、4で受信したパケットの数を示しており、例ではDSCP0を10パケット、DSCP4を20パケット受信した事を示しています。incomingが受信、outgoingが送信です。

 MQCだけをサポートしている場合は、以下でインターフェースに適用したポリシーマップにどの程度マッチしたかクラスマップ毎に統計情報を表示出来ます。

【QoSのポリシーマップ統計】
Switch# show policy-map interface gigabitethernet1/0/4
gigabitethernet1/0/4
service-policy output: Strict
class-map: Class-Strict (match-all)
10 packets, 640 bytes
5 minute rate 100 bps
match ip dscp 46

 上記からClass-Strictにマッチしたパケットは10、最近5分間の通信量は100bpsである事が分かります。

補足

 Catalystでは装置によって出力キューだけサポートしていたり、キューの数、動作やデフォルトが異なったりしますが、CoSやDSCP等をマーキングして分類、若しくは既に付与されたCoSやDSCP等を信頼して分類する事でデフォルトで適切なキューに溜められ、転送されます。各キューにはデフォルトで優先度が決められているためです。

 ある通信を分類したとして、その通信量が多い場合は優先度を変える必要があります。

 例えばポートベースのQoS設定方法をサポートしているCatalystで優先度を変更する場合は以下のように設定します。

【ポートベースでの優先度変更】
Switch(config)# interface gigabitethernet1/0/4
Switch(config-if)# mls qos cos 5
Switch(config-if)# priority-queue out
Switch(config-if)# srr-queue bandwidth share 25 10 40 25
Switch(config-if)# exit

 赤字部分でキュー1が重み25、キュー2が重み10、キュー3が重み40、キュー4が重み25に設定されています。キュー1をStrictに設定しているため、他のキューは10:40:25の割合で送信されます。つまり、重要な通信をキュー3に割り当てる事で優先的に通信が可能になります。デフォルトは先に説明した通り、全てのキューで同じ重み25が割り当てられています。

 MQCモードだけサポートしているCatalystでは以下のように設定します。

【MQCモードでの優先度変更】
Switch(config)# access-list 1 permit 192.168.1.0 0.0.0.255
Switch(config)# class-map match-all Class-VoIP
Switch(config-cmap)# match access-group 1
Switch(config-cmap)# exit
Switch(config)# access-list 100 permit tcp any 172.16.1.10
Switch(config)# class-map match-all Class-Important
Switch(config-cmap)# match access-group 100
Switch(config-cmap)# exit
Switch(config)# policy-map VoIP-Important
Switch(config-pmap)# class Class-VoIP
Switch(config-pmap-c)# priority level 1
Switch(config-pmap-c)# exit
Switch(config-pmap)# class Class-Important
Switch(config-pmap-c)# bandwidth remaining percent 40
Switch(config-pmap-c)# exit
Switch(config-pmap)# exit
Switch(config)# interface gigabitethernet1/0/4
Switch(config-if)# service-policy output VoIP-Important
Switch(config-if)# exit

 上記で192.168.1.0/24範囲にあるVoIP通信を絶対優先しつつ、172.16.1.10への通信の優先度を上げるVoIP-Importantというポリシーマップを作成し、Gi1/0/4に適用しています。

 赤字部分はプライオリティキューがある場合に他のキューの優先度を変更する設定で、例では40%に設定しています。

 尚、上記のように1つのポリシーマップの中に複数クラスを定義して場合分け出来ます。

QoSの設定6

 このようにクラス単位でどのように動作するかをポリシーとして定義出来るのがMQCモードです。つまり、クラスベースでポリシーマップを定義出来ます。

サイト関連1

応用編「QoS
  • このエントリーをはてなブックマークに追加