QoSの設定 - Catalyst
CatalystでQoSを設定するコマンドの使い方について説明したページです。QoSの動作や意味については「QoS」をご参照下さい。
CatalystのQos
CatalystではStrictとWRR、若しくはその発展形であるSRRを組合わせたQosをサポートしています。Strictとなるプライオリティキューにフレームがある限り他のフレームは送信されませんが、なくなると他のキューから重み付けに従って送信されます。
装置によっても違いますが、例えば以下のように入力キュー2つと出力キュー4つを持っており、入力キュー2はデフォルトでプライオリティキューに設定されています。
出力キュー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電話が接続された構成を例に説明します。
VoIPの優先だけを考えた場合、スイッチAでは以下の設定を追加して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値が設定されている場合は変更しませんが、mls qos 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電話からのフレームは以下のようにキューイングされて絶対優先で送信されます。
gi1/0/1やgi1/0/2からCoS5で受信するとmls qos trust cosの設定により、同様に絶対優先で転送されます。
パソコンからのフレームでCoSが設定されていない場合は以下のようにキューイングされ、IP電話からのフレームがない場合のみ送信されます。
スイッチ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を前提とします。
この場合、スイッチAでは以下の設定を追加します。
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を信頼する設定が必要です。
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を付けて実行すると削除出来ます。
クラスマップ定義を変える事でサービス指定して優先度を変更する事も出来ます。
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で送信されます。
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の例では以下のように設定します。
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を受信したか統計情報を表示出来ます。
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だけをサポートしている場合は、以下でインターフェースに適用したポリシーマップにどの程度マッチしたかクラスマップ毎に統計情報を表示出来ます。
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では以下のように設定します。
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つのポリシーマップの中に複数クラスを定義して場合分け出来ます。
このようにクラス単位でどのように動作するかをポリシーとして定義出来るのがMQCモードです。つまり、クラスベースでポリシーマップを定義出来ます。
- 応用編「QoS」