2006年後半から次世代ネットワーク「NGN」が話題になっています。NGNは,IP技術をベースにしたネットワーク上で,さまざまな種類のサービスを提供しようというものです。Webアクセスや電子メールといったインターネット・サービスだけでなく,IP電話はもとより,急増している音楽配信や動画配信,企業での利用拡大が期待されるビデオ会議などの各種コラボレーション・サービス,電子決済サービスなどがNGN上で提供されることになる見込みです。

NGNとインターネットの違いは「QoS」

 しかし,NGNもIPをベースとしたネットワークである点はインターネットと同様です。高速のアクセス回線でNGNに接続したとしても,すべてのユーザーがアクセス回線の速度のままNGN上のサービスを利用できるわけではありません。IPネットワークの中では,1本の回線を複数のユーザーが共同利用しているからです。NGNを構成するすべての回線が無限の帯域をもっていれば,それぞれのユーザーがアクセス回線の速度でNGNを利用できることになりますが,有限の帯域の物理回線を使っている以上,すべてのユーザーが常に好きなだけ帯域を使えるというわけにはいかないのです。

 例えば,IP電話で通話をしている最中に,同じ物理回線を利用しているどこかのユーザーが巨大なファイルを大量にダウンロードし始めたところを想像してみてください。大量のトラフィックが発生した影響で,IP電話で通話している音声が途切れ途切れになってしまうかもしれません。しかし,IP電話を利用しているユーザーにしてみれば,こうした事態は納得のいくものではありません。

 有限の帯域を多くのユーザーが共用するネットワークである以上,そこにはルールが必要になります。つまり,サービスを提供する事業者が,各ユーザーがどれだけの帯域を使っていいのかをきっちりと制御する必要が出てくるのです。

 そこでNGNでは,「QoS」つまり「サービス品質の保証技術」を実装することをインターネットとの違いとしてアピールしています。

IPネットワークの帯域を有効活用するには何が必要?

 インターネットに代表される従来のIPネットワークでは,ベスト・エフォート型サービスが中心となっています。ベスト・エフォート型サービスとは,ネっトワークが空いているときはいくらでも帯域を利用できる一方,ネットワークが混雑してくるとまったく通信できなくなる可能性もある通信サービスを指します。ただし,インターネットがいくらベスト・エフォート型のサービスだといっても,ネットワークが混雑することでまったく通信できなくなるような事態は避けるようになっているのが普通です。そのために,インターネットでは比較的緩やかなQoS制御を行っています。

 一方のNGNは,ユーザーの利用方法に応じて,厳密なQoS制御を提供できるしくみを取り入れようとしています。NGNも,有限の帯域を多くのユーザーが共用しているネットワークである以上,それぞれの通信アプリケーションを支障なく動かすためにはルールが必要になります。つまり,サービスを提供する事業者が,各ユーザーや各アプリケーションがどれだけの帯域を使っていいのかをきっちりと制御する必要が出てくるのです。

 ただし,こうした帯域制御を実現するのは,技術的に見て難しい面があります。単純に,各ユーザーに利用できる帯域の上限を設定するというガチガチのルールを適用することも考えられますが,これはあまり望ましいものではありません。なぜなら,使われていない余っている帯域があれば,上限を設けずに利用できるほうが好ましいからです。また,あるパケットをほかのパケットよりも先に処理するという単純な優先制御技術だけでは,各ユーザーの帯域を適切に制御することはできません。

 IPネットワーク上で利用されるアプリケーションやサービスはそれぞれ,必要とする帯域が異なります。しかも,すべてのユーザーが四六時中ネットワークを利用しているわけでもありません。さまざまな条件を見て,利用するユーザーが少なくて回線が空いている状態なら通常よりも多くの帯域を利用できるようにし,多くのユーザーが使い始めてネットワークが混雑してきても最低限の帯域を保証するといった制御が,ユーザーにとって望ましいものといえるでしょう。

 このように1本の回線を利用する個々のユーザー/アプリケーションのトラフィックの帯域を一つひとつ制御することで,回線帯域を有効に利用することを「トラフィック・シェーピング」と呼びます。今回はこのトラフィック・シェーピングの制御方法を解説していきます。

帯域はパケットの送信間隔に置き換えられる

 各ユーザーおよび個々のアプリケーションのフローを識別して帯域を制御するには,まずそのフローが利用している帯域を計算する必要があります。この場合の「帯域の計算」は,純粋に「ビット数÷時間=ビット/秒」を求めるのではありません。フローを構成する一連のパケットの送信間隔を求めるのです。

 例えば,ギガビット・イーサネットの回線で特定のフローの帯域を10Mビット/秒で制限する場合を考えてみましょう。ここでは,一つのパケットでアプリケーションのデータを64バイト送る場合を想定します。アプリケーションのデータが64バイトずつ入ったパケットを連続して送るフローで,データ量が1秒間に10Mビットを超えないように制御するわけです。

 ギガビット・イーサネットといっても,実際にユーザー間で1Gビット/秒のアプリケーション・データをやりとりできるわけではありません。パケット(イーサネットの場合はMACフレーム)には,データ以外の部分もあるからです。イーサネットのMACフレームのケースで詳しく見ていきましょう。

 MACフレームの先頭には必ず合計8バイトの「プリアンブル」および「SFD」が付きます。さらに連続してMACフレームを送る場合でも,フレームとフレームの間には12バイト(96ビット)時間分の「IFG」が必要です。

 さらに,MACフレームのフォーマットにはあて先と送信元のアドレスを含む14バイトのMACヘッダーと誤り訂正用のFCS(frame check sequence)4バイトが含まれます。また,MACフレームのデータ部に入るIPパケットでも同様に20バイトのIPヘッダーが付き,IPパケットのデータ部に入るTCPパケットにも20バイトのTCPヘッダーが付きます。従って,アプリケーション用のデータを64バイト格納したMACフレームを送る場合,実際には,8バイト(プリアンブル/SFD)+14バイト(MACヘッダー)+20バイト(IPヘッダー)+20バイト(TCPヘッダー)+64バイト(アプリケーション・データ)+4バイト(FCS)+12バイト(IFG)=142バイトの帯域を消費していることになります(図1)。

図1●64バイトのアプリケーション・データを1個のMACフレームに入れてギガビット・イーサネット回線で送る
図1●64バイトのアプリケーション・データを1個のMACフレームに入れてギガビット・イーサネット回線で送る  [画像のクリックで拡大表示]

 ギガビット・イーサネットでは,1ビット送るのに1ナノ秒(ns)の時間がかかります。142バイトは1136ビットなので,64バイトのアプリケーション・データが入ったMACフレームを1個送るのにかかる時間は1.136マイクロ秒(μs)になります。

 では,この条件でアプリケーション・データに対して毎秒10Mビットの帯域を確保するにはどうすればいいのでしょうか。1個のMACフレームに含まれるアプリケーション・データは64バイト(=512ビット)なので,このフレームを51.2μsに1個送ることで10Mビット/秒の帯域を確保できます。実際には,ギガビット・イーサネットの回線で1個のMACフレームを送る時間が1.136μsなので,51.2-1.136=50.064μsの間隔を空けて続けてMACフレームを送り出せば,特定アプリケーションのフローを10Mビット/秒に制限できるのです(図2)。

図2●ギガビット・イーサネット回線で10Mビット/秒の帯域を確保する
図2●ギガビット・イーサネット回線で10Mビット/秒の帯域を確保する
[画像のクリックで拡大表示]

 こうしたMACフレームの送信間隔は,各ユーザーごともしくは各アプリケーションごとに必要となる情報です。仮に,1000ユーザーのトラフィックが相乗りする回線でトラフィック・シェーピングを実現するには,1000ユーザー分の情報を1度に管理する必要があるわけです。

林 剛久(はやし たけひさ)
アラクサラネットワークスCTO

岡野 薫(おかの かおる)
アラクサラネットワークス 第一製品開発部

<<【2】を読む