トラフィックシェーピング
トラフィックシェーピング(Traffic shaping)とは、コンピュータネットワークのトラフィック(通信量)を制御し、パケットを遅延させることで通信性能を最適化/保証し、レイテンシを低減し、帯域幅を確保することである。パケットシェーピングともいう。
より具体的には、パケット群(ストリームあるいはフローともいう)に遅延を加えて、事前に定義された制約に従うようにする操作である。トラフィックシェーピングはコンピュータネットワークに送り込まれるトラフィックを制御する手段を提供するもので、ある期間ごとに制限する方式(帯域幅調整)、最大転送レートを制限する方式(レート制限)、GCRAのようなもっと複雑な方式がある。方式や目的は様々だが、トラフィックシェーピングは常にパケットの遅延で実現される。一般にネットワークの端点でネットワークに流入させるトラフィックを制御するが、トラフィックの源であるコンピュータ(あるいはネットワークカード)や他のネットワーク機器で行うこともある。関連する概念としてトラフィックポリシングがあるが、別個の概念である。
トラフィックシェーピングは、トラフィック源の送り出すトラフィックが、トラフィックポリシングで強制される契約に従った量に制限されるようにするのに使われる。
通信トラヒック工学の技法として広く使われ、ISP内のネットワークでも使われている。
IPネットワーク内でパケットのバッファリングを行うノードは、トラフィックシェーピングの効果もある。そのような例としては、低帯域幅のリンク(ダイヤルアップ接続など)、高価なWANリンク、通信衛星のホップなどがある。
トラフィックシェーピングは、次の機能と組み合わせて使われることが多い。
DiffServ、IntServ - トラフィックの階層化/優先順位付けを含む。
ランダム初期検知 (RED)、重み付けRED (WRED)、RED I/O (RIO) - 入出力ポートのバッファあふれを防ぎ、TCPグローバル同期の発生を抑える。
VLAN IEEE 802.1p および IEEE 802.1D
トラフィックシェーパーはトラフィックを測定して、各パケットがそれぞれのトラフィック契約に沿うよう遅延させる。
測定方法としては、リーキーバケットアルゴリズム(ATMネットワーク向け)とトークンバケットアルゴリズム(IPネットワーク向け)などがある。測定されたパケットは階層化されたFIFOバッファに格納され、トラフィック契約に従って転送されるまで保持される。転送は即座に行われる場合(バッファに到達した時点で契約を満たしている場合)、ある遅延の後に行われる場合(スケジュールされた転送時までバッファに留め置かれる場合)、転送されない場合(バッファオーバーランが発生した場合)がある。
トラフィックシェーパーのバッファは常に有限であり、バッファが満杯になった場合の対処を考慮しておかなくてはならない。単純で一般的な対策としては、バッファが満杯の間は到着した新たにトラフィックを捨てる(テールドロップ)方式があるが、これは一種のトラフィックポリシングにもなる。より洗練された実装では、ランダム初期廃棄のようなアルゴリズムで捨てるパケットを選択する。他にとりうる方法としては、単にシェーピングを諦めてトラフィックをそのまま転送してしまうことが考えられる。
単純なトラフィックシェーピング法では、転送レートに基づいてトラフィック全体を一様にシェーピングする。より洗練されたシェーパーでは、最初にトラフィックを階層化する。トラフィックの階層化とは、ポート番号やプロトコルの種類に基づいてパケットを分類することであり、分類された階層によって扱いを変える。各トラフィック階層ごとに最適な転送レートがあり、それぞれを優先順位付けしてシェーピングする。この優先順位付けはネットワーク管理者がアプリケーションのタイプ毎に扱いを変えるよう設定でき(例えば、ファイル共有よりもVoIPを優先するなど)、基本サービスと有料サービスで差をつけるといったことが可能である。
階層化は様々な手段で行われる。プロトコルに特有のビットパターンとのマッチングは、単純だがよく使われている技法である。例えば、BitTorrentプロトコルのハンドシェイク・フェーズには特有のパターンがある。特定のプロトコルをある階層に分類した上で、それにポリシーを適用し、他のフローにもある程度の品質を保証する(例えば、VoIPやストリーミングなど)か、ベストエフォート(最大努力)型のサービス品質を提供する。これはネットワークにトラフィックが流入する地点で行われ、トラフィックシェーピング制御機構が階層分類されたフロー毎にシェーピングできる粒度で行われる。
自己制限型ソース(self-limiting source)とは、トラフィック生成時にそれがある上限を決して超えないもので、例えば動画や音声をリアルタイムで転送する場合、符号化レート以上に高速に転送することはできない。自己制限型ソースは多かれ少なかれ生成するトラフィックをシェーピングしていると言える。輻輳制御機構もトラフィックシェーピングに類した効果がある。例えば、TCPのウィンドウ機構は帯域幅遅延積に基づいた可変レート制限を実装している。このような機構は大雑把なトラフィックシェーピングとして有効な場合もある。
インターネットサービスプロバイダ (ISP) におけるトラフィックシェーピングは特に興味深い。トラフィックの多いネットワークはISPにとっては資産であり、全ての関心はそこに集まる。ISPはトラフィックシェーピングによってネットワークの利用効率を最適化し、重要性を知的に判断してシェーピングを行うこともあるが、単にある種のアプリケーションによる利用を妨害することで効率化しようとすることもある。ISPがトラフィックの「重要性」を判断するのはおかしいとする者もいて、ネットワーク中立性の議論の論点の1つでもある。
ISPにとっては、単なるプロトコルの識別をするだけでも、漠然とはしているがISPのネットワークをどのようなトラフィックが流れているかを知る大きな手がかりとなる。そこからISPはどの加入者がネットワーク上で何をしているかを知ることができ、加入者ごとのサービス提供のヒントにすることができる。しかし、トンネリングや暗号化されたパケットが多くなるにつれて、そのような手法は通用しなくなりつつある。また、多くのプロトコルは検出が困難か不可能である。そのような場合、クライアント毎のシェーピングが効果的となる。クライアントをIPアドレスやIPグループ単位にポリシー設定することで、ユーザーがプロトコルをごまかしたり暗号化してもシェーピングを逃れることができなくなる。
さらに、知的シェーピング手法によって特定のアプリケーションやユーザーの QoS を保証しつつ、残る帯域幅を他のトラフィックに利用可能とする。これにより、ISPはDiffServが可能となり、例えばゲーム向けの追加料金を支払うことで最小レイテンシを保証するといったサービスが可能となる。
トラフィックシェーピングと優先順位付けは、企業においては一般化しつつある。複数拠点をネットワークで繋いでいる多くの企業は、WANを使っている。アプリケーションの多くは中心となる拠点にあり、他の拠点はそこにあるデータベースやサーバファームからデータを取り出して利用するという形態が多い。アプリケーションが高度化するにつれて、より大きな帯域を必要とするようになり、企業にはビジネスに直結するトラフィックが他のトラフィックよりも優先されるような管理が必要となってきた。従ってトラフィックシェーピングは企業がリソースを適切に管理し、追加の帯域幅を購入するのを避ける手段となっている。
そのための技術として、トラフィックシェーピングとは全く異なるアプリケーションアクセラレーション、WAN最適化、WAN圧縮といった技法が登場している。アプリケーションアクセラレーションは性能向上プロキシ(PEP)などの技法を駆使する。WAN最適化とWAN圧縮は、ファイルの差分だけを送るとか、データストリームを圧縮するといった技法を使う。後者は特にCIFSのようなプロトコルに効果的である。