トラフィックシェーピング

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