ネットワークQuality of Service (QoS) のアーキテクチャと実装技術

QoS(サービス品質)の概要と必要性

現代のIPネットワークにおいて、トラヒックの種類は増え続けており、音声や映像のようなリアルタイム通信が、従来のデータ通信と同じリンクを共有することが一般的です。帯域幅は物理的に限られているため、トラヒックが集中すると輻輳が発生し、遅延やジッター、パケットロスが生じ、サービス品質の低下を招きます。物理的な帯域増強だけではコスト効率が悪いため、限られたリソースの中で重要な通信を優先的に扱う技術、すなわちQoS(Quality of Service)が不可欠です。

QoSは、ネットワーク内のトラヒックを分類し、それぞれのトラヒッククラスに応じて優先制御、帯域保証、輻輳回避などの処理を施すことで、サービスごとに必要な品質を確保するメカニズムです。

QoSサービスモデル

QoSの実装モデルには、主に以下の3種類が存在します。

  • ベストエフォート(Best-Effort)モデル: インターネットの初期のモデルです。ネットワークは可能な限りパケットを転送しようとしますが、遅延や損失の保証は一切行いません。
  • 総合サービス(IntServ)モデル: アプリケーションが通信を開始する前にRSVP(Resource ReSerVation Protocol)などのシグナリングを使用してネットワークにリソースを予約します。個々のフローごとに厳密な制御を行いますが、スケーラビリティに課題があります。
  • 区分サービス(DiffServ)モデル: 現在のネットワークで主流のモデルです。パケットをクラスごとに分類し、クラス単位で集約して転送処理を行います。スケーラビリティが高く、大規模なネットワークでの実装に適しています。

トラヒックの分類とマーキング

DiffServモデルにおいて、最初のステップはトラヒックの分類とマーキングです。ルータはパケットヘッダーの情報(MACアドレス、VLAN ID、IPアドレス、DSCP値など)に基づいてトラヒックを識別し、内部処理用の優先度を割り当てます。

MQC(モジュラQoSコマンドライン)による設定

複雑な分類ルールを実装する場合、MQCフレームワークを使用します。これは「トラヒック分類」、「トラヒック挙動」、「トラヒックポリシー」の3要素で構成されます。

# 1. トラヒック分類の定義 (ACL 3000にマッチするトラヒックを抽出)
system-view
[~HUAWEI] traffic classifier voice-operator
[*HUAWEI-classifier-voice-operator] if-match acl 3000
[*HUAWEI-classifier-voice-operator] quit

# 2. トラヒック挙動の定義 (DSCP値を46(EF)に書き換え)
[~HUAWEI] traffic behavior mark-ef
[*HUAWEI-behavior-mark-ef] remark dscp ef
[*HUAWEI-behavior-mark-ef] quit

# 3. トラヒックポリシーの適用 (分類と挙動を紐付け)
[~HUAWEI] traffic policy policy-wan
[*HUAWEI-policy-policy-wan] classifier voice-operator behavior mark-ef
[*HUAWEI-policy-policy-wan] quit

# 4. インターフェースへの適用
[~HUAWEI] interface GigabitEthernet 0/0/1
[*HUAWEI-GigabitEthernet0/0/1] traffic-policy policy-wan inbound
[*HUAWEI-GigabitEthernet0/0/1] commit

優先度の信頼設定

端末がすでに適切なタグ付けを行っている場合、ルータはそのタグを「信頼」して内部優先度にマッピングします。

# インターフェースで802.1pタグを信頼する設定
interface GigabitEthernet 0/0/1
 trust 8021p

帯域制御技術:ポリシングとシェーピング

トラヒックのレートを制限し、帯域を適切に利用するために、トークンバケットアルゴリズムを用いた帯域制御が行われます。

トラヒックポリシング(Policing)

ポリシングは、トラヒックが規定のレートを超過した場合、そのパケットを破棄するか、優先度を引き下げることで、ネットワークへの過剰な流入を防ぎます。主にインバウンド方向で使用されます。

# インターフェースベースのポリシング設定 (CIR: 10Mbps)
interface GigabitEthernet 0/0/0
 qos car inbound cir 10240 cbs 2048000 green pass red discard

トラヒックシェーピング(Shaping)

シェーピングは、アウトバウンド方向のトラヒックのバーストを平滑化(クランプ)するために、バッファに一時的にパケットを蓄積し、規定レートで送出します。これにより、下流のルータでの輻輳を防ぎます。

# MQCを用いたシェーピング設定
traffic behavior shape-video
 gts cir 20480 cbs 512000  # 20Mbpsに制限

traffic policy policy-outbound
 classifier video-stream behavior shape-video

interface GigabitEthernet 0/0/2
 traffic-policy policy-outbound outbound

輻輳管理(Congestion Management)

輻輳が発生した際に、どのパケットから先に送信するかを決定するためのキューイングアルゴリズムです。

  • FIFO (First In First Out): 到着順に処理します。制御を行いません。
  • PQ (Priority Queuing): 優先度の高いキューが空になるまで、低いキューは処理されません。リアルタイムトラヒックに適していますが、低優先度トラヒックが飢餓状態になるリスクがあります。
  • WFQ (Weighted Fair Queuing): フローごとに重み付けを行い、公平に帯域を分配します。
# キュープロファイルによるスケジューリング設定
qos queue-profile qp-multimedia
 schedule pq 0 to 2  # キュー0-2をPQ(高優先)に設定
 schedule wfq 3 to 7 # キュー3-7をWFQ(重み付け)に設定

interface GigabitEthernet 0/0/1
 qos queue-profile qp-multimedia

輻輳回避(Congestion Avoidance)

テイルドロップ(キュー満杯時の全パケット破棄)によるTCPグローバル同期現象を回避するため、キューが満杯になる手前で確率的にパケットを破棄する技術です。

WRED (Weighted Random Early Detection)

WREDは、パケットの優先度(DSCPやIP precedence)に応じて破棄確率を変化させます。優先度の低いパケットから先に破棄し、重要なトラヒックの保護を図ります。

# WREDドロッププロファイルの作成と適用
drop-profile dp-wred
 wred dscp
 dscp 10 low-limit 30 high-limit 70 discard-percentage 10

# 挙動への紐付け
traffic behavior apply-wred
 drop-profile dp-wred

階層型QoS (HQoS)

従来のQoSはインターフェース単位の処理が主でしたが、HQoS(Hierarchical QoS)は、ユーザーやサブスクライバ単位、さらにその配下のアプリケーションフロー単位で、階層的に帯域制御とスケジューリングを行います。これにより、ISPや企業ネットワークにおいて、複数のテナントやユーザーに対して厳密なSLA(Service Level Agreement)を提供可能になります。

実装には親ポリシー(ユーザー/サブスクライバー制御)と子ポリシー(フロー/サービス制御)を組み合わせたMQC構成を使用します。

# 子ポリシー(サービスクラス制御)
traffic policy child-policy
 classifier voip behavior ef-queue
 classifier browsing behavior wfq-queue

# 親ポリシー(サブスクライバー制御:子ポリシーを呼び出す)
traffic behavior parent-act
 car cir 50000000                # ユーザー全体の帯域制限
 statistic enable                # 統計情報収集
 traffic-policy child-policy     # 子ポリシーの適用

traffic policy parent-policy
 classifier user-a-behavior parent-act

interface GigabitEthernet 0/0/10
 traffic-policy parent-policy outbound

7月2日 00:26 投稿