QoS(Quality of Service)とは

  • 投稿日:2019.05.02
  •        
  • 更新日:2020.04.25
  •           
  • ネットワーク
QoS(Quality of Service)とは

QoSは特定のパケットを優先して処理することで,限られた通信帯域の中でも通信を安定して処理する方法です.QoSを利用するパケットは音声パケット(VoIP)や,そのほかのバースト系のデータパケットなどがあります.JUNOSではCoS(Class of Service)と呼んでいます.
ネットワーク内では一貫したポリシーに基づいてQoSを各装置に設定しなければいけません.アクセス層ではパケットにマーキングを行い,コア層ではスケジューリング処理を行います.
Juniper機器ではCoSをソフトウェアではなくハードウェアで実装しており,パケットフォワーディングやルーティングに影響を与えることなくCoSを導入することができるという大きな利点があります.

QoSの必要性 

IPネットワークは1つの回線を複数の通信が共有して利用しており,その帯域には制限があります.回線が輻輳した場合はデータの遅延や欠落などが発生します.
リアルタイム性があまり必要ないアプリケーションはデータの破棄や遅延が発生してもあまり影響が大きくありません.影響を受けるのはVoIPのようなリアルタイム系の通信です.
この問題を解決するには通信帯域を増速して輻輳そのものをなくす方法があるが,コスト面で問題が発生します.そこで,QoSが導入されることで問題が解決されます.
音声トラフィックにはQoS要件のガイドラインがあり,次の値以下に抑えることが推奨されます.メーカごとに違うので注意が必要です.

通信遅延ジッター損失
音声トラフィック150ms以下30ms以下1%以下

QoSの機能 

QoSを実現する4つの機能は以下の通りです.

機能説明
クラシファイアパケットを種類毎にクラス分けする.
マーキングパケットのヘッダにあるフィールドに,優先度に合わせた記号を記述する.
スケジューリング優先度を参考にパケットをキューに転送する.
キューイングキューに格納されたパケットを転送する順番を決める.

JUNOSのCoS処理 

以下はJUNOSにおけるCoS処理のフローです.
JUNOSでは,設定された条件に従ってフォワーディングクラスとパケットロスプライオリティ(PLP)を割り当てます.そして,割り当てられたフォワーディングクラスとPLPに従って.リライトマーキングやスケジューラ,RED処理を行います.

cos_process.png

Ingress CoS処理 

BAクラシフィケーション 

BAクラシフィケーションでは,IP Precedence,DSCP,IEEE802.1qなどによってパケットを区別して,フォワーディングクラスとPLPを設定します.
パケットのクラス分けでは,間違ったクラス分けを実施すると本来異なる種別のトラフィックが意図に反して同一の動きをすることで,ネットワーク全体のCoS処理に混乱をきたす場合があります.

MFクラシフィケーション 

MFクラシフィケーションはBAクラシフィケーションの次に実行され,FWFによって定義可能なパラメータを比較して区別が可能となります.
BAクラシフィケーションではフォワーディングクラスとPLPの設定しかできませんが,MFクラシフィケーションではこれらに加えてIngressポリサーの設定も可能です.

Ingressポリサー 

MFクラシフィケーションでポリサーを定義することで,以下のような処理が可能となります.

  • 条件にマッチしたトラフィックの帯域制限を行う.
  • 帯域制限を超過したパケットを破棄する.
  • フォワーディングクラスの再クラス分けを行う.
  • 帯域制限を超過したパケットのPLPを高く設定する.

フォワーディングポリシー 

既存のフォワーディングクラスやPLPの設定を変更することが可能です.また,フォワーディングポリシーにはクラスベースフォワーディング(CBF)と呼ばれる機能があります.等コストの経路が複数存在するとき,ルーティングテーブルに存在する場合に,パケットをフォワーディングするネクストホップをその中から明示的に選択することができます.

Egress CoS処理 

Egressポリサー 

Ingressの時と同様に,Egressでもポリサー処理を行うことができます.ファイアウォールフィルタか,インタフェースレベルの設定でポリサーを設定し,帯域制限やPLPの設定をすることが可能です.

リライトマーキング 

パケットを転送する際に現在のフォワーディングクラスとPLPを読み取り,その情報をもとにコードポイント値を書き込みます.

スケジューラ 

Egressキューに入れられたパケットを処理する機能です.フォワーディングクラスに対応した各キューへパケットを格納し,スケジューラによってキューの優先度や帯域,メモリバッファサイズや輻輳回避のためのREDプロファイルを設定することがです.
ルータやスイッチにはパケットを蓄積するためのキューを複数持っています.ルータなどはスケジューラに基づいてどのキューにサービスを提供するべきかを決定します.

RED(Random Early Detection) 

ルータのインタフェースに割り当てられたキューがいっぱいになった時は次のどちらかの処理を行います.
一つ目はキューにそれ以上のパケットが入るのを停止し,それ以降に到着したパケットを破棄することです.これをテールドロップと呼びます.二つ目は初期の混雑状況を検知し,キューがいっぱいになる前に積極的にパケットを破棄し始めます.これはREDと呼ばれます.
テールドロップはキューがいっぱいになったところで突然TCPのセッションクローズ処理が始まり,TCPのセッションが一気にクローズしていきます.そのため,その後にTCPの再送処理が始まる状態を繰り返すという恐れがあります.
これに対してREDはある程度キューにパケットが溜まったところでランダムにパケットをドロップさせることで送信元に対して輻輳を通知します.これにより送信元はTCP制御によってウインドウサイズを縮小して再送を始めるので,輻輳状態を回避することが可能となります.
Junosでは複数のREDプロファイルを設定することができます.これはREDのパケットドロップアクションに重み付けをするもので,WRED(Weighted RED)と呼ばれます.

フォワーディングクラス 

JUNOSでは各パケットをフォワーディングクラスと呼ばれるマップに対応付けを行います.各フォワーディングクラスはインタフェースの送信キューにマッピングされています.以下がJUNOSにデフォルトで定義されているフォワーディングクラスとキューの番号を示します.
定義できるフォワーディングクラスの数は機種によって異なります.JUNOSでは最大で32の転送クラスをサポートしていますが,転送クラスをマッピングできるキューの最大数は8です.

Forwarding classClass nameQueue number
0Best-effort0
1Expedited-forwarding1
2Assured-forwarding2
3Network-control3

config 

以下の設定ではフォワーディングクラス[class_name]を定義しています.

set class-of-service forwarding-classes class [class_name] queue [queue_number] priority [fabric_priority]
set class-of-service forwarding-classes queue [queue_num] [class_name] priority [fabric_priority]

パケットロスプライオリティ(PLP) 

PLPはルータにおいてパケットを破棄する際の優先度を示します.REDによりパケットが破棄される時,この優先度に応じて破棄が実行されます.PLPがHighに設定されると破棄される優先度が高くなり,Lowに設定されると破棄される優先度が低くなります.PLPは次のCoS処理で設定することが可能です.

  • BAクラシフィケーション
  • MFクラシフィケーション
  • Ingressポリサー
  • Egressポリサー