以下、本発明の実施の形態について、図面を参照して詳細に説明する。
(実施の形態1)
図1は、本発明の実施の形態1に係る中継装置を含む通信システムの全体構成を示すブロック図である。
図1の通信システムは、送信端末100、ルータ110,120、中継装置130、中継装置140、及び受信端末150を備えて構成される。
中継装置140は、識別部142、遅延部143、補正部146、及び送信部148を備える。
なお、中継装置130と中継装置140とは、同一の構成及び機能をとりうるが、ここでは、中継装置130は、単にルータ110からのストリームを中継してルータ120へ出力するものとして説明する。
送信端末100は、映像や音声などのマルチメディアデータの複数のストリームを受信端末150に対して送信する。また、送信端末100は、ストリームの送信時に、各ストリームを構成するパケットに対して、そのストリームの送信時刻であるタイムスタンプを刻印する。タイムスタンプの刻印の時刻粒度は、送信端末100のアプリケーションにより、自由に変更することができる。また、送信端末100から送信される複数のストリームは、同期して再生可能であれば、その内容や数は限定されず、例えば、階層符号化された複数のストリームであってもよい。
ルータ110,120は、ストリームのパケットに含まれる送信先アドレス情報に基づいてルーティングを行う。すなわち、ルータ110,120は、受信したストリームのパケットの分割・複製を行い、分割・複製されたストリームのパケットを、送信先アドレス情報に基づいて転送する。
識別部142は、送信端末100からの複数のストリームのパケットの中に記述されているヘッダを解析することにより、これらのストリームのうち、互いに関連がある複数のストリームを識別する。ここで、「互いに関係がある複数のストリーム」とは、例えば、テレビ会議における音声と画像のように、1つのセッションにおいて同期されるべき複数のデータのストリームを意味する。したがって、識別部142は、受信したパケットが属する通信のセッション及びそのセッションに含まれる複数のフローを識別する。
具体的には、識別部142による識別は、以下のようにして行われる。まず、識別部142は、ヘッダに記述された各ストリームの宛先アドレスや送信元アドレス、宛先ポート番号、送信元ポート番号などを解析する。この解析により、通信のセッションを特定し、次いで、特定されたセッションに含まれる複数のフローを識別する。
遅延部143は、識別部142により識別された、1つのセッションに含まれる複数のフローに対して一時蓄積遅延処理を行う。すなわち、遅延部143は、1つのセッションに含まれる複数のフローのパケットを送信すべき時刻を特定し、特定された時刻まで、そのセッションに含まれる複数のフローを蓄積することによりパケットの送信を遅延させる。ここで、「パケットを送信すべき時刻」は、各パケットに刻印されたタイムスタンプと、各パケットの遅延部143への到着時刻とにより決定されるが、詳細については、後の動作説明で説明する。
また、遅延部143は、パケット単位で、タイムスタンプが刻印されたパケットそのものを示す情報と、パケットの遅延部143への到着時刻と、そのパケットが属するセッションのパケットを送信すべき時刻とを対応付けて格納する記憶部144を有している。また、遅延部143は、記憶部144に格納されるこれらの情報を更新するための最大フロー数管理表、及び差分時間管理表を保持している。これらの詳細については、後の動作説明で、図3乃至図5を用いて説明する。
また、遅延部143は、1つのセッションに含まれる複数のフローのパケット、これらのパケットの遅延部143への到着時刻、及びパケットを送信すべき時刻を含むデータを、遅延部143の内部に保持する送信待ちキュー145に格納する。
補正部146は、送信待ちキュー145に格納されたデータに基づいて、1つのセッションに含まれる各パケットについて、これらのパケットが遅延部143で一時蓄積された時間の分だけタイムスタンプを補正する。具体的には、補正部146は、各パケットについて、各パケットを送信すべき時刻から各パケットの到着時刻を減算して、各パケットが遅延部143に一時蓄積された時間を計算し、この一時蓄積された時間の分だけ、各パケット中のタイムスタンプ欄に記述された時刻を足し上げる。
送信部148は、遅延部143の送信待ちキュー145に格納されたすべての情報について走査し、受信端末150に対してパケットを送信する。このとき、送信部148は、上記パケットを送信すべき時刻を含む情報と現在時刻とを比較して、これらの時刻が一致した場合、またはパケットを送信すべき時刻が現在時刻よりも経過している場合に、受信端末150に対してパケットを送信する。
送信部148から送信された各パケットは、同期処理が実現されているのみならず、遅延部143で一時蓄積された時間の分だけタイムスタンプが補正されている。したがって、タイムスタンプを用いて送信端末100と受信端末150との間の往復時間を計測する場合、遅延部143での一時蓄積時間を除いた時間が計測される。
受信端末150は、中継装置140の送信部148からの1つのセッションに含まれる複数のフローのパケットを受信して再生する。
以下、上述のように構成された通信システムの動作について詳細に説明する。
まず、送信端末100から、映像や音声などのマルチメディアデータの複数のストリームが受信端末150に対して送信される。ここでは、送信端末100から受信端末150に対して送信されるストリームは、音声情報である第1のストリームと動画情報である第2のストリームとの2つであり、これらのストリームは時刻T0に同時に送信端末100から送信されるものとして説明する。第1のストリーム及び第2のストリームのパケットには、これらのストリームが受信端末150で同期して再生可能なように、送信時刻であるタイムスタンプがそれぞれ刻印されている。
なお、ここでは、第1のストリームを音声情報、第2のストリームを動画情報としたが、本発明に適用できるストリームは、これに限定されない。例えば、階層符号化された複数のストリームであってもよいし、3以上の複数のストリームであってもよい。すなわち、同期して再生する複数のストリームであれば、その内容及び数は限定されない。
送信端末100から送信された第1のストリーム及び第2のストリームは、それぞれ異なる経路で中継装置140に配送される。ここでは、その一例として、第1のストリームが、ルータ110→中継装置130→ルータ120→中継装置140の順で配送されて時刻T1に中継装置140に到着するものとする。第2のストリームは、ルータ110→ルータ120→中継装置140の順で配送されて時刻T2に中継装置140に到着するものとする。また、第2のストリームは、第1のストリームよりもT秒遅く中継端末140に到着するものとして説明する。すなわち、T2−T1=Tが成り立つ。
なお、本発明は、Tが正の数である場合のみならず、Tが負の数、つまり、第1のストリームが第2のストリームよりもT秒遅く中継端末140に到着する場合にも適用可能である。すなわち、第1のストリームの到着時刻と第2のストリームの到着時刻とに差があるすべての場合について適用可能である。
識別部142は、第1のストリームに記述されているヘッダ、及び第1のストリームよりT秒遅く到着した第2のストリームに記述されているヘッダをそれぞれ解析して、第1のストリームと第2のストリームとが互いに関連があるストリームであることを識別する。すなわち、音声情報である第1のストリーム及び動画情報である第2のストリームは、1つのセッションにおいて同期されるべきストリームであるかどうかが識別される。
ここで、識別部142による識別動作について、図2を用いて説明する。図2は、ストリームのパケットに記述されているヘッダ構造の一例を示す図である。
ヘッダ160は、ネットワークヘッダ部161、トランスポートヘッダ部162、RTPヘッダ163、及びペイロード164からなる。ネットワークヘッダ部161は、宛先アドレス165及び送信元アドレス166を含む。トランスポートヘッダ部162は、宛先ポート番号167、送信元ポート番号168、データタイプ169、データクラス170、タイムスタンプ171、及び通番172を含む。
宛先アドレス165及び送信元アドレス166は、IPv4やIPv6などのネットワーク上のアドレスである。ネットワークヘッダ部161には、IPヘッダを抽象的に表したIPv4やIPv6で定義されているIPヘッダに含まれる項目が含まれてもよいし、ホップバイホップ(Hop-by-Hop)オプションヘッダや宛先オプションヘッダが含まれてもよい。また、ネットワークヘッダ部161には、例えば、文献(Y. Imai, M. shin and Y. Kim, “XCAST6 : eXplict Multicast on IPv6”, IEEE/IPSJ SAINT2003 Workshop 4, IPv6 and Applications, Orland, Jan. 2003.)で知られているXCASTのヘッダが含まれてもよい。
宛先ポート番号167及び送信元ポート番号168は、例えば、UDP(User Define Protocol)などのトランスポートプロトコルの宛先ポート番号及び送信元ポート番号である。データタイプ169は、そのパケットがストリームを構成するデータの一部なのか、制御パケットなのかを区別するための領域である。データタイプ169は、トランスポートプロトコルによって、例えば、ビットフラグや数など、その実現方法が変わりうる。
データクラス170は、複数のストリームの複数のデータフローを多重化する領域である。データクラス170には、そのデータフローを含むセッションが有しているデータフローの数が記述されており、データクラス170に記述されている最大値が1つの通信のセッションの中のフローの数を表す。タイムスタンプ171は、パケットの送信端末100からの送信時刻を記録する領域である。通番172は、データフローを構成するパケット毎に付与された番号である。
RTPヘッダ163は、アプリケーションがストリームを再生するために必要な情報を格納する。アプリケーションがストリームを再生するために必要な情報には、例えば、アプリケーションでの音声や動画などの再生タイミングを規定するためのタイムスタンプや通番といった情報が含まれる。ペイロード164は、音声や画像などの送信したいデータ本体である。
なお、ヘッダ160の構成順序は、図2の並びに限定されない。例えば、データクラス170が、RTPヘッダ163の後に出現してもよいし、宛先ポート番号167の位置と送信元ポート番号168の位置とが逆転してもよい。
まず、識別部142は、ヘッダ160に記述された宛先アドレス165、送信元アドレス166、宛先ポート番号167、及び送信元ポート番号168を解析して通信のセッションを特定する。次いで、識別部142は、データクラス170により、特定されたセッションに含まれる複数のフローを識別する。このようにして、識別部142では、パケットのヘッダ160を解析することにより、通信のセッション及びそのセッションに含まれる複数のフローが識別される。上記の例では、先に到着した第1のストリームのヘッダを解析することにより、第1のストリームのフローと第2のストリームのフローとの2つのフローからなるセッションが存在することが識別される。
なお、通信のセッションの識別には、上記の他にも以下のような方法を用いることができる。例えば、宛先アドレス165のみを用いてもよいし、宛先ポート番号167及び送信元ポート番号168のかわりに、RTPヘッダ163に含まれるSSRC(送信元識別子)を用いてもよい。また、IPv6ヘッダのトラフィッククラスやオプションヘッダ中の特定のチャネル識別子を用いてもよい。
また、セッションに含まれる複数のフローを特定するには、上記の他にも以下のような方法を用いることができる。例えば、IPv6ヘッダのフローラベルを用いてもよいし、独自に定義したヘッダを追加して用いてもよい。また、送信元アドレス166、宛先ポート番号167及び送信元ポート番号168を用いることも可能であるし、VLAN番号やMPLSのラベルなど下位層の仮想回線を多重化するための識別子を用いることも可能である。
識別部142の機能を実現する方法としては、上記説明で用いられていないヘッダ160の領域またはその領域の一部を用いて、通信のセッションを識別し、そのセッションの中の複数のフローを識別しうる。換言すれば、識別部142の機能は、トランスポートプロトコル毎に様々な方式で実現することができる。
遅延部143では、識別部142により識別された、1つのセッションに含まれる複数のフローに対して一時蓄積遅延処理が行われる。すなわち、遅延部143では、1つのセッションに含まれる複数のフローのパケットを送信すべき時刻を特定し、特定された時刻まで、そのセッションに含まれる複数のフローを蓄積することによりパケットの送信を遅延させる。
具体的には、遅延部143では、まず、通信のセッション毎に各フローのパケットのタイムスタンプ171が検査され、各フローのパケットのタイムスタンプの値が記憶される。このとき、遅延部143は、データクラス170の値によって、1つのセッションにおいていくつのフローが存在するか知ることができる。また、遅延部143では、各フローのパケットのタイムスタンプの値と遅延部143が保持する時刻情報との差分から、どのフローのパケットが最も遅く到着し、どのフローのパケットが最も早く到着しているかが判定される。
そして、遅延部143では、1つのセッションに含まれる最も遅いフローが到着し、そのセッションに含まれる複数のフローを送信すべき時刻まで、既に遅延部143に到着している他のフローの各パケットが一時蓄積される。「フローを送信すべき時刻」は、最も遅いフローが到着したタイミング、または最も遅いフローが到着した後のタイミングで設定される。上記の例では、第1のストリームは、第2のストリームよりもT秒早く中継端末140に到着するので、第1のストリームのパケットは、遅延部143でT秒又はT秒以上一時蓄積されることになる。
ところで、1つのセッションに含まれる最も遅いフローが到着するまでに既に到着した各パケットは、すべてが同時に遅延部143に到着するわけではない。すなわち、1つのセッションに含まれる各パケットが遅延部143に一時蓄積される時間は、パケット毎に異なりうる。したがって、遅延部143では、1つのセッションに含まれるパケット単位で、タイムスタンプや遅延部143への到着時刻などの情報を管理して、これらを送信すべき時刻を特定する必要がある。以下、この動作について説明する。
上記のように、遅延部143の記憶部144は、パケット単位で、タイムスタンプが刻印されたパケットそのものを示す情報と、パケットの遅延部143への到着時刻と、そのパケットが属するセッションのパケットを送信すべき時刻とを対応付けて格納する。
図3は、記憶部144がパケット毎に管理するデータの構造を示す図である。
図3において、パケット180は、パケットそのものを示す情報であり、パケットが送信端末100から送信された時刻を記述するタイムスタンプ欄が含まれている。到着時刻記憶領域182は、パケットの到着時刻を記録する領域である。送信時刻記憶領域184は、そのパケットのセッションに含まれる複数のフローのパケットを送信すべき時刻を記録する領域である。送信時刻記憶領域184への時刻の記録方法については、後に詳細に説明する。パケット180と、到着時刻記憶領域182と、送信時刻記憶領域184とは、リスト構造で結合されて管理されることで互いに関連付けて記録される。
遅延部143は、通信のセッションの各フローのパケットを受信すると、すべてのパケットについて、到着時刻記憶領域182にパケットの到着時刻を記録する。また、遅延部143は、パケットを受信する毎に、遅延部143が保持する最大フロー数管理表を更新する。
図4は、最大フロー数管理表のデータ構造を示す図である。
図4において、通信のセッション欄190には、識別部142によりセッション毎に割り当てられた識別子が記述される。最大フロー数欄192には、通信のセッション欄190に記述されたセッションに対応するフローの数が記述される。また、最大フロー数欄192に記述されるフロー数は、例えば、階層符号化マルチキャスト通信における流量制御が行われる場合には、更新されうる。
遅延部143では、パケットを受信する毎に、ヘッダ160中のデータクラス170の最大値を検査することにより、そのパケットを含むセッションに対応する最大フロー数欄192が更新される。データクラス170の最大値と最大フロー数欄192に記述された数とが同一になることは、セッションに含まれるすべてのパケットが受信されたことを意味する。すなわち、遅延部143の更新により、送信時刻記憶領域184に記録される時刻の更新が完了し、そのセッションに含まれるすべてのパケットを送信すべき時刻を確定することができる。以下、パケットを送信すべき時刻の確定処理について説明する。
遅延部143では、受信したパケット180の中のタイムスタンプ欄に記述されている時刻と到着時刻記憶領域182に記述されているパケットの到着時刻との差分時間が計算され、遅延部143が保持する差分時間管理表が更新される。
図5は、差分時間管理表のデータ構造を示す図である。
図5において、通信のセッション欄194には、識別部142によりセッション毎に割り当てられた識別子が記述される。フロー欄196には、セッションに含まれる各フローのナンバーがセッション毎に記述される。通信のセッション欄194とフロー欄196との組み合わせは、キー項目であり、上記最大フロー数管理表の最大フロー数欄192の更新にあわせて、これらのキー項目が設定される。例えば、図4の最大フロー数欄192が更新されて“2”となった場合、図5の通信のセッション欄194及びフロー欄196には、それぞれ2行の領域が確保される。差分時間欄198には、パケット180の中のタイムスタンプ欄に記述されている時刻と到着時刻記憶領域182に記述されているパケットの到着時刻との差分時間が記述される。
なお、差分時間欄198に記述される差分時間は、上記のように、パケット180の中のタイムスタンプ欄に記述されている時刻と到着時刻記憶領域182に記述されているパケットの到着時刻との差分時間により、単純に毎回更新してもよいし、例えば、過去N回分の差分時間を加重平均したものにより更新してもよい。
遅延部143は、受信したパケットに対応する差分時間管理表を更新すると同時に、既に受信しているパケットを一時蓄積して遅延させるべき時間、つまり、パケットを送信すべき時刻を決定する。
具体的には、まず、遅延部143は、通信のセッションのフロー毎に、差分時間欄198に記述されている時間を比較して、そのセッションの中で最も遅く到着しているフローを特定する。次に、遅延部143は、セッションの中で最も遅く到着しているフローの差分時間欄198に記述されている値をDMAXとして、そのセッションの他のフローの差分時間欄198に記述されている値(Di)のそれぞれについて、DMAX−Diを計算する。DMAX−Diで表される値は、そのパケットを一時蓄積して遅延させるべき時間を示している。そして、遅延部143は、DMAX−Diの値から、パケットを送信すべき時刻を決定して、送信時刻記憶領域184に記述する。具体的には、遅延部143は、各パケットについて、到着時刻記憶領域182に記述されたパケットの到着時刻とDMAX−Diで示される値とを加算した時刻を、パケットを送信すべき時刻として送信時刻記憶領域184に記述する。また、パケットを一時蓄積して遅延させる時間は、DMAX−Diに限定されない。例えば、パケットを一時蓄積して遅延させる時間は、DMAX−Diに任意の係数α(αは1.0以上の数)をかけ、α(DMAX−Di)としても良い。このように、1つのセッションに含まれる最後のパケットが到着したタイミング、又は前記最後のパケットが到着してから所定の時間が経過したタイミングを、パケットを送信すべき時刻として送信時刻記憶領域184に記述することができる。
例えば、図5において、セッションBに含まれるフローが、フローB1〜フローB3であるとする。このとき、DMAX=305なので、フローB2を一時蓄積する時間は、305−215=90であり、フローB3を一時蓄積すべき時間は、305−125=180である。
遅延部143では、1つのセッションに含まれるすべてのパケットが受信されるまで上記一連の動作が繰り返されることにより、そのセッションに含まれるすべてのパケットを同時に送信すべき時刻が決定され、各パケットの送信時刻記憶領域184に記述される。
また、遅延部143は、1つのセッションに含まれるすべてのパケットを受信すると、図3に示すすべてのデータ(パケット180、到着時刻記憶領域182に記述されたパケットの到着時刻、及び送信時刻記憶領域184に記述されたパケットを送信すべき時刻)を、遅延部143の内部に保持する送信待ちキュー145に格納する。
補正部146では、送信待ちキュー145に格納されたデータに基づいて、1つのセッションに含まれる各パケットについて、これらのパケットが遅延部143で一時蓄積された時間の分だけタイムスタンプが補正される。具体的には、補正部146は、各パケットについて、各パケットを送信すべき時刻から各パケットの到着時刻を減算して、各パケットが遅延部143に一時蓄積された時間を計算し、この一時蓄積された時間の分だけ、各パケット中のタイムスタンプ欄に記述された時刻を足し上げる。上記の例では、第1のストリームのパケットに刻印されたタイムスタンプに記述された時刻T0に、第1のストリームが蓄積された時間であるTだけ足しあげて、T0+Tに補正する。
なお、中継装置140の上流(又は下流)の中継装置における一時蓄積処理により、タイムスタンプ欄に記述された時間にこれらの中継装置での一時蓄積時間が加算(又は減算)されている場合には、これらの一時蓄積時間を相殺するようなタイムスタンプの補正を行うことも可能である。例えば、タイムスタンプの補正は、第1のストリームのパケットに刻印されたタイムスタンプに記述された時刻T0に、第1のストリームが蓄積された時間であるTにβを乗じた時間を足しあげて、T0+βT(βは正の任意の係数)に補正することもできる。
ここで、補正部146は、タイムスタンプを補正するために、タイムスタンプの刻印粒度を知る必要がある。タイムスタンプの刻印粒度は、補正部146が予め知っていてもよいし、中継装置140が推定してもよい。中継装置140におけるタイムスタンプの刻印粒度の推定は、例えば、以下のようにして実現されうる。
すなわち、中継装置140で、通信のセッションのそれぞれのフロー毎にフローキューと呼ばれるキューを設ける。識別部142では、受信したパケットをそれぞれのフローキューに格納する。このとき、フローキューに格納された前後のパケットの通番172を比較し、通番172に隔たりがない場合、この2つのパケットの到達時刻記憶領域に記録されている時間の差を計算してDgapとし、この2つのパケットのタイムスタンプの差を計算してDtsとする。DgapとDtsとの比を検査することにより、タイムスタンプの刻印粒度を推定することができる。すなわち、同一経路で受信した連番のパケットの到着時刻の差Dgapとタイムスタンプの値の間隔Dtsとの比(Dgap/Dts)を求め、この比の平均値やばらつきから、送信端末におけるタイムスタンプの刻印粒度の信頼性を確認する。このようにして、送信端末から時々刻々と送信されるストリーミングの送信間隔、つまり、これらのストリーミングのパケットに刻印されたタイムスタンプの刻印粒度を推定することができる。なお、この推定方式の、Dgap及びDtsの算出には、例えば、これらの過去M回分の平均を用いるようにしてもよい。
補正部146がタイムスタンプの刻印粒度を知るためには、送信端末100からの制御パケットを受信する必要があるので、中継装置140がタイムスタンプの刻印粒度を推定することにより、タイムスタンプからの刻印粒度を知らせるための制御パケットを削減することができる。
送信部148では、遅延部143の送信待ちキュー145に格納されたすべてのデータが走査され、受信端末150に対してパケットが送信される。このとき、送信部148では、上記パケットを送信すべき時刻を含む情報と現在時刻とを比較して、これらの時刻が一致した場合、またはパケットを送信すべき時刻が現在時刻よりも経過している場合に、受信端末150に対してパケットを送信する。
ここで、送信待ちキューに格納されたすべてのパケットを送信すべき時刻は、厳密には、上述したタイムスタンプの刻印粒度により異なりうる。送信部148によるこれらのパケットの具体的な送信処理は、例えば、マルチタスクをサポートするOS上の1つのタスクを用いて、以下のように実現可能である。
まず、送信部148は、遅延部143の送信待ちキュー145に格納されたすべてのデータについて走査し、送信時刻記憶領域184に記憶されている領域が最も近いもの(最も近い未来に送信すべきと記憶されているもの)を選択する。そして、このパケットをPNEXT、PNEXTの送信時刻をTNEXT、現在時刻をTNOWとして、TNEXT−TNOW≧0を満たした後に、送信部148は、PNEXTの送信処理を行う。次いで、送信部148は、送信時刻記憶領域184に記憶されている領域がPNEXTの次に近いパケットについて、同様の送信処理を行う。このような処理を繰り返し行うことで、全ての送信待ちキュー145に格納されたすべてのデータが順次送信され、送信部148の処理を連続的に無矛盾に実行可能となる。
送信部148から送信された各パケットは、同期処理が実現されているのみならず、遅延部143で一時蓄積された時間の分だけタイムスタンプが補正されている。したがって、タイムスタンプを用いて送信端末100と受信端末150との間の往復時間を計測する場合、遅延部143での一時蓄積時間を除いた時間が計測される。
受信端末150では、中継装置140の送信部148からの1つのセッションに含まれる複数のフローのパケットが受信され、再生される。
以上説明したように、本実施の形態によれば、遅延部143が、同期して送信すべき1つのセッションに含まれる複数のパケットを、送信すべき時刻まで一時蓄積してパケット遅延させ、補正部146が、一時蓄積した各パケットについて、一時蓄積された時間の分だけ、各パケット中のタイムスタンプ欄を補正するようにした。これにより、送信端末からの関連する複数のストリームのパケットが異なる経路で受信端末に伝送される場合であっても、受信端末の無駄な記憶領域を省略するとともに、複数のストリームを同期させて受信端末に伝送することができる。
また、送信端末と受信端末との間で階層符号化を用いたストリームの伝送が行われ、その伝送で帯域推定が行われている場合であっても、不必要に低い帯域を推定することを防止することができ、受信端末で複数のストリームから高品質なデータを再生することができる。
すなわち、識別部142、遅延部143、補正部146、及び送信部148が、上記のような処理を行うことにより、中継装置140における同期処理を実現することができる。このとき、同期される各パケット中のタイムスタンプが、遅延部143で一時蓄積された時間の分だけ補正されているので、送信端末100と受信端末150との間でタイムスタンプを用いてパケットの往復時間の計測を行っても、不必要にパケットの往復時間を多く計測してしまうことがない。結果として、送信端末100と受信端末150との間で、このパケットの往復時間を用いた帯域推定値を利用した流量制御が行われている場合でも、送信速度が不必要に低下することがなくなる。
また、補正部146のタイムスタンプ補正においては、タイムスタンプの刻印粒度をパケットの送信間隔から推定した結果を元にタイムスタンプを補正する。また、送信部148では、このタイムスタンプを元に再度送信を行うので、例外的にジッタを伴いながら到着時刻がずれて到着するパケットが存在する場合でも、送信端末が刻印したタイムスタンプの時刻に従って正確に再送信することができる。
(実施の形態2)
実施の形態2は、階層符号化とマルチキャスト通信とを組み合わせて利用する伝送方式に本発明を適用した例である。本実施の形態では、そのような伝送方式の中でも、特に、後述するSICC(Sender Initiated Congestion Control)と呼ばれる伝送方式に対して本発明を適用した場合について説明する。すなわち、本実施の形態は、実施の形態1の中継装置を、SICC伝送方式の中継装置に適用した例である。そこで、まず本実施の形態の前提となるSICCについて説明した後に本発明の適用例を説明することにする。
階層符号化とは、例えば、映像信号や音声信号などから、基本階層と基本階層以外の1つ以上の差分階層とからなる階層化されたデータを作成することをいう。作成された階層化データは、複数の受信端末に対して送信されるが、各受信端末は、基本階層のデータに加え、自端末の性能や通信環境、希望する受信データの品質などに応じた差分階層のデータを受信する。一般的に、受信端末は、受信する差分階層のデータを増やすことで、より高品質の映像を再生することができる。
このような階層符号化とマルチキャスト通信とを組み合わせて利用する伝送方式としては、例えば、文献(L. Vicisano, L. Rizzo, J. Crowcroft, “TCP-like congestion control for layered multicast data transfer”, Proc. IEEE ONFOCOM'98, Mar. 1998.)に示される方式がある。この方式による送信端末は、異なる符号化レートでエンコードされた複数のストリームを、それぞれ複数の異なるマルチキャストグループを用いて送信し、受信端末は、複数のストリームを受信し、同期して再生する。
このとき、それぞれのマルチキャストグループの配送経路が異なる場合や中継装置で特定のマルチキャストグループの優先制御が行われている場合には、複数のストリームが受信端末に到着するタイミングがずれることがある。その場合、中継装置又は受信端末で同期処理を行う必要がある。
複数の端末に対して、複数のストリームを流量制御しながら伝送する方式として、文献(村本衛一、米田孝弘、鈴木史章、鈴木良宏、中村敦司,“送信者起動マルチキャストにおける輻輳制御方法の提案”,インターネットカンファレンス 2003論文集 p5〜p10,2003年10月)で知られているSICC(Sender Initiated Congestion Control)がある。SICCでは、複数の端末にパケットを届ける方法として、文献(Y. Imai, M. Shin and Y. Kim, “XCAST6:eXplict Multicast on IPv6”, IEEE/IPSJ SAINT2003 Workshop4, IPv6 and Applications, Orland, Jan. 2003)で知られているXCASTを利用し、帯域推定方式として、上述したRFC3448で規定されるTFRC(TCP friendly rate control)を利用する。
まず、XCASTについて説明する。XCASTとは、送信端末が、グループに属する全受信端末の宛先アドレスを、パケット内のオプションヘッダ又はペイロードに格納することにより、送信端末がパケットを配信する全受信端末を明示的に指定する明示的マルチキャスト方式の代表的な方式である。
XCASTでは、中継装置(ルータなど)がXCASTに対応していない場合、パケットは、未配送の1台の受信端末に届けられる。受信端末は、パケット中に未配送の受信端末が残っている場合、パケットをその未配送の受信端末に対して送信し直す。受信端末がこの動作を繰り返すことで、すべての受信端末にパケットが配送される。
図6は、XCASTを説明するための通信ネットワークの構成の一例を示す図である。
図6の通信システムは、送信端末200、3台の中継装置210〜214、及び5台の受信端末220〜228を備えて構成される。なお、中継装置の台数及び受信端末の台数は特に限定されず、これらを接続する方法も任意である。
送信端末200は、入力した原データを階層符号化して階層化データを作成し、作成した各階層化データに対して送信先アドレスなどの情報を付与したパケットを生成する。また、送信端末200は、生成した各パケットを通信ネットワーク上に送信する。中継装置210〜214は、パケットに含まれる送信先アドレス情報に基づいてルーティングを行う。受信端末220〜228は、送信端末200が配信したパケットを受信する。また、受信端末220〜228は、受信したデータをデコードし、基本階層のデータと差分階層のデータとを合成する。
送信端末200が生成して送信するパケットについて、図7を用いて説明する。
図7(A)〜図7(E)は、XCAST方式のパケットの一例を示す図である。なお、図7(A)〜図7(E)は、パケットとしてXCAST方式によるIPv6パケットを用いた場合の例である。
図7(A)〜図7(E)において、IPv6パケット230は、ユニキャストヘッダ232、ルーティングヘッダ234、及び映像データなどの送信したいデータ本体であるペイロード236を有する。
ユニキャストヘッダ232は、宛先アドレス及び送信元アドレスをそれぞれ1つずつ記述する領域である。例えば、図7(A)では、宛先アドレスとして受信端末(R1)220のアドレスが(dst=R1)、送信元アドレスとして送信端末(S)200のアドレスがそれぞれ記述されている。ユニキャストヘッダ232に記述される宛先アドレスは、ルーティングヘッダ234に記述される未配送のアドレスの中の最上位のアドレスである。このように、ユニキャストヘッダ232に受信端末のアドレスを1つ記述しておくことで、経路上の中継装置がXCASTに未対応の場合でも、この中継装置は、XCAST方式のIPv6パケット230をユニキャスト方式のパケットとして認識し、ユニキャストヘッダ232に記述された宛先アドレスが指し示す受信端末へ向けてパケットを転送することができる。
ルーティングヘッダ234は、送信先となる受信端末のアドレスリスト、及びアドレスリストに記述された各受信端末に対してパケットを配信済みか未配送かを示すフラグを記述する領域である。例えば、図7(A)では、受信端末(R1)220、受信ノード(R3)224、及び受信ノード(R4)226が記述されている。アドレスリストに記述される宛先アドレスには順序があり、図7(A)では、左側に位置するR1が最上位、右側に位置するR4が最下位である。前述の通り、ルーティングヘッダ234の未配送かつ最上位の宛先アドレスが、ユニキャストヘッダ232に記述される。
図6の通信システムにおいて、送信端末200が、受信端末(R1)220、受信端末(R3)224、及び受信端末(R4)226に図7(A)のパケットを送信する場合における各中継装置210〜214の動作を説明する。ここでは、中継装置210〜214がXCASTに対応している場合について説明する。
送信端末200から中継装置210に、図7(A)のパケットが送信されると、中継装置210は、受信したパケットを分割・複製する。具体的には、図7(A)のパケットは、受信端末(R3)224及び受信端末(R4)226の宛先アドレスを配送済みにした受信端末(R1)220宛てのパケット(図7(B)参照)と、受信端末(R1)220の宛先アドレスを配送済みにし、ユニキャストヘッダ232に受信端末(R3)224の宛先アドレスが記述された受信端末(R3)224及び受信端末(R4)226宛てのパケット(図7(C)参照)とに分割・複製される。図7(B)のパケットは、受信端末(R1)220に転送され、図7(C)のパケットは、中継装置212に転送される。
中継装置212は、図7(C)のパケットを、受信端末(R4)226の宛先アドレスを配送済みにした受信端末(R3)224宛てのパケット(図7(D)参照)と、受信端末(R3)224の宛先アドレスを配送済みにし、ユニキャストヘッダ232に受信端末(R4)226の宛先アドレスが記述された受信端末(R4)226宛てのパケット(図7(E)参照)とに分割・複製する。図7(D)のパケットは、受信端末(R3)224に転送される。また、図7(E)のパケットは、中継装置214に転送され、受信端末(R4)226にさらに転送される。
このように、各中継装置は、通信システム内の各中継装置がXCASTに対応している場合、受信したパケット内のアドレスリストを参照して、パケットの分割・複製、及び転送を行いながら、各受信端末に対してパケットを効率的に配送する。
次に、中継装置210〜214のすべてがXCASTに未対応の場合における中継装置及び受信端末の動作を説明する。ここでも、図6の通信システムにおいて、送信端末200が、受信端末(R1)220、受信端末(R3)224、及び受信端末(R4)226に図7(A)のパケットを送信する場合における各中継装置210〜214の動作を説明する。
送信端末200から中継装置210に、図7(A)のパケットが送信されると、中継装置210は、図7(A)のパケットを、ユニキャストヘッダ232に記述された宛先である受信端末(R1)220に転送する。
受信端末(R1)220は、図7(A)のパケットを受信すると、アドレスリストに記述されているアドレスを参照して新たなパケット図7(C)を生成する。図7(C)のパケットは、受信端末(R1)220の宛先アドレスを配送済みにし、ユニキャストヘッダ232に受信端末(R3)224の宛先アドレスが記述された中継装置210宛てのパケットである。このパケットは、中継装置210及び中継装置212を経由して、受信端末(R3)224に転送される。
受信端末(R3)224は、図7(C)のパケットを受信すると、アドレスリストに記述されているアドレスを参照して新たなパケット図7(E)を生成する。図7(E)のパケットは、受信端末(R3)224の宛先アドレスを配送済みにし、ユニキャストヘッダ232に受信端末(R4)226の宛先アドレスが記述された中継装置212宛てのパケットである。このパケットは、中継装置212及び中継装置214を経由して、受信端末(R4)226に転送される。
このように、中継装置210〜214がXCASTに未対応の場合、各中継装置は、パケットの分割・複製を行わず、ユニキャストヘッダ232に記述された宛先アドレスの受信端末に向けて転送する。ユニキャストヘッダ232に記述される宛先アドレスは、ルーティングヘッダ234に記述されたアドレスリストの順序に従う。したがって、送信されたパケットの受信端末間の配送順序は、送信端末200がルーティングヘッダ234に記述したアドレスリストの順序に依存する。
以上説明したように、XCASTにおいては、通信システム内の中継装置がXCASTに対応している場合のみならず、通信システム内にXCASTに未対応の中継装置がある場合であっても、パケットの配送を実現することができる。
上記のように、SICCは、XCASTにおいて、TFRCを利用した流量制御を実現する方式である。以下、TFRCを利用した流量制御について説明する。
SICCにおいて、送信端末は、XCASTパケットを送信する受信端末を、各受信端末の性能や通信環境に基づいた複数のクラスに分類し、分類されたクラス毎に異なるレートのXCASTパケットを送信する。クラスの分類(送信端末から受信端末への送信可能レートの推定)は、TFRCを利用して各受信端末について行われ、各受信端末のクラスは、逐次更新されうる。また、それぞれのXCASTパケットは、分類されたクラスに対応する受信者のアドレスに配送される。
このように、分類されたSICCのクラス毎に、階層符号化でエンコードされた複数のストリームを送信することにより、利用可能な帯域が大きい受信端末(群)には、高詳細な動画を送信し、利用可能な帯域が小さい受信端末(群)には、粗い動画を送信するといった適応流量制御が可能となる。
次に、図6の通信システムに本発明の中継装置の同期方式(一時蓄積及びタイムスタンプの補正)を適用した動作について説明する。図6の例では、中継装置210〜214が、同期して送信すべき階層符号化された複数のストリームを一時蓄積するとともに、一時蓄積された各ストリームのパケットに記述されたタイムスタンプの値を補正する。
図6において、中継装置210〜214は、それぞれ図1の中継装置140と同一の機能を有している。すなわち、中継装置210〜214は、1つのセッションにおいて同期されるべき複数のストリームを識別する。また、中継装置210〜214は、これらのストリームがすべて到着するまで、先に到着したストリームに対して一時蓄積遅延処理を行う。さらに、中継装置210〜214は、一時蓄積遅延処理を行った各ストリームに対して、一時蓄積した時間だけタイムスタンプの値を補正する。
例えば、中継装置214が送信端末200から時刻Taに送信された上位階層のストリーム及び下位階層のストリームを同期して受信端末228に送信する場合について考える。ここで、上位階層のストリームが、中継装置210→中継装置212→受信端末222→中継装置212→中継装置214の順に伝送され時刻Tbに中継装置214に到着し、下位階層のストリームが、中継装置210→受信端末220→中継装置210→中継装置212→受信端末222→中継装置212→中継装置214の順に伝送され時刻Tcに中継装置214に到着するものとする。また、上位階層のストリームは、下位階層のストリームよりもTdだけ早く中継装置214に到着するものとする(つまり、Tc−Tb=Td)。
中継装置214は、上位階層のストリームを受信すると、受信した上位階層のストリームは、後で到着する下位階層のストリームと同期させて受信端末228に送信すべきストリームであることを識別する。そして、中継装置214は、先に到着した上位階層のストリームを、下位階層のストリームが到着するまで一時蓄積する。この一時蓄積時間は、例えば、Tdである。最後に、中継装置214は、上位階層のストリーム及び下位階層のストリームを同期させて、下位階層のストリームが到着したタイミング、又は下位階層のストリームが到着した後のタイミングで受信端末228に送信する。
このとき、中継装置214は、先に到着した上位階層のストリームのタイムスタンプに記述された値Taを補正する。このタイムスタンプの補正は、具体的には、上位階層のストリームのタイムスタンプに記述された値Taに、上位階層のストリームの中継装置214での一時蓄積時間を加算することにより行われる。例えば、一時蓄積時間がTdであれば、上位階層のストリームのタイムスタンプに記述される値は、TaからTa+Tdに補正される。
このように、SICCを用いた伝送方式においても、中継装置210〜214が上述した同期処理を行うことにより、RTTを不必要に大きく算出することなく、階層化された複数のストリームを同期させることができる。
ここで、本実施の形態の階層符号化されたストリームのXCASTパケットに記述されているヘッダ構造と、実施の形態1のストリームのパケットに記述されているヘッダ構造(図2)とを比較して説明する。
図8は、本発明の実施の形態2の階層符号化されたストリームのXCASTパケットに記述されているヘッダ構造を示す図である。
ヘッダ250は、ネットワークヘッダ部251、トランスポートヘッダ部252、RTPヘッダ253、及びペイロード254からなる。ネットワークヘッダ部251は、IPv6ヘッダ255と、パケットがXCAST対応パケットであることを示すXCAST6ヘッダ256とを含む。また、トランスポートヘッダ部252は、SICCヘッダ260を含む。
SICCヘッダ260は、宛先ポート261、送信元ポート262、バージョン263、タイプ264、ヘッダ長265、シーケンス番号266、クラス267、タイムスタンプ268、RTT通知欄269、フラグ270、予備領域271、通番272、ADU通番273、パケット長274、パケット数275、及びパケット通番276を含む。
次に、図8のヘッダ構造と図2のヘッダ構造との対応関係を説明する。
ネットワークヘッダ部251は、図2のネットワークヘッダ部161に相当する。具体的には、IPv6ヘッダ255の中の宛先アドレス及び送信元アドレスは、宛先アドレス165及び送信元アドレス166に対応する。
トランスポートヘッダ部252のSICCヘッダ260は、図2のトランスポートヘッダ部162に相当する。具体的には、宛先ポート261は、宛先ポート番号167に対応し、送信元ポート262は、送信元ポート番号168に対応する。バージョン263及びタイプ264の組み合わせは、データタイプ169に対応する。クラス267は、データタイプ169に対応する。タイムスタンプ268は、タイムスタンプ171に対応する。通番272は、通番172に対応する。
なお、ヘッダ長265、シーケンス番号266、RTT通知欄269、フラグ270、予備領域271、ADU通番273、パケット長274、パケット数275、及びパケット通番276は、送信端末と受信端末との間のSICC処理に特有のものであるか、または、本実施例には直接関係のないものであるため、その説明を省略する。
以上説明したように、階層符号化されたストリームのXCASTパケットのヘッダ構造250は、実施の形態1のヘッダ構造160に対応付けられる。したがって、本実施の形態の中継装置は、実施の形態1の中継装置と同様に、通信のセッションを識別でき、通信のセッション毎に含まれるフローを特定でき、同期処理を行うためにパケットを一時蓄積し、パケット往復時間に一時蓄積時間が加算されないようにタイムスタンプを補正することができる。
このように、本実施の形態によれば、SICCに代表される階層符号化とマルチキャスト通信とを組み合わせて利用する伝送方式においても、受信端末の無駄な記憶領域を省略し、かつ、不必要に低い帯域の推定を防止することができる。
すなわち、XCASTパケットが受信端末で数珠繋ぎに転送される場合や上流の中継装置(XCAST対応)においてパケットの転送が行われる場合に、上流の受信端末又は中継装置が同期処理を行うことにより、下流の受信端末のバッファ領域を多量に消費することを防止することができる。また、送信端末と受信端末との間で流量制御が行われる場合に、その性質を不必要に低下させることなく複数のストリームを同期処理することができる。
例えば、図9に示すように、SICCにおいて、階層符号化された上位階層のストリームおよび下位階層のストリームが載せられたXCASTパケットがそれぞれ異なる経路で受信端末242〜246を伝送される場合であっても、受信端末間に設けられた中継装置(図示せず)が、必要に応じて、先に到着したストリームを一時蓄積して同期させた上で2つのストリームを下流の受信端末に送信する。これにより、この下流の受信端末のバッファリング領域の消費を防止することができる。また、これらのストリームがさらに下流の受信端末に伝送される場合であっても、さらに下流の受信端末または中継装置によるバッファリング処理の負荷を低減することができる。
さらに、同期処理を施した中継装置は、一時蓄積したストリームのパケットに記述されたタイムスタンプを、その一時蓄積時間の分だけ足し上げることにより補正する。すなわち、従来の中継装置において一時蓄積時間TS2を含めて計測されていたRTTの計測値(TS3−TS1)は、この計測値から一時蓄積時間TS2を除いた理想的なRTTの計測値(TS3−TS1−TS2)となるように補正される(図10参照)。これにより、RTTを不必要に多く計測することなく、好適な帯域推定による流量制御を実現することができる。
以上まとめると、本実施の形態によれば、実施の形態1で説明したタイムスタンプの補正技術をSICC伝送方式に適用して、SICC伝送方式の能力を向上させることができる。
(実施の形態3)
本実施の形態は、実施の形態1又は実施の形態2において、下流の中継装置や受信端末から上流の中継装置や送信端末に対して、同期処理を依頼する場合である。このようなケースとしては、下流の中継装置や受信端末が、自端末が保持するバッファリング領域では同期処理が不可能となった場合などが考えられる。以下、図面を参照して詳細に説明する。
図11は、本発明の実施の形態3に係る中継装置を含む通信システムの全体構成の一例を示すブロック図である。
中継装置300は、図1の中継装置140の構成において、バッファリング要求受付部310、及びバッファリング要求部320をさらに備える。中継装置330は、中継装置300と同一の構成をとり、中継装置300の下流に接続されている。中継装置350は、中継装置300と同一の構成をとり、中継装置300の上流に接続されている。ここでは、説明の簡略化のため、中継装置330については、バッファリング要求部340のみを図示し、中継装置350については、バッファリング要求受付部360のみを図示する。
なお、中継装置300は、音声動画などのストリームを再生する受信端末の機能を有していてもよい。また、中継装置330は、中継装置300の下流に接続されたバッファリング要求部を備える受信端末であってもよいし、中継装置350は、中継装置300の上流に接続されたバッファリング要求部を備える送信端末であってもよい。
バッファリング要求受付部310は、下流の中継装置又は受信端末から送信されたバッファリング要求パケットを受信して、バッファリング要求部320に出力する。バッファリング要求パケットには、同期処理を要求する端末の宛先情報、同期処理を行うセッションに含まれるパケットの数や長さ、各パケットを一時蓄積する時間などの情報が記述される。
バッファリング要求部320は、バッファリング要求受付部310から入力されたバッファリング要求パケットを参照して、バッファリング要求パケットに記述された同期処理を中継装置300で行うかどうかを判断する。バッファリング要求部320は、その判断の結果、同期処理を行うと判断した場合には、識別部142、遅延部143、及び補正部146に対して、自端末で同期処理を行う旨の指示を出す。一方、同期処理を行わないと判断した場合には、上流の中継装置又は送信端末に対してバッファリング要求パケットを送信する。なお、中継装置300で同期処理を行うかどうかの判断方法は、後の動作説明で詳細に説明する。
以下、上述のように構成された通信システムの動作について詳細に説明する。ここでは、図11に即して、中継装置300が、中継装置330のバッファリング要求部340からのバッファリング要求パケットを受信し、同期処理を行うかどうかを判断して、同期処理を行わないと判断した場合に、中継装置350のバッファリング要求受付部360に対してバッファリング要求パケットを送信する例について説明する。
まず、中継装置300のバッファリング要求受付部310は、中継装置330のバッファリング要求部340から送信されたバッファリング要求パケットを受信してバッファリング要求部320に出力する。
バッファリング要求部320は、バッファリング要求受付部310から入力されたバッファリング要求パケットを参照して、バッファリング要求パケットに記述された同期処理を中継装置300で行うかどうかを判断する。この判断は、中継装置300でバッファリング可能な最大量と、バッファリング要求パケットに記述された同期処理を行うときに自端末で必要となるバッファリングの総量とを比較することにより行われる。以下、具体的に説明する。
バッファリング要求部320は、遅延部143が保持する送信待ちキューの長さを参照することにより、中継装置300でバッファリング可能な最大量を逐次把握している。ここでは、中継装置300でバッファリング可能な最大量をBmaxとする。Bmaxは、静的に設定してもよいし、他のメモリ資源との競合状態などを加味して動的に設定してもよい。
バッファリング要求部320は、バッファリング要求受付部310からバッファリング要求パケットが入力されると、遅延部143が保持する差分時間管理表(図5)を参照し、一時蓄積を行うべきフローを特定する。そして、バッファリング要求部320は、特定したフローの一時蓄積処理に必要なメモリの量を、バッファリング要求部320が保持するバッファリング量管理表を用いて管理する。
図12は、バッファリング量管理表のデータ構造を示す図である。
図12において、通信のセッション欄370には、識別部142によりセッション毎に割り当てられた識別子が記述される。フロー欄372には、セッションに含まれる各フローのナンバーがセッション毎に記述される。通信のセッション欄370とフロー欄372との組み合わせは、キー項目であり、図5の差分時間管理表の通信のセッション欄194とフロー欄196との組み合わせと同じものが記述される。受信間隔欄374には、それぞれのフローのパケットを受信する時間間隔が記述される。受信間隔欄374に記述される受信間隔は、新しいフローのパケットを受信する度に毎回更新してもよいし、例えば、過去L回のパケットの受信間隔を加重平均したものにより更新してもよい。レコード長376には、それぞれのフローのパケットの記憶領域の長さが記述される。それぞれのフローのパケット長が大きくなれば、それに従ってレコード長も大きい数値となる。レコード長376に記述される記憶領域は、例えば、過去K回のパケットの最大長を用いて更新することができる。
バッファリング要求部320は、上記バッファリング量管理表と図5の差分時間管理表とを用いて、バッファリング要求パケットに記述された同期処理を行うときに自端末で必要となるバッファリングの総量を計算し、Bneedとする。
そして、バッファリング要求部320は、BmaxとBneedとを比較する。そして、Bmax>Bneedであれば、バッファリング要求部320は、識別部142、遅延部143、及び補正部146に対して、自端末で同期処理を行う旨の指示を出し、識別部142、遅延部143、及び補正部146は、実施の形態1で説明した同期処理を行う。一方、Bmax≦Bneedであれば、上流の中継装置350のバッファリング要求受付部360に対してバッファリング要求パケットを送信する。なお、Bmax≦Bneedであっても、例えば、階層符号化された複数のストリームの一部の階層のみを同期処理し、他の部分の同期処理を上流の中継装置350に依頼することもできる。
中継装置350は、中継装置300からのバッファリング要求パケットを受信すると、中継装置300と同様に、同期処理を行うかどうかの判断を行う。そして、中継装置350は、同期処理を行うと判断した場合、実施の形態1で説明した同期処理を行う。一方、中継装置350は、同期処理を行わないと判断した場合、図示しないさらに上流の中継端末にバッファリング要求パケットを送信して同期処理を依頼する。
ここで、上流の中継装置又は送信端末が複数ある場合には、これらの装置や端末の中から、バッファリング要求パケットの送信先を決定する必要が生じる。バッファリング要求パケットの宛先は、例えば、次のような方法で決定されうる。
[宛先選択方式1]
通信のセッションに含まれるフローのパケットの送信元アドレスに対して送信する。
[宛先選択方式2]
通信のセッションに含まれるフローのパケットのXCASTヘッダ中に記述されている宛先アドレスのリストから選択した上流の端末のIPアドレスに対して送信する。
[宛先選択方式3]
まず、通信のセッションに含まれるフローのパケットのXCASTヘッダ中に記述されている宛先アドレスのリストから、自端末のアドレスより上流に記述されている宛先アドレスの部分リストを抽出する。そして、抽出した部分リストの先頭に送信元アドレス(送信端末のアドレス)を追加したリストを作成し、その並び順を反転させたアドレスリストが記述されたXCASTヘッダを持つ端末に対して送信する。
次に、バッファリング要求パケットについて、図13を用いて説明する。
図13は、バッファリング要求パケットの形式の一例を示す図である。
図13のバッファリング要求パケットは、IPv6ヘッダ381、XCAST6ヘッダ382、送信元アドレス383、宛先ポート番号384、送信元ポート番号385、データクラス386、及び蓄積時間387からなる。
IPv6ヘッダ381の宛先アドレスには、上記宛先選択方式1〜3のいずれかにより決定されたバッファリング要求パケットの宛先アドレスが記述される。XCAST6ヘッダ382には、上記宛先選択方式3で宛先を決定した場合、宛先選択方式3で作成したアドレスリストが記述される。上記宛先選択方式1〜2で宛先を決定した場合、XCAST6ヘッダ382には何も記述されず、又はXCAST6ヘッダ382は付与されない。送信元アドレス383は、IPv4やIPv6などのネットワーク上のアドレスである。宛先ポート番号384及び送信元ポート番号385は、例えば、UDPなどのトランスポートプロトコルの宛先ポート番号及び送信元ポート番号である。データクラス386には、そのデータフローを含むセッションが有しているデータフローの数が記述される。蓄積時間387は、差分時間管理表を元に算出したフローを蓄積させるべき時間が記述される。
なお、本実施の形態のバッファリング要求部320は、中継装置300でバッファリング可能な最大量とバッファリング要求パケットに記述された同期処理を行うときに自端末で必要となるバッファリングの総量とを比較することにより同期処理を行うかどうかを判断したが、バッファリング要求部320の判断基準は、これに限定されない。例えば、中継装置300において、同期処理が実現されたかどうかの判定などのタスクを消費するCPU資源が足りない場合にも、上流の中継装置に同期処理を依頼することが想定される。このように、バッファリング要求パケットを受けたバッファリング要求部の判断基準としては、種々の形態が考えられる。
また、本実施の形態のバッファリング要求部320は、バッファリング要求パケットに記述された同期処理を中継装置300で行うかどうかを判断したが、本発明はこれに限定されない。例えば、バッファリング要求受付部310が、バッファリング要求パケットに記述された同期処理を中継装置300で行うかどうかを判断してもよい。
また、バッファリング要求パケットが、通信システムの最上流である送信端末まで転送された場合、送信端末は、パケットの送信自体を明示的に遅らせるようにしてもよい。
このように、本実施の形態によれば、実施の形態1及び実施の形態2の効果に加えて、中継装置が何らかの理由でパケットの一時蓄積及びタイムスタンプの補正による同期処理を行うことができない場合であっても、上流の中継装置に同期処理を依頼するので、通信システムのうちのいずれかのポイントで同期処理を行うことができ、RTTの増加による不必要に低い帯域の推定を防止することができる。
以上詳細に説明したように、上記各実施の形態によれば、送信端末と受信端末との間で流量制御を行いながら同期する必要がある複数のストリームを送信する場合に、本発明を中継装置、又はパケットを中継する受信端末に適用することで、受信端末で同期処理のための多量のメモリを必要とすることなしに、また、送信端末と受信端末との間の流量制御において不必要に性能劣化が起こることなしに、同期処理及び流量制御を行うことができる。
なお、上記各実施の形態では、中継装置が同期処理を行うようにしたが、本発明はこれに限定されない。例えば、必要に応じて、パケットの一時蓄積やタイムスタンプの補正を行う機能を有する受信端末が同期処理を行うようにしてもよい。この場合、受信端末のバッファリング領域は消費するが、不必要に低い帯域推定を防止することができ、受信品質の向上に一定の効果を得ることができる。