以下、実施形態について、図面を参照しながら詳細に説明する。
具体的には、まず、ピア・ツー・ピア(peer-to-peer;P2P)型のデータ配信システムにおける負荷分散に関する実施形態について、図1〜19を参照して説明する。なお、図1は概要を説明する図であり、図2〜3はネットワークの例を示す図であり、図4〜5は装置の構成を示す図であり、図6〜19は詳しい処理の内容と処理に使われる情報について説明する図である。
その後、他の実施形態および変形例について図21〜23を参照して順に説明する。各種の変形は適宜に組み合わせ可能である。
さて、図1は、負荷分散を実現するための再送制御の例を示す図である。また、図2は、図1の論理ネットワークのトポロジを示す図である。
本実施形態は様々なトポロジの論理ネットワークに適用可能であるが、説明の便宜上、図1〜2には、具体的に論理ネットワーク100を例示した。図1〜2に示すように、論理ネットワーク100は、ノードN1〜N13を含むツリー型のネットワークである。また、ノードN1〜N13のそれぞれは、コンピュータである。
論理ネットワーク100は、具体的には、アプリケーションレイヤマルチキャスト(ALM)における配信ツリー(distribution tree)として構築された論理ネットワークである。ALMは、オーバレイマルチキャストとも呼ばれる。つまり、論理ネットワーク100は、オーバレイネットワークの一例である。
従来のクライアント・サーバ型のデータ配信システムでは、データを受信するクライアント端末装置の数が増加するにしたがい、クライアント端末装置の数に比例して配信サーバに負荷がかかる。そのため、クライアント・サーバ型の大規模なシステムでは、配信サーバを複数台設けたり、ネットワークインフラストラクチャを増強したり、といった対策が必要となり、結果として配信コストの増大を招いてしまう。
そこで、近年注目されているのが、P2P技術を応用したデータ配信である。図1〜2の論理ネットワーク100は、P2P型のデータ配信システムにおける配信ツリーとして構築される。
P2P型のデータ配信システム(例えば、ストリーミングデータの配信システム)では、データを受信した端末装置が、受信したデータを他の端末装置に中継する。すると、データはネットワーク内でリレー配信されるので、P2P型のデータ配信システムによれば、大規模な一斉同報配信も可能である。さらに、P2P型のデータ配信システムには、「端末装置の数の増加に対して、配信サーバの配信負荷の増加は、比較的緩やかであるか、または、ほとんど増加しない」という大きな利点がある。
そして、P2P型のデータ配信システムには様々なタイプのものがあるが、いずれも、「物理ネットワークではなく、端末装置間(つまりピア間)のリンクで形成される論理ネットワーク上でのデータ配信が行われる」という点が共通である。本実施形態は、P2P型のデータ配信システムにおける再送制御に好適である。
図1〜2に示すように、論理ネットワーク100のトポロジは、グラフ(より具体的には非循環有向グラフ(Directed Acyclic Graph;DAG))として表すことができる。論理ネットワーク100のトポロジを示すグラフにおける各エッジの方向は、コンテンツが配信される方向を示す。
具体的には、論理ネットワーク100は以下の(A−1)〜(A−12)のとおり12本のエッジを含む。各エッジは、換言すれば、隣接する2つのノード間を論理的に接続する通信リンクである。
(A−1)ノードN1からノードN2へのエッジE1,2
(A−2)ノードN1からノードN3へのエッジE1,3
(A−3)ノードN2からノードN4へのエッジE2,4
(A−4)ノードN2からノードN5へのエッジE2,5
(A−5)ノードN3からノードN6へのエッジE3,6
(A−6)ノードN3からノードN7へのエッジE3,7
(A−7)ノードN3からノードN8へのエッジE3,8
(A−8)ノードN4からノードN9へのエッジE4,9
(A−9)ノードN4からノードN10へのエッジE4,10
(A−10)ノードN4からノードN11へのエッジE4,11
(A−11)ノードN6からノードN12へのエッジE6,12
(A−12)ノードN6からノードN13へのエッジE6,13
上記(A−1)〜(A−12)から明らかなように、入次数が0のノードN1は、配信ツリーの根ノードである。また、出次数が0のノードN5、N7〜N13は葉ノードである。他のノードN2〜N4、N6は、根ノードでも葉ノードでもないノード(以下「中継ノード」という)である。
論理ネットワーク100上では、データ(例えばストリーミングデータ)の配信が行われる。しかしながら、ネットワークの状態によっては、データの一部が消失することがある。例えば、物理ネットワークにおける輻輳やルータの故障などが原因で、一部のパケットが消失することがある。
そして、P2P型のデータ配信システムでは、トランスポート層のプロトコルとして、TCP(Transmission Control Protocol)よりもUDP(User Datagram Protocol)が使われることの方が多い。なぜなら、UDPは高速性に優れているので、リアルタイム性が重視される映像や音声などのストリーミングに適しているからである。逆に言えば、UDPは、TCPと比べてプロトコルオーバヘッドが小さいが、その代わり、TCPのような誤り訂正機能を持たない。
そこで、UDPが使われる場合は、トランスポート層プロトコル以外のメカニズムによって、誤り訂正(具体的には消失したパケットの回復)のための対策が提供される。対策の具体例は、上述のFECとARQである。しかし、以下の理由から、たとえFECが使われる場合であっても、実用的なシステムにおいてはARQが併用される。
配信されるデータには誤り訂正用の冗長な情報(例えばFECパケット)が追加されてもよく、冗長な情報を用いた誤り訂正(すなわち、消失したパケットの回復)が行われてもよい。しかし、FECパケットにより誤り訂正可能なパケットロス率には、FECパケットが挿入される割合に応じた上限がある。
よって、パケットロス率が高いとき、たとえFECパケットが使われていたとしても、消失したパケットの一部が回復不能なことがある。すると、消失したデータを取得するには、データの再送が必要である。したがって、多くの実用的なシステムにおいてはARQが採用される。
以下では説明の簡単化のため、FECに関する処理については説明を省略し、単に「データが消失した場合に再送が要求される」ものとして説明する。しかしもちろん、FECが利用される実施形態も可能である。つまり、再送が要求される契機が、データの消失であろうと、「FECによっても回復することのできなかったデータがある」という状況の検出であろうと、本実施形態による再送制御は適用可能である。
図1には、本実施形態による再送制御の概略も示されている。図1において、細い実線の矢印は正常なデータ配信を示し、1点鎖線の矢印は再送要求を示し、太い実線の矢印は再送要求に応じて行われるデータ送信を示す。
例えば、ノードN1がノードN2とN3にデータを送信し、ノードN2がノードN4とN5にデータを送信する。しかし、ステップS10に示すように、輻輳の発生など何らかの原因によって、データの少なくとも一部がノードN2からノードN5へのエッジE2,5上で消失することがある。ノードN5は、例えばシーケンス番号を手がかりにして、データの消失を検出し、かつ、データのどの部分が消失したのか(すなわち、一連のデータパケットのうち何番から何番のデータパケットが消失したのか)を認識することができる。
すると、ステップS20でノードN5は、消失したデータの送信を要求する。詳しくは後述するが、ノードN5がどのノードに送信を要求するかは、実施形態に応じて任意である。図1の例では、ノードN5は、ノードN3に送信を要求する。
以下では、送信が要求される対象の情報を「特定情報」ともいう。特定情報は、具体的には、上述のとおり、論理ネットワーク100内で配信される配信情報のうち、エッジE2,5において消失した部分である。また、特定情報の送信を要求するノード(図1の例ではノードN5)を「要求ノード」ともいう。
上記のようにしてステップS20でノードN5から送信された要求は、ノードN3において受信される。ここで、ノードN3にとって、ノードN5は、論理ネットワーク100のトポロジにおいてノードN3自身とエッジで接続された隣接ノードではない。つまり、特定情報の送信を求める要求は、論理ネットワーク100のトポロジによらず、直接的に、隣接ノード以外のノードから受信されることがある。
特定情報の送信を求める要求を受信したノードN3は、次に、特定情報の送信に関与する1つ以上のノード(以下、「責任ノード」(responsible node)という)を選択する。なお、ノードN3は、ノードN3の子ノードとノードN3自身の中から、ノードN3自身よりは子ノードを優先して、1つ以上の責任ノードを選択する。
各責任ノードは、実際に特定情報の一部または全部を送信することにより、特定情報の送信に関与することもある。また、各責任ノードは、当該責任ノードの子ノードに特定情報の一部または全部の送信を要求することにより、特定情報の送信に関与することもある。選択された上記1つ以上の責任ノードがそれぞれ特定情報の送信に関与することで、特定情報全体の送信が保証される。よって、ある観点から言えば、個々の責任ノードは、「特定情報の送信を保証するために選択されるノード」でもある。
論理ネットワーク100のトポロジを示す有向グラフにおいて、あるノードNjから他のノードNkへのエッジEj,kが存在するとき、ノードNkはノードNjの子ノードであり、ノードNjはノードNkの親ノードである。図1の例では、ノードN3は、3つの子ノードN6〜N8を持つ。
よって、ノードN3は、ノードN3自身よりは、子ノードN6〜N8を優先的に責任ノードとして選択する。つまり、ノードN3は、まず先に、子ノードN6〜N8を責任ノードとして選択する。その後、ノードN3は、責任ノードとして選択した子ノードだけで特定情報全体の送信を保証するのに十分か否かを判断する。そして、もし「不十分」という判断結果が得られた場合は、ノードN3は、ノードN3自身を責任ノードとして選択する。
なお、特定情報の量などの状況に応じて、ノードN3は、子ノードN6〜N8の一部のみ(例えばノードN6のみ)を責任ノードとして選択することもある。逆に、状況に応じて、ノードN3は、すべての子ノードN6〜N8に加えてさらにノードN3自身をも責任ノードとして選択することもある。
また、詳しくは後述するが、ノードN3は、責任ノードの選択にあたって、ある種の制約条件を考慮に入れてもよい。制約条件によっては、ノードN3は、結果的に、例えば、子ノードの一部とノードN3自身を責任ノードとして選択することもある。
例えば、ノードN3は、まず先に、子ノードN6〜N8が責任ノードとして選択可能か否かを制約条件に基づいて判断し、選択可能な子ノードを実際に責任ノードとして選択する。その後、ノードN3は、責任ノードとして選択した子ノードだけで特定情報全体の送信を保証するのに十分か否かを判断する。もし、責任ノードとして選択された子ノードだけでは特定情報全体の送信を保証するのに不十分であれば、ノードN3は、さらにノードN3を責任ノードとして選択してもよい。
例えば、特定情報の量が多い場合、制約条件が厳しい場合、子ノードが存在しない場合、子ノードは存在するが少数である場合などに、要求を受けたノードが当該ノード自身を責任ノードとして選択することがある。
図1には、ノードN3が責任ノードとして3つの子ノードN6〜N8を選択した場合が例示されている。なお、以下では、責任ノードとして選択された子ノードを「責任子ノード」ともいう。
ノードN3は、責任ノードを選択するだけでなく、各責任ノードに、特定情報の一部または全部である部分特定情報を対応づける。つまり、ノードN3は、1つ以上の責任ノードに部分特定情報をそれぞれ割り当てる。
例えば、特定情報が、具体的にはシーケンス番号が201番から220番の20個のパケットであるとする。ノードN3は、例えば、ノードN6にはシーケンス番号が201番から210番の10個のパケットを部分特定情報として対応づけてもよい。つまり、ノードN3は、10個のパケットを要求ノードN5へ送信することをノードN6に保証させてもよい。同様に、ノードN3は、ノードN7にはシーケンス番号が211番から215番の5個のパケットを部分特定情報として対応づけ、ノードN8にはシーケンス番号が216番から220番の5個のパケットを部分特定情報として対応づけてもよい。
そして、ノードN3は、責任子ノードがある場合は、当該責任子ノードに対応づけた部分特定情報を要求ノードN5に送信するよう求める要求を、当該責任子ノードに送信する。
つまり、ステップS30でノードN3は、特定情報のうちでノードN6に対応づけられた部分特定情報(例えば、上記の例ではシーケンス番号が201番から210番の10個のパケット)をノードN5に送信するよう求める要求を、ノードN6に送信する。
同様に、ステップS31でノードN3は、特定情報のうちでノードN7に対応づけられた部分特定情報(例えば、上記の例ではシーケンス番号が211番から215番の5個のパケット)をノードN5に送信するよう求める要求を、ノードN7に送信する。
さらに、ステップS32でノードN3は、特定情報のうちでノードN8に対応づけられた部分特定情報(例えば、上記の例ではシーケンス番号が216番から220番の5個のパケット)をノードN5に送信するよう求める要求を、ノードN8に送信する。
換言すれば、ノードN3は、要求ノードN5から受信した要求を、要求の内容の一部(具体的には、ノードN5に送信する対象の指示)を書き換えつつ、子ノードN6〜N8に転送する。なお、ステップS30〜S32の実行順は任意に入れ替え可能である。
すると、ノードN6〜N8はそれぞれ要求を受信し、要求の受信に応じてノードN3と類似の動作をする。具体的には、次のとおりである。
ノードN6にとっては、ノードN5への送信が要求される対象の「特定情報」とは、ノードN3から指定された情報である。例えば、上記の例では、ノードN3にとっての特定情報はシーケンス番号が201番から220番の20個のパケットであるが、ノードN6にとっての特定情報は、そのうちシーケンス番号が201番から210番の10個のパケットである。
また、ノードN6は、ノードN3のように論理ネットワーク100のトポロジとは関係なく要求ノードN5から直接的に要求を受信するのではない。ノードN6は、論理ネットワーク100のトポロジにおいてノードN6に入ってくる(incoming)パス上の1つ以上の他のノードを介して、要求ノードN5からの要求を受信する。具体的には、ノードN6は、ノードN3からノードN6へ至るパス(すなわち、エッジE3,6のみからなるパス)上の、ノードN3を介して、要求ノードN5からの要求を受信する。
しかし、要求の直接の送信元がどのノードであれ、要求を受信したノードは、いずれもノードN3と同様にして責任ノードを選択する。例えば、図1の例では、ノードN6は2つの子ノードN12とN13を持つ。よって、ノードN6は、ノードN6自身よりも子ノードN12とN13を優先して、責任ノードを選択する。その結果、例えば、ノードN12とN13の双方が責任ノードとして選択される。
また、ノードN6は、各責任ノードに特定情報の一部または全部である部分特定情報を対応づける。例えば、上記のようにノードN6にとっての特定情報が、シーケンス番号が201番から210番の10個のパケットであるとする。この場合、ノードN6は、シーケンス番号が201番から204番の4個のパケットを部分特定情報としてノードN12に対応づけ、シーケンス番号が205番から210番の6個のパケットを部分特定情報としてノードN13に対応づけてもよい。
そして、ステップS33でノードN6は、特定情報のうちでノードN12に対応づけられた部分特定情報をノードN5に送信するよう求める要求を、ノードN12に送信する。同様に、ステップS34でノードN6は、特定情報のうちでノードN13に対応づけられた部分特定情報をノードN5に送信するよう求める要求を、ノードN13に送信する。なお、ステップS33とS34の実行順序は入れ替え可能である。
ところで、上記ステップS31でノードN3から要求を受信したノードN7は、ノードN3と同様にして責任ノードを選択する。しかしながら、ノードN3は子ノードを持つのに対して、ノードN7は子ノードを持たない。つまり、ノードN7自身よりも優先的に責任ノードとして選ばれるノードが存在しないので、結果的にノードN7は、ノードN7自身を唯一の責任ノードとして選択する。
したがって、ノードN7は結果的に、ノードN7にとっての特定情報(上記の例ではシーケンス番号が211番から215番の5個のパケット)のすべてを、部分特定情報として、責任ノードであるノードN7自身に対応づける。ノードN7のように、自分自身を責任ノードとして選択したノードは、特定情報のうちで自分自身に対応づけた部分特定情報を要求ノードに送信する。つまり、ステップS41でノードN7は、特定情報をノードN5に送信する。
なお、上記のように論理ネットワーク100はALMの配信ツリーとして構築されるオーバレイネットワークである。よって、ノードN7にも配信情報が配信される。つまり、ノードN3によってノードN7に割り当てられた特定情報は、ノードN7に配信されて記憶される配信情報の一部である。したがって、ノードN7は、ノードN3によってノードN7に割り当てられた特定情報を、ノードN7が備える記憶装置から読み出してノードN5に送信することができる。
同様に、ステップS42ではノードN8が、ノードN8にとっての特定情報(上記の例ではシーケンス番号が216番から220番の5個のパケット)をノードN5に送信する。なお、ステップS41とS42は、並行して実行され得る。また、ステップS41およびS42は、ステップS33およびS34と並行して実行され得る。
さらに、ノードN7やN8と同様に葉ノードであるノードN12も、ステップS43において同様に、ノードN12にとっての特定情報(上記の例ではシーケンス番号が201番から204番の4個のパケット)をノードN5に送信する。また、ノードN13も、ステップS44において同様に、ノードN13にとっての特定情報(上記の例ではシーケンス番号が205番から210番の6個のパケット)をノードN5に送信する。
なお、ステップS43およびS44は、並行して実行され得る。また、ステップS43およびS44は、ステップS41およびS42と並行して実行され得る。
以上のようにして、要求ノードN5は、送信を要求した特定情報を受信することができる。なお、図1の例では、要求ノードは、複数のノードから、送信を要求した特定情報の一部分ずつを受信する。しかし、論理ネットワークのトポロジや特定情報の量などの状況によっては、要求ノードは、送信を要求した特定情報の全部を1つのノードから受信することもあり得る。
また、以上のような再送制御は、論理ネットワーク100内の負荷の偏りの悪化を防ぐことができ、適切な負荷分散を実現することができる。理由は以下のとおりである。
ALMの配信ツリーとして構築される論理ネットワーク100においては、根ノードは配信情報(例えばストリーミングデータ)を生成または取得し、配信情報を配信する。また、中継ノードは、配信情報を受信して再生するのみならず、配信情報を転送する。他方、葉ノードは、単に配信情報を受信して再生するだけである。したがって、一般に、根ノードや中継ノードよりも、葉ノードの負荷が低い。
また、中継ノード間で比較した場合でも、ALMの配信ツリーの構築アルゴリズムによっては、根ノードに近い中継ノードは、根ノードから遠い中継ノードよりも負荷が高いことがある。なお、以下の説明において、根ノードからの距離は、根ノードからのパスの長さ(つまりパスに含まれるエッジの数)である。
例えば、ある種の構築アルゴリズムでは、リレー遅延を少なくするために、配信ツリーに新規に参加(join)しようとする新規ノードの親ノードとして、根ノードに近いノードほど、より優先的に選ばれる。その結果、構築された配信ツリーでは、中継ノード同士を比較すると、根ノードに近い中継ノードほど多くの子ノードを持つ傾向がある。
そして、多くの子ノードを持つ中継ノードほど、配信情報の転送にかかる負荷は大きい。したがって、配信ツリーの構築アルゴリズムによっては、根ノードに近い中継ノードは、根ノードから遠い中継ノードよりも負荷が高いことがある。
つまり、再送以外の処理による負荷は、論理ネットワーク100内において、根ノードと中継ノードに偏り、葉ノードの負荷は低い。また、中継ノード同士を比較すると、再送以外の処理による負荷は、配信ツリーの構築アルゴリズムによっては、根ノードに相対的に近い中継ノードに偏りがちである。
すると、再送処理と再送以外の処理に関する総合的な負荷が適切に分散されるようにするためには、再送処理によって生じる負荷は、再送以外の処理による負荷の偏りを相殺するように割り当てられることが望ましい。そして、図1に例示したような本実施形態による再送制御は、そのような割り当てを実現する。
なぜなら、要求ノードへの特定情報の送信を要求されたノードは、子ノードを持っていれば、子ノードを優先的に責任ノードとして選択するからである。そして、子ノードを優先的に責任ノードとして選択する処理が論理ネットワーク100内で再帰的に行われることによって、次の(B−1)と(B−2)が成り立つ。
(B−1)根ノードや中継ノードよりも、葉ノードの方が、実際に要求ノードへの特定情報の送信を行うノードになりやすい。
(B−2)根ノードに近いノードよりも、根ノードから遠いノードの方が、実際に要求ノードへの特定情報の送信を行うノードになりやすい。
また、上記(B−1)と(B−2)によれば、再送以外の処理による負荷が低いノードの方が、再送以外の処理による負荷が高いノードよりも、実際に要求ノードへの特定情報の送信を行うノードになりやすい。したがって、再送処理による負荷は、再送以外の処理による負荷の偏りを相殺するように割り当てられる。
つまり、本実施形態による再送制御は、負荷の偏りの悪化を防ぎ、論理ネットワーク100内で適切な負荷分散を実現することができる。また、以上のような本実施形態の利点は、次の2つの比較例と比べるとより明らかである。
第1の比較例では、データの消失を検出したノードは、単純に、親ノードにデータの再送を要求する。そして、再送を要求された親ノードは、他のノードに再送要求を転送することなく、自らデータを再送する。
つまり、第1の比較例では、再送を要求される可能性があるノードは根ノードと中継ノードのみである。そして上記のとおり、根ノードと中継ノードは、葉ノードよりも、再送以外の処理による負荷が高い。したがって、第1の比較例では、負荷の高い根ノードと中継ノードに、ますます負荷が集中してしまう。
仮に、パケットロス率が非常に高かったり、パケットロスが連続して大量に生じたりすると、当然再送の負荷も高まる。場合によっては、再送の負荷だけでも、無視することのできない量になることがある。
また、図1のように本実施形態によれば、状況に応じて複数のノードが特定情報の一部分ずつを送信する。よって、たとえ特定情報の量が多くても、個々のノードの送信負荷はそれほど高くない。しかし、第1の比較例では、再送を要求されたデータの全体を1つのノード(つまりパケットロスを検出したノードの親ノード)が送信する。よって、再送を要求されたデータの量が多いと、親ノードの送信負荷が非常に高くなってしまう。
そして、再送による高負荷は、第1の比較例では、上記のとおり、再送以外の処理による負荷がもともと高い根ノードと中継ノードに集中してしまう。したがって、ノード間での処理負荷の公平性を確保するという観点、および負荷分散によってネットワーク全体での処理効率を向上させるという観点からは、明らかに、第1の比較例よりも本実施形態の方が優れている。
また、第1の比較例の欠点を克服するため、第2の比較例では、ある1台の管理サーバが論理ネットワークのトポロジを集中的に管理する。すると、管理サーバは、リレー中継を行わない葉ノードを把握することができるので、各ノードに対して、適宜選択した葉ノードを再送要求先として通知することができる。
例えば、各ノードは、データの再送を要求しようとするときに(あるいは事前に)、管理ノードに再送要求先を問い合わせる。そして、問い合わせを受けた管理ノードは、適宜選択した葉ノードを再送要求先として返答する。
すると、再送以外の処理による負荷が低い葉ノードに再送の負荷がかかる。したがって、第1の比較例よりも、第2の比較例は、ノード間の負荷分散という点で優れている。しかしながら、この第2の比較例には、ノード数に対するスケーラビリティに欠けるという欠点がある。
すなわち、ノード数が多くなると、トポロジを把握し、かつ再送要求先の問い合わせに応答するための、管理サーバの負荷が増大する。また、第2の比較例では、管理サーバがシステムのSPoF(Single Point of Failure)になりかねない。
他方、本実施形態では、後述の図3の管理サーバ204が使われてもよいが、管理サーバ204は、論理ネットワーク100全体のトポロジを認識する必要はない。管理サーバ204は、単に、論理ネットワーク100に含まれるノードの中の任意の1つ(例えば、ランダムな1つ)を再送要求先として選択すればよい。
したがって、明らかに、本実施形態の管理サーバ204の負荷は、トポロジの認識が必要な第2の比較例の管理サーバの負荷よりも軽い。よって、本実施形態の管理サーバ204は、第2の比較例の管理サーバよりもSPoFになりにくい。
また、本実施形態では、状況に応じて複数のノードが特定情報の一部分ずつを送信する。よって、たとえ特定情報の量が多くても、個々のノードの送信負荷はそれほど高くない。しかし、第2の比較例では、再送を要求されたデータの全体を1つのノード(つまり管理ノードが選択した葉ノード)が送信する。よって、再送を要求されたデータの量が多いと、選択された葉ノードが過負荷状態に陥るおそれがある。
さらに、本実施形態では、再送要求先として管理サーバ204から通知されるノードは、根ノードかもしれないし、根ノードに比較的近い中継ノードかもしれない。にもかかわらず、本実施形態によれば、図1に関して説明したとおり、要求されたデータを実際に送信する負荷は、根ノードからより遠いノードに、優先的にかかる。また、負荷が大きい場合は、本実施形態では負荷は複数のノードに分散される。よって、本実施形態によれば、好ましい負荷分散と、管理サーバ204の負荷を軽減することで第2の比較例よりもスケーラビリティを向上させることを、ともに実現することができる。
また、詳しくは後述するが、本実施形態は、再送要求先の認識のために管理サーバ204を用いないように変形することも可能である。そのような変形例は、より一層、スケーラビリティの点で第2の比較例よりも優れている。
以上のとおり、本実施形態による再送制御は、第1の比較例と第2の比較例のいずれと比べても、優れている。また、図1に関する説明から明らかなとおり、本実施形態による再送制御は自律分散制御であるから、再送要求が多発する場合であっても「特定のノードがSPoFとなり再送要求がオーバーフローする」といった事態には陥らない。
ところで、図1〜2に示す論理ネットワーク100は、物理ネットワークとは異なる。つまり、論理ネットワーク100においてエッジで直接的に接続された隣接ノード同士が、物理的には非常に離れていることもあり得る。逆に、論理ネットワーク100内で離れたノード同士が、物理的には近接していることもあり得る。
図3は物理ネットワークの例を示す図である。図1〜2に示す論理ネットワーク100は、例えば、図3の物理ネットワーク200上のオーバレイネットワークであってもよい。
物理ネットワーク200は、コアネットワーク201と、コアネットワーク201を介して互いに接続されたルータ202A〜202Fを含む。また、物理ネットワーク200は、配信サーバ203、管理サーバ204、および端末装置205A〜205Lを含む。
図3に示すように、配信サーバ203と管理サーバ204と端末装置205Aは、ルータ202Aに接続されている。また、端末装置205B〜205Cはルータ202Bに接続されており、端末装置205D〜205Eはルータ202Cに接続されている。そして、端末装置205Fはルータ202Dに接続されており、端末装置205G〜205Iはルータ202Eに接続されており、端末装置205J〜205Lはルータ202Fに接続されている。
なお、図3では各ルータと端末装置が直接的に線で結ばれている。しかし、ルータと端末装置の間は、スイッチングハブまたは無線LAN(Local Area Network)アクセスポイントなどのネットワーク機器を介して接続されていてもよい。
配信サーバ203は、端末装置205A〜205Lに配信するための配信情報として、コンテンツ(例えばストリーミングデータ)を生成または取得し、当該コンテンツを配信する。また、管理サーバ204は、配信ツリーに属するノードを管理するサーバである。
つまり、管理サーバ204を含む図3は、ピュアP2Pシステムではなく、ハイブリッドP2Pシステムの例を示している。しかしもちろん、ピュアP2Pにも本実施形態は適用可能である(詳しくは後述する)。
また、図3の例では、配信サーバ203と管理サーバ204が分かれているが、1台のサーバが配信サーバ203と管理サーバ204の機能を兼ね備えてもよい。あるいは、複数の管理サーバ204があってもよい。
端末装置205A〜205Lは、所定のALMアプリケーションソフトウェアがインストールされたコンピュータならば、どのようなコンピュータであってもよい。端末装置205A〜205Lの具体例は、例えば、PC(Personal Computer)、ワークステーション、ネットワーク通信機能を持つSTB(Set Top Box)、スマートフォン、携帯電話、タブレット型端末などである。
以下では、図1〜2の論理ネットワーク100が図3の物理ネットワーク200上のオーバレイネットワークである場合について説明する。論理ネットワーク100が物理ネットワーク200上のオーバレイネットワークである場合、配信サーバ203は、論理ネットワーク100における根ノードN1に相当する。また、管理サーバ204は、配信ツリーとして構築される論理ネットワーク100には含まれない。
そして、「論理ネットワーク100における根ノードN1以外のノードN2〜N13が、それぞれ物理ネットワーク200の端末装置205A〜205Lのいずれに相当するのか」ということは、場合によって様々である。以下に、論理ネットワーク100と物理ネットワーク200の対応関係の例を2つ挙げる。
論理ネットワーク100と物理ネットワーク200の対応関係の第1の例は、以下の(C−1)〜(C−13)のとおりである。
(C−1)ノードN1は配信サーバ203である。
(C−2)ノードN2は端末装置205Lである。
(C−3)ノードN3は端末装置205Bである。
(C−4)ノードN4は端末装置205Kである。
(C−5)ノードN5は端末装置205Hである。
(C−6)ノードN6は端末装置205Cである。
(C−7)ノードN7は端末装置205Fである。
(C−8)ノードN8は端末装置205Gである。
(C−9)ノードN9は端末装置205Jである。
(C−10)ノードN10は端末装置205Aである。
(C−11)ノードN11は端末装置205Iである。
(C−12)ノードN12は端末装置205Dである。
(C−13)ノードN13は端末装置205Eである。
上記(C−1)〜(C−13)に示した第1の例において、図1のステップS10に示すようにノードN2からノードN5への送信においてデータの消失が生じる理由としては、例えば下記(D−1)〜(D−3)がある。
(D−1)ルータ202Fにおける故障または輻輳。
(D−2)コアネットワーク201内においてルータ202Fとルータ202Eを接続する経路(route)上の、故障または輻輳。
(D−3)ルータ202Eにおける故障または輻輳。
仮にノードN5が、上記の第1の比較例のように単純に親ノードN2自体に再送を依頼する場合には、原因(D−1)または(D−2)によって消失したデータは、回復の見込みが非常に低い。しかし、図1の再送制御によれば、ノードN5の論理ネットワーク100上の親ノードN2に相当する端末装置205Lとは物理ネットワーク200上で離れた端末装置205F、205G、205D、205Eから、実際の再送が行われる。よって、図1の再送制御によれば、ステップS10において原因(D−1)または(D−2)によって消失したデータを、ノードN5が取得することが可能である。
なお、原因(D−3)の場合は、どのノードからデータが再送されようとも(つまりどのような再送制御が行われようとも)、再送されたデータをノードN5(つまり端末装置205H)がうまく受信できないおそれが高い。例えば、ノードN5からの再送要求自体がルータ202Eで消失するおそれが高い。あるいは、仮に再送要求が消失しなかったとし、かつ図1のステップS41のようにノードN7(つまり端末装置205F)からデータが再送されたとしても、再送されたデータは、ノードN5に到達する前にルータ202Eで消失してしまうおそれが高い。
また、論理ネットワーク100と物理ネットワーク200の対応関係の第2の例は、以下の(E−1)〜(E−13)のとおりである。
(E−1)ノードN1は配信サーバ203である。
(E−2)ノードN2は端末装置205Dである。
(E−3)ノードN3は端末装置205Cである。
(E−4)ノードN4は端末装置205Jである。
(E−5)ノードN5は端末装置205Eである。
(E−6)ノードN6は端末装置205Bである。
(E−7)ノードN7は端末装置205Kである。
(E−8)ノードN8は端末装置205Iである。
(E−9)ノードN9は端末装置205Gである。
(E−10)ノードN10は端末装置205Aである。
(E−11)ノードN11は端末装置205Hである。
(E−12)ノードN12は端末装置205Lである。
(E−13)ノードN13は端末装置205Fである。
上記(E−1)〜(E−13)に示した第2の例では、ノードN2とN5が同じルータ202Cに接続されている。したがって、図1のステップS10のような消失の原因は、主に、ルータ202Cにおける故障または輻輳である。すると、上記の第1の例における原因(D−3)と同様に、どのノードからデータが再送されようとも、再送されたデータをノードN5(つまり端末装置205E)がうまく受信できないおそれが高い。
以上の対応関係の第1と第2の例に示したように、本実施形態による再送制御は、第1の比較例の再送制御と比較して、優れている。つまり、「物理ネットワーク200上で要求ノードに近い装置において輻輳または故障が発生した」というような、特定の状況下では、本実施形態でも、第1の比較例でも、消失したデータが再送により取得可能となる見込みは低く、再送制御の仕方による差はない。しかし、別の状況下では、消失したデータは、第1の比較例では再送により取得可能となる見込みが非常に低いのに対し、本実施形態によれば再送により取得可能となる見込みが高い。したがって、本実施形態は、消失したデータの再送による回復率の点においても、第1の比較例より優れている。
ところで、図3に示した配信サーバ203、管理サーバ204、および端末装置205A〜205Lは、具体的にはネットワーク通信機能を備えるコンピュータであり、コンピュータは、例えば図4のハードウェア構成図に示すような各種ハードウェアを有する。
図4のコンピュータ300は、CPU(Central Processing Unit)301とRAM(Random Access Memory)302と通信インタフェイス303と入力装置304と出力装置305と不揮発性記憶装置306と可搬型記憶媒体310の駆動装置307を有する。コンピュータ300内の各部は、バス308により互いに接続されている。
CPU301は、プログラムをRAM302にロードし、RAM302をワークエリアとして用いながら、プログラムを実行する。プログラムは、不揮発性記憶装置306に予め格納されていてもよい。あるいは、プログラムは、通信インタフェイス303を介してネットワークからダウンロードされて不揮発性記憶装置306にコピーされてもよい。
または、プログラムは、可搬型記憶媒体310に格納されて提供され、駆動装置307により読み取られてもよい。駆動装置307により可搬型記憶媒体310から読み取られたプログラムは、直接RAM302にロードされてもよいし、一旦不揮発性記憶装置306にコピーされ、不揮発性記憶装置306からRAM302にロードされてもよい。可搬型記憶媒体310としては、CD(Compact Disc)やDVD(Digital Versatile Disk)などの光ディスク、光磁気ディスク、磁気ディスク、不揮発性の半導体メモリカードなどが利用可能である。
また、通信インタフェイス303は、例えば、有線LANインタフェイス、無線LANインタフェイス、またはそれらの組み合わせである。入力装置304は、例えば、ボタン、キーボード、マウスやタッチスクリーンなどのポインティングデバイス、マイク、またはそれらの組み合わせである。出力装置305は、例えば、ディスプレイ、スピーカ、またはそれらの組み合わせである。ディスプレイは、タッチスクリーンであってもよい。
不揮発性記憶装置306は、例えば、ROM(Read Only Memory)やフラッシュメモリなどの半導体メモリ、ハードディスク装置、またはそれらの組み合わせである。なお、RAM302、不揮発性記憶装置306、および可搬型記憶媒体310は、いずれも、コンピュータ読み取り可能な記憶媒体の例である。これらのコンピュータ読み取り可能な記憶媒体は、有形の(tangible)記憶媒体であり、信号搬送波のような一時的な(transitory)媒体ではない。
ところで、それぞれが図4のようなハードウェアを持つ、図3の端末装置205A〜205Lは、図2の論理ネットワーク100内の葉ノードまたは中継ノードである。そして、論理ネットワーク100の葉ノードと中継ノードは、いずれも、図1を参照して説明した本実施形態の再送制御を行う通信装置である。図5は、論理ネットワーク100の葉ノードと中継ノードとして使われる通信装置のブロック構成図である。
図5の通信装置400は、受信部401、送信部402、バッファ部403、再生処理部404、転送処理部405、ロス検出部406、再送要求部407、ノード情報記憶部408、ノード情報管理部409、および負荷分散処理部410を有する。また、負荷分散処理部410は、選択部411、対応づけ部412、要求生成部413、および再送処理部414を含む。
受信部401は他の装置からパケットを受信し、送信部402は他の装置にパケットを送信する。受信部401と送信部402は、例えば通信インタフェイス303により実現される。なお、以下では論理ネットワーク100内で配信される対象のコンテンツ(つまり配信情報)をペイロードに含むパケットを「データパケット」といい、制御用のメッセージを含むパケットを「制御パケット」という。
また、受信部401は、受信したパケットの種類に応じて、パケット(またはパケットに含まれる一部のフィールドの値)を適宜出力する。受信部401がパケットの種類を判断する機能は、例えば、CPU301により実現される。
バッファ部403は、受信部401が受信したデータパケットを、ある程度の期間、保持し続ける。バッファ部403は、例えばRAM302、不揮発性記憶装置306、またはその組み合わせにより実現される。
再生処理部404は、バッファ部403が保持するデータパケットを用いて、コンテンツを再生する。再生処理部404は、例えば、プログラムを実行するCPU301と、再生結果を出力する出力装置305により実現される。
転送処理部405は、受信部401により受信されてバッファ部403に格納されたデータパケットを、通信装置400の子ノードに相当する他の通信装置400に転送するための制御を行う。なお、転送処理部405は、ノード情報記憶部408を参照することにより、転送先の子ノードの有無、および、子ノードがある場合の子ノードのアドレスを認識する。転送処理部405は、CPU301により実現される。
ロス検出部406は、パケットロスを検出する。本実施形態では、受信部401は、データパケットを受信すると、データパケットをバッファ部403に格納するだけでなく、データパケットに含まれるシーケンス番号を抽出し、シーケンス番号をロス検出部406に通知する。よって、ロス検出部406は、受信部401から通知されたシーケンス番号に基づいて、パケットロスを検出することができる。
より具体的には、ロス検出部406は、消失したデータパケットのシーケンス番号の範囲を認識する。そして、パケットロスを検出した場合、ロス検出部406は、認識したシーケンス番号の範囲を再送要求部407に通知する。
すると、再送要求部407は、ロス検出部406から通知された範囲のシーケンス番号を持つデータパケットの再送を求めるための再送要求を生成する。そして、再送要求部407は、生成した再送要求を送信部402に出力する。その結果、送信部402が再送要求を送信する。
なお、再送要求は、具体的には制御パケットの一種である。また、再送要求部407は、再送要求の送信先を、ノード情報記憶部408を参照して決定する。
なお、ロス検出部406と再送要求部407は、例えば、CPU301により実現される。また、ノード情報記憶部408は、例えば、RAM302、不揮発性記憶装置306、またはその組み合わせにより実現される。
ノード情報記憶部408は、例えば、下記(F−1)〜(F−4)のような情報を記憶する。ノード情報記憶部408が記憶する情報の詳細は図9とともに後述する。
(F−1)通信装置400自身に関する情報。例えば、通信装置400のIP(Internet Protocol)アドレスや、通信装置400が再送用に利用可能な帯域幅など。
(F−2)論理ネットワーク100内で通信装置400の親ノードに当たる他の通信装置400に関する情報。例えば、親ノードのIPアドレスなど。
(F−3)論理ネットワーク100内で通信装置400の子ノードに当たる他の通信装置400に関する情報。例えば、子ノードのIPアドレスや、論理ネットワーク100において当該子ノードを根とする部分木に含まれる各ノードが再送用に利用可能な帯域幅の総和など。
(F−4)再送要求部407が再送要求を送信する宛先に関する情報。例えば宛先のIPアドレスなど。
また、ノード情報管理部409は、受信部401が受信した制御パケットに応じて適宜ノード情報記憶部408内の情報を更新する。さらに、ノード情報管理部409は、適宜のタイミングで適宜の制御パケットを生成し、生成した制御パケットを送信部402に出力する。すると、送信部402が制御パケットを送信する。
ノード情報管理部409が処理する制御パケットの具体例は後述する。なお、ノード情報管理部409は、例えば、CPU301により実現される。
また、受信部401は、再送要求を受信すると、再送要求を負荷分散処理部410に出力する。すると、負荷分散処理部410は、再送要求に応じて、図1に関して説明したような処理を実行する。なお、負荷分散処理部410は、例えばCPU301により実現されてもよく、負荷分散処理部410内の各部は、次のように動作する。
選択部411は、通信装置400自身よりは子ノードを優先して、1つ以上の責任ノードを選択する。選択に際し、選択部411は、ノード情報記憶部408を参照する。
また、対応づけ部412は、各責任ノードに、再送要求によって要求された1つまたは複数のパケット(すなわち特定情報)の一部または全部を対応づける。対応づけに際し、対応づけ部412は、ノード情報記憶部408を参照してもよい。また、対応づけ部412は、対応づけの結果に応じて、ノード情報記憶部408上の情報を更新してもよい。
そして、責任子ノードが1つ以上ある場合、要求生成部413は、各責任子ノードへの再送要求を生成し、生成した再送要求を送信部402に出力する。すると、送信部402が再送要求を送信する。
また、選択部411が通信装置400を責任ノードとして選択した場合、再送処理部414は、対応づけ部412により通信装置400に対応づけられたデータパケットのペイロードをバッファ部403から読み出す。そして、再送処理部414は、データパケットを要求ノードに宛てて送信するための適宜のヘッダを生成し、生成したヘッダと読み出したペイロードを含むデータパケットを送信部402に出力する。すると、送信部402がデータパケットを送信する。
ところで、図3の配信サーバ203も、論理ネットワーク100の根ノードとして図1の再送制御を行うという点では、図5の通信装置400と同じである。つまり、配信サーバ203も、端末装置205A〜205Lに相当する通信装置400と同様に、他のノードからの再送要求の受信を契機として再送制御を行う負荷分散処理部410を有する。
また、配信サーバ203は、受信部401、送信部402、バッファ部403、ノード情報記憶部408、およびノード情報管理部409も有する。ただし、配信サーバ203には、再生処理部404、転送処理部405、ロス検出部406、および再送要求部407は不要である。
なお、配信サーバ203は、配信する対象のコンテンツのデータを生成してバッファ部403に出力する不図示の生成部、または、カメラなどの外部装置からコンテンツのデータを取得してバッファ部403に出力する不図示の取得部を有する。生成部は、例えばCPU301により実現されてもよく、取得部は、例えば、外部装置と配信サーバ203を接続するインタフェイスにより実現されてもよい。
さらに、配信サーバ203は、生成部または取得部により生成または取得されてバッファ部403に格納されたデータを送信するための制御を行う不図示の配信処理部を有する。配信処理部は、転送処理部405と同様に、ノード情報記憶部408を参照して子ノードを認識し、バッファ部403に格納されたデータを各子ノードに送信するための制御を行う。
このように、配信サーバ203も、図5の通信装置400と類似の構成を有する。そこで、以下の説明においては、特に誤解のおそれがない場合は、配信サーバ203用に上記のごとく変形された通信装置も含めて、「通信装置400」と称することがある。
続いて、論理ネットワーク100内の各ノードに相当する通信装置400(具体的には配信サーバ203または端末装置205A〜205L)の動作と、管理サーバ204の動作について、詳しく説明する。
論理ネットワーク100における根ノードN1に相当する配信サーバ203は、以下の(G−1)〜(G−7)の処理を行う。
(G−1)端末装置から、配信サーバ203の子ノードとして登録するよう求める要求を受信したときに、当該端末装置を配信サーバ203の子ノードとして登録する処理。この(G−1)の処理は、新たな端末装置の論理ネットワーク100への参加、または配信ツリーの再構築にともなって、イベント駆動で不定期に行われる処理である。
(G−2)配信サーバ203の子ノードから、論理ネットワーク100から離脱する(leave)ことを知らせる通知を受信したときに、当該子ノードの情報を削除する処理。この(G−2)の処理は、イベント駆動で不定期に行われる処理である。
(G−3)配信サーバ203を根ノードとするツリー(すなわち論理ネットワーク100)に含まれるノードがそれぞれ再送用に使用可能な帯域幅の合計値に変化が生じたときに、変化を記録する処理。
(G−4)配信サーバ203自身が再送用に使用可能な帯域幅の変化を検出する処理。この(G−4)の処理は、定期的な監視処理であってもよいし、不定期に生じるイベントを検出する処理であってもよい。
(G−5)論理ネットワーク100内に配信するコンテンツを生成または取得し、コンテンツを適宜パケット化し、適宜のタイミングで(例えばサンプリングレートに応じた適宜の間隔で定期的に)子ノードにデータパケットを送信する処理。なお、配信サーバ203は、再送に備えて、送信後一定時間は、データパケットをバッファ部403に保持し続ける。
(G−6)バッファ部403から古いデータパケットを削除するエージング処理。この(G−6)の処理は、例えばタイマ割り込み信号によって、定期的に呼び出されてもよい。
(G−7)論理ネットワーク100内のいずれかのノードから再送要求を受信したときに、配信サーバ203自ら再送要求に応じるか、または配信サーバ203の子ノードに再送を保証させるための処理。この(G−7)の処理は、イベント駆動で不定期に行われる処理である。
また、論理ネットワーク100における葉ノード(図1〜2の例では、ノードN5、N7〜N13)は、以下の(H−1)〜(H−13)の処理を行う。
(H−1)新たに論理ネットワーク100に参加しようとするとき、親ノードとして適切なノードを管理サーバ204に問い合わせる処理。この(H−1)の処理は、初期設定のための処理である。
(H−2)上記(H−1)の問い合わせに対して管理サーバ204から返答されたノードに対して、子ノードとしての登録を要求する処理。この(H−2)の処理も、初期設定のための処理である。
(H−3)当該葉ノード自身が再送用に使用可能な帯域幅に変化が生じたときに、変化を記録するとともに、親ノードに変化を通知する処理。
(H−4)当該葉ノード自身が再送用に使用可能な帯域幅の変化を検出する処理。この(H−4)の処理は、定期的な監視処理であってもよいし、不定期に生じるイベントを検出する処理であってもよい。
(H−5)データパケットの受信を契機として、パケットロスの有無を検出し、必要に応じて再送要求を送信する処理。なお、葉ノードに相当する通信装置400は、他のノードから再送要求を受ける場合に備えて、一定時間は、受信したデータパケットをバッファ部403に保持し続ける。
(H−6)バッファ部403から古いデータパケットを削除するエージング処理。この(H−6)の処理は、例えばタイマ割り込み信号によって、定期的に呼び出されてもよい。
(H−7)受信したデータパケットを用いてコンテンツ(例えば動画や音声など)を再生する処理。
(H−8)論理ネットワーク100内のいずれかのノードから再送要求を受信したときに、再送要求に応じる処理。この(H−8)の処理は、イベント駆動で不定期に行われる処理である。
(H−9)上記(H−5)の処理における再送要求の送信先として適切なノードを管理サーバ204に問い合わせる処理。この(H−9)の処理が行われるタイミングは任意である。例えば、この(H−9)の処理は、上記(H−1)の処理とともに最初に行われてもよいし、さらにその後、定期的に繰り返し行われてもよい。
(H−10)上記(H−5)の処理において再送要求を送信した場合に、再送要求に応じられない旨のNACK(Negative ACKnowledgment)を受信したら、別のノードに再送要求を送信しなおす処理。
(H−11)論理ネットワーク100から離脱しようとするとき、親ノードと管理サーバ204に離脱を通知する処理。
(H−12)親ノードから、新たな親ノードの候補を知らせる通知を受信した場合、通知された候補に対して、子ノードとして登録するよう要求する処理。この(H−12)の処理における親ノードからの通知は、例えば、今までの親ノードが論理ネットワーク100から離脱する場合などに行われる。
(H−13)当該葉ノードが管理サーバ204にかつて通知した情報が表す状況に変化があった場合、管理サーバ204に情報の更新を要求する処理。
また、論理ネットワーク100における中継ノード(図2の例では、ノードN2〜N4、N6)は、以下の(I−1)〜(I−14)の処理を行う。
(I−1)新たに論理ネットワーク100に参加しようとするとき、親ノードとして適切なノードを管理サーバ204に問い合わせる処理。この(I−1)の処理は、初期設定のための処理である。
(I−2)上記(I−1)の問い合わせに対して管理サーバ204から返答されたノードに対して、子ノードとしての登録を要求する処理。この(I−2)の処理も、初期設定のための処理である。
(I−3)他の端末装置から、子ノードとして登録するよう求める要求を受信したときに、当該端末装置を子ノードとして登録する処理。この(I−3)の処理は、新たな端末装置の論理ネットワーク100への参加、または配信ツリーの再構築にともなって、イベント駆動で不定期に行われる処理である。
(I−4)子ノードから、論理ネットワーク100からの離脱を知らせる通知を受信したときに、当該子ノードの情報を削除する処理。この(I−2)の処理は、イベント駆動で不定期に行われる処理である。
(I−5)当該中継ノード自身を根ノードとするツリー(すなわち論理ネットワーク100の部分木)に含まれるノードがそれぞれ再送用に使用可能な帯域幅の合計値に変化が生じたときに、変化を記録するとともに、親ノードに変化を通知する処理。
(I−6)当該中継ノード自身が再送用に使用可能な帯域幅の変化を検出する処理。この(I−6)の処理は、定期的な監視処理であってもよいし、不定期に生じるイベントを検出する処理であってもよい。
(I−7)データパケットの受信を契機として、パケットロスの有無を検出し、必要に応じて再送要求を送信し、受信に成功したデータパケットを子ノードに転送する処理。なお、中継ノードに相当する通信装置400は、他のノードから再送要求を受ける場合に備えて、一定時間は、受信したデータパケットをバッファ部403に保持し続ける。
(I−8)バッファ部403から古いデータパケットを削除するエージング処理。この(I−8)の処理は、例えばタイマ割り込み信号によって、定期的に呼び出されてもよい。
(I−9)受信したデータパケットを用いてコンテンツ(例えば動画や音声など)を再生する処理。
(I−10)論理ネットワーク100内のいずれかのノードから再送要求を受信したときに、再送要求に応じる処理。この(I−10)の処理は、イベント駆動で不定期に行われる処理である。
(I−11)上記(I−7)の処理における再送要求の送信先として適切なノードを管理サーバ204に問い合わせる処理。この(I−11)の処理が行われるタイミングは任意である。例えば、この(I−11)の処理は、上記(I−1)の処理とともに最初に行われてもよいし、さらにその後、定期的に繰り返し行われてもよい。
(I−12)上記(I−7)の処理において再送要求を送信した場合に、再送要求に応じられない旨のNACKを受信したら、別のノードに再送要求を送信しなおす処理。
(I−13)論理ネットワーク100から離脱しようとするとき、親ノードと管理サーバ204に離脱を通知するとともに、各子ノードに対して、当該子ノードの新たな親ノードの候補として、当該中継ノード自身の親ノードを通知する処理。例えば、図2の中継ノードN6が論理ネットワーク100から離脱しようとするとき、ノードN6は、親ノードN3と管理サーバ204に離脱を通知する。さらに、中継ノードN6は、子ノードN12に対して、ノードN12の新たな親ノードの候補として、ノードN6自身の親ノードN3を通知する。同様に、ノードN6は、子ノードN13に対しても、ノードN13の新たな親ノードの候補として、ノードN3を通知する。
(I−14)当該中継ノードが管理サーバ204にかつて通知した情報が表す状況に変化があった場合、管理サーバ204に情報の更新を要求する処理。
管理サーバ204は、以下の(J−1)〜(J−4)の処理を行う。(J−1)〜(J−4)の処理はいずれも、制御パケットの受信を契機としてイベント駆動で行われる処理である。
(J−1)論理ネットワーク100に新たに参加しようとする端末装置からの「どのノードを親ノードとして選択すればよいか」に関する問い合わせを受信した場合、問い合わせに返答する処理。すなわち、上記(H−1)と(I−1)の問い合わせに返答する処理。
(J−2)論理ネットワーク100内の中継ノードまたは葉ノードからの「どのノードに再送要求を送信すればよいか」に関する問い合わせを受信した場合、問い合わせに返答する処理。すなわち、上記(H−9)と(I−11)の問い合わせに返答する処理。
(J−3)論理ネットワーク100内のいずれかのノードから、当該ノードに関して管理サーバ204が管理している情報を更新するよう求める要求を受信した場合、要求に応じて情報を更新する処理。すなわち、上記(H−13)と(I−14)の要求に応じる処理。
(J−4)論理ネットワーク100から離脱しようとするノードから離脱の通知を受信した場合、当該ノードに関して管理サーバ204が管理している情報を削除する処理。すなわち、上記(H−11)と(I−13)の通知に応じて、不要な情報を削除する処理。
以下では、説明の便宜上、まず、管理サーバ204による(J−1)〜(J−4)の処理について、図6〜7を参照しながら説明する。
その後、論理ネットワーク100内の各ノードで共通の(G−4)、(H−4)、(I−6)の検出処理と、再送用に使用可能な帯域幅の変化が検出処理によって検出された場合の、(G−3)、(H−3)、(I−5)の処理について、図8を参照して説明する。
なお、(G−3)と(I−5)の処理は、例えば、制御パケットの受信を契機として行われる。そこで、続いて、再送要求以外の制御パケットの受信を契機として行われる(G−1)〜(G−3)、(H−12)、(I−3)〜(I−5)の処理について、図9〜10を参照しながら説明する。
その後、データパケットの送受信に関連する(G−5)、(H−5)、(H−7)、(I−7)、(I−9)の処理について、図11〜14を参照して説明する。
さらにその後、再送要求の受信を契機として行われる(G−7)、(H−8)、(H−10)、(I−10)、(I−12)の処理について、図15〜19を参照して説明する。
さて、図6は、管理サーバ204が行う(J−1)〜(J−4)の処理に関するフローチャートである。すなわち、図6は、管理サーバ204が制御パケットの受信を契機として実行する処理のフローチャートである。また、図7は、管理サーバ204が保持するノード管理情報500の例を示す図である。
管理サーバ204は、論理ネットワーク100内の既存のいずれかのノードまたは論理ネットワーク100に新たに参加しようとするノードから制御パケットを受信すると、図6の処理を開始する。
そして、ステップS101において管理サーバ204は、受信した制御パケットが、新規接続の要求であるか否かを判断する。なおここで、「新規接続の要求」とは、まだ論理ネットワーク100に参加していない新たな端末装置からの、参加要求のことである。本実施形態では、各種制御パケットは、ヘッダ中のタイプフィールドの値によりタイプが判別可能である。
管理サーバ204が受信した制御パケットが新規接続の要求である場合、処理はステップS102に移行する。また、管理サーバ204が受信した制御パケットが他のタイプのメッセージである場合、処理はステップS103に移行する。
ステップS102で管理サーバ204は、新規接続の要求の送信元の端末装置(以下、便宜上「新規ノード」という)の親ノードの候補を選択する。そして、管理サーバ204は、選択した候補を、新規ノードに通知する。また、管理サーバ204は、図7のノード管理情報500に新規エントリを追加し、新規エントリのフィールドに適宜値を設定する。なお、管理サーバ204が選択する候補の数は、1でもよいし2以上でもよいが、以下では説明の簡単化のため、1と仮定する。
ここで、図7を参照して、管理サーバ204が保持するノード管理情報500について説明する。ノード管理情報500は、1つ以上のエントリを含む。ノード管理情報500の各エントリは、論理ネットワーク100に含まれる各ノードに対応する。
また、本実施形態におけるノード管理情報500の各エントリは、「ノードID(identification)」、「IPアドレス」、「ポート番号」、「接続能力」、「ISP(Internet Service Provider)」というフィールドを含む。
「ノードID」フィールドは、当該ノードに管理サーバ204が割り当てたIDを示す。「IPアドレス」フィールドは、当該ノードのIPアドレスを示す。「ポート番号」フィールドは、当該ノードの受信ポート番号を示す。
また、接続能力とISPは、ノードに関連する補足情報の例である。例えば、「接続能力」フィールドは、「当該ノードは、新たに子ノードを持つことが可能な空き帯域幅を有しているか否か」ということを示し、「ISP」フィールドは、当該ノードが接続されたISPを示す。
図7の例における1つ目のエントリは、ノードIDが1のノードについて示す。1つ目のエントリによれば、ノードIDが1のノードは、IPアドレスが206.89.2.10でポート番号が50002である。また、1つ目のエントリによれば、ノードIDが1のノードは、接続能力が「空きあり」であり(つまり、新たな子ノードを受け入れ可能であり)、プロバイダAに接続されている。
また、2つ目のエントリは、ノードIDが2のノードについて示す。2つ目のエントリによれば、ノードIDが2のノードは、IPアドレスが220.161.1.30でポート番号が50001である。また、2つ目のエントリによれば、ノードIDが2のノードは、接続能力が「空きなし」であり(つまり、新たな子ノードを受け入れ不能であり)、プロバイダBに接続されている。
なお、初期状態におけるノード管理情報500は、配信サーバ203に対応する1つのエントリを含むように、予め設定される。また、配信サーバ203のノードIDは、予め決められた値(例えば1)である。そして、ノード管理情報500のエントリ数は、配信ツリーの構築または再構築につれて変化する。
また、実施形態によっては、ノード管理情報500はポート番号を含まなくてもよい。例えば、ALMソフトウェアによってポート番号が一意の定数に決められている場合、ポート番号フィールドは省略可能である。また、補足情報はオプショナルな情報であり、実施形態に応じて補足情報が省略されてもよい。
ここで図6の説明に戻る。論理ネットワーク100に参加しようとする端末装置は、新規接続の要求を管理サーバ204に送信し、管理サーバ204は、新規接続の要求を受信すると、上記のようにステップS102の処理を行う。新規接続の要求は、上記(H−1)と(I−1)に述べたように、親ノードとして適切なノードを管理サーバ204に問い合わせるためのメッセージでもある。また、新規接続の要求は、新規ノード(つまり要求の送信元の端末装置)自身のIPアドレス、ポート番号、接続能力、およびISPに関する通知を含む。
したがって、ステップS102で管理サーバ204は、具体的には次のような処理を行う。
管理サーバ204は、新規ノードのための新規ノードIDを発行する。そして、管理サーバ204は、ノード管理情報500の既存のエントリの中から、接続能力が「空きあり」の任意の1つのエントリに対応するノードを、新規ノードの親ノードの候補として選択する。なお、接続能力が「空きあり」のエントリがない場合は、管理サーバ204は、配信サーバ203を選択してもよい。
そして、管理サーバ204は、親ノードの候補として選択したノードのノードID、IPアドレスおよびポート番号、ならびに、発行した新規ノードIDを、新規ノードに通知する。
さらに、ステップS102で管理サーバ204は、ノード管理情報500に新規エントリを追加する。そして、管理サーバ204は、追加したエントリにおいて、「ノードID」フィールドには発行した新規ノードIDの値を設定し、「IPアドレス」、「接続能力」、および「ISP」の各フィールドには、新規接続の要求に含まれる値をそれぞれコピーする。
なお、実施形態によっては、管理サーバ204は、新規接続の要求に含まれるISPと同じISPのエントリを優先的に親ノードの候補として選択してもよい。あるいは、管理サーバ204は、最上位オクテットから比較したときに、新規接続の要求に含まれるIPアドレスとなるべく多くのオクテットが一致するIPアドレスを持つノードを、優先的に親ノードの候補として選択してもよい。
また、ノード管理情報500の接続能力は、「空きあり」と「空きなし」の2値ではなく、受け入れ可能な子ノードの数などの数値により表されてもよい。管理サーバ204は、数値で表された接続能力と、ISPとを引数とする評価関数を用いて、最も評価の高いノードを、新規ノードの親ノードの候補として選択してもよい。
以上のようにしてステップS102の一連の処理が終わると、図6の処理も終わる。
他方、ステップS101において、新規接続の要求以外の制御パケットを受信したと管理サーバ204が判断した場合は、続いて、ステップS103の処理が行われる。すなわち、ステップS103で管理サーバ204は、受信した制御パケットが、論理ネットワーク100からの離脱の通知(つまり、(H−11)または(I−13)の通知)であるか否かを判断する。
そして、管理サーバ204が受信した制御パケットが離脱の通知である場合、処理はステップS104に移行する。また、管理サーバ204が受信した制御パケットが他のタイプのメッセージである場合、処理はステップS105に移行する。
ステップS104で管理サーバ204は、離脱の通知の送信元のノードに対応するエントリをノード管理情報500から削除する。離脱の通知は、論理ネットワーク100から離脱しようとするノードのIPアドレスを含むので、管理サーバ204はIPアドレスをキーにして削除対象のエントリを特定することができる。エントリの削除後、図6の処理も終了する。
また、ステップS105で管理サーバ204は、受信した制御パケットが、再送要求先の問い合わせ(つまり(H−9)または(I−11)の問い合わせ)であるか否かを判断する。
なお、論理ネットワーク100内の葉ノードまたは中継ノードは、将来の再送要求に備えて、再送要求先の問い合わせを予め管理サーバ204に送信してもよい。葉ノードまたは中継ノードは、再送要求先の問い合わせを、任意のタイミングで(例えば、比較的長めの間隔で定期的に)繰り返し管理サーバ204に送信してもよい。
そして、管理サーバ204が受信した制御パケットが再送要求先の問い合わせである場合、処理はステップS106に移行する。また、管理サーバ204が受信した制御パケットが他のタイプのメッセージである場合、処理はステップS107に移行する。
ステップS106で管理サーバ204は、ノード管理情報500の既存のエントリのうちで任意の1つのエントリに対応するノードを、再送要求先の候補として選択する。例えば、管理サーバ204は、単にランダムに1つのエントリを選択してもよい。
そして、管理サーバ204は、選択した候補(より具体的には、選択した候補のノードID、IPアドレスおよびポート番号)を、問い合わせの送信元のノードに通知する。すると、図6の処理も終了する。
また、ステップS107で管理サーバ204は、受信した制御パケットが、ノード管理情報500の更新要求(つまり、(H−13)または(I−14)の要求)であるか否かを判断する。
例えば、論理ネットワーク100内の葉ノードは、自分自身の接続能力を監視してもよく、接続能力が変化したときに(H−13)の要求を送信してもよい。中継ノードも同様にして、(I−14)の要求を送信してもよい。例えば、コンテンツ配信以外のアプリケーションが使う帯域幅の変化に応じて、接続能力が変化することがある。
そして、管理サーバ204が受信した制御パケットが、ノード管理情報500の更新要求である場合、処理はステップS108に移行する。また、管理サーバ204が受信した制御パケットが、ノード管理情報500の更新要求ではない場合、図6の処理は終了する。
ステップS108で管理サーバ204は、ノード管理情報500において、更新要求の送信元のノードに対応するエントリを検索し、検索の結果見つかったエントリの内容を、受信した更新要求に応じて更新する。なお、更新要求は、接続能力以外の値の更新を要求するものであってもよい。例えば、補足情報が接続能力とISP以外の付加的項目をさらに含む場合、更新要求は、当該付加的項目の更新を要求するものでもよい。ノード管理情報500の更新後、図6の処理は終了する。
続いて、論理ネットワーク100内の各ノードで共通の(G−4)、(H−4)、(I−6)の検出処理と、再送用に使用可能な帯域幅の変化が検出処理によって検出された場合の、(G−3)、(H−3)、(I−5)の処理について説明する。本実施形態では、再送の信頼性を高めるために、再送用に使用可能な帯域幅の変化の検出および通知が行われる。
以下では、あるノードNjがデータパケットの再送用に使用可能な帯域幅を、ノードNjの「送信可能帯域幅」という。送信可能帯域幅は、換言すれば、再送用に予約される帯域幅である。
また、ノードNjを根ノードとする部分グラフに含まれるすべてのノードの送信可能帯域幅の和を、ノードNjの「送信可能総帯域幅」という。定義より、葉ノードにおいては送信可能帯域幅と送信可能総帯域幅が等しい。また、上記定義より、送信可能総帯域幅は、式(1)のように表すことができる。
なお、式(1)において、「Reserved(Nj)」はノードNjの送信可能帯域幅である。また、「Total(Nj)」はノードNjの送信可能総帯域幅であり、「Total(Nk)」はノードNkの送信可能総帯域幅である。そして、「Child(Nj)」はノードNjの子ノードの集合である。
送信可能帯域幅は、例えば、ユーザによって指定されてもよい。あるいは、ノードを実現するコンピュータ(例えば配信サーバ203や端末装置205A〜205Lなどの通信装置400)にインストールされたデータ配信アプリケーションプログラム(つまりALMソフトウェア)が、自動的に送信可能帯域幅を設定してもよい。データ配信アプリケーションプログラムは、再送ではない本来のデータ配信に使用される帯域幅、ネットワーク環境、同じコンピュータが実行中の他のアプリケーションプログラムにより使用される帯域幅などに基づき、動的に送信可能帯域幅を変更してもよい。
すなわち、(G−4)、(H−4)、(I−6)の検出処理とは、例えば、下記(K−1)〜(K−4)のようなイベントの発生を監視し、送信可能帯域幅の変化をもたらすイベントの発生を検出する処理である。以下、説明の便宜上、例えば(K−1)〜(K−4)のようなイベントを「ネットワーク状況の変化」と総称する。
(K−1)ユーザが新たな値を送信可能帯域幅として設定した。
(K−2)物理的なネットワーク環境が変化した。例えば、検出処理を行うノードが具体的には図3の端末装置205Hである場合、端末装置205Hと同じルータ202Eに接続された他の端末装置205Gまたは205Iによる通信量が変化し、その影響で端末装置205Hが使用可能な帯域幅が変化した。あるいは、ルータ202Eに接続されたコアネットワーク201内の回線の帯域幅が変化した。
(K−3)データ配信アプリケーションにおいて、再送以外の処理のために確保することが好ましい帯域幅が変化した。例えば、子ノードの数が変化した。
(K−4)同じコンピュータ内で実行中の他のアプリケーションが使用する帯域幅が変化した。
ところで、各ノードが送信可能帯域幅の変化の検出を行う理由は、上記のとおり、再送の信頼性を高めるため(つまり、再送がより確実に保証されるようにするため)である。
例えば、図1の例では、ノードN6が、ステップS33においてノードN12に再送処理を委譲する。しかし、もしノードN12において物理的に使用可能なほとんどの帯域幅が再送以外の他の処理によって既に占有されていたとすると、ノードN12からの再送が失敗するおそれが高い。つまり、ノードN12は、責任ノードとして選択されたにもかかわらず、再送を保証することができないおそれが高い。
また、ノードN3は、「ノードN6を根ノードとする部分グラフに属する1つ以上の任意のノードによって再送が保証される」ということを前提として、ノードN6を責任ノードとして選択し、ステップS30でノードN6に再送を委譲する。したがって、仮にもし上記のようにノードN12が再送を保証することができないとすると、ノードN3にとっての責任ノードを選択するうえでの前提が成り立たない。
そこで、再送がより確実に保証されるようにするため(すなわち、上記に例示したような前提を成り立たせるため)、本実施形態では、各ノードが再送用に送信可能帯域幅を予約し、かつ、各ノードが送信可能総帯域幅の変化を認識する。
具体的には、式(1)からも明らかなように、ノードNjの送信可能総帯域幅Total(Nj)は、以下の(L−1)〜(L−4)の理由で変化する。
(L−1)ノードNj自身の送信可能帯域幅Reserved(Nj)が変化した。
(L−2)ノードNjがノードNkを新たに子ノードとしたため、ノードNkの送信可能総帯域幅Total(Nk)の分だけノードNjの送信可能総帯域幅Total(Nj)が増加した。
(L−3)ノードNjが既に子ノードNkを持つ場合において、子ノードNkの送信可能総帯域幅Total(Nk)が変化した。
(L−4)ノードNjが既に子ノードNkを持つ場合において、子ノードNkが論理ネットワークから離脱したため、ノードNkの送信可能総帯域幅Total(Nk)の分だけノードNjの送信可能総帯域幅Total(Nj)が減少した。
そして、(L−1)の変化は、具体的には上記(K−1)〜(K−4)のようなネットワーク状況の変化によって生じる。また、(L−3)から明らかなとおり、あるノードNkの送信可能総帯域幅Total(Nk)が変化した場合、ノードNkの親ノードNjの送信可能総帯域幅Total(Nj)も、それにともなって変化する。
したがって、本実施形態では、論理ネットワーク100内の各ノードが当該ノード自身の送信可能総帯域幅の変化を認識するための処理として、子ノードから親ノードへ、送信可能総帯域幅の変化を知らせる通知が送信される。その結果、あるノードが通知を送信すると、論理ネットワーク100内のエッジを逆向きにたどって根ノードに至るまで、通知が順次連鎖的に送信される。
例えば、図1のノードN9がノードN9自身の送信可能帯域幅Reserved(N9)の変化を検出すると、ノードN9の送信可能総帯域幅Total(N9)も当然変化する。そこで、ノードN9は親ノードN4に、送信可能総帯域幅Total(N9)の変化を通知する。
その結果、ノードN4の送信可能総帯域幅Total(N4)も変化する。よって、ノードN4は親ノードN2に送信可能総帯域幅Total(N4)の変化を通知する。すると、ノードN2の送信可能総帯域幅Total(N2)が変化するので、ノードN2は、送信可能総帯域幅Total(N2)の変化を親ノードN1に通知する。
すると、ノードN1の送信可能総帯域幅Total(N1)も変化する。ただし、ノードN1は、論理ネットワーク100における根ノードなので、送信可能総帯域幅Total(N1)の変化にともなう通知を送信する必要はない。
例えば以上説明したような連鎖的な通知により、論理ネットワーク100内の各ノードは、送信可能総帯域幅の変化を認識することができる。そして、再送要求を受けたノードが、子ノードの送信可能総帯域幅を考慮に入れて責任ノードを選択することにより、再送がより確実に保証され、再送の信頼性が向上する。
ここで、送信可能帯域幅に関する(G−4)、(H−4)、(I−6)の検出処理の説明に戻る。(G−4)、(H−4)、(I−6)の検出処理により、上記(L−1)の原因による送信可能総帯域幅の変化が検出可能である。
よって、葉ノードまたは中継ノードは、(H−4)、(I−6)の検出処理により送信可能帯域幅の変化を検出した場合は、送信可能帯域幅の変化に起因して変化した送信可能総帯域幅を計算し、計算結果を記憶し、計算結果を親ノードに通知する。つまり、葉ノードは(H−3)の通知を行い、中継ノードは(I−5)の通知を行う。
なお、根ノードは、(G−4)の検出処理により送信可能帯域幅の変化を検出した場合、送信可能帯域幅の変化に起因して変化した送信可能総帯域幅を計算し、計算結果を記憶するが、計算結果を他のノードに通知する必要はない。つまり、根ノードは(G−3)のように単に変化を記録するだけでよい。
さて、以上説明した送信可能総帯域幅の変化の検出と通知について模式的に図示すると、図8のとおりである。図8の論理ネットワーク100aは、ある論理ネットワークの一部を抜粋したものである。論理ネットワーク100aは、ノードN20〜N24を含む。また、ノードN21はノードN20の子ノードであり、ノードN22〜N24はノードN21の子ノードである。
なお、ノードN20は、根ノードでもよいし中継ノードでもよい。また、ノードN22〜N24は、葉ノードでもよいし中継ノードでもよい。
図1〜2と同様に、図8においても、データパケット601が配信される方向が実線の矢印により示されている。破線の矢印は、送信可能総帯域幅の通知が送信される方向を示す。
図8に示すように、ノードN22は、子ノードとして登録するようノードN21に求めるとき、および、ノードN22の送信可能総帯域幅Total(N22)に変化があったときに、送信可能総帯域幅の通知602をノードN21に送信する。同様に、ノードN23は、子ノードとして登録するようノードN21に求めるとき、および、ノードN23の送信可能総帯域幅Total(N23)に変化があったときに、送信可能総帯域幅の通知603をノードN21に送信する。さらに同様に、ノードN24は、子ノードとして登録するようノードN21に求めるとき、および、ノードN24の送信可能総帯域幅Total(N24)に変化があったときに、送信可能総帯域幅の通知604をノードN21に送信する。
なお、送信可能総帯域幅の通知602〜604は、任意の順序で送信され得るし、必要に応じて何度でも送信され得る。ノードN21は、送信可能総帯域幅の通知602〜604のいずれか1つを受信するたびに、ノードN21の送信可能総帯域幅Total(N21)を計算しなおし、計算結果を記憶するとともに、計算結果を記録した通知605をノードN20に送信する。さらに、ノードN21は、ノードN21自身の送信可能帯域幅Reserved(N21)が変化した場合も、送信可能総帯域幅Total(N21)を計算しなおし、計算結果を記憶するとともに、計算結果を記録した通知605をノードN20に送信する。
ところで、以上説明した送信可能総帯域幅の通知のために、図5の通信装置400のノード情報記憶部408は、通信装置400自身の送信可能帯域幅や通信装置400の各子ノードの送信可能総帯域幅をノード情報として保持する。また、図8に例示した送信可能総帯域幅の通知602〜605は制御パケットの一種であるが、図8の説明から明らかなとおり、各ノード(すなわち通信装置400)は、制御パケットの受信を契機として様々な処理を行う。
そこで、以下では、図9を参照して、ノード情報記憶部408が保持するノード情報の例について説明し、図10を参照して、制御パケットの受信を契機とする処理について説明する。
上記(F−1)〜(F−4)に簡単に説明したように、通信装置400のノード情報記憶部408が保持するノード情報は、いくつかの種類の情報を含む。具体的には、ノード情報は、通信装置400の親ノードに関する親ノード情報701と、通信装置400が再送要求を送信する宛先である再送要求先のノードに関する再送要求先情報702と、通信装置400の子ノードに関する子ノード情報と、通信装置400自身に関する自ノード情報を含む。
なお、子ノード情報と自ノード情報は、通信装置400が再送要求を受信すると変化する。そこで、図9では、2つの状態の子ノード情報に、「703a」と「703b」という別の参照符号が付与されている。同様に、図9では、2つの状態の自ノード情報に、「704a」と「704b」という別の参照符号が付与されている。
また、図9では図示の便宜上、各種情報をテーブル形式で例示しているが、データ形式は実施形態に応じて任意である。例えば、線形リストや連想配列が使われてもよい。
親ノード情報701は、通信装置400の親ノードのIPアドレスと、親ノードのポート番号(具体的には受信ポート番号)と、通信装置400と親ノードの間のRTT(Round Trip Time)を含む。親ノード情報701は、親ノードのノードIDをさらに含んでもよい。図9の親ノード情報701の例では、IPアドレスは220.161.1.30であり、ポート番号は50001であり、RTTは5msである。
例えば、ノード情報管理部409は任意のタイミングで親ノードとの間のRTTを計測し、計測結果を親ノード情報701に書き込む。RTTの計測には、例えば、「ping」コマンドなどが利用可能である。
つまり、ノード情報管理部409は、親ノードのIPアドレスを宛先に指定したICMP(Internet Control Message Protocol)のエコー要求パケットを生成し、送信部402がエコー要求パケットを送信する。そして、受信部401が親ノードからのエコー応答パケットを受信してノード情報管理部409に出力する。すると、ノード情報管理部409は、エコー要求パケットの送信からエコー応答パケットの受信までにかかった時間を親ノードと通信装置400自身との間のRTTとして認識し、認識したRTTを親ノード情報701に書き込む。
また、再送要求先情報702は、通信装置400にとっての再送要求先のIPアドレスと、再送要求先のポート番号(具体的には受信ポート番号)と、通信装置400と再送要求先の間のRTTを含む。再送要求先情報702は、再送要求先のノードIDをさらに含んでもよい。図9の再送要求先情報702の例では、IPアドレスは217.125.10.16であり、ポート番号は50002であり、RTTは9msである。
なお、ノード情報管理部409は、将来のパケットロスと再送要求に備えて、予め再送要求先情報702を取得してノード情報記憶部408に記憶しておくことが好ましい。しかし、ノード情報管理部409は、ロス検出部406がパケットロスを検出したときに、ロス検出部406からの依頼にしたがって再送要求先情報702を取得してもよい。
つまり、ノード情報管理部409は、送信部402を介して、(H−9)または(I−11)の問い合わせを任意のタイミングで管理サーバ204に送信することができる。すると、管理サーバ204は図6のステップS106で問い合わせに返答する。そして、送信部402は、返答を受信してノード情報管理部409に出力する。
その結果、ノード情報管理部409は、再送要求先のIPアドレスとポート番号を認識する。また、ノード情報管理部409は、認識した再送要求先のIPアドレスを指定して任意のタイミングで「ping」コマンドを実行することにより、再送要求先と通信装置400との間のRTTを計測することができる。ノード情報管理部409は、計測結果を再送要求先情報702のRTTとして記録する。
子ノード情報703aと703bは、異なる時点での異なる2つの状態の子ノード情報の例である。通信装置400のノード情報記憶部408が記憶する子ノード情報は、通信装置400の子ノードの数だけエントリを持つ。
また、子ノード情報の各エントリは、子ノードのIPアドレス、子ノードのポート番号(具体的には受信ポート番号)、子ノードの送信可能総帯域幅、および子ノードと通信装置400の間のRTTを含む。実施形態によっては、子ノード情報の各エントリは、子ノードのノードIDをさらに含んでもよい。
子ノード情報の各エントリはさらに、「一時使用帯域幅」と「一時使用期限」のペアを0個、1個、または複数個含む。図9では図示の都合上、一時使用帯域幅と一時使用期限のペアの数が0の場合、一時使用帯域幅と一時使用期限の列に「−」と表示してある。
例えば、子ノード情報703aの1つ目のエントリに対応する子ノードは、IPアドレスが210.50.63.10であり、ポート番号が50004である。また、1つ目のエントリの送信可能総帯域幅が「3Mbps」と例示されているが、これは、「ノード情報管理部409が当該子ノードから図8と同様の送信可能総帯域幅の通知を受信したことがあり、受信した通知に3Mbpsと記録されていた」ということを示す。
ノード情報管理部409は、子ノードと通信装置400の間のRTTも例えば「ping」コマンドなどを利用して任意のタイミングで計測し、計測結果を子ノード情報のRTTとして記録する。ノード情報管理部409は、例えば子ノードの登録直後にRTTの計測を行ってもよい。子ノード情報703aの1つ目のエントリには、例えば、RTTとして7msという計測結果が書き込まれている。
また、子ノード情報703aの2つ目のエントリでは、IPアドレスが213.4.30.20であり、ポート番号が50003であり、送信可能総帯域幅が10Mbpsであり、RTTが3msである。
なお、図9の子ノード情報703aは2つのエントリを含むが、どちらのエントリも、一時使用帯域幅と一時使用期限のペアを持たない。ところが、子ノード情報703bでは、1つ目のエントリが、以下の(M−1)と(M−2)のペアを含む。
(M−1)0.5Mbpsという一時使用帯域幅と、14時10分5.350秒という一時使用期限のペア
(M−2)0.3Mbpsという一時使用帯域幅と、14時10分5.372秒という一時使用期限のペア
一時使用帯域幅と一時使用期限の詳細については後述するが、概要を説明すると以下のとおりである。上記(M−1)のペアは以下の(N−1)〜(N−3)のことを示し、上記(M−2)のペアは以下の(N−4)〜(N−6)のことを示す。
(N−1)以前通信装置400が受信した再送要求に対応して、1つ目のエントリに対応する子ノードを、選択部411が責任ノードとして選んだ。
(N−2)上記(N−1)の再送要求により要求されたデータパケット(つまり特定情報)のうち、1つ目のエントリに対応する子ノードに対応づけ部412が対応づけた部分は、送信可能総帯域幅の3Mbpsのうち、0.5Mbpsを消費する、と予測される。
(N−3)上記(N−1)の再送要求により要求されたデータの送信は、14時10分5.350秒までに完了する、と予測される。すなわち、14時10分5.350秒以降は、0.5Mbpsが再び利用可能になる、と予測される。
(N−4)上記(N−1)の再送要求とは別の再送要求を通信装置400がさらに受信し、選択部411は、1つ目のエントリに対応する子ノードを再度責任ノードとして選んだ。
(N−5)上記(N−4)の再送要求により要求されたデータパケットのうち、1つ目のエントリに対応する子ノードに対応づけ部412が対応づけた部分は、0.3Mbpsを消費する、と予測される。
(N−6)上記(N−4)の再送要求により要求されたデータの送信は、14時10分5.372秒までに完了する、と予測される。すなわち、14時10分5.372秒以降は、0.3Mbpsが再び利用可能になる、と予測される。
つまり、一時使用帯域幅と一時使用期限のペアを持つエントリに対応する子ノードは、責任ノードとして選択されたノードである。また、「一時使用帯域幅と一時使用期限のペアを持つエントリに対応する子ノードを根ノードとする部分グラフ中の、少なくとも1つのノードは、現在再送処理中である」と推定される。
さて、自ノード情報704aと704bは、異なる時点での異なる2つの状態の自ノード情報の例である。自ノード情報は、通信装置400自身のIPアドレスと、通信装置400自身のポート番号(具体的には受信ポート番号)と、通信装置400自身の送信可能帯域幅と、通信装置400の送信可能総帯域幅を含む。また、自ノード情報も、子ノード情報と同様に、一時使用帯域幅と一時使用期限のペアを0個、1個、または複数個含む。
自ノード情報704aと704bの例では、通信装置400のIPアドレスは214.45.3.5であり、通信装置400のポート番号は50005であり、通信装置400の送信可能帯域幅は5Mbpsである。また、子ノード情報703aと703bに示すように、図9の例では子ノードの数が2であり、それぞれの子ノードから通知された送信可能総帯域幅は3Mbpsと10Mbpsである。したがって、式(1)より、通信装置400の送信可能総帯域幅は、18(=5+3+10)Mbpsである。
自ノード情報704aは一時使用帯域幅と一時使用期限のペアを含まない。他方、自ノード情報704bは、1.5Mbpsという一時使用帯域幅と、15時35分7.255秒という一時使用期限のペアを1個含む。つまり、自ノード情報704bは、以下の(O−1)〜(O−3)のことを示す。
(O−1)以前通信装置400が受信した再送要求に対応して、通信装置400自身を選択部411が責任ノードとして選んだ。
(O−2)上記(O−1)の再送要求により要求されたデータパケット(つまり特定情報)のうち、通信装置400自身に対応づけ部412が対応づけた部分は、送信可能帯域幅の5Mbpsのうち、1.5Mbpsを消費する、と予測される。
(O−3)上記(O−1)の再送要求により要求された再送は、15時35分7.255秒までに完了する、と予測される。すなわち、15時35分7.255秒以降は、1.5Mbpsが再び利用可能になる、と予測される。
なお、図9の親ノード情報701、再送要求先情報702、子ノード情報703a〜703b、および自ノード情報704a〜704bはポート番号を含むが、実施形態によっては、これらの各情報がポート番号のフィールドを含まなくてもよい。例えば、データ配信アプリケーションにより固定的に一意のポート番号が決められている場合は、各種のノード情報自体がポート番号を含まなくてもよい。
さて、続いて、図10を参照して、再送要求以外の制御パケットの受信を契機として図5の通信装置400が実行する処理について説明する。なお、再送要求の受信を契機とする処理については、図15〜19とともに後述する。
通信装置400の受信部401は、パケットを受信すると、例えばヘッダのタイプフィールドを参照することでパケットのタイプを判別する。判別したタイプが再送要求以外の制御パケットのいずれかであった場合、受信部401は、図10の処理を開始する。
そして、ステップS201で受信部401は、受信した制御パケットが、親ノードからの離脱の通知であるか否かを判断する。受信した制御パケットが、親ノードからの離脱の通知である場合、受信部401は受信したパケットをノード情報管理部409に出力し、処理はステップS202に移行する。また、他の制御パケットが受信された場合、処理はステップS203に移行する。
上記(I−13)のように、中継ノードは、論理ネットワーク100から離脱しようとするときに、各子ノードに対して、当該子ノードの新たな親ノードの候補として、当該中継ノード自身の親ノードを通知する。つまり、ステップS202は、(I−13)の通知を受信した子ノードにおける処理である。
具体的には、ステップS202でノード情報管理部409は、今までの親ノードから通知された、新たな親ノード(つまり、今まで親ノードの親ノード)に対して、通信装置400を子ノードとして登録するよう要求する。また、ノード情報管理部409は、ノード情報記憶部408の自ノード情報から通信装置400の送信可能総帯域幅を読み取り、新たな親ノードに通信装置400の送信可能総帯域幅を通知する。
なお、ステップS202における新たな親ノードに対する要求と通知は、例えば1つの制御パケットにより実現されてもよい。本実施形態では1つの制御パケットに要求と通知の双方が含まれるものとする。したがって、ステップS202でノード情報管理部409は、具体的には、新たな親ノードに送信するための1つの制御パケットを生成し、生成した制御パケットを、送信部402に送信させる。
また、ノード情報管理部409は、親ノード情報701に新たな親ノードのIPアドレスとポート番号を記録する。ノード情報管理部409はさらに、新たな親ノードと通信装置400との間のRTTを計測し、親ノード情報701の「RTT」フィールドに計測結果を記録してもよい。そして、処理はステップS207に移行する。
他方、受信部401が受信した制御パケットが、親ノードからの離脱の通知ではなかった場合、すなわち、既存または新規の子ノードからのメッセージであった場合、受信部401は、ステップS203において、メッセージの種類を判断する。
そして、受信した制御パケットが、既存の子ノードからの離脱の通知であった場合、受信部401は受信したパケットをノード情報管理部409に出力し、処理はステップS204に移行する。また、受信した制御パケットが、新たに論理ネットワーク100に参加しようとするノードからの、子ノードとしての登録を求める要求であった場合、受信部401は受信したパケットをノード情報管理部409に出力し、処理はステップS205に移行する。あるいは、受信した制御パケットが、既存の子ノードからの送信可能総帯域幅の通知であった場合、受信部401は受信したパケットをノード情報管理部409に出力し、処理はステップS206に移行する。
ステップS204でノード情報管理部409は、離脱の通知を送信した子ノードに対応するエントリを、ノード情報記憶部408内の子ノード情報から削除する。そして、処理はステップS207に移行する。なお、ステップS204におけるエントリの削除は、上記(L−4)のとおり、通信装置400自身の送信可能総帯域幅の変化を引き起こす原因の一つである。
また、ステップS205でノード情報管理部409は、ノード情報記憶部408内の子ノード情報に新規エントリを追加する。そして、ノード情報管理部409は、新規エントリの「IPアドレス」フィールドに、要求の送信元のノード(つまり新たな子ノード)のIPアドレスを設定し、新規エントリの「ポート番号」フィールドに、新たな子ノードから通知されたポート番号を設定する。ノード情報管理部409はさらに、新たな子ノードと通信装置400との間のRTTを計測して、新規エントリの「RTT」フィールドに計測結果を記録してもよい。
なお、ステップS202に関して説明したように、本実施形態では、子ノードとしての登録を求める要求は、要求を送信するノード自身の送信可能総帯域幅の通知を兼ねる。
そして、これから論理ネットワーク100に参加しようとする新たなノードは、最初は葉ノードとなることが明らかである。よって、新たなノードの送信可能総帯域幅とは、新たなノード自身の送信可能帯域幅に等しい。つまり、これから論理ネットワーク100に参加しようとする新たなノードは、参加を要求する時点での送信可能総帯域幅を認識すること可能であり、認識した送信可能総帯域幅を通知することが可能である。
よって、ステップS205でノード情報管理部409は、さらに、新たなノードから通知された送信可能総帯域幅を、追加した新規エントリの「送信可能総帯域幅」フィールドに設定する。そして、処理はステップS207に移行する。
また、ステップS206でノード情報管理部409は、ノード情報記憶部408の子ノード情報において、送信可能総帯域幅の通知を送信してきた子ノードに対応するエントリを検索する。ノード情報管理部409は、例えばIPアドレスを検索キーにすることで、送信可能総帯域幅の通知を送信してきた子ノードに対応するエントリを特定することができる。
そして、ノード情報管理部409は、検索の結果として特定したエントリの送信可能総帯域幅を、通知された送信可能総帯域幅に書き換える。すると、処理はステップS207に移行する。
さて、ネットワーク状況の変化に起因する通信装置400自身の送信可能帯域幅の変化を検出するための検出処理は、ノード情報管理部409によって、任意のタイミングで行われてよい。例えば、図10の例では、再送要求以外の制御パケットの受信を契機に、ノード情報管理部409がネットワーク状況を調べる。しかしもちろん、ノード情報管理部409は、再送要求以外の制御パケットの受信とは関係なく、定期的に検出処理を行ってもよい。
ステップS207でノード情報管理部409は、ネットワーク状況に変化がないかを調査する。そして、ネットワーク状況に変化がある場合、処理はステップS208に移行し、ネットワーク状況に変化がない場合、処理はステップS209に移行する。
なお、ノード情報管理部409は、例えば「iperf」などのネットワーク帯域測定ツールを用いて、ステップS207の調査を行うこともできる。例えば、ノード情報管理部409は、ネットワーク帯域測定ツールを用いて、通信装置400が使用可能なネットワーク帯域幅を推定してもよい。説明の便宜上、推定結果が20Mbpsであったとする。
すると、ノード情報管理部409は、データ配信アプリケーションが使用する帯域幅の最大値を、推定した帯域幅(つまり20Mbps)以下の範囲内で任意に決定する。説明の便宜上、決定された最大値が15Mbpsであったとする。
ノード情報管理部409はさらに、再送以外の、本来のデータ配信で使用する帯域幅を、決定した最大値から減じることで、再送に利用可能な帯域幅(すなわち送信可能帯域幅)を算出する。例えば、本来のデータ配信で使用する帯域幅が12Mbpsであるとすると、ノード情報管理部409は、送信可能帯域幅として3(=15−12)Mbpsを算出する。
ステップS207では、「以上のようにして算出した新たな送信可能帯域幅が、ノード情報記憶部408に現在保持されている自ノード情報の送信可能帯域幅と等しいか否か」ということを、ノード情報管理部409が判断してもよい。二つの送信可能帯域幅が異なれば、ノード情報管理部409は「ネットワーク状況が変化した」と判断する。
さて、ステップS208では、ノード情報管理部409は、ステップS207で検出した変化に応じた新たな送信可能帯域幅を記録する。つまり、ノード情報管理部409は、ノード情報記憶部408内の自ノード情報の送信可能帯域幅を更新する。そして、処理はステップS209に移行する。
ステップS209でノード情報管理部409は、自ノード(つまり通信装置400自身)の送信可能総帯域幅を計算する。そして、計算結果を、自ノード情報の「送信可能総帯域幅」フィールドに格納する。なお、ステップS209における計算は、式(1)にしたがった計算であり、より具体的には、自ノード情報の送信可能帯域幅と、子ノード情報の全エントリの送信可能総帯域幅の総和とを足す計算である。
そして、ステップS209に続いて、ステップS210でノード情報管理部409は、親ノードが存在するか否かを判断する。つまり、ノード情報管理部409は、親ノード情報701が空であれば「親ノードが存在しない」と判断し、親ノード情報701が空でなければ「親ノードが存在する」と判断する。例えば、配信サーバ203におけるノード情報管理部409は、「親ノードが存在しない」と判断し、端末装置205A〜205Lのノード情報管理部409は、「親ノードが存在する」と判断する。
そして、親ノードが存在しない場合、図10の処理も終了する。逆に、親ノードが存在する場合、処理はステップS211に移行する。
ステップS211でノード情報管理部409は、ステップS209で計算した送信可能総帯域幅を親ノードに通知するための制御パケットを生成し、生成した制御パケットを送信部402に出力する。すると、送信部402が制御パケットを親ノードに送信する。そして、図10の処理も終了する。
例えば、図8のノードN21は、ノードN23から送信可能総帯域幅の通知603を受信すると図10の処理を開始する。そして、ノードN21のノード情報管理部409は、ステップS206で子ノード情報を更新し、ステップS211で親ノードN20宛の送信可能総帯域幅の通知605を生成する。その結果、ステップS211ではノードN21の送信部402が通知605をノードN20に送信する。
さて、続いて、データパケットの配信に関する種々の処理について説明する。論理ネットワーク100の根ノードである配信サーバ203は、上記(G−5)のとおり、配信対象のコンテンツを生成または取得し、コンテンツをパケット化し、子ノードにデータパケットを送信する。また、中継ノードと葉ノードは、データパケットの受信を契機に図11の処理を実行する。さらに、中継ノードと葉ノードにおいては、図11の処理と並行して、再生処理部404がバッファ部403からデータパケットを読み出して再生処理を行う。
図11は、データパケットの受信を契機として実行される処理のフローチャートである。つまり、中継ノードまたは葉ノードに相当する通信装置400の受信部401がデータパケットを受信すると、図11の処理が開始される。
ステップS301で受信部401は、受信したデータパケットのシーケンス番号(以下「Q」と表記する)を抽出する。そして、受信部401は、抽出したシーケンス番号Qをロス検出部406に通知する。なお、本実施形態では各データパケットがシーケンス番号を含む。
ストリーミングデータの配信システムでは、RTP(Real-time Transport Protocol)がしばしば利用される。そして、RTPヘッダはシーケンス番号のフィールドを含む。ステップS301および他のステップで利用されるシーケンス番号は、例えばRTPヘッダに含まれるシーケンス番号でもよいし、RTPヘッダ以外の部分に含まれるシーケンス番号であってもよい。
そして、次のステップS302でロス検出部406は、受信部401から通知されたシーケンス番号Qが、以前再送を要求した番号であるか否かを判断する。例えば、シーケンス番号が35番のデータパケットの消失をロス検出部406が以前検出したことがあり、今回受信部401が35番のデータパケットを受信した場合、受信部401から通知されたシーケンス番号Qは、以前再送を要求した番号である。
そして、受信部401から通知されたシーケンス番号Qが、以前再送を要求した番号である場合、処理はステップS309に移行する。逆に、受信部401から通知されたシーケンス番号Qが、以前再送を要求した番号ではない場合、処理はステップS303に移行する。
ステップS303でロス検出部406は、パケットロスの有無を検出する。ここで、通信装置400が受信済みの最新のデータパケットのシーケンス番号を「Qlast」と表記し、「最新受信シーケンス番号」と呼ぶことにする。すると、今回受信される予定のデータパケットのシーケンス番号は、(Qlast+1)である。よって、ロス検出部406は、式(2)が成り立つときにパケットロスを検出する。
Qlast+1 < Q (2)
すなわち、ステップS303でロス検出部406は、式(2)が成立するか否かを判断する。そして、式(2)が成立する場合、ロス検出部406は「パケットが消失した」と判断し、処理はステップS304に移行する。逆に、式(2)が成立しない場合、ロス検出部406は「パケットは消失していない」と判断し、処理はステップS308に移行する。
なお、ロス検出部406は、ステップS303の判断のため、最新受信シーケンス番号Qlastの値を保持する。最新受信シーケンス番号Qlastの初期値は、例えば、データ配信アプリケーションによって、0などの特定の値に予め決められていてもよいし、制御パケットによって予め通知されてもよい。
また、実施形態によっては、ロス検出部406は、ステップS303とは異なる任意の公知の手順でパケットロスを検出してもよい。例えば、データパケットの順序の入れ替わりが想定される場合は、ステップS303よりも複雑な検出手順が使われてもよい。
ロス検出部406がパケットロスを検出する手順によらず、本実施形態の再送制御は適用可能である。図11では、説明の簡略化のため、ステップS303のようなシンプルな検出手順を例示した。
さて、ステップS304でロス検出部406は、再送要求部407にパケットロスの発生を通知する。すると、再送要求部407が再送要求先を決定する。
上記のとおり、ノード情報管理部409は、予め、あるいは、ロス検出部406によるパケットロスの検出を契機として、送信部402を介して管理サーバ204に再送要求先を問い合わせる。よって、ステップS304において、ノード情報記憶部408には再送要求先情報702が存在する。したがって、再送要求部407は、再送要求先情報702を参照することで、再送要求先を決定することができる。
また、次のステップS305でロス検出部406は再送範囲を算出し、算出結果を再送要求部407に出力する。すなわち、ロス検出部406は、再送の対象となるデータパケットのシーケンス番号の範囲を式(3)と(4)にしたがって算出し、算出結果を再送要求部407に出力する。
Qfrom=Qlast+1 (3)
Qto=Q-1 (4)
例えば、既に100番までのデータパケットが受信済みで、今回受信されたデータパケットのシーケンス番号が110番であるとする。すると、Qlast=100かつQ=110である。つまり、101〜109番のデータパケットが消失しているので、再送範囲は101〜109番である。式(3)によれば、再送範囲の開始番号Qfrom=100+1=101であり、式(4)によれば、再送範囲の終了番号Qto=110−1=109である。
続いて、ステップS306で再送要求部407は、図14に示すようにして「再送期限」を算出する。ここで、図12と図13を参照して再送期限について説明する。
図12は、再送要求パケットの例を示す図である。図12に示すように、本実施形態の再送要求パケット801は、ヘッダと、再送期限を示す2つのフィールドと、再送先を示す2つのフィールドと、再送範囲を示す2つのフィールドを含む。
再送要求パケット801のヘッダは、例えば、IPヘッダとUDPヘッダを含む。また、再送要求パケット801のヘッダは、UDPよりも上位層のヘッダ(例えば、RTPヘッダ、データ配信アプリケーション独自のヘッダ、またはその双方など)をさらに含んでもよい。例えば、データ配信アプリケーション独自のヘッダの中には、パケットの種類を示すタイプフィールドがあってもよい。
再送期限は、具体的には、「取得期限」(以下「Tstart」と表記する)と「完了期限」(以下「Tend」と表記する)のペアにより表される。
取得期限は、「パケットロスを検出した通信装置400は、再送範囲で指定されるデータパケットを、いつまでに取得し始めるべきか」ということに関する制約条件から導出される期限である。別の観点から説明すれば、取得期限は、送信開始の期限に関する。
また、完了期限は、「パケットロスを検出した通信装置400は、再送範囲で指定されるデータパケットを、いつまでに取得し終わるべきか」ということに関する制約条件から導出される期限である。別の観点から説明すれば、完了期限は、送信終了の期限に関する。
再送先は、具体的には、IPアドレス(以下「A」と表記する)とポート番号(以下「P」と表記する)のペアにより表される。すなわち、パケットロスを検出した通信装置400のIPアドレスAと、パケットロスを検出した通信装置400がデータパケットを受信するためのポート番号(例えばUDPポート番号)Pが、再送要求パケット801に再送先として設定される。
また、再送範囲は、開始番号Qfromと終了番号Qtoのペアにより表される。再送範囲は、図1に関して説明した「特定情報」の範囲を示す。
なお、図1に関して説明したとおり、責任ノードとして子ノードが選択されて子ノードに再送が委譲されるたびに、特定情報の範囲は書き換えられる。例えば、パケットロスを検出した通信装置400が送信する再送要求パケット801に指定される開始番号Qfromと終了番号Qtoは、式(3)と(4)のとおりである。しかし、子ノードに再送が委譲された場合の、子ノード宛の再送要求パケット801に指定される開始番号Qfromと終了番号Qtoは、後述のようにして算出される値である。
なお、実施形態によっては、再送要求パケット802のように、ビットレート(以下「Breq」と表記する)を指定するフィールドを含む形式が採用されてもよい。再送要求パケット802のような形式が採用される実施形態については後述する。
また、再送要求パケット801と802におけるフィールドの順序は一例にすぎない。実施形態に応じて適宜のパケット形式が使われてよいことは無論である。
図13は、バッファリングと再送期限のモデルを示す図である。図5のバッファ部403は、FIFO(First In First Out)構造とよく似た構造を持つ。具体的には、図13に示すように、バッファ部403は、受信された各データパケットをシーケンス番号の順に格納する。図13では、各長方形がデータパケットを示し、古いデータパケット(すなわちシーケンス番号が小さいデータパケット)ほど下に描かれている。
受信部401が受信したデータパケットは、一旦バッファ部403にバッファリングされ、再生処理部404によって読み出されて再生される。図13は、パケットロスが検出されたときのバッファ部403の状態を模式的に示す。
なお、白い矢印は、再生処理部404が次に読み出すデータパケットを指し示す、読み出し位置のポインタを図示したものである。また、読み出し位置を基準として、バッファ部403にバッファリングされる時間を示す矢印が模式的に示されている。
バッファ部403は、既に受信されているがまだ再生はされていないm個(1≦m)のデータパケットをバッファリング中である。具体的には、シーケンス番号が(Qlast−m+1)番からQlast番までのm個のデータパケットが、再生処理部404による読み出しに備えてバッファ部403にバッファリングされている。
そして、ステップS303〜S304とともに説明したように、シーケンス番号が(Qlast+1)番から(Q−1)番までの(Q−Qlast−1)個のデータパケットが消失し、シーケンス番号がQ番のデータパケットが今回受信されたものとする。
なお、バッファ部403は、他ノード宛の再送に備えて、シーケンス番号が(Qlast−m+1)番より古いデータパケット(すなわち、再生処理部404により既に読み取られたデータパケット)をさらに格納していてもよい。
また、バッファ部403は、例えば、RAM302とCPU301によって実現されてもよい。RAM302はデータパケットを保持する。CPU301は、読み出し位置のポインタを管理するとともに、古いデータパケットを削除するためのエージング処理を行う。エージング処理による削除対象のデータパケットは、例えば、読み出し位置のポインタが示すデータパケット(あるいは、再送用に保持される読み取り済みのデータパケットのうちの最新の所定個数のデータパケット)よりもさらに古いデータパケットである。
バッファ部403におけるバッファリング時間は、長ければ長いほど、再送処理によるリカバリ性能が向上する。しかし、バッファリング時間が長いほど(換言すれば、mが大きいほど)、受信から再生処理部404による再生までの遅延時間が長くなる。
つまり、リカバリ性能と遅延時間はトレードオフの関係にある。したがって、バッファリング時間を規定するmの値は、トレードオフを考慮に入れたうえで、実施形態に応じて適宜決められることが望ましい。
図13の例では、シーケンス番号がQ番のデータパケットの受信を契機としてパケットロスが検出された時点で、シーケンス番号が(Qlast−m+1)番からQlast番までのm個のデータパケットがバッファ部403にバッファリングされている。また、説明の簡単化のため、本実施形態ではデータパケットが固定長であるものとし、データパケットのサイズを「pSize」と表記する。
すると、バッファ部403に残っているデータパケットがすべて消費されて枯渇するまでにかかる時間(すなわち再生処理部404がm個のデータパケットをすべて読み終えるまでにかかる時間)は、式(5)の「Lstart」のとおりである。なお、式(5)における「cRate」は、再生処理部404によるバッファ消費レートである。
Lstart=m×pSize/cRate (5)
つまり、再生されるコンテンツ(例えば動画や音声)が飛ぶことを防ぐには、遅くとも、時間Lstartが経過するまでには、シーケンス番号が(Qlast+1)番のデータパケットのバッファ部403への格納処理が始まっている必要がある。また、再生処理部404がバッファ消費レートcRateで再生を続けるとすると、消失した(Q−Qlast−1)個すべてのデータパケットの再生が終わるまでの時間は、式(6)の「Lend」のとおりである。
Lend=Lstart+(Q-Qlast-1)×pSize/cRate (6)
つまり、時間Lendは、時間Lstartに、消失した(Q−Qlast−1)個すべてのデータパケットの読み出しにかかる時間を足した時間である。時間Lendは、換言すれば、パケットロスのリカバリにかけることが許容される最長の時間である。
そして、パケットロスを検出した通信装置400が送信する図12の再送要求パケット801における取得期限Tstartと完了期限Tendは、それぞれ、時間Lstartと時間Lendに基づいて設定される。具体的には、再送要求部407が図11のステップS306に相当する図14の処理を行うことで、取得期限Tstartと完了期限Tendが算出される。図14は、再送期限を算出する処理のフローチャートである。
まず、ステップS401で再送要求部407は、バッファ部403の残量を取得する。すなわち、再送要求部407は、バッファ部403の読み出し位置のポインタが示すシーケンス番号(Qlast−m+1)と、最新受信シーケンス番号Qlastから、バッファ部403がバッファリング中のデータパケットの個数mを取得する。
そして、次のステップS402で再送要求部407は、上記の式(5)と(6)にしたがって、バッファ枯渇予測時間Lstartと、リカバリ完了までにかけることが許容される最長の時間Lendを計算する。
また、次のステップS403で再送要求部407は、図11のステップS304で決定した再送要求先と通信装置400との間のRTTを取得する。本実施形態では、RTTは、既に取得されて再送要求先情報702に記憶されているので、再送要求部407は、ノード情報記憶部408内の再送要求先情報702を参照することで、RTTを取得することができる。
そして、ステップS404で再送要求部407は、再送要求パケット801に設定する再送期限(つまり取得期限Tstartと完了期限Tend)を算出する。すなわち、再送要求部407は、式(7)に示すように、ステップS402で算出した時間LstartからステップS403で取得したRTTを減じることにより、取得期限Tstartを算出する。また、再送要求部407は、式(8)に示すように、ステップS402で算出した時間LendからステップS403で取得したRTTを減じることにより、完了期限Tendを算出する。
Tstart=Lstart-RTT (7)
Tend=Lend-RTT (8)
例えば、Lstart=25ms、Lend=40ms、RTT=6msとし、現在時刻が10時20分30.400秒だとする。すると、シーケンス番号が(Qlast+1)番のデータパケットは、10時20分30.425秒までにバッファ部403に格納され始める必要がある。また、シーケンス番号が(Q−1)番のデータパケットは、10時20分30.440秒までにバッファ部403に格納され終わっている必要がある。
一方で、通信装置400から再送要求先までの通信時間はRTTの半分の3msであるから、今すぐ再送要求パケット801が送信されると仮定して再送要求パケット801が再送要求先に到着するのは、10時20分30.403秒である。また、式(7)と(8)によれば、Tstart=25−6=19msであり、Tend=40−6=34msである。
ここで、再送要求先のノードが、仮に、責任ノードとして自分自身を選択し、再送要求パケット801の受信からTstart=19ms経過してから(つまり10時20分30.422秒に)データパケットを送信し始めるとする。すると、送信されたデータパケットが通信装置400に受信され始めるのは、その3ms(=RTT/2)後の10時20分30.425秒である。よって、バッファ部403に残っているデータパケットが枯渇する前に、送信されたデータパケットの格納が始まる。
同様に、再送要求先のノードが、仮に、責任ノードとして自分自身を選択し、再送要求パケット801の受信からTend=34ms経過した時点(つまり10時20分30.437秒に)データパケットの送信を完了するとする。すると、送信されたデータパケットが通信装置400に受信され終わるのは、その3ms(=RTT/2)後の10時20分30.440秒である。よって、許容範囲内の時間で再送によるリカバリが完了する。
式(7)と(8)でRTTの減算が行われる理由は、例えば上記の具体的な数値の例から理解されるとおりである。なお、式(7)と(8)ではRTTの減算が行われるが、通信装置400の処理遅延などを考慮に入れて、適宜の正のマージンがさらに減じられてもよい。そして、以上のようにして取得期限Tstartと完了期限Tendが算出された後、処理は図11のステップS307に移行する。
ステップS307で再送要求部407は、再送要求パケット801を生成し、送信部402に出力する。そして、送信部402が再送要求パケット801を送信する。具体的には、再送要求部407は、再送要求パケット801のヘッダを生成し、再送期限と再送範囲として、それぞれステップS305とS306で得られた値を設定し、再送先として通信装置400自身のIPアドレスとポート番号を設定する。
なお、再送要求部407は、ノード情報記憶部408内の自ノード情報を参照することで通信装置400自身のIPアドレスを認識することができる。また、再送要求パケット801に設定するポート番号Pは、データ配信アプリケーション内で定数として定義されていてもよいし、図9のように自ノード情報に設定されていてもよく、いずれにしろ、再送要求部407が認識することができる。
そして、ステップS307での再送要求パケット801の送信後、あるいは、ステップS303でパケットロスが検出されなかった場合に、ステップS308の処理が行われる。具体的には、ロス検出部406が、最新受信シーケンス番号Qlastを、ステップS301で得られたシーケンス番号Qに更新する。そして、処理はステップS309に移行する。
ステップS309では、受信部401が、今回受信したデータパケット(つまりシーケンス番号がQ番のデータパケット)をバッファ部403に格納する。
続いて、ステップS310で転送処理部405が、ノード情報記憶部408内の子ノード情報を参照することにより、「通信装置400には子ノードがあるか否か」を判断する。子ノードがある場合、処理はステップS311に移行する。子ノードがない場合、図11の処理も終了する。
ステップS311で転送処理部405は、今回受信されたデータパケット(つまりシーケンス番号がQ番のデータパケット)を、送信部402を介して、子ノード情報が示す各子ノードに転送する。そして、図11の処理も終了する。
さて、続いて、再送要求パケットの受信を契機とする処理について、図15〜19を参照して説明する。
図15は、本実施形態による再送制御の具体例を模式的に示す図である。本実施形態における再送制御の概要は、図1とともに説明したとおりである。しかし、より具体的には、再送要求を受信したノードは、各子ノードの送信可能総帯域幅と、図11〜14とともに説明した再送期限に関する制約条件を考慮に入れながら、責任ノードとして適切な子ノードを選び、各責任ノードに割り当てる特定情報の量を決める。図15は、再送要求を受信したノードが、子ノードに再送要求を転送することによって子ノードに再送を委譲するとともに、自らも再送処理の一部を担う場合の処理について例示する図である。
図15の論理ネットワーク100bは、ある論理ネットワークの一部を抜粋したものである。論理ネットワーク100bは、ノードN30〜N35を含む。また、ノードN31はノードN30の子ノードであり、ノードN33〜N35はノードN32の子ノードである。なお、ノードN31、N33〜N35は、葉ノードでもよいし中継ノードでもよい。
図8〜10とともに説明したとおり、ノードN33は、適宜のタイミングで、ノードN33の送信可能総帯域幅Total(N33)の通知901を親ノードN32に送信する。同様に、ノードN34も、適宜のタイミングで、ノードN34の送信可能総帯域幅Total(N34)の通知902を親ノードN32に送信する。また、ノードN35も、適宜のタイミングで、ノードN35の送信可能総帯域幅Total(N35)の通知903を親ノードN32に送信する。
また、送信可能総帯域幅の通知901〜903の送信とは独立して、論理ネットワーク100b内ではデータパケットの配信が行われる。図15には、一連のデータパケットのうち、シーケンス番号が41番から49番のデータパケット904の配信が図示されている。
具体的には、41番から49番のデータパケット904は、論理ネットワーク100b内で配信されて、ノードN30に受信される。すると、ノードN30は、41番から49番のデータパケット904を子ノードN31に転送する。しかし、図15の例では、ノードN30とN31の間のエッジに相当する通信路上で、何らかの原因により、41番から49番のデータパケット904が消失してしまう。
また、41番から49番のデータパケット904は、論理ネットワーク100b内で配信されて、ノードN32においても受信される。すると、ノードN32は、41番から49番のデータパケット904を子ノードN33〜N35にそれぞれ転送する。図15の例では、ノードN33〜N35は、いずれも、41番から49番のデータパケット904の受信に成功する。
ところで、ノードN31は、シーケンス番号が40番のデータパケットの次に50番のデータパケットをノードN30から受信する。よって、ノードN31は、図11のステップS303の処理により、41番から49番のデータパケット904が消失したことを検出する(なぜなら、ステップS303においてQlast=40かつQ=50だからである)。そして、ノードN31は、ステップS304で再送要求先としてノードN32を選択する。
さらに、ノードN31は、ステップS305で再送範囲を「41番から49番」と算出する。また、ノードN31は、ステップS306で再送期限を算出し、ステップS307で、再送範囲と再送期限を指定した再送要求905を送信する。図15では再送要求905に指定された再送範囲が「#41−#49」と表記されている。
ノードN32が再送要求905の受信を契機として行う処理は、詳細については図16〜17とともに後述するが、概要は図1に関して説明したとおりである。すなわち、ノードN32は、ノードN32自身よりは子ノードN33〜N35を優先して責任ノードを選択する。
そして、責任ノードの選択と各責任ノードへの割り当てに際しては、ノードN32は、再送要求905で指定された再送期限と、子ノードN33〜N35それぞれからの通知901〜903で通知された各子ノードの送信可能総帯域幅を考慮に入れる。つまり、ノードN32は、子ノードに再送を委譲した場合にも再送期限に関する制約条件が満たされるように、責任ノードとなり得る子ノードを選別する。また、ノードN32は、子ノードに再送を委譲した場合にも再送期限に関する制約条件が満たされるように、責任ノードとして選んだ子ノードに割り当てる再送範囲を決定する。
図15の例では、ノードN32が、ノードN33を責任ノードとして選ぶとともに、ノードN33には41番から43番のデータパケットを割り当てる。つまり、ノードN32は、41番から43番を再送範囲として指定する再送要求906を、ノードN33に送信する。換言すれば、ノードN32は、受信した再送要求をノードN33に転送するが、転送にあたっては、受信した再送要求905を再送要求906のように書き換える。
また、ノードN32は、ノードN34を責任ノードとして選ぶとともに、ノードN34には44番から46番のデータパケットを割り当てる。つまり、ノードN32は、44番から46番を再送範囲として指定する再送要求907を、ノードN34に送信する。換言すれば、ノードN32は、受信した再送要求をノードN34に転送するが、転送にあたっては、受信した再送要求905を再送要求907のように書き換える。
さらに、ノードN32は、ノードN35を責任ノードとして選ぶとともに、ノードN35には47番から48番のデータパケットを割り当てる。つまり、ノードN32は、47番から48番を再送範囲として指定する再送要求908を、ノードN35に送信する。換言すれば、ノードN32は、受信した再送要求をノードN35に転送するが、転送にあたっては、受信した再送要求905を再送要求908のように書き換える。
そして、図15の例では、ノードN32が以上のようにして子ノードを優先的に責任ノードとして選択しても、まだ49番のデータパケットが残っている。そこで、ノードN32は、最後にノードN32自身も責任ノードとして選択し、残った49番のデータパケットをノードN32自身に割り当てる。
再送要求906を受信したノードN33は、もし子ノードを持っていれば子ノードを優先して責任ノードを選択してもよいが、図15の例では、ノードN33自身が、41番から43番のデータパケット909をノードN31に送信する。同様に、再送要求907を受信したノードN34は、44番から46番のデータパケット910をノードN31に送信し、再送要求908を受信したノードN35は、47番から48番のデータパケット911をノードN31に送信する。また、ノードN32は、49番のデータパケット912を送信する。その結果、ノードN31は、41番から49番のデータパケットを受信する。
続いて、図16〜17を参照して、再送要求の受信を契機として通信装置400が実行する処理について説明する。根ノード、中継ノード、または葉ノードに相当する通信装置400の受信部401が図12の再送要求パケット801を受信し、再送要求パケット801を負荷分散処理部410に出力すると、負荷分散処理部410が図16〜17の処理を開始する。
図16〜17の処理において、ステップS501〜S503は初期化のためのステップである。また、ステップS504〜S513は、子ノードの中から責任ノードを選択し、選択した責任ノードに、要求された特定情報の一部または全部である部分特定情報を対応づけるためのステップである。そして、ステップS514〜S519は、必要に応じて通信装置400自身を責任ノードとして選択し、責任ノードとして選択した通信装置400自身に、要求された特定情報の一部または全部である部分特定情報を対応づけるためのステップである。ステップS520〜S522は、再送要求パケット801の直接の送信元のノードに、ACKまたはNACKを返すためのステップである。
ステップS501で選択部411は、ノード情報記憶部408に格納されている子ノード情報において、一時使用帯域幅と一時使用期限のペアのうち、一時使用期限が切れているペアがもしあれば、当該ペアをクリアする。同様に、選択部411は、ノード情報記憶部408に格納されている自ノード情報において、一時使用帯域幅と一時使用期限のペアのうち、一時使用期限が切れているペアがもしあれば、当該ペアをクリアする。
続いて、ステップS502で選択部411は、受信部401から受け取った再送要求パケット801に指定されている開始番号Qfromを読み取る。そして、選択部411は、読み取った開始番号Qfromの値を変数Uに代入することで、変数Uを初期化する。変数Uは、送信を要求されたQfrom番からQto番までのデータパケットのうちで、まだ責任ノードが決まっていない最初のデータパケットのシーケンス番号を示す。
また、次のステップS503で選択部411は、責任子ノードを選択するためのインデックスを示す変数iを1に初期化する。
そして、次のステップS504で選択部411は、変数iの値が通信装置400の子ノードの数(すなわち子ノード情報のエントリの数)以下であるか否かを判断する。
変数iの値が通信装置400の子ノードの数以下の場合、責任ノードの候補としてまだ注目していない子ノードが残っている。そこで、処理はステップS505に移行する。
逆に、変数iの値が通信装置400の子ノードの数より大きい場合とは、次の(P−1)または(P−2)の場合である。(P−1)または(P−2)の場合、責任ノードとして通信装置400自身を選択するか否かを決定するため、処理は図17のステップS514に移行する。
(P−1)通信装置400がまったく子ノードを持たない。
(P−2)通信装置400は1つ以上の子ノードを持つ。そして、選択部411が既に、責任ノードの候補として通信装置400のすべての子ノードに注目した。しかし、送信を要求されたQfrom番からQto番までのデータパケットのうち、まだ責任ノードに割り当てられずに残っているデータパケットが1つ以上ある。
ステップS505〜S507で選択部411は、i番目の子ノードを責任ノードとして選択可能か否かを判断する。具体的には、選択部411は、まずステップS505において、「i番目の子ノードは、U番のデータパケットの取得期限に間に合うようにU番以降のデータパケットを送信することを保証できるか否か」を判断する。
より具体的には、選択部411は、適宜の近似モデルによって遅延(以下「α」と表記する)を見積もり、見積もったαの値を用いて、式(9)が満たされるか否かを判断する。
Tstart+(Tend-Tstart)×(U-Qfrom)/(Qto-Qfrom+1)-α > 0 (9)
なお、式(9)において、TstartとTendは、図12に示すとおり、受信部401が受信した再送要求パケット801に設定されている取得期限と完了期限の値である。また、式(9)において、QfromとQtoは、受信部401が受信した再送要求パケット801に設定されている開始番号と終了番号の値である。以下、式(9)の意味について、変数Uが初期化された状態の場合と、変数Uの値が後述のステップS511で更新された場合に分けて説明する。
ステップS502で変数Uが初期化された状態でステップS505が実行された場合、U=Qfromである。よって、変数Uが初期化された状態のとき、式(9)は、式(10)のように書き換えられる。
Tstart-α>0 (10)
式(10)は、「受信部401が受信した再送要求パケット801で要求された最初のデータパケット(つまりQfrom番のデータパケット)の送信を、通信装置400がi番目の子ノードに委譲しても問題ないか否か」に関する制約条件を示す。具体的には、通信装置400がi番目の子ノードにデータパケットの送信を委譲する場合に生じると予測される遅延αよりも、再送要求パケット801で指定された取得期限Tstartの示す時間の方が長ければ、委譲は許容可能である。そして、遅延αは、以下の(Q−1)〜(Q−4)を含む。
(Q−1)通信装置400自身の内部処理による遅延
(Q−2)通信装置400がi番目の子ノードにデータパケットの送信を委譲するための通知(すなわち新たな再送要求パケット801の送信)にかかる通信遅延
(Q−3)i番目の子ノードの内部処理による遅延
(Q−4)データパケットの再送を要求した要求ノードに宛ててi番目の子ノードがデータパケットを送信する場合にかかる通信遅延と、要求ノードに宛てて通信装置400自身がデータパケットを送信する場合にかかる通信遅延との差
そして、上記(Q−1)〜(Q−4)をいかに見積もるかは、実施形態に応じて様々であってよい。つまり、遅延αを見積もるための近似モデルは実施形態に応じて様々である。
例えば、(Q−1)の遅延は、通信装置400を実現するコンピュータ300のCPU301の性能に依存する。そこで、通信装置400は、予め、例えばダミーのノード情報とダミーの再送要求パケットを用いて図16〜17の処理を実行し、実行にかかった時間を、(Q−1)の遅延時間として計測してもよい。
あるいは、実施形態によっては、予備実験などから、CPU301の性能を示す指標(例えばクロック周波数)の関数として(Q−1)の遅延を表せる場合もある。その場合、選択部411は、CPU301の性能を表す指標から、当該関数にしたがって、(Q−1)の遅延を計算してもよい。
同様に、(Q−3)の遅延も、i番目の子ノードを実現する他のコンピュータ300のCPU301の性能に依存する。また、(Q−3)の遅延も、(Q−1)の遅延と類似の方法によって、i番目の子ノードが予め計測することにより、またはi番目の子ノードが関数から予め計算することにより、得ることが可能である。
そして、i番目の子ノードが、計測または計算によって得た(Q−3)の遅延を、親ノードである通信装置400に予め通知することにより、通信装置400(特に負荷分散処理部410の選択部411)は、(Q−3)の遅延を認識することができる。あるいは、i番目の子ノードは、i番目の子ノードのCPU301の性能を示す指標を、親ノードである通信装置400に通知してもよい。
なお、(Q−3)の遅延自体が通知される場合も、i番目の子ノードのCPU301の性能を示す指標が通知される場合も、i番目の子ノードからの通知は、例えば、図8や図10に関して説明した送信可能総帯域幅の通知と同じ制御パケットに含まれていてもよい。通知を受信した通信装置400は、ノード情報記憶部408内の子ノード情報に、i番目の子ノードから通知された内容を記録することができる。そして、選択部411は、子ノード情報を参照し、必要に応じて計算を行うことにより、(Q−3)の遅延を認識することができる。
もちろん、実施形態によっては、より簡素な近似モデルにしたがって選択部411が(Q−1)と(Q−3)の遅延を認識してもよい。例えば、「論理ネットワーク100内のすべてのノードは、ある一定レベル以上の性能のCPU301を有する」という仮定に基づく近似モデルが採用されてもよい。そして、選択部411は、上記「一定レベル」のCPU301による内部遅延として想定される定数値を、(Q−1)と(Q−3)の遅延と見なしてもよい。
また、(Q−2)の遅延は、通信装置400とi番目の子ノードとの間のRTTの半分と見積もることが妥当である。そして、通信装置400とi番目の子ノードとの間のRTTは、図9に関して説明したとおり、子ノード情報の一部として、ノード情報記憶部408に記録されている。したがって、選択部411は、子ノード情報を参照することにより、(Q−2)の遅延を認識することができる。
ところで、詳しくは後述するが、(Q−4)の時間の長さは、論理ネットワーク100のトポロジが変化せずに同じ要求ノードからの再送要求が2回以上生じる場合は、2回目以降の再送では、実測値に基づく見積もりが可能である。しかし、ある要求ノードからの初めての再送要求のときには、(Q−4)の時間の長さを見積もる根拠となり得る実測値は存在しないので、(Q−4)の時間の長さは何らかの近似モデルによって見積もられる。そこで、図18と図19を参照して、2つの近似モデルの例を説明する。
図18と図19は、「取得期限に関する制約条件が満たされるか否か」ということを、それぞれ第1と第2の近似モデルによって判断する例を説明する図である。また、図18と図19は、図1のようにノードN5が最初に再送要求をノードN3に送信する場合に行われる、ノードN3からノードN6への委譲とノードN6からノードN12への委譲の例を示す。
また、図18と図19においては、ノードNjからノードNkまでの通信遅延を「Dj,k」と表記する。通信遅延Dj,kは、ノードNjとノードNkの間のRTT(以下、「RTTj,k」と表記する)の半分と見なせる。よって、任意のjとkについて、Dj,k=Dk,j=RTTj,k/2である。ノードNjとノードNkは、いずれも、予めRTTj,kを計測することにより、再送要求を受信する前に通信遅延Dj,k(すなわちDk,j)を認識することができる。
また、図18と図19においては、ノードNjの内部処理による遅延を「Ij」と表記する。ノードNjにとっての遅延Ijは、上記(Q−1)の遅延である。また、ノードNjの親ノードがノードNkであるとき、ノードNkにとっての遅延Ijは、上記(Q−3)の遅延である。そして、(Q−1)と(Q−3)に関して説明したとおり、ノードNjとNkのいずれも、何らかの方法により、再送要求を受信する前に遅延Ijを認識することが可能である。
また、図1、18、および19の例では、データパケットの消失を契機として再送を要求する要求ノードはノードN5であり、ノードN5にとっての再送要求先はノードN3である。そして、図14のステップS404に関して説明したように、ノードN5が再送要求パケット801に取得期限として設定する値は、ステップS402でノードN5の再送要求部407が計算した時間Lstartから、RTT5,3を引いた値である。
図18と図19では、ノードN5が再送要求パケット801に取得期限として設定する値を「Ta」と表記してある。式(7)から、ノードN5が図1のステップS20で送信する再送要求パケット801の取得期限の値Taは、式(11)のように表される。そして、式(11)は図18と図19に表現されているとおりである。
Ta=Lstart-RTT5,3=Lstart-(D5,3+D3,5) (11)
よって、図1のステップS20で送信された再送要求パケット801を受信したノードN3にとっては、図16のステップS505の判断に用いる式(9)のTstartの値が、図18および19の値Taである。そして、上記のとおり、U=Qfromの初期状態においては、式(9)は式(10)と同値である。
また、式(10)の遅延αは、上記(Q−1)〜(Q−4)を含む。そして、図1のステップS20で送信された再送要求パケット801を受信したノードN3にとっては、(Q−1)の遅延は、図18に示すとおりノードN3自身の内部遅延I3である。また、ノードN3が図16のステップS505で1番目の子ノードとしてノードN6に注目しているとする。すると、図18に示すとおり、ノードN3にとっての(Q−2)の遅延は遅延D3,6であり、ノードN3にとっての(Q−3)の遅延は子ノードN6の内部遅延I6である。
そして、図18に示す近似モデルは、第1のノードから第2のノードまでの通信遅延を、第1のノードから第3のノードまでの通信遅延と第3のノードから第2のノードまでの通信遅延との和によって近似するモデルである。つまり、図18の近似モデルによれば、ノードN3は、責任ノードの候補として子ノードN6に注目する場合に、ノードN6から要求ノードN5への通信遅延D6,5を、式(12)のように近似する。
D6,5≒D6,3+D3,5 (12)
図16のステップS505の判断を行うノードN3の選択部411にとっての(Q−4)の時間の長さは、(D6,5−D3,5)である。よって、式(12)の近似のもとでは、ノードN3の選択部411にとっての(Q−4)の時間の長さは、遅延D6,3と等しい。
以上より、ノードN3の選択部411にとって、式(10)の遅延αは、具体的には、式(13)のとおりである。
α=I3+D3,6+I6+D6,3 (13)
すなわち、要求ノードN5からの再送要求パケット801を受信したノードN3の選択部411にとって、式(10)は、式(14)のとおりである。
Ta-(I3+D3,6+I6+D6,3) > 0 (14)
なお、図18では、式(14)の左辺の値を「Tb」と表記してある。図18の近似モデルが採用される実施形態では、ノードN3の選択部411は、図16のステップS505において、具体的には、値Tbが0より大きいか否かを判断する。
ここで説明の便宜上、図18に例示するようにTb>0であるとする。また、説明の便宜上、仮に後述のステップS507の条件も満たされるとする。すると、詳しくは図16のステップS508〜S509に関して後述するが、ノードN3は、子ノードN6に再送を委譲するための新たな再送要求パケット801を作成し、作成した再送要求パケット801を子ノードN6に送信する。
そして、作成される新たな再送要求パケット801の取得期限としてノードN3が設定する値は、図18に「Tc」と示す値である。値Tcは、具体的には式(15)のとおりである。
Tc=Ta-(I3+D3,6+D6,3)=Tb+I6 (15)
そして、取得期限として値Tcが設定された再送要求パケット801を図1のステップS30で受信したノードN6の負荷分散処理部410は、図16〜17の処理を開始する。すると、ノードN6の選択部411にとっての式(9)と(10)の取得期限Tstartの値は、式(15)の値Tcである。また、ノードN6においても、U=Qfromの初期状態では、式(9)は式(10)と同値である。
そして、ノードN6にとっては、(Q−1)の遅延はノードN6自身の内部遅延I6である。また、ノードN6が図16のステップS505で1番目の子ノードとしてノードN12に注目しているとする。すると、図18に示すとおり、ノードN6にとっての(Q−2)の通信遅延は遅延D6,12であり、ノードN6にとっての(Q−3)の遅延は子ノードN12の内部遅延I12である。
そして、図18の近似モデルによれば、ノードN6は、責任ノードの候補として子ノードN12に注目する場合に、ノードN12から要求ノードN5への通信遅延D12,5を、式(16)のように近似する。
D12,5≒D12,6+D6,5 (16)
また、図16のステップS505の判断を行うノードN6の選択部411にとっての(Q−4)の時間の長さは、(D12,5−D6,5)である。よって、式(16)の近似のもとでは、ノードN6の選択部411にとっての(Q−4)の時間の長さは、遅延D12,6と等しい。
以上より、ノードN6の選択部411にとって、式(10)の遅延αは、具体的には、式(17)のとおりである。
α=I6+D6,12+I12+D12,6 (17)
すなわち、親ノードN3から再送要求パケット801を受信した子ノードN6の選択部411にとって、式(10)は式(18)のとおりである。
Tc-(I6+D6,12+I12+D12,6) > 0 (18)
なお、図18では、式(17)の左辺の値を「Td」と表記してある。図18の近似モデルが採用される実施形態では、ノードN6の選択部411は、図16のステップS505において、具体的には、値Tdが0より大きいか否かを判断する。
ここで説明の便宜上、図18に例示するようにTd>0であるとする。また、説明の便宜上、仮に後述のステップS507の条件も満たされるとする。すると、詳しくは図16のステップS508〜S509に関して後述するが、ノードN6は、子ノードN12に再送を委譲するための新たな再送要求パケット801を作成し、作成した再送要求パケット801を子ノードN12に送信する。
そして、作成される新たな再送要求パケット801の取得期限としてノードN6が設定する値は、図18に「Te」と示す値である。値Teは、具体的には式(19)のとおりである。
Te=Tc-(I6+D6,12+D12,6)=Td+I12 (19)
そして、取得期限として値Teが設定された再送要求パケット801を図1のステップS33で受信したノードN12の負荷分散処理部410は、図16〜17の処理を開始する。
以上のように、再送要求パケット801の取得期限Tstartの値は、「再送要求パケット801を受信したノード自身がデータパケットの送信を行うと仮定した場合に、当該ノードはいつまでに送信を開始する必要があるか」という制約条件を示す。
例えば、図18のように、値Taが設定された再送要求パケット801は、ノードN3に受信される。そして、値Taは、「ノードN3がデータパケットをノードN5に送信する場合は、ノードN3は値Taが示す時間以内にデータパケットの送信を開始しなくてはならない」という制約条件を示す。
同様に、図18の例では、値Tcが設定された再送要求パケット801は、ノードN6に受信される。そして、値Tcは、「ノードN6がデータパケットをノードN5に送信する場合は、ノードN6は値Tcが示す時間以内にデータパケットの送信を開始しなくてはならない」という制約条件を示す。
同様に、図18の例では、値Teが設定された再送要求パケット801は、ノードN12に受信される。そして、値Teは、「ノードN12がデータパケットをノードN5に送信する場合は、ノードN12は値Teが示す時間以内にデータパケットの送信を開始しなくてはならない」という制約条件を示す。
以上例示したとおり、ある再送要求パケット801に取得期限として設定される値は、当該再送要求パケット801を受信するノード自身がデータパケットの送信を行う場合についての制約条件を表す。そして、再送の委譲のたびに、何らかの遅延が生じる。したがって、再送の委譲のたびに、新たな再送要求パケット801に取得期限として設定される値は、適宜の近似モデルに基づいて見積もられた遅延αに基づいて、順次減らされてゆく。例えば、図18のように、取得期限として設定される値は、再送の委譲のたびに、値Taから値Tcへ、値Tcから値Teへ、というように順次減らされてゆく。
ところで、上記の図18の近似モデルとは別の近似モデルを採用する実施形態も可能である。具体的には、(Q−4)の時間の長さに関して、図19に示す近似モデルが採用されてもよい。
図19に示す近似モデルは、第1のノードと第2のノードの間の物理ネットワーク上の距離が比較的近い場合に、第1のノードから第3のノードまでの通信遅延と第2のノードから第3のノードまでの通信遅延を同じと見なす近似モデルである。図19の近似モデルは、以下に説明する場合に特に好適である。
ある種のALMシステムでは、新規ノードが配信ツリーへ参加しようとするときに、物理ネットワーク上で新規ノードに近いノードが優先的に親ノードとして選ばれる。以下、説明の便宜上、このような親ノードの選択アルゴリズムを「物理距離優先アルゴリズム」と呼ぶことにする。物理距離優先アルゴリズムによれば、配信遅延の短縮が期待される。
例えば図1の論理ネットワーク100が、物理距離優先アルゴリズムによって構築された配信ツリーであるとする。すると、「ノードN3とN6の間の物理ネットワーク上の距離は近い」という蓋然性が高く、「ノードN6とN12の間の物理ネットワーク上の距離は近い」という蓋然性も高い。なお、2つのノードの間の物理ネットワーク上での距離は、例えば、「2つのノードの間に存在するルータの数」と定義されてもよい。
そして、親ノードと子ノードの間の物理ネットワーク上の距離が近い場合、親ノードから或るノードまでの通信遅延と、子ノードから当該「或るノード」までの通信遅延は、ほとんど同じであると推定される。つまり、上記2つの通信遅延の差は、わずかである。
そこで、図19の近似モデルでは、「親ノードN3と子ノードN6の間の物理ネットワーク上の距離は近い」という推定にしたがい、ノードN3からノードN5までの通信遅延とノードN6からノードN5までの通信遅延を同じと見なす近似が行われる。同様に、図19の近似モデルでは、「親ノードN6と子ノードN12の間の物理ネットワーク上の距離は近い」という推定にしたがい、ノードN6からノードN5までの通信遅延とノードN12からノードN5までの通信遅延を同じと見なす近似が行われる。すなわち、図19の近似モデルによれば、通信遅延は式(20)のように近似される。
D3,5≒D6,5≒D12,5 (20)
図19および式(20)に例示する近似モデルによれば、上記(Q−4)の時間の長さは、ゼロと見積もられる。もちろん、実際には、多くの場合において、通信遅延D6,5と通信遅延D3,5の差Tfは厳密にはゼロではなく、通信遅延D12,5と通信遅延D3,5の差Tgも厳密にはゼロではない。しかしながら、差Tfの絶対値は小さいと推定され、差Tgの絶対値も小さいと推定される。したがって、(Q−4)の時間の長さは、ゼロと見積もられる。
したがって、図19の近似モデルのもとでは、図16のステップS505の判断を行うノードN3の選択部411にとって、式(10)の遅延αは、具体的には、式(21)のとおりである。
α=I3+D3,6+I6 (21)
すなわち、要求ノードN5からの再送要求パケット801を受信したノードN3の選択部411にとって、式(10)は、式(22)のとおりである。
Ta-(I3+D3,6+I6) > 0 (22)
なお、図19では、式(22)の左辺の値を「Th」と表記してある。図19の近似モデルが採用される実施形態では、ノードN3の選択部411は、図16のステップS505において、具体的には、値Thが0より大きいか否かを判断する。
ここで説明の便宜上、図19に例示するようにTh>0であるとする。また、説明の便宜上、仮に後述のステップS507の条件も満たされるとする。すると、詳しくは図16のステップS508〜S509に関して後述するが、ノードN3は、子ノードN6に再送を委譲するための新たな再送要求パケット801を作成し、作成した再送要求パケット801を子ノードN6に送信する。
そして、作成される新たな再送要求パケット801の取得期限としてノードN3が設定する値は、図19に「Ti」と示す値である。値Tiは、具体的には式(23)のとおりである。
Ti=Ta-(I3+D3,6)=Th+I6 (23)
そして、取得期限として値Tiが設定された再送要求パケット801を図1のステップS30で受信したノードN6の負荷分散処理部410は、図16〜17の処理を開始する。すると、ノードN6の選択部411にとっての式(9)と(10)の取得期限Tstartの値は、式(23)の値Tiである。また、ノードN6においても、U=Qfromの初期状態では、式(9)は式(10)と同値である。
そして、ノードN6にとっては、(Q−1)の遅延はノードN6自身の内部遅延I6である。また、ノードN6が図16のステップS505で1番目の子ノードとしてノードN12に注目しているとする。すると、図19に示すとおり、ノードN6にとっての(Q−2)の通信遅延は遅延D6,12であり、ノードN6にとっての(Q−3)の遅延は子ノードN12の内部遅延I12である。
そして、図19の近似モデルでは、上記のとおり(Q−4)の時間の長さはゼロと見積もられる。したがって、ノードN6の選択部411にとって、式(10)の遅延αは、具体的には、式(24)のとおりである。
α=I6+D6,12+I12 (24)
すなわち、親ノードN3から再送要求パケット801を受信した子ノードN6の選択部411にとって、式(10)は式(25)のとおりである。
Ti-(I6+D6,12+I12) > 0 (25)
なお、図19では、式(25)の左辺の値を「Tj」と表記している。図19の近似モデルが採用される実施形態では、ノードN6の選択部411は、図16のステップS505において、具体的には、値Tjが0より大きいか否かを判断する。
ここで説明の便宜上、図19に例示するようにTj>0であるとする。また、説明の便宜上、仮に後述のステップS507の条件も満たされるとする。すると、詳しくは図16のステップS508〜S509に関して後述するが、ノードN6は、子ノードN12に再送を委譲するための新たな再送要求パケット801を作成し、作成した再送要求パケット801を子ノードN12に送信する。
そして、作成される新たな再送要求パケット801の取得期限としてノードN6が設定する値は、図19に「Tk」と示す値である。値Tkは、具体的には式(26)のとおりである。
Tk=Ti-(I6+D6,12)=Tj+I12 (26)
そして、取得期限として値Tkが設定された再送要求パケット801を図1のステップS33で受信したノードN12の負荷分散処理部410は、図16〜17の処理を開始する。
以上のように、どのような近似モデルが採用されるにしろ、再送要求パケット801に取得期限Tstartとして設定される値は、再送要求パケット801を受信したノード自身がデータパケットの送信を行う場合の送信開始期限に関する制約条件を示す。よって、選択部411は、i番目の子ノードが責任ノードとして選択可能か否かを判断する際には、i番目の子ノード(つまり、もし責任ノードとして選択されれば新たな再送要求パケット801を受信することになるノード)の内部処理遅延を考慮に入れる。他方、i番目の子ノードが責任ノードとして実際に選択された場合にi番目の子ノード宛に送信される新たな再送要求パケット801の取得期限の計算においては、i番目の子ノードの内部処理遅延は減算されない。なぜなら、i番目の子ノードの内部処理遅延は、新たな再送要求パケット801をi番目の子ノードが受信した後に生じる遅延だからである。
ここで、図16のステップS505の説明に戻る。図18〜19の例は、U=Qfromという初期状態におけるステップS505の判断の例である。しかし、変数Uの値は、後のステップS511で更新されて、開始番号Qfromより大きくなる場合がある。
また、U>Qfromのとき、図13からも明らかなとおり、U番のデータパケットの取得期限はQfrom番のデータパケットの取得期限より遅い。そして、U番とQfrom番のデータパケットの取得期限の差は、(U−Qfrom)個のデータパケットの消費にかかる時間である。
ここで、受信部401が受信した再送要求パケット801に指定されている完了期限Tendと取得期限Tstartの差は、図13〜14からも理解されるように、(Qto−Qfrom+1)個のデータパケットの消費にかかる時間である。よって、(U−Qfrom)個のデータパケットの消費にかかる時間は、式(27)のとおりである。
(Tend-Tstart)×(U-Qfrom)/(Qto-Qfrom+1) (27)
つまり、U番のデータパケットの取得期限は、Qfrom番のデータパケットの取得期限よりも、式(27)の時間のぶんだけ遅い。式(9)は、以上説明したような、U番とQfrom番のデータパケットの取得期限の差を考慮に入れた式であり、式(10)の左辺に式(27)の時間を足した式である。
例えば、Qfrom=10の場合、受信部401が受信した再送要求パケット801に設定されている取得期限Tstartは、より具体的には、10(=Qfrom)番のデータパケットの取得期限を示す。また、例えば、Qto=15の場合、受信部401が受信した再送要求パケット801に設定されている完了期限Tendは、より具体的には、15(=Qto)番のデータパケットの完了期限を示す。
また、上記のQfrom=10かつQto=15の場合において、さらにU=12と仮定して、U>Qfromの場合の式(9)について説明すれば次のとおりである。
この場合、送信が要求されているデータパケットの個数は6(=Qto−Qfrom+1)個であり、既に10番と11番の2(=U−Qfrom)個のデータパケットはいずれかの責任ノードに割り当て済みである。よって、12(=U)番のデータパケットの取得期限は、式(27)の時間(つまり(Tend−Tstart)×2/6)だけ、10番のデータパケットの取得期限Tstartよりも遅い。
以上説明したとおり、式(9)は変数Uの値によらず適用可能なように一般化された式である。よって、選択部411は、ステップS505において式(9)が満たされるか否かを判断する。選択部411は、式(9)により、「i番目の子ノードは、U番のデータパケットの取得期限に間に合うようにU番以降のデータパケットを送信することを保証できるか否か」を判断することができる。
そして、式(9)が満たされる場合、「i番目の子ノードに、何番のデータパケットまでを割り当てることが可能か」を判断するため、処理はステップS506に移行する。
逆に、式(9)が満たされない場合、選択部411は、「i番目の子ノードは責任ノードとして適していない」と判断する。そして、選択部411は、責任ノードの候補として他の子ノードに注目するために、続いてステップS513の処理を実行する。
ステップS506で選択部411は、i番目の子ノードが完了期限に間に合うように送信を保証することが可能な、Qto番以下で最大の番号を計算する。そして、選択部411は、計算結果を変数Vに代入する。
つまり、選択部411は、式(28)と(29)をともに満たす最大の番号Vを計算する。なお、番号Vは整数である。
α+(V-U+1)×pSize/B+β <
Tend-(Tend-Tstart)×(Qto-V)/(Qto-Qfrom+1) (28)
V≦Qto (29)
ここで、式(28)の左辺の「α」は、式(9)と同じである。つまり、「α」は、i番目の子ノードへの委譲にともなう遅延を表す。
また、式(28)の「B」は、i番目の子ノードの送信可能総帯域幅から、i番目の子ノードの一時使用帯域幅の合計を引いた残りの帯域幅である。つまり、帯域幅Bは、i番目の子ノードを根ノードとする部分グラフに属するノードが現在使用可能な帯域幅の総和である。選択部411は、ノード情報記憶部408の子ノード情報を参照することで、式(28)の「B」の値を得ることができる。
なお、図9を参照して説明したとおり、i番目の子ノードに対応して、一時使用帯域幅が記憶されていないこともあるし、1つまたは複数の一時使用帯域幅が記憶されていることもある。一時使用帯域幅が記憶されていない場合は、式(28)の「B」は、i番目の子ノードの送信可能総帯域幅に等しい。
さらに、前述のとおり本実施形態では、データパケットが固定長であり、データパケットの長さはpSizeである。そして、U番からV番までのデータパケットの数は(V−U+1)個である。よって、式(28)の左辺の第2項(つまり、(V−U+1)×pSize/B)は、「U番からV番までのデータパケットの送信のために帯域幅Bのすべてが占有される」と仮定した場合の、送信にかかる時間を示す。
式(28)の左辺の第3項の「β」はマージンである。マージンβは、ゼロでもよいが、実施形態に応じた適宜の正の値であることが望ましい。マージンβを用いる理由は次のとおりである。
仮に選択部411がi番目の子ノードを責任ノードとして選択したとしても、i番目の子ノード自身がデータパケットの送信を行うとは限らない。例えば、図1の例では、ノードN3によって責任ノードとして選択されたノードN6は、データパケットの送信自体は行わず、送信を子ノードN12とN13に委譲する。
そして、仮に図1のようにノードN6がさらに別のノードN12やN13にデータパケットの送信を委譲すれば、再委譲にともなう新たな遅延が発生する。しかし、ノードN3の選択部411は、「仮にノードN3がデータパケットの送信をノードN6に委譲した場合に、ノードN6がさらに別のノードにデータパケットの送信を委譲するか否か」を認識しない。つまり、ノードN3は、ノードN6からノードN12やN13への再委譲にともなう新たな遅延が発生するか否かを認識せず、新たな遅延の長さも認識しない。
また、i番目の子ノードが中継ノードの場合、i番目の子ノードについての式(28)の帯域幅Bは、i番目の子ノード自身が使用可能な帯域幅と、i番目の子ノードの子孫ノードが使用可能な帯域幅の和である。したがって、「U番からV番までのデータパケットの送信のために帯域幅Bのすべてが占有される」という上記の仮定は、「i番目の子ノードとその子孫ノードのすべてが、データパケットの送信を同時に行う」という仮定を含意する。しかし、仮にi番目の子ノードからの再委譲が生じれば、i番目の子ノードとその子孫ノードがデータパケットの送信をそれぞれ開始する時刻は、互いに異なるであろう。
つまり、上記で含意された仮定は常に成立するとは限らない。そのため、式(28)の左辺の第2項は、再委譲が生じる場合は、少々の誤差を含み得る。
そこで、再委譲の可能性を考慮に入れるため、式(28)には適宜のマージンβが使われる。マージンβの値は、例えば、予備実験などから求めた定数でもよい。
あるいは、各個別のノードが、「当該個別のノードは葉ノードであるか否か」を示す情報を親ノードに通知することで、親ノードは再委譲の可能性の有無を認識してもよい。親ノードは子ノードから通知された情報を、子ノード情報の一部としてノード情報記憶部408に記憶することができる。
そして、例えば、通信装置400のi番目の子ノードが葉ノードの場合、通信装置400の選択部411は、「i番目の子ノードからの再委譲は生じない」と判断し、マージンβをゼロに設定してもよい。逆に、通信装置400のi番目の子ノードが中継ノードの場合、通信装置400の選択部411は、マージンβを正の値(例えば予め決められた正の定数)に設定することが好ましい。
また、式(28)の右辺は、V番のデータパケットの完了期限を示す。V番のデータパケットの完了期限は、Qto番のデータパケットの完了期限よりも、(Qto−V)個のデータパケットの消費にかかる時間のぶんだけ早い。そして、式(27)に関する説明と同様の理屈から、(Qto−V)個のデータパケットの消費にかかる時間は、式(30)のとおりである。
(Tend-Tstart)×(Qto-V)/(Qto-Qfrom+1) (30)
よって、式(28)の右辺は、Qto番のデータパケットの完了期限Tendから式(30)の時間を引いた差を示す。したがって、式(28)と(29)をともに満たすVに関しては、「再委譲の可能性も考慮に入れても、i番目の子ノードは、V番までのデータパケットの送信がV番のデータパケットの完了期限までに終了することを、ほぼ確実に保証することができる」と言える。
そして、上記のとおりステップS506で選択部411は、式(28)と(29)を満たす最大の整数を計算し、計算結果を変数Vに代入する。
続いて、ステップS507で選択部411は、U≦Vであるか否かを判断する。
U≦Vのとき、i番目の子ノードには少なくとも1つのデータパケット(具体的には(V−U+1)個のデータパケット)を割り当てることが可能である。すなわち、i番目の子ノードは、責任ノードとして選択可能である。よって、対応づけ部412は、i番目の子ノードにU番からV番までのデータパケットを対応づける(つまり割り当てる)。そして、i番目の子ノードへの委譲のため、処理はステップS508に移行する。
逆に、U≦Vではないとき、選択部411は「i番目の子ノードは責任ノードに適していない」と判断する。そして、選択部411は、責任ノードの候補として他の子ノードに注目するために、続いてステップS513の処理を実行する。
さて、ステップS508で要求生成部413は、i番目の子ノードへ送信する新たな再送要求パケット801に設定する取得期限と完了期限を計算する。
以下では説明の便宜上、ステップS508で計算される取得期限と完了期限をそれぞれ「Tstart2」と「Tend2」と表記する。また、i番目の子ノードの内部処理による遅延(すなわち上記(Q−3)の遅延)を「I」と表記する。
ステップS508で要求生成部413は、具体的には式(31)にしたがって取得期限Tstart2を計算し、式(32)にしたがって完了期限Tend2を計算する。
Tstart2=Tstart+(Tend-Tstart)×(U-Qfrom)/(Qto-Qfrom+1)-α+I (31)
Tend2=Tend-(Tend-Tstart)×(Qto-V)/(Qto-Qfrom+1)-α+I (32)
式(31)の右辺は、式(9)の左辺と遅延Iの和である。式(31)において遅延Iが足される意味は、図18の値TcおよびTeを計算するための式(15)および(19)と、図19の値TiおよびTkを計算するための式(23)および(26)から明らかであろう。
また、式(32)の右辺は、式(28)の右辺から遅延αを引き、式(31)と同様に内部処理による遅延Iを足すことで得られる。
式(31)と(32)のとおり、要求生成部413は、責任子ノード宛に送信する新たな再送要求パケット801用に制約条件を算出する際には、少なくとも、通信装置400と責任子ノードとの間の通信時間(つまり遅延αに含まれる通信遅延)を用いる。また、要求生成部413は、新たな再送要求パケット801用に制約条件を算出する際には、さらに、対応づけ部412が当該責任子ノードに特定情報のうちどの部分を対応づけたかということ(つまり変数UとVで示される範囲)も考慮に入れる。
なお、式(28)のマージンβは、「i番目の子ノードからの再委譲が発生するか否か」ということを認識しない選択部411が、i番目の子ノードへの委譲の実現可能性(feasibility)をより適切に見積もるために導入される項である。一方、完了期限Tend2は、i番目の子ノードへの通知のために計算される値である。そして、完了期限Tend2の設定された再送要求パケット801を受信するi番目の子ノード自身は、もちろん「i番目の子ノードからの再委譲が発生するか否か」ということを認識する。そのため、式(32)の右辺では、マージンβを引く必要はない。
なお、式(32)から式(31)を引くと式(33)が得られる。式(33)の右辺は、パケットロスを検出して再送を要求した要求ノードの再生処理部404が(V−U+1)個のデータパケットを再生する(つまり消費する)のにかかる時間である。
Tend2-Tstart2=(Tend-Tstart)×(V-U+1)/(Qto-Qfrom+1) (33)
つまり、本実施形態で再送要求パケット801に設定される完了期限と取得期限の差は、再送要求パケット801に設定される終了番号と開始番号の差に応じて一意に決まる値である。したがって、例えば完了期限は開始番号と終了番号と取得期限から計算可能であるから、実施形態によっては、再送要求パケット801から完了期限のフィールドが省略されてもよい。
要求生成部413は、以上のようにして取得期限Tstart2と完了期限Tend2を計算した後、続いて、ステップS509において新たな再送要求パケット801を生成する。そして、要求生成部413は生成した再送要求パケット801を送信部402に出力し、送信部402は再送要求パケット801をi番目の子ノードに送信する。
具体的には、要求生成部413は、新たな再送要求パケット801のヘッダに適宜の値を設定する。要求生成部413は、ノード情報記憶部408内の自ノード情報と子ノード情報を参照して、再送要求パケット801のヘッダに設定する送信元IPアドレス、送信先IPアドレス、ポート番号などを取得することができる。
また、要求生成部413は、新たな再送要求パケット801に、ステップS508で計算した取得期限Tstart2と完了期限Tend2を設定する。さらに、要求生成部413は、新たな再送要求パケット801の再送先のIPアドレスとポート番号のフィールドに、受信部401が受信した再送要求パケット801の再送先のIPアドレスとポート番号の値をコピーする。そして、要求生成部413は、新たな再送要求パケット801の開始番号と終了番号に、それぞれ変数UとVの値を設定する。
以上のようにして各フィールドに値が設定された新たな再送要求パケット801が、送信部402から送信される。
また、次のステップS510で対応づけ部412は、ノード情報記憶部408内の子ノード情報においてi番目の子ノードに対応する一時使用帯域幅と一時使用期限を設定する。つまり、対応づけ部412は、一時使用帯域幅と一時使用期限の新たなペアを生成し、子ノード情報においてi番目の子ノードに対応するエントリに、生成した新たなペアを登録する。
具体的には、ステップS506で式(28)を満たすことが判明した最大の番号Vが、式(29)も満たす場合(以下では便宜上「第1の場合」という)には、対応づけ部412は、i番目の子ノードの送信可能総帯域幅自体を一時使用帯域幅に設定する。
逆に、テップS506で式(28)を満たすことが判明した最大の番号Vが、再送を要求されたデータパケットの終了番号Qtoよりも大きい場合もあり得る(以下では便宜上「第2の場合」という)。第2の場合、対応づけ部412は、第1の場合と同様に、i番目の子ノードの送信可能総帯域幅自体を一時使用帯域幅に設定してもよい。あるいは、第2の場合、対応づけ部412は、例えば式(34)にしたがって一時使用帯域幅tmpBを計算してもよい。
tmpB=pSize×(V-U+1)/(Tend-α+I) (34)
式(34)は、「i番目の子ノードが、U番からV番までのデータパケットを、(Tend−α+I)という時間をかけて送信する」という仮定のもとでの一時使用帯域幅を計算する式である。なお、式(34)の「α」と「I」は、式(31)〜(32)と同様である。また、第2の場合には、式(29)を満たす番号Vが選ばれることから、V=Qtoである。そして、V=Qtoを式(32)の右辺に代入して得られるのが、式(34)に除数として現れる(Tend−α+I)という時間である。
なお、本実施形態では、選択部411と対応づけ部412は、割り当てが可能な範囲でなるべく多くのデータパケットを子ノードに順に割り当てていく。よって、責任ノードとして選択される子ノードのうち最後の子ノードには、割り当て可能な数よりも少ないデータパケットのみが割り当てられることがある。
つまり、上記の第2の場合とは、i番目の子ノードが、責任ノードとして選択される子ノードのうち最後の子ノードである場合である。したがって、第2の場合には、i番目の子ノードとその子孫ノードは、i番目の子ノードの送信可能総帯域幅をまるまる全部使わなくても、割り当てられたデータパケットの送信を期限内に終わらせることが可能な場合がある。
そこで、第2の場合には、「割り当てられたデータパケットを送信するノードは、期限に間に合う範囲でなるべく低いビットレートでデータパケットを送信する」という仮定にしたがい、対応づけ部412は式(34)にしたがって一時使用帯域幅tmpBを計算してもよい。なお、この仮定は、実際に要求ノードへデータパケットを送信する各通信装置400が、後述のステップS518の処理におけるデータパケットの送信間隔を適宜調整することによって、満たされる。
なお、第1の場合でも第2の場合でも、対応づけ部412は、受信部401が受信した再送要求パケット801に設定されていた完了期限Tendを現在時刻に足し、加算によって得られた時刻を、i番目の子ノードに関する新たな一時使用期限に設定する。あるいは、対応づけ部412は、上記(Q−4)の遅延に基づいて完了期限Tendを調整した値を、現在時刻に足し、加算によって得られたた時刻を、i番目の子ノードの一時使用期限に設定してもよい。
そして、上記のようにしてステップS510で子ノード情報の更新が行われた後、次のステップS511で選択部411は、次の割り当て対象のデータパケットのシーケンス番号を示す変数Uに、V+1を代入する。
また、次のステップS512で選択部411は、V<Qtoか否かを判断する。
もし、V<Qtoであれば、受信部401が受信した再送要求パケット801により再送が要求されたデータパケットのうち、まだ割り当て先の責任ノードが決まっていないデータパケットが1つ以上残っている。よって、V<Qtoのとき、処理はステップS513に移行する。
逆に、既に変数Vの値が、指定された終了番号Qtoに達していれば(つまりV=Qtoならば)、さらに責任ノードを選択する必要はない。そこで、処理は図17のステップS520に移行する。
ステップS513で選択部411は、責任子ノードを選択するためのインデックスを示す変数iを1だけインクリメントする。そして、処理はステップS504に戻る。
ところで、上記のとおりステップS504で変数iの値が子ノードの数より大きい場合、図17のステップS514の処理が行われる。具体的には、選択部411は、ステップS514〜S516で、通信装置400自身が責任ノードとして選択可能か否かを判断する。
より具体的には、選択部411はステップS514で、「通信装置400自身は、U番のデータパケットの取得期限に間に合うようにU番以降のデータパケットを送信することができるか否か」を判断する。ここで、説明の便宜上、上記(Q−1)に示す通信装置400自身の内部処理遅延を「Iself」と表記することにすると、選択部411は、ステップS514において式(35)が成立するか否かを判断する。
Tstart+(Tend-Tstart)×(U-Qfrom)/(Qto-Qfrom+1)-Iself > 0 (35)
式(35)は、式(9)の遅延αを内部処理遅延Iselfで置き換えた式である。式(35)が満たされる場合、選択部411は、「通信装置400自身は、U番のデータパケットの取得期限に間に合うようにU番以降のデータパケットを送信することができる」と判断し、処理はステップS515に移行する。逆に、式(35)が満たされない場合、選択部411は「通信装置400自身は責任ノードとして適していない」と判断し、処理はステップS521に移行する。
ステップS515で選択部411は、通信装置400自身が完了期限に間に合うように送信することが可能な、Qto番以下で最大の番号を計算する。そして、選択部411は、計算結果を変数Vに代入する。
つまり、選択部411は、式(36)と(37)をともに満たす最大の番号Vを計算する。なお、式(37)は式(29)と同じである。
Iself+(V-U+1)×pSize/Bself <
Tend-(Tend-Tstart)×(Qto-V)/(Qto-Qfrom+1) (36)
V≦Qto (37)
ここで、式(36)の右辺はステップS506の式(28)の右辺と同じである。また、式(36)の左辺は、式(28)の左辺における遅延αとマージンβの和(α+β)を、通信装置400の内部処理遅延Iselfで置換し、さらに、帯域幅Bを帯域幅Bselfで置き換えたものである。式(36)の帯域幅Bselfは、通信装置400自身の送信可能帯域幅から、通信装置400の一時使用帯域幅の合計を引いた残りの帯域幅である。選択部411は、ノード情報記憶部408の自ノード情報を参照することで、式(36)の帯域幅Bselfの値を得ることができる。
そして、式(36)と(37)を満たす最大の整数の計算の後、次のステップS516で選択部411は、U≦Vであるか否かを判断する。
U≦Vのとき、通信装置400自身には少なくとも1つのデータパケット(具体的には(V−U+1)個のデータパケット)を割り当てることが可能である。すなわち、通信装置400は責任ノードとして選択可能である。よって、対応づけ部412は、通信装置400自身にU番からV番までのデータパケットを対応づける(つまり割り当てる)。そして、処理はステップS517に移行する。
逆に、U≦Vではないとき、選択部411は「通信装置400自身は責任ノードに適していない」と判断する。そして、処理はステップS521に移行する。
さて、ステップS517で対応づけ部412は、一時使用帯域幅と一時使用期限の新たなペアを生成し、ノード情報記憶部408内の自ノード情報に、生成した新たなペアを登録する。
具体的には、ステップS515で式(36)を満たすことが判明した最大の番号Vが、式(37)も満たす場合(以下では便宜上「第1の場合」という)には、対応づけ部412は、通信装置400自身の送信可能帯域幅自体を一時使用帯域幅に設定する。
逆に、テップS515で式(36)を満たすことが判明した最大の番号Vが、再送を要求されたデータパケットの終了番号Qtoよりも大きい場合もあり得る(以下では便宜上「第2の場合」という)。第2の場合、対応づけ部412は、第1の場合と同様に、通信装置400自身の送信可能帯域幅自体を一時使用帯域幅に設定してもよい。あるいは、第2の場合、対応づけ部412は、例えば式(38)にしたがって一時使用帯域幅tmpBを計算してもよい。
tmpB=pSize×(V-U+1)/(Tend-Iself) (38)
式(38)は、「通信装置400が、U番からV番までのデータパケットを、(Tend−Iself)という時間をかけて送信する」という仮定のもとでの使用帯域幅を計算する式である。式(38)は、式(34)における除数を別の除数に置き換えた式である。
つまり、式(38)は、「通信装置400自身が責任ノードとして選択された場合、通信装置400は、期限に間に合う範囲でなるべく低いビットレートでデータパケットを送信する」という仮定にしたがった式である。
なお、第1の場合と第2の場合のいずれにおいても、対応づけ部412は、受信部401が受信した再送要求パケット801に設定されていた完了期限Tendを現在時刻に足し、加算によって得られた時刻を一時使用期限に設定する。
そして、上記のステップS517での自ノード情報の更新の後、次のステップS518で再送処理部414は、U番からV番のデータパケットの送信を開始する。U番からV番のデータパケットを送信する処理は、例えば、図16〜17の処理の子プロセスであってもよいし、図16〜17の処理とは別のスレッドであってもよい。
なお、ステップS517で再送処理部414は、U番からV番のデータパケットの送信を開始するための処理を行う。そして、ステップS519以降の処理が行われるのと並行して、再送処理部414は実際のデータパケットの送信を行う。
具体的には、再送処理部414は、例えば、ステップS517において、U番からV番のデータパケットの送信をスケジューリングする。そして、再送処理部414は、スケジューリング結果にしたがって、U番からV番のデータパケットの送信を制御する。例えば、再送処理部414は、U番のデータパケットの送信を今すぐに実行するようスケジューリングするとともに、以後V番までのデータパケットを、間隔(Tend−Iself)/(V−U+1)で送信するようスケジューリングしてもよい。
このように、選択部411が通信装置400自身を責任ノードとして選択した場合、再送処理部414は、受信部401が受信した再送要求パケット801に取得期限と完了期限として指定された2つの値に基づいて、データパケットの送信タイミングを制御する。
なお、U番からV番のデータパケットは、スケジュールにしたがって、下記のように送信される。再送処理部414は、バッファ部403から送信対象のデータパケットのペイロードを読み出し、適宜のヘッダをペイロードの前に付けることで、要求ノード宛のデータパケットを生成する。再送処理部414は、受信部401が受信した再送要求パケット801に設定されていた要求元のIPアドレスAとポート番号Pを参照することで、データパケットのヘッダを適切に設定することができる。そして、再送処理部414は、生成したデータパケットを送信部402に出力し、送信部402がデータパケットを送信する。
さて、ステップS518に続いて、ステップS519で選択部411は、V=Qtoか否かを判断する。
もし、V=Qtoであれば、受信部401が受信した再送要求パケット801で要求されたすべてのデータパケットは、いずれかの責任ノードに割り当てられている。したがって、「通信装置400は受信した再送要求パケット801に対処することができた」という通知のため、処理はステップS520に移行する。
逆に、V≠Qtoであれば(より具体的には、V<Qtoであれば)、受信部401が受信した再送要求パケット801により再送が要求されたデータパケットのうち、割り当て先の責任ノードを決めることができなかったデータパケットが1つ以上残っている。よって、V<Qtoのとき、「通信装置400は受信した再送要求パケット801に対処しきることができなかった」ということの通知のため、処理はステップS522に移行する。
さて、ステップS520が実行されるのは、受信部401が受信した再送要求パケット801で要求されたQfrom番からQto番までのすべてのデータパケットが、いずれかの責任ノードに割り当て済みの場合である。したがって、ステップS520で負荷分散処理部410は、「Qfrom番からQto番までのデータパケットの送信を保証する」旨を通知するACK(ACKnowledgment)パケットを生成する。そして、負荷分散処理部410は生成したACKパケットを送信部402に出力し、送信部402はACKパケットを送信する。
なお、ACKパケットの送信先は、データパケットの再送を要求した要求ノードではなく、受信部401が受信した再送要求パケット801の直接の送信元のノードである。例えば、図1のステップS30でノードN3から再送要求パケット801を受信したノードN6では、ステップS520において、負荷分散処理部410が、要求ノードN5宛ではなくノードN3宛のACKパケットを生成する。
そして、ACKパケットの送信後、図16〜17の処理は終了する。
また、ステップS521が実行されるのは、U番以降のデータパケットの割り当て先の適切な責任ノードが見つからなかった場合である。そこで、ステップS521で負荷分散処理部410は、「送信を要求されたQfrom番からQto番までのデータパケットのうち、U番からQto番までのデータパケットの送信ができない」旨を通知するエラーパケットを生成する。当該エラーパケットは、換言すれば、「再送要求に応じきれない」旨を示すNACKパケットである。
そして、負荷分散処理部410は生成したエラーパケットを送信部402に出力し、送信部402はエラーパケットを送信する。なお、エラーパケットの送信先も、データパケットの再送を要求した要求ノードではなく、受信部401が受信した再送要求パケット801の直接の送信元のノードである。
そして、エラーパケットの送信後、図16〜17の処理は終了する。
また、ステップS522が実行されるのは、(V+1)番以降のデータパケットの割り当て先の適切な責任ノードが見つからなかった場合である。そこで、ステップS522で負荷分散処理部410は、「送信を要求されたQfrom番からQto番までのデータパケットのうち、(V+1)番からQto番までのデータパケットの送信ができない」旨を通知するエラーパケットを生成する。そして、負荷分散処理部410は生成したエラーパケットを送信部402に出力し、送信部402はエラーパケットを送信する。
ステップS522の処理は、「U番」が「(V+1)番」に置き換わる以外は、ステップS521と同様である。ステップS522でのエラーパケットの送信後、図16〜17の処理は終了する。
なお、ステップS521またはS522で送信されるエラーパケットを受信したときのノードの動作は、実施形態に応じて様々であってよい。
例えば、図9の再送要求先情報702は1つのエントリのみを含むが、再送要求先情報702は複数のエントリを含んでもよい。つまり、図6のステップS106で管理サーバ204が複数の再送要求先の候補を通知してもよく、ノード情報管理部409は、通知された複数の再送要求先の候補をノード情報記憶部408の再送要求先情報702に記憶してもよい。そして、再送要求部407は図11のステップS304で、複数の再送要求先の候補のうちの1つを再送要求先として選んでもよい。
以上のように複数の再送要求先の候補が記憶される実施形態では、パケットロスを検出してデータパケットの再送を要求した要求ノードは、再送要求パケット801の送信先のノードからエラーパケットを受信した場合、別の再送要求先の候補を選びなおしてもよい。例えば、図1のように要求ノードN5が再送要求先の第1候補としてノードN3を選んだ場合において、仮にノードN3がエラーパケットをノードN5に送信したとする。この場合、ノードN3は、再送要求先の第2候補を選び、取得期限と完了期限を計算しなおし、選んだ第2候補に宛てて、新たな再送要求パケット801を送信してもよい。
あるいは、実施形態によっては、要求ノードは、再送要求先のノードからエラーパケットを受信した場合は、親ノードを新たな再送要求先として選び、取得期限と完了期限を計算しなおし、親ノードに宛てて、新たな再送要求パケット801を送信してもよい。
また、子ノードを責任ノードとして選択して子ノードにデータパケットの送信を委譲したノードが、当該責任子ノードからエラーパケットを受信することも、まれには起こり得る。例えば、図1のステップS30で子ノードN6に再送要求パケット801を送信したノードN3が、ノードN6からエラーパケットを受信する場合も、皆無ではない。
この場合、ノードN6からエラーパケットを受信したノードN3は、ノードN3が受信した再送要求パケット801の直接の送信元に、受信したエラーパケットを転送してもよい。なお、図1の例では、ノードN3が受信した再送要求パケット801の直接の送信元はノードN5であり、ノードN5は、たまたま要求ノードでもある。
あるいは、ノードN6からエラーパケットを受信したノードN3は、「ノードN3自身およびノードN3の子ノードの中に、データパケットの送信をさらに引き受ける余力のあるノードがあるか否か」ということを判断してもよい。そして、もし余力のあるノードが1つ以上見つかったら、ノードN3の負荷分散処理部410は、エラーパケットにおいてシーケンス番号が指定されたデータパケットを、見つかった1つ以上のノードに適宜割り当ててもよい。逆に、余力のあるノードが見つからなかった場合、ノードN3は、ノードN3が受信した再送要求パケット801の直接の送信元にエラーパケットを転送してもよい。
なお、「余力のあるノードは見つかったが、エラーパケットで指定されているすべてのデータパケットを割り当てるには、見つかったノードだけでは不十分である」という場合もあり得る。その場合、ノードN3は、ノードN6から受信したエラーパケットにおいてシーケンス番号が指定されたデータパケットのうち、新たな割り当て先が見つからなかったものの番号を指定した新たなエラーパケットを生成してもよい。そして、ノードN3は、見つかったノードにデータパケットの送信を割り当てるとともに、生成した新たなエラーパケットを、ノードN3が受信した再送要求パケット801の直接の送信元に宛てて送信してもよい。
ところで、図12に関して簡単に述べたとおり、再送要求に指定されるパラメタは実施形態に応じて様々である。以下では図12の再送要求パケット801の代わりに、ビットレートの指定を含む再送要求パケット802が使われる実施形態について説明する。なお、上記実施形態との共通点については適宜説明を省略する。
まず、図12を参照して再送要求パケット802の形式について説明する。
再送要求パケット802は、再送要求パケット801と同様のヘッダと取得期限Tstartをを含む。しかし、再送要求パケット802は、再送要求パケット801のような完了期限Tendを含まず、代わりにビットレートBreqを含む。再送要求パケット802はさらに、再送要求パケット801と同様の再送先のIPアドレスAおよびポート番号Pを含む。
ところで、再送要求パケット801では、開始番号Qfromと終了番号Qtoのペアによって再送範囲が指定される。つまり、再送要求パケット801により要求されるデータパケットが複数ある場合、それら複数のデータパケットのシーケンス番号は、連続している。しかし、本実施形態では、不連続なシーケンス番号を持つ複数のデータパケットの送信が要求されることがある。
そこで、再送要求パケット802は、開始番号Qfromと終了番号Qtoのペアの代わりに、送信を要求するデータパケットのシーケンス番号のリスト(以下「再送リスト」という)を含む。図12の例では、再送要求パケット802の再送リストは、M個(1≦M)のシーケンス番号Q1、…、QMを含む。
以下に詳しく説明するとおり、ビットレートBreqの指定を含む再送要求パケット802を用いることにより、大量のデータパケットが消失した場合にも、要求ノードにおけるデータパケットの受信が時間的に集中する度合を緩和することができる。すなわち、以下に説明する本実施形態は、バースト受信に起因する再送失敗を回避するのに効果的である。つまり、本実施形態は、「再送失敗によって再び新たな再送要求が発生する」という悪循環を回避する効果がある。
大量のデータパケットが消失すると、パケットロスを検出したノードは、消失した大量のデータパケットの再送を要求する。場合によっては、要求された大量のデータパケットのすべてを1つのノードが送信することもあり得る。しかし、例えば図1のような委譲が1回以上行われ、その結果として、複数のノードがそれぞれ、大量のデータパケットのうちの割り当てられた一部を送信することもある。
いずれにしろ、或るノードが複数のデータパケットを送信する場合に、非常に高いビットレートでバースト的にそれら複数のデータパケットを送信することは、好ましくない。なぜなら、要求ノード(つまりパケットロスを検出したノード)や、物理ネットワーク上で当該「或るノード」から要求ノードに至るまでの経路上に存在するルータなどにおいて、バースト的な受信に起因するパケットロスが発生しかねないからである。
また、複数のノードがそれぞれ、大量のデータパケットのうちの割り当てられた一部のみを送信する場合、たとえ1つ1つのノードはそれほど高いビットレートでデータパケットを送信していなくても、バースト的な受信に起因するパケットロスは起こり得る。なぜなら、要求ノードや、物理ネットワーク上において要求ノードに近いルータなどが、複数のノードから送信されたデータパケットをほぼ同時にバースト的に受信する可能性があるからである。
したがって、要求されたデータパケットを実際に送信する各ノードは、要求ノードにおけるバースト受信を緩和するように、自律的に送信タイミングを制御することが好ましい。再送要求パケット802に指定されるビットレートBreqは、論理ネットワーク100内の複数のノードが自律分散的にバースト受信の緩和を実現するために使われる。
さて、再送要求パケット802が使われる本実施形態においては、データパケットの受信を契機とする図11の処理が次のように変形される。
すなわち、ステップS306で再送要求部407は、取得期限Tstartのみを算出すればよく、完了期限Tendを算出する必要はない。その代わり、再送要求部407は、再送要求パケット802に設定するビットレートBreqを適宜決定する。例えば、再送要求部407は、バッファ消費レートcRate(式(5)に関する説明を参照)を再送要求パケット802にビットレートBreqとして設定することが好ましい。
また、ステップS307で再送要求部407は、再送要求パケット801の代わりに再送要求パケット802を生成する。なお、再送要求部407は、Qfrom(=Qlast+1)番からQto(=Q−1)番までの(Qto−Qfrom+1)個のシーケンス番号を含むリストを、再送要求パケット802に再送リストとして設定する。
さらに、再送要求パケット802が使われる本実施形態においては、図16〜17の処理が図20〜21のように変形される。
以下、図20〜21のフローチャートを参照して、再送要求パケット802の受信を契機とする処理について説明する。根ノード、中継ノード、または葉ノードに相当する通信装置400の受信部401が図12の再送要求パケット802を受信し、再送要求パケット802を負荷分散処理部410に出力すると、負荷分散処理部410が図20〜21の処理を開始する。
図20〜21の処理において、ステップS601は初期化のためのステップである。また、ステップS602〜S609は、子ノードを優先して責任ノードを選択し、各責任ノードに、要求された特定情報の一部または全部である部分特定情報を対応づけるためのステップである。そして、ステップS610〜S618は、責任子ノードがあれば各責任子ノードに再送要求パケット802を送信し、通信装置400自身が責任ノードであればデータパケットを送信するためのステップである。ステップS619〜S621は、再送要求パケット802の直接の送信元のノードに、ACKまたはNACKを返すためのステップである。
また、図12の再送要求パケット802の再送リストに含まれるシーケンス番号は、どのような順序で並んでいてもよい。しかし、以下では処理の簡素化と説明の便宜のため、再送リストはシーケンス番号の昇順にソートされているものと仮定する。つまり、図12の例ではQ1<…<QMである。
ステップS601で選択部411は、ステップS501と同様の処理を行う。すなわち、選択部411は、ノード情報記憶部408に格納されている子ノード情報において、一時使用帯域幅と一時使用期限のペアのうち、一時使用期限が切れているペアがもしあれば、当該ペアをクリアする。同様に、選択部411は、ノード情報記憶部408に格納されている自ノード情報において、一時使用帯域幅と一時使用期限のペアのうち、一時使用期限が切れているペアがもしあれば、当該ペアをクリアする。
そして、次のステップS602で選択部411は、再送要求パケット802の再送リスト中の最小のシーケンス番号(すなわちQ1番)のデータパケットの取得期限に間に合うようにデータパケットの送信を行うことが可能な子ノードの集合Cを求める。集合Cは、責任ノードの集合である。
具体的には、選択部411は、以下に再掲する式(10)が成り立つ子ノードの集合を求める。
Tstart-α > 0 (10)
そして、次のステップS603で選択部411は、集合Cに属する子ノードの使用可能帯域幅の和(以下「Bsum」と表記する)を計算する。具体的には、選択部411は集合Cに属する各子ノードについて、子ノード情報における当該子ノードのエントリの送信可能総帯域幅から、当該エントリに含まれる一時使用帯域幅の合計を引くことで、各子ノードの使用可能帯域幅を計算する。そして、選択部411は、集合Cに属する各子ノードについて計算した使用可能帯域幅の総和を計算する。以上のようにして得られる総和が帯域幅Bsumである。
なお、後のステップS609の処理のために、選択部411は、各子ノードについて計算した使用可能帯域幅の値を記憶する。また、上記の定義からも明らかなように、或る子ノードの使用可能帯域幅は、論理ネットワーク100のトポロジにおいて当該「或る子ノード」を根ノードとする部分グラフに含まれるノードが再送に使うことのできる、現状における余力の総和である。
続いて、ステップS604で選択部411は、受信部401が受信した再送要求パケット802に指定されているビットレートBreqと、計算した帯域幅Bsumを比較する。なお、図9で送信可能総帯域幅や一時使用帯域幅がMbps単位で示されていることからも明らかなとおり、本実施形態の帯域幅は、換言すればビットレートである。したがってビットレートBreqと帯域幅Bsumは比較可能である。
そして、Breq≦Bsumの場合、子ノードだけで要求されたデータパケットの送信に対処することが可能であり、通信装置400自身を責任ノードとして選択する必要はない。よって、処理はステップS605に移行する。
逆に、Breq>Bsumの場合、子ノードだけでは要求されたデータパケットの送信に対処しきれない。そこで、選択部411が通信装置400自身も責任ノードとして選択するため、処理はステップS606に移行する。以上のように、本実施形態においてはステップS604の判断によって、子ノードの方が通信装置400よりも優先的に責任ノードとして選ばれる。
ところで、上記の仮定のとおり再送リストがソートされている場合、再送リスト中の或る1つのシーケンス番号(以下「V」と表記する)を用いて、通信装置400が送信を保証するデータパケットの範囲を示すことができる。例えば、再送リストが(301,304,307,310)というリストでありV=307であるとすると、通信装置400が送信を保証するのは、シーケンス番号が301番と304番と307番の3つのデータパケットである。シーケンス番号Vは、以下のようにステップS605またはS608で設定される。
ステップS605では、選択部411は、受信部401が受信した再送要求パケット802の再送リスト中の最後の番号QMを、変数Vに代入する。そして、処理はステップS609に移行する。
また、ステップS606で選択部411は、集合Cに通信装置400自身を加える。つまり、選択部411は、通信装置400自身を責任ノードとして選択する。
さらに、次のステップS607で選択部411は、ノード情報記憶部408の自ノード情報を参照する。そして、選択部411は、通信装置400自身の送信可能帯域幅から、通信装置400の一時使用帯域幅の合計を引いて使用可能帯域幅(すなわち式(36)の帯域幅Bself)を計算する。そして、選択部411は、帯域幅Bsumを、計算した通信装置400の使用可能帯域幅Bselfのぶんだけ増やす。
また、次のステップS608で選択部411は、帯域幅Bsumの送信でも期限に間に合う最大の番号を計算し、計算結果を変数Vに代入する。具体的には、選択部411は式(39)を満たす最大の値を計算し、計算結果を変数Vに代入する。
count(QM)×pSize/Breq≧count(V)×pSize/Bsum (39)
なお、式(39)における関数count(z)は、受信部401が受信した再送要求パケット802の再送リストにおいて、z番以下のシーケンス番号の数である。例えば、受信部401が受信した再送要求パケット802の再送リストが、(102,105,108,111)というリストである場合、count(108)=3である。
式(39)の左辺は、受信部401が受信した再送要求パケット802の再送リストに指定されているM個すべてのデータパケットを、指定されたビットレートBreqで送信するのにかかる時間である。また、式(39)の右辺は、受信部401が受信した再送要求パケット802の再送リストに指定されたデータパケットのうち、V番以下のシーケンス番号を持つデータパケットを、使用可能帯域幅Bsumのビットレートで送信するのにかかる時間である。よって、式(39)を満たす最大値は、帯域幅Bsumでの送信でも期限に間に合う最大の番号である。
例えば、count(QM)=M=12であり、かつ、Bsum=0.7×Breqだとする。この場合、受信部401が受信した再送要求パケット802の再送リストの中から、count(V)=8を満たす番号Vが選ばれる。なぜなら、式(39)より、番号Vは、12×0.7≧count(V)を満たす最大の整数だからである。
以上のようにしてステップS605またはS608において、通信装置400が送信を保証するデータパケットの範囲が決定されると、続いて、処理はステップS609に移行する。そして、ステップS609で対応づけ部412は、使用可能帯域幅を重みとして用いた重み付けラウンドロビンアルゴリズムにより、集合Cに属するノードに、受信部401が受信した再送要求パケット802の再送リスト中のV番までのデータパケットを分配する。
ここで、図22を参照して、ステップS609の具体例を説明する。図22はビットレートに応じて割り当てられたデータパケットの送信を例示する図である。図22では、上から下に向かう時間軸が矢印で示されている。また、図22では、再送要求パケット802内の再送リストが吹き出し内に示されている。図22中の他の要素については後述する。
例えば、図1の例において、ステップS20でノードN5からノードN3に送信される再送要求パケット802の再送リストが、101番から112番までの12個のシーケンス番号を含むとする。そして、再送要求パケット802を受信したノードN3が図20〜21の処理を開始し、式(40)のような集合Cが得られたとする。
C={N6, N7, N8} (40)
また、説明の便宜上、ノードN6、N7、およびN8それぞれの使用可能帯域幅の比が、3:2:1であるとする。この場合、ノードN3の対応づけ部412は、ステップS609において、ノードN6に6(=12×3/(3+2+1))個、ノードN7に4(=12×2/(3+2+1))個、ノードN8に2(=12×1/(3+2+1))個のデータパケットを割り当てる。
より具体的には、ステップS609で対応づけ部412は、受信部401が受信した再送要求パケット802の再送リスト中の番号を、重み付けラウンドロビンアルゴリズムによって順に、集合Cに属するいずれかのノードに割り当てる。その結果、例えば図22の例では、101〜112番のデータパケットは、次の(R−1)〜(R−12)のようにいずれか1つのノードに対応づけられる。
(R−1)101番のデータパケットはノードN6に対応づけられる。
(R−2)102番のデータパケットはノードN7に対応づけられる。
(R−3)103番のデータパケットはノードN6に対応づけられる。
(R−4)104番のデータパケットはノードN8に対応づけられる。
(R−5)105番のデータパケットはノードN7に対応づけられる。
(R−6)106番のデータパケットはノードN6に対応づけられる。
(R−7)107番のデータパケットはノードN6に対応づけられる。
(R−8)108番のデータパケットはノードN7に対応づけられる。
(R−9)109番のデータパケットはノードN6に対応づけられる。
(R−10)110番のデータパケットはノードN8に対応づけられる。
(R−11)111番のデータパケットはノードN7に対応づけられる。
(R−12)112番のデータパケットはノードN6に対応づけられる。
以上の(R−1)〜(R−12)に示した対応づけは、図22の吹き出しの中に示されているとおりである。
また、図1のステップS30でノードN3がノードN6に送信する再送要求パケット802の再送リストは、図22の例では(101,103,106,107,109,112)というリストである。ここで、仮に、再送要求パケット802を受信したノードN6が、図1と同様に子ノードN12とN13を責任ノードとして選ぶとする。つまり、図20〜21の処理を行うノードN6の選択部411が、式(41)のような集合Cを得たとする。
C={N12, N13} (41)
また、ノードN12とN13それぞれの使用可能帯域幅の比が2:1であるとする。この場合、ノードN6の対応づけ部412は、ステップS609において、ノードN12に4(=6×2/(2+1))個、ノードN13に2(=6×1/(2+1))個のデータパケットを割り当てる。
より具体的には、ステップS609でノードN6の対応づけ部412は、受信部401が受信した再送要求パケット802の再送リスト中の番号を、重み付けラウンドロビンアルゴリズムによってノードN12またはN13に割り当てる。その結果、例えば図22の例では、(101,103,106,107,109,112)という再送リスト中に指定された6つのシーケンス番号のデータパケットは、次の(S−1)〜(S−6)のように、ノードN12またはN13に対応づけられる。
(S−1)101番のデータパケットはノードN12に対応づけられる。
(S−2)103番のデータパケットはノードN13に対応づけられる。
(S−3)106番のデータパケットはノードN12に対応づけられる。
(S−4)107番のデータパケットはノードN12に対応づけられる。
(S−5)109番のデータパケットはノードN13に対応づけられる。
(S−6)112番のデータパケットはノードN12に対応づけられる。
以上の(S−1)〜(S−6)に示した対応づけは、図22の吹き出しの中に示されているとおりである。
なお、図22では説明の簡単化のために、集合Cに属するノードの使用可能帯域幅の比が単純な整数比の場合を例示した。しかし、使用可能帯域幅の比が単純な整数比でない場合にも、もちろん、重み付けラウンドロビンアルゴリズムで利用可能な適宜の端数処理によって、対応づけ部412は、ステップS609での割り当てを適切に遂行することができる。
ここで、図20〜21の説明に戻る。ステップS609で各責任ノードに対応づけ部412がデータパケットを適宜対応づけた後、処理は図21のステップS610に移行する。そして、ステップS610で負荷分散処理部410は、集合C内のノードに順に注目するためのインデックスiを1に初期化する。
続いて、ステップS611で負荷分散処理部410は、i≦|C|か否か(すなわち、集合Cに属するすべてのノードに注目し終えたか否か)を判断する。なお、|C|は集合Cの要素数である。
もし、i≦|C|であれば、まだ負荷分散処理部410が注目していない責任ノードが残っている。そこで、負荷分散処理部410は集合Cに属するi番目のノードに注目する。そして、処理はステップS612に移行する。
逆に、i>|C|であれば、集合Cのすべてのノードに負荷分散処理部410は既に注目し終わっている。そこで、処理はステップS619に移行する。
ステップS612で要求生成部413は、集合Cに属するi番目のノード用のビットレートを計算する。ここで、説明の便宜上、受信部401が受信した再送要求パケット802の再送リストの要素数が図12のとおりMであるものとする。また、ステップS609において集合C中のi番目のノードに対応づけ部412が割り当てたデータパケットの数を「Xi」と表記する。すると、ステップS612における計算は式(42)のように表される。
Breq2=Breq×Xi/M (42)
すなわち、要求生成部413は、受信部401が受信した再送要求パケット802に指定されたビットレートBreqを、各責任ノードが送信を保証するデータパケットの数に応じて、各責任ノードに比例配分する。例えば、図22の例で、ノードN3の要求生成部413は、ノードN6用のビットレートとして、ノードN5から受信した再送要求パケット802に指定されていたビットレートの1/2(=6/12)を得る。
そして、次のステップS613で負荷分散処理部410は、集合C中のi番目のノードが通信装置400自身であるか否かを判断する。そして、集合C中のi番目のノードが通信装置400自身である場合、処理はステップS614に移行する。逆に、集合C中のi番目のノードが通信装置400のいずれかの子ノードである場合、処理はステップS615に移行する。
ステップS614で再送処理部414は、対応づけ部412が通信装置400自身に割り当てたXi個のデータパケットの送信を開始する。再送処理部414が実際にXi個のデータパケットを送信する処理は、例えば、図20〜21の処理の子プロセスであってもよいし、図20〜21の処理とは別のスレッドであってもよい。
なお、ステップS614で再送処理部414は、データパケットの送信を開始するための処理を行う。そして、次のステップS617以降の処理が行われるのと並行して、再送処理部414は実際のデータパケットの送信を行う。
具体的には、再送処理部414は、例えば、ステップS614において、対応づけ部412が通信装置400に対応づけたXi個のデータパケットの送信をスケジューリングする。そして、再送処理部414は、スケジューリング結果にしたがって、Xi個のデータパケットの送信を制御する。
例えば、再送処理部414は、通信装置400に割り当てられた最初のデータパケットの送信を今すぐに実行するようスケジューリングするとともに、以後、式(43)の送信間隔τで残りのデータパケットを送信するようスケジューリングする。
τ=pSize/Breq2=(pSize/Breq)×(M/Xi) (43)
ところで、「ビットレートBreqでデータパケットが送信される」とは、具体的には、次の(T−1)〜(T−3)のような意味である。
(T−1)データパケットの送信が一定の送信間隔で断続的に行われる。
(T−2)結果として、ある程度の長さの時間の平均的なビットレートは、データパケットの1つあたりの大きさを送信間隔で割った商と見なすことができる。
(T−3)上記の商がBreqである。
したがって、ビットレートと送信間隔は反比例する。そして、式(43)における(pSize/Breq)は、受信部401が受信した再送要求パケット802に指定されているビットレートBreqで複数のデータパケットが送信されるときの送信間隔である。よって、式(42)のように割り当てられたビットレートBreq2での送信を実現するための送信間隔は、式(43)のとおりである。
なお、再送処理部414は、バッファ部403から送信対象のデータパケットのペイロードを読み出し、適宜のヘッダをペイロードの前に付けることで、要求ノード宛のデータパケットを生成する。再送処理部414は、受信部401が受信した再送要求パケット802に設定されていた要求元のIPアドレスAとポート番号Pを参照することで、データパケットのヘッダを適切に設定することができる。そして、再送処理部414は、生成したデータパケットを送信部402に出力し、送信部402がデータパケットを送信する。
なお、ステップS614の実行後、処理はステップS617に移行する。
他方、ステップS615では、要求生成部413が、集合C中のi番目のノードに送信するための新たな再送要求パケット802に設定する取得期限を計算する。すなわち、要求生成部413は、式(44)にしたがって取得期限Tstart2を計算する。
Tstart2=Tstart-α+Ii (44)
なお、式(44)における遅延αは式(10)と同様である。また、式(44)では、集合C中のi番目のノードの内部処理遅延が「Ii」と表記されている。式(44)において遅延αが引かれ、内部処理遅延Iiが足される理由は、図16のステップS508の式(31)に関して説明したの理由と同様である。
また、次のステップS616で要求生成部413は、新たな再送要求パケット802を生成して送信部402に出力する。そして、送信部402は、集合C中のi番目のノード宛に再送要求パケット802を送信する。
具体的には、要求生成部413は新たな再送要求パケット802のヘッダに適宜の値を設定する。要求生成部413は、ノード情報記憶部408内の自ノード情報と子ノード情報を参照して、再送要求パケット801のヘッダに設定する送信元IPアドレス、送信先IPアドレス、ポート番号などを取得することができる。
また、要求生成部413は、新たな再送要求パケット802に、ステップS615で計算した取得期限Tstart2と、ステップS612で計算したビットレートBreq2を設定する。さらに、要求生成部413は、新たな再送要求パケット802の再送先のIPアドレスとポート番号のフィールドに、受信部401が受信した再送要求パケット802の再送先のIPアドレスとポート番号の値をコピーする。そして、要求生成部413は、新たな再送要求パケット802の再送リストに、対応づけ部412が集合C中のi番目のノードにステップS609で割り当てたXi個のシーケンス番号のリストを設定する。
ステップS616では、以上のようにして各フィールドに値が設定された新たな再送要求パケット802が、送信部402から送信される。そして、処理はステップS617に移行する。
ステップS617で対応づけ部412は、集合C中のi番目のノードに対応する一時使用帯域幅と一時使用期限を設定する。具体的には、集合C中のi番目のノードが通信装置400であれば、対応づけ部412は、自ノード情報に一時使用帯域幅と一時使用期限のペアを追加する。また、集合C中のi番目のノードが通信装置400のいずれかの子ノードであれば、対応づけ部412は、子ノード情報中の当該子ノードのエントリに、一時使用帯域幅と一時使用期限のペアを追加する。
いずれにしろ、対応づけ部412は、一時使用帯域幅として、ステップS612で要求生成部413が計算したビットレートBreq2を設定する。また、対応づけ部412は、一時使用期限として、例えば式(45)の時刻tmpTを設定してもよい。
tmpT=Now+(pSize×M/Breq)×((Xi-1)/Xi)+α (45)
式(45)におけるNowは現在時刻である。また、式(45)における(M×pSize/Breq)は、受信部401が受信した再送要求パケット802の再送リストで要求されているM個のデータパケットを、指定されたビットレートBreqで送信するのにかかる時間である。
また、集合C中のi番目のノードに割り当てられたXi個のデータパケットのうちで最初のデータパケットは、式(10)の遅延αが経過するまでには、送信されると予測される。したがって、Xi個のデータパケットが一定間隔で送信される場合、集合C中のi番目のノードに割り当てられたXi個のデータパケットのうちで最後のデータパケットが送信される予測時刻は、式(45)の時刻tmpTである。
以上のようにして、ステップS617で一時使用帯域幅と一時使用期限のペアが自ノード情報または子ノード情報に追加されると、処理はステップS618に移行する。
そして、ステップS618で負荷分散処理部410は、インデックスiを1だけインクリメントする。そして処理はステップS611に戻る。
さて、ステップS619の処理が実行されるのは、上記のとおり|C|<iの場合である。ステップS619で負荷分散処理部410は、番号Vが、受信部401が受信した再送要求パケット802の再送リスト中の最後の番号であるか否かを判断する。番号Vが最後の番号の場合(すなわちV=QMの場合)、処理はステップS620に移行する。逆に、番号Vが最後の番号ではない場合(すなわちV<QMの場合)、処理はステップS621に移行する。
そして、ステップS620で負荷分散処理部410は、「受信部401が受信した再送要求パケット802の再送リストに指定されたすべてのデータパケットの送信を保証する」という旨を通知するACKパケットを生成する。そして、負荷分散処理部410は生成したACKパケットを送信部402に出力し、送信部402はACKパケットを送信する。
なお、図17のステップS520と同様に、ACKパケットの送信先は、受信部401が受信した再送要求パケット802の直接の送信元のノードである。そして、ACKパケットの送信後、図20〜21の処理は終了する。
また、ステップS621で負荷分散処理部410は、「送信を要求されたM個のデータパケットのうち、V番より大きいシーケンス番号のデータパケットの送信ができない」という旨を通知するエラーパケットを生成する。そして、負荷分散処理部410は生成したエラーパケットを送信部402に出力し、送信部402はエラーパケットを送信する。
なお、エラーパケットの送信先も、受信部401が受信した再送要求パケット802の直接の送信元のノードである。そして、エラーパケットの送信後、図20〜21の処理は終了する。
また、ステップS621で送信されるエラーパケットを受信したときのノードの動作は、実施形態に応じて様々であってよい。エラーパケットを受信したノードは、例えば、ステップS521またはS522で送信されるエラーパケットを受信したノードに関して説明した処理と類似の処理を行い、新たな再送要求パケット802を送信してもよい。
続いて、図20〜21を参照して説明した再送制御の効果について、再び図22の例を参照しながら説明する。
図22において、「N5」と書かれた列には、シーケンス番号が101番から112番のデータパケットの消失を検出したノードN5において図14のステップS402で計算される時間Lstartが示されている。なお、本実施形態では、再送要求部407は、上記のとおり図11のステップS306で完了期限Tendを計算する必要がないので、図14のステップS402で時間Lendを計算する必要もない。しかし、説明の便宜上、図22の「N5」と書かれた列には、時間Lendも示されている。時間差(Lend−Lstart)は、ノードN5の再生処理部404が101番から112番までの12個のデータパケットを消費するのにかかる時間である。
また、図22には、個々のデータパケットの消費にかかる時間も、横線によって示されている。上記のとおりBreq=cRateであることが好ましいので、図22ではBreq=cRateの場合が例示されている。すなわち、1つのデータパケットの消費にかかる時間は、図22において隣接する2本の横線の間の間隔であり、その長さはpSize/Breq(=pSize/cRate)である。
また、図22における太い縦線の長さは、再送要求パケット802に指定される取得期限の長さを示す。例えば、「N3」と書かれた列の縦線は、ノードN3がノードN5から受信する再送要求パケット802に指定されている取得期限の長さを示す。他の列の縦線も同様である。また、各縦線の上端の位置は、再送要求パケット802の受信時刻に対応する。
また、縦線に重なる小さな黒い円は、データパケットの送信を依頼されたノードが実際にデータパケットの送信を開始する時刻を示す。責任ノードとして選択されるノードは、取得期限に関する制約条件を満たすので、図22においてどの円も縦線の上端と下端の間にある。
例えば、ノードN7には、上記のように102番、105番、108番、111番のデータパケットの送信が割り当てられる。「N7」と書かれた列の円は、ノードN7が、割り当てられたうちで最初の(つまり102番の)データパケットを送信する時刻を示す。
なお、「N6」と書かれた列の円は、「ノードN6が、データパケットの送信をノードN12とN13に委譲せずに、自らデータパケットを送信する」と仮定した場合に、ノードN6が101番のデータパケットを送信する時刻を示す。逆に、ノードN6がデータパケットの送信をノードN12とN13に委譲した場合は、「N12」の列の円が示す時刻にノードN12が101番のデータパケットを送信し、「N13」の列の円が示す時刻にノードN13が103番のデータパケットを送信する。
また、図22におけるバツ印は、送信されたデータパケットが要求ノードN5で受信される時刻を示す。円からバツ印へ向かう矢印は、要求ノードN5がデータパケットを受信するまでの遅延を示す。
例えば、「N7」と書かれた列には、ノードN7から送信される102番、105番、108番、111番のデータパケットがそれぞれノードN5で受信される時刻を示す4つのバツ印が示されている。図21のステップS614に関連して説明したスケジューリングにしたがってデータパケットが送信されると、図22に示すように、任意のシーケンス番号Qについて、Q番のデータパケットの取得期限までにQ番のデータパケットが要求ノードに受信される。
また、例えばノードN7には4つのデータパケットが割り当てられる。よって、ノードN3がノードN7に送信する再送要求パケット802に指定されるビットレートは、ノードN5がノードN3に送信する再送要求パケット802に指定されるビットレートの4/12である。したがって、図22において「N7」と書かれた列の4つのバツ印は、間隔(pSize/Breq)/(4/12)で並んでいる。同様に、2つのデータパケットが割り当てられたノードN8の列の2つのバツ印の間の間隔は、(pSize/Breq)/(2/12)である。
また、ノードN6が、データパケットの送信をノードN12とN13に委譲せずに、自らデータパケットを送信する場合、ノードN6は6個のデータパケットを送信することになる。したがって、「N6」の列には、間隔(pSize/Breq)/(6/12)で並んだ6つのバツ印が示されている。
逆に、ノードN6が、データパケットの送信をノードN12とN13に委譲する場合、ノードN12は4個のデータパケットを送信し、ノードN13は2個のデータパケットを送信する。よって、「N12」の列には、間隔(pSize/Breq)/(4/12)で並んだ4つのバツ印が示されており、「N13」の列には、間隔(pSize/Breq)/(2/12)で並んだ2つのバツ印が示されている。
以上説明したように、図22には、説明の便宜上、ノードN6が責任ノードとしてノードN6のみを選ぶ場合と、2つの子ノードN12とN13のみを選ぶ場合が両方とも図示されている。しかし、いずれの場合であろうとも、各ノードは適宜の間隔をあけてデータパケットを送信する。その結果、再送が要求された12個のデータパケットは、平均的には、最初にノードN5が指定したビットレートBreqでノードN5に受信される。
したがって、「ノードN5や、物理ネットワーク上でノードN5に近いルータ等において、101〜112番のデータパケットが短期間に集中してバースト的に受信されたために輻輳が生じる」という事態は起こりにくい。つまり、再送リストに指定されるデータパケットの数に応じてビットレートが比例配分されることにより、バースト受信が緩和される。その結果、「再送されたデータパケットの一部または全部が消失する」といった事態が回避される。
もちろん、図22に例示するように、再送が要求された12個のデータパケットのうちの一部(例えば2〜4個のデータパケット)が、互いに非常に近い時刻にノードN5において受信されることはあり得る。例えば、ノードN6が責任ノードとしてノードN12とN13を選んだ場合、要求ノードN5における101〜104番の4つのデータパケットの受信時刻は、互いに近い。
しかしながら、本実施形態では輻輳は起こりにくい。その理由は、たとえ或る複数個のデータパケットの受信時刻が互いに近くても、当該「或る複数個のデータパケット」の受信に続く、次の1つまたは複数のデータパケット受信までには、ある程度の長さの間隔があくからである。
例えば、図22に示すように、たとえ要求ノードN5における101〜104番の4つのデータパケットの受信時刻が非常に近いとしても、次の105番のデータパケットの受信までには、およそ(pSize/Breq)×3の間隔があく。よって、要求ノードN5や、物理ネットワーク上でノードN5に近いルータは、この(pSize/Breq)×3の時間を利用して、時間的に集中して到着した101〜104番の4つのデータパケットに関する処理を済ませることができる。したがって、要求ノードN5や、物理ネットワーク上でノードN5に近いルータにおいて、バッファオーバフロー等に起因するパケットロスは起こりにくい。
例えば、各ノードが可能な限り高いビットレートでデータパケットを送信する場合(すなわち次の受信までの間隔が非常に短い場合)と比較すれば、図22の例による輻輳回避の効果(換言すれば、バースト受信を緩和する効果)は明らかである。
以上説明したように、ノードN5における12個のデータパケットの受信は、全体としては、平均してビットレートBreqで達成される。そして、複数のノードからのデータパケットの送信を全体で均したビットレートを、要求ノードN5が指定したビットレートBreqに保つための制御は、上記のように、再送要求パケット802のビットレートフィールドを介して、自律分散的に実現される。
例えば、ノードN7、N8、N12、N13という4つのノードが実際にデータパケットを送信するとする。この場合、4つのノードがそれぞれ、受信した再送要求パケット802にしたがって送信を自律分散的にスケジューリングすることにより、要求ノードN5における平均受信ビットレートBreqが実現される。
なお、バースト的な受信を一層緩和するために、要求生成部413は、図21のステップS615において、式(44)の代わりに、式(46)を用いて取得期限Tstart2を計算してもよい。式(46)における「Fi」は、集合C中のi番目のノードに対応づけ部412が対応づけたXi個のデータパケットのうちで最初のデータパケットのシーケンス番号である。
Tstart2=Tstart-α+Ii+pSize/Breq×(Fi-Q1) (46)
例えば、図22の例において、ノードN3の要求生成部413が、集合C中のi番目のノードとしてノードN8に注目している場合、ノードN8に対応づけられているデータパケットのシーケンス番号は104番と110番なので、Fi=104である。また、ノードN3が受信した再送要求パケット802の再送リストの最初のシーケンス番号は101番なので、Q1=101である。したがって、式(46)により計算される取得期限Tstart2は、式(44)により計算される取得期限Tstart2よりも、3つのデータパケット(具体的には101〜103番のデータパケット)の消費時間のぶんだけ、遅い。
要求生成部413が式(46)によって取得期限Tstart2を計算した場合でも、図22から明らかなように、各データパケットは、要求ノードN5における取得期限までに要求ノードに受信される。また、要求生成部413が式(46)によって取得期限Tstart2を計算することで、要求ノードN5において複数のデータパケットの受信時刻が時間的に集中する度合は、一層緩和され得る。
さらに、以上のようなビットレートの自律分散制御は、期限内の受信を犠牲にすることなく実現される。すなわち、ステップS614に関連して説明したスケジューリングによれば、ノードN5は、図22にバツ印で示すタイミングで各データパケットを受信することができる。そして、図22にバツ印で示すタイミングは、明らかに、「任意のシーケンス番号Qについて、Q番のデータパケットの取得期限までにQ番のデータパケットが要求ノードに受信される」ということを示している。
ところで、本発明は上記実施形態に限られるものではなく、上記実施形態は様々に変形可能である。以下に、上記実施形態を変形するいくつかの観点を例示する。例えば、上記実施形態は、下記の観点から様々に変形することができ、上記に例示したいくつかの変形および下記の変形は、相互に矛盾しない限り、任意に組み合わせることが可能である。
変形の第1の観点は、論理ネットワークのトポロジに関する。例えば、図2のようなツリー型のトポロジの論理ネットワーク100ではなく、メッシュ型のトポロジの論理ネットワーク上でデータパケットが配信されるデータ配信システムにも、上記実施形態の再送制御は適用可能である。図23は、メッシュ型トポロジの論理ネットワークの例を示す図である。
例えば、図23の論理ネットワーク100cは、ノードN40〜N54を含むメッシュ型トポロジの論理ネットワークである。論理ネットワーク100cのトポロジは、図23において非循環有向グラフ(DAG)により表されている。
たとえ論理ネットワーク100cのようにメッシュ型の論理ネットワークであっても、トポロジを有向グラフで表すことのできる論理ネットワークならば、親ノードと子ノードが定義可能である。つまり、論理ネットワーク上において、あるノードNjから他のノードNkへのエッジが存在するとき、ノードNkはノードNjの子ノードであり、ノードNjはノードNkの親ノードである。
メッシュ型の論理ネットワーク100cにおいては、親ノードを複数持つノードもある。例えば、ノードN46は、3つの親ノードノードN40、N42、N43を持ち、4つの子ノードN45、N49、N51、N52を持つ。複数の親ノードを持つ場合、ノード情報記憶部408の親ノード情報も複数のエントリを含む。
また、トポロジがDAGで表される論理ネットワークには閉路が存在しないので、任意のノードNjについて、「ノードNjを根ノードとする部分グラフ」を親ノードと子ノードの関係に基づいて定義することができる。
具体的には、ノードNjが子ノードを持たない場合、ノードNjを根ノードとする部分グラフは、ノードNjのみを含み、エッジを含まない。逆に、ノードNjが子ノードNkを持つ場合、ノードNkを根ノードとする部分グラフに属するすべてのノードと、ノードNjは、ノードNjを根ノードとする部分グラフに属する。また、ノードNjが子ノードNkを持つ場合、ノードNkを根ノードとする部分グラフに属するすべてのエッジと、ノードNjからノードNkへのエッジは、ノードNjを根ノードとする部分グラフに属する。
すると、メッシュ型の論理ネットワーク100cにおいても、任意のノードNjについて、ノードNjの送信可能総帯域幅Total(Nj)が定義可能である。つまり、ノードNjの送信可能総帯域幅Total(Nj)は、ノードNjを根ノードとする部分グラフに属するすべてのノードの送信可能帯域幅の総和である。
ただし、送信可能総帯域幅の通知と認識に関して、メッシュ型の論理ネットワーク100cとツリー型の論理ネットワークでは次のような違いがある。
ツリー型の論理ネットワーク100では、根ノード以外のすべてのノードが必ず1つの親ノードを持つ。そのため、各ノードが図10のフローチャートにしたがって動作することにより、各ノードは、送信可能総帯域幅を正しく認識し、記憶することができる。
他方、論理ネットワーク100c内の各ノードが図10のフローチャートにしたがって動作すると、ノードNjのノード情報記憶部408の自ノード情報に記録される送信可能総帯域幅の値は、必ずしも、上記のように定義されるTotal(Nj)ではない。
例えば、論理ネットワーク100cでは、ノードN45は子ノードN49、N50、N51を持ち、ノードN49は子ノードN50を持ち、ノードN51は子ノードN50を持ち、ノードN50は子ノードを持たない。換言すれば、ノードN50は3つの親ノードN45、N49、N51を持ち、このうち2つの親ノードN49とN51は、偶然にも、ノードN50のもう1つの親ノードN45の子孫ノードである。
したがって、論理ネットワーク100c内の各ノードが図10のフローチャートにしたがって動作する場合、以下の(U−1)〜(U−4)のような処理が行われる。
(U−1)ノードN50は、3つの親ノードN45、N49、N50のすべてに、ノードN50の送信可能総帯域幅として、ノードN50の送信可能帯域幅Reserved(N50)を通知する。
(U−2)ノードN49は、(U−1)で通知されたノードN50の送信可能帯域幅Reserved(N50)とノードN49の送信可能帯域幅Reserved(N49)の和を計算する。そして、ノードN49は、2つの親ノードN45とN46の両方に、計算結果を、ノードN49の送信可能総帯域幅として通知する。
(U−3)ノードN51は、(U−1)で通知されたノードN50の送信可能帯域幅Reserved(N50)とノードN51の送信可能帯域幅Reserved(N51)の和を計算する。そして、ノードN51は、3つの親ノードN45、N46、N47のすべてに、計算結果を、ノードN51の送信可能総帯域幅として通知する。
(U−4)ノードN45は、(U−1)、(U−2)、(U−3)で通知された値と、ノードN45の送信可能帯域幅Reserved(N45)の和を計算する。そして、ノードN45は、2つの親ノードN42とN46の両方に、計算結果を、ノードN45の送信可能総帯域幅として通知する。
上記の(U−4)においてノードN45が親ノードN42とN46に通知する値には、ノードN50の送信可能帯域幅Reserved(N50)が3重にカウントされている。したがって、(U−4)においてノードN45から通知される値は、ノードN45を根ノードとする部分グラフに属するすべてのノードの送信可能帯域幅の総和よりも大きい。換言すれば、(U−4)においてノードN45から通知される値は、上記定義による送信可能総帯域幅Total(N45)の正確な値ではない。
そこで、論理ネットワーク100cのようなメッシュ型トポロジの論理ネットワークが利用される実施形態においては、例えば、以下の2つの方針が採用可能である。
第1の方針は、「上記(U−4)のような重複カウントを容認する」という方針である。換言すれば、第1の方針は、「図10のフローチャートによる処理では、必ずしも各ノードが正確な送信可能総帯域幅を認識することができるとは限らないが、通知される値は、送信可能総帯域幅の推定値として利用可能である」という立場に拠るものである。
第1の方針によれば、図10の処理は基本的には変更不要である。つまり、図10のステップS211での通知先の親ノードの数が複数の場合があり得る点は、上記実施形態と異なるが、その他の点は変わらない。したがって、第1の方針によれば、ステップS209の計算方法を変更する必要もなく、ステップS211ではステップS209の計算結果がそのまま各親ノードに通知される。
以上の第1の方針が採用された場合であっても、ステップS521、S522またはS621で送信されるエラーパケットに応じて責任ノードの再選択が適宜行われれば、特に問題は生じない。
また、論理ネットワークのトポロジによっては、上記(U−4)のような重複カウントが多発するとは限らない。つまり、図10のフローチャートにしたがって通知される値と、定義にしたがった正しい送信可能総帯域幅との間の誤差は、わずかかもしれない。誤差が小さければ、誤差の影響は無視しても差し支えないので、第1の方針は妥当である。
また、論理ネットワーク100c内の各ノードは、論理ネットワーク100c全体のトポロジを認識してはいない。よって、各ノードは、「上記(U−4)のような重複カウントが生じるか否か」ということも認識しない。そして、第1の方針は、上記(U−4)のような重複カウントの原因となるトポロジを把握するための追加的な処理を必要としないので、各ノードが論理ネットワーク100c全体のトポロジを認識しないP2Pシステムに適している。
なお、第1の方針が採用される場合に、要求されたデータパケットの送信が保証されることの信頼性を向上させるために、再送要求パケットを受信したノードが付加的な処理を行ってもよい。具体的には、複数の親ノードを持つノードは、親ノードのうちの1つから再送要求パケットを受信した場合、他のすべての親ノードに対して、後述の第9の観点と同様の通知を送信してもよい。詳しくは第9の観点とともに後述するが、親ノードのうちの1つから受信した再送要求パケットに応じて一時的に消費される帯域幅を他の親ノードに通知することにより、エラー(つまりNACK)の発生を未然に防ぐことが可能となる。
さて、第2の方針は、「上記(U−4)のような重複カウントを避ける」という方針である。具体的には、第2の方針によれば、図10のステップS211で通知する帯域幅の計算方法が変更される。
図10の処理では、ステップS209で計算された値がステップS211で通知される。しかし、第2の方針によって変形された処理によれば、ステップS209で計算された値を親ノードの数で割った値が、ステップS211で通知される。
変形の第2の観点は、子ノードが複数ある場合の責任ノードの選択とデータパケットの割り当てに関する。
図16〜17の処理は、先に見つかった子ノードから順に、再送期限に関する制約条件が満たされる限りなるべく多くのデータパケットを、見つかった子ノードに割り当てる処理である。換言すれば、図16〜17の処理は、貪欲法(greedy algorithm)に基づく処理であり、「処理フローが単純である」という利点を持つ。しかし、ノード間の負荷の公平性をより高めるために、図16〜17の処理が変形されてもよい。
例えば、或るノードが5つの子ノードを持ち、当該「或るノード」が何回も再送要求パケット801を受信する場合、図16〜17の処理によれば、複数の再送要求全体の傾向として、負荷が偏ることがある。具体的には、当該「或るノード」の1番目の子ノードを根ノードとする部分グラフ中のノードは、当該「或るノード」の5番目の子ノードを根ノードとする部分グラフ中のノードよりも、実際にデータパケットの送信を担うことが多くなりがちである。
そこで、複数の再送要求全体での負荷の偏りを均すため、選択部411は、子ノード情報の複数のエントリに決まった順番で注目する(例えば1番目のエントリから順に注目する)代わりに、ランダムな順番で注目してもよい。あるいは、図16〜17のような貪欲法による処理の代わりに、比例配分による処理が行われてもよい。
例えば、選択部411は、通信装置400のすべての子ノードを、仮に責任ノードとして選択してもよい。そして、対応づけ部412は、各子ノードの現在使用可能な帯域幅(すなわち式(28)の帯域幅B)を計算し、現在使用可能な帯域幅に基づいて、要求された(Qto−Qfrom+1)個のデータパケットを全子ノードに仮に比例配分してもよい。
例えば、図1のステップS20で、61番から68番までの8個のデータパケットの送信を要求する再送要求パケット801をノードN3が受信したとする。すると、ノードN3の選択部411は、3つの子ノードN6、N7、N8すべてを仮に責任ノードとして選択する。また、ノードN6、N7、N8がそれぞれ現在使用可能な帯域幅の比が、2:1:1であるとする。すると、ノードN3の対応づけ部412は、比例配分により、ノードN6には4個、ノードN7には2個、ノードN8には2個のデータパケットをそれぞれ仮に割り当てる。
その後、対応づけ部412は、「各子ノードが、再送期限による制約条件を満たしつつ、比例配分により仮に割り当てられた数のデータパケットの送信を保証することが可能か否か」をチェックする。そして、もし、仮に割り当てられた数のデータパケットの送信を保証しきれない子ノードがあれば、対応づけ部412は、仮に割り当てたデータパケットの数を調整する。
同じシーケンス番号のデータパケットの送信に関しては、明らかに、式(9)の遅延αが大きい子ノードの方が、遅延αが小さい子ノードよりも、制約条件を満たすのが難しい。そこで、対応づけ部412は、例えば、遅延αが小さい子ノード(すなわち制約条件を満たす見込みの高い子ノード)から順に、上記のチェック処理を行ってもよい。
例えば、上記のようにノードN6、N7、N8に仮に割り当てられたデータパケットの個数がそれぞれ4個、2個、2個の場合に、ノードN8の遅延αが最小で、ノードN6の遅延αが2番目に小さく、ノードN7の遅延αが最大とする。
すると、ノードN3の対応づけ部412は、遅延αが小さい順に、まず「遅延αが最小のノードN8は、61〜62番の2つのデータパケットについて、再送期限に関する制約条件を満たしつつ送信を保証することが可能か否か」をチェックする。チェックの結果として「可能」と判明すれば、対応づけ部412は、ノードN8に実際に61〜62番の2つのデータパケットを対応づける。あるいは、チェックの結果として、例えば「ノードN8が制約条件を満たしつつ送信を保証するのが可能なのは61番のデータパケットのみ」と判明すれば、対応づけ部412は、ノードN8に実際に61番の1つのデータパケットのみを対応づける。
そして、対応づけ部412は、次に、「遅延αが2番目に小さいノードN6は、ノードN8に割り当てた直後の4つのシーケンス番号を持つデータパケットについて、再送期限に関する制約条件を満たしつつ送信を保証することが可能か否か」をチェックする。例えば、対応づけ部412は、ノードN8に実際に61〜62番のデータパケットを割り当てた場合は、「63〜66番の4つのデータパケットの送信をノードN6が保証することができるか否か」をチェックする。あるいは、対応づけ部412は、ノードN8に実際に61番のデータパケットのみを割り当てた場合は、「62〜65番の4つのデータパケットの送信をノードN6が保証することができるか否か」をチェックする。
そして、対応づけ部412は、チェック結果に応じて、ノードN6に実際に割り当てるデータパケットのシーケンス番号の範囲を決定する。また、対応づけ部412は、遅延αが最大のノードN7についても、上記と同様にして、チェック処理とデータパケットの実際の割り当てを行う。
また、対応づけ部412は、遅延αが最大のノードN7に実際に割り当てたデータパケットのシーケンス番号を、変数Vに代入する。そして、V<Qtoの場合は、図17のステップS514以降の処理が続いて行われ、V≧Qtoの場合は、続いてステップS520の処理が行われる。
例えば以上のようにして、貪欲法に基づく図16〜17の処理は、比例配分に基づく処理に変形されてもよい。
変形の第3の観点は、送信可能総帯域幅以外のリソースに関する。上記のように、送信可能総帯域幅は、責任ノードとして選択可能な子ノードを選択部411が選択する際にも参照され、対応づけ部412が責任ノードに対応づけるデータパケットを決める際にも参照される。
しかし、帯域幅はノードが使用するリソースの一例である。ノードは、そのほかにも、CPUリソースやメモリリソースを使用する。CPUリソースの量は、例えば、CPU301のクロック周波数により測られる。メモリリソースの量は、例えば、RAM302のバイト数により測られる。
例えば、使用可能な帯域幅が同じ2つの子ノードがある場合、対応づけ部412は、CPUリソースが多い方のノードに、より多くのデータパケットを対応づけてもよいし、メモリリソースが多い方のノードに、より多くのデータパケットを対応づけてもよい。対応づけ部412は、帯域幅、CPUリソース、メモリリソースなどの複数の種類のリソースの量を総合的に評価する評価値にしたがって、各責任ノードに対応づけるデータパケットの量を決めてもよい。
そのために、各ノードは、対応づけ部412が参照する各種のリソースの量について、送信可能総帯域幅と同様に、親ノードに通知してもよい。また、各ノードは、各種のリソースの量について、一時使用帯域幅と同様に、一時使用中のリソース量を管理してもよい。
つまり、受信部401は、論理ネットワークのトポロジにおいて通信装置400の子ノードを根ノードとする部分グラフに含まれるノードのリソースの合計量を示す合計リソース情報を、当該子ノードから受信してもよい。
すると、ノード情報管理部409は、受信部401が受信した合計リソース情報を、当該子ノードと対応づけて子ノード情報としてノード情報記憶部408に記憶することができる。また、ノード情報管理部409は、通信装置400自身のリソースの量と、各子ノードから受信して記憶した合計リソース情報が示す合計量との合計を、通信装置400自身についての合計リソース情報として算出することができる。その結果、送信部402は、ノード情報管理部409が算出した新たな合計リソース情報を、通信装置400の親ノードに送信することができる。送信可能総帯域幅は、上記のような合計リソース情報が表すリソースの合計量の一例である。
そして、上記のように、帯域幅に限らず、何らかのリソースについて合計リソース情報の通知が行われる場合、対応づけ部412は、ノード情報記憶部408を参照することにより、責任子ノードに対応する使用可能合計リソース情報を得ることができる。使用可能合計リソース情報の具体例は、例えば、送信可能総帯域幅から一時使用帯域幅の総和を引いた帯域幅(例えば、式(28)の帯域幅B)である。
或る1つの子ノードの使用可能合計リソース情報とは、換言すれば、当該子ノードを根ノードとする部分グラフに含まれるノードの使用可能リソースの合計量を示す情報である。そして、使用可能合計リソース情報の認識を可能とするために、対応づけ部412は、部分特定情報を責任ノードに対応づけたら、対応づけた当該部分特定情報の送信にかかる負荷に応じて消費されるリソースの量を算出する。さらに、対応づけ部412は、算出した量を示す消費リソース情報を、当該責任ノードおよび有効期限と対応づけてノード情報記憶部408に記憶する。
図9の一時使用帯域幅は、上記の消費リソース情報の具体例であり、図9の一時使用期限は上記の有効期限の具体例である。以上のように、リソースの種類によらず、帯域幅と同様の管理が可能であり、使用可能なリソースの量に応じた割り当てが可能である。
また、再送要求パケットを受信したノードの選択部411は、当該ノード自身よりも子ノードを優先的に責任ノードとして選択するが、「子ノードを優先する」という方針は、換言すれば、以下のとおりである。
すなわち、通信装置400が1つ以上の子ノードを持つ場合、選択部411は、通信装置400自身のリソースの量によらず、子ノードを通信装置400自身よりも優先して責任ノードとして選択する。たとえ通信装置400自身が使用可能なリソースの量が個々の子ノードの合計リソース量より多くても、選択部411は、責任ノードの候補としてまず先に子ノードに注目する。それにより、データパケットの配信用のリレーネットワークとして使われる論理ネットワークにおいて、より根ノードから遠い(つまり、より下流の)ノードがデータパケットの送信を行う蓋然性が高まる。
もちろん、通信装置400が子ノードを持たない場合は、選択部411は、通信装置400自身を責任ノードとして選択してもよい。
変形の第4の観点は、再送期限に関する。上記実施形態では、取得期限と完了期限のペアまたは取得期限とビットレートのペアにより、再送期限が表され、子ノードへの委譲と実際のデータパケットの送信は、再送期限に関する制約条件が満たされるように行われる。しかし、論理ネットワークの用途によっては、データパケットのペイロードは、リアルタイム性を持たないデータのこともある。リアルタイム制約のない種類のデータの配信が行われる実施形態においては、再送期限は考慮不要である。
つまり、再送要求パケット801から取得期限と完了期限が省略されてもよく、再送要求パケット802から取得期限が省略されてもよい。ただし、バースト受信の回避のためには、ビットレートのフィールドが、取得期限が省略された形の再送要求パケット802においても残され、送信ビットレートの制御に使われることが好ましい。
各ノードが再送期限を考慮しない実施形態において、選択部411は、単にすべての子ノードを責任ノードとして選択してもよい。そして、対応づけ部412は、受信部401が受信した再送要求パケットで要求されたデータパケットを、式(28)の帯域幅Bなどの使用可能合計リソース情報に応じて、単に子ノードに比例配分してもよい。
変形の第5の観点は、遅延αの推定に関する。第4の観点で示した例とは逆に、図16〜17や図20〜21のように再送期限が考慮される場合は、遅延αが利用される。そして、遅延αは、上記(Q−1)〜(Q−4)を含み、上記のとおり、(Q−4)の時間の長さは、適宜の近似モデルにしたがって見積もられる。
しかし、(Q−4)の時間の長さは、論理ネットワーク100のトポロジが変化せずに同じ要求ノードからの再送要求が2回以上生じる場合は、2回目以降の再送では、実測値に基づく見積もりが可能である。つまり、2回目以降の再送では、1回目と同じく近似モデルによって(Q−4)の時間が見積もられてもよいが、実測値に基づいて(Q−4)の時間が見積もられてもよい。
実測値に基づく(Q−4)の時間の見積もりは、再送要求パケットを親ノードから受信した子ノードが、当該子ノード自身と要求ノードとの間のRTTを計測し、計測結果を記憶するとともに親ノードに通知することにより、可能となる。
例えば、図1のようにノードN5がノードN3に再送要求を送信することが複数回繰り返されたと仮定する。そして、1回目の再送要求が、図1に示すように転送されたとする。
すると、親ノードN3から再送要求を受信したノードN6は、任意のタイミングで(例えば、ネットワーク負荷の低いときなどに)、ノードN6自身と、再送要求に指定された要求ノードN5との間のRTTを計測する。そして、ノードN6は、計測結果をノード情報記憶部408に記憶するとともに、親ノードN3に通知する。
同様に、ノードN7は、ノードN7とノードN5の間のRTTを計測し、計測結果を記憶するとともに親ノードN3に通知する。また、ノードN8は、ノードN8とノードN5の間のRTTを計測し、計測結果を記憶するとともに親ノードN3に通知する。
さらに同様に、ノードN12は、ノードN12とノードN5の間のRTTを計測し、計測結果を記憶するとともに親ノードN6に通知する。また、ノードN13は、ノードN13とノードN5の間のRTTを計測し、計測結果を記憶するとともに親ノードN6に通知する。
また、親ノードではないノードN5から再送要求を受信したノードN3は、任意のタイミングで(例えば、ネットワーク負荷の低いときなどに)、ノードN3自身と、再送要求の送信元の要求ノードN5との間のRTTを計測する。そして、ノードN3は、計測結果をノード情報記憶部408に記憶する。
すると、ノードN5が再びノードN3に再送要求を送信した場合、ノードN3は、子ノードN6に関する(Q−4)の遅延(つまり、D6,5−D3,5)を、子ノードN6から通知されたRTT6,5とノードN3自身が計測したRTT3,5から計算することができる。同様に、ノードN3は、子ノードN7に関する(Q−4)の遅延も、実測されたRTTから計算することができ、子ノードN8に関する(Q−4)の遅延も、実測されたRTTから計算することができる。
さらに、ノードN5からの2回目の再送要求に応じて、ノードN3がノードN6を責任ノードとして選択したと仮定する。すると、ノードN6は、ノードN3から再送要求パケットを受信する。この場合、ノードN6は、子ノードN12に関する(Q−4)の遅延(つまり、D12,5−D6,5)を、子ノードN12から通知されたRTT12,5とノードN6自身が計測したRTT6,5から計算することができる。同様に、ノードN6は、子ノードN13に関する(Q−4)の遅延も、実測されたRTTから計算することができる。
このように、2回目以降の再送では、実測値に基づいて(Q−4)の時間が見積もられてもよい。その結果、遅延αがより正確に見積もられ、より適切な割り当てが実現される。
変形の第6の観点は、ノード間の同期と期限の表現に関する。実施形態に応じて、論理ネットワークは、同期系のこともあるし非同期系のこともある。つまり、論理ネットワーク内のノードがそれぞれ内蔵する時計がすべて同期されていることもあるし、時計が同期されていないこともある。
例えば、論理ネットワーク100内の各ノードを実現する通信装置400が、いずれもSTB(Set Top Box)の場合、論理ネットワーク100は同期系である。なぜなら、テレビ放送電波には時刻同期信号が含まれるからである。
また、データ配信アプリケーションプログラムが、NTP(Network Time Protocol)などによる時刻同期処理のプログラムコードを含むこともあり得る。この場合、当該データ配信アプリケーションプログラムにしたがって動作して論理ネットワーク100を構成する全ノードの時計は、同期される。
逆に、データ配信アプリケーションプログラムが時刻同期処理のプログラムコードを含まないこともある。しかも、通信装置400は、例えば個人ユーザのPCなど、必ずしも標準時刻への同期がなされているとは限らない装置かもしれない。すると、論理ネットワーク100は非同期系である。
論理ネットワーク100が非同期系のとき、再送要求パケット801または802に指定される再送期限は、時間の長さにより表される。しかし、論理ネットワーク100が同期系のとき、再送要求パケット801または802に指定される再送期限は、時間の長さにより表されてもよいし、絶対時刻により表されてもよい。
なお、再送期限が絶対時刻により表される実施形態では、以下のようにいくつかのステップの処理が変形される。
まず、図14のステップS404で再送要求部407は、式(7)と(8)の代わりに、式(47)と(48)にしたがって取得期限Tstartと完了期限Tendを計算する。式(47)と(48)における「Now」は、ステップS404が実行される時点の現在時刻である。
Tstart=Now+Lstart-RTT/2 (47)
Tend=Now+Lend-RTT/2 (48)
なお、式(7)と(8)ではRTTが減算されるのに対し、式(47)と(48)ではRTT/2が減算される。この違いの理由は、例えば図18から明らかである。
つまり、取得期限Tstartが時間の長さで表される場合、図18の値Taのように、図18の太い矢印の長さが取得期限Tstartとして設定される。それに対し、取得期限Tstartが絶対時刻で表される場合、取得期限Tstartは、図18の太い矢印の下端の位置に相当する。したがって、図18からも明らかなように、取得期限Tstartが絶対時刻で表される場合、取得期限Tstartは、式(47)により得られる。
また、図16のステップS505で選択部411は、式(9)が満たされるか否かではなく、式(49)が満たされるか否かを判断する。式(49)における「Now」は、ステップS505が実行される時点の現在時刻である。
Tstart+(Tend-Tstart)×(U-Qfrom)/(Qto-Qfrom+1)-α > Now (49)
そして、図16のステップS506で選択部411は、式(28)と(29)をともに満たす最大の番号Vの代わりに、式(50)と(29)をともに満たす最大の番号Vを計算する。式(50)における「Now」は、ステップS506が実行される時点の現在時刻である。
Now+α+(V-U+1)×pSize/B+β <
Tend-(Tend-Tstart)×(Qto-V)/(Qto-Qfrom+1) (50)
また、図17のステップS514で選択部411は、式(35)が満たされるか否かではなく、式(51)が満たされるか否かを判断する。式(51)における「Now」は、ステップS514が実行される時点の現在時刻である。
Tstart+(Tend-Tstart)×(U-Qfrom)/(Qto-Qfrom+1)-Iself > Now (51)
そして、ステップS515で選択部411は、式(36)と(37)をともに満たす最大の番号Vではなく、式(52)と(37)をともに満たす最大の番号Vを計算する。式(52)における「Now」は、ステップS515が実行される時点の現在時刻である。
Now+Iself+(V-U+1)×pSize/Bself <
Tend-(Tend-Tstart)×(Qto-V)/(Qto-Qfrom+1) (52)
また、図20のステップS602で選択部411は、式(10)が成り立つ子ノードの集合の代わりに、式(53)が成り立つ子ノードの集合を求める。式(53)の「Now」は、ステップS602が実行される時点の現在時刻である。
Tstart-α > Now (49)
以上説明したように、再送要求パケット801または802に指定される期限は、時間の長さにより表現されていてもよいし、絶対時刻により表現されていてもよい。いずれにしろ、受信部401が受信した再送要求が、期限に関する制約条件を指定する期限情報を含む場合に、もし選択部411が通信装置400自身を責任ノードとして選択したら、通信装置400は制約条件を満たすタイミングでデータパケットを送信する。
例えば、再送要求パケット801に指定される取得期限Tstartと完了期限Tendのペアは、制約条件を指定する期限情報の一例である。また、再送要求パケット802に指定される取得期限TstartとビットレートBreqも、期限情報の一例である。
なお、再送要求パケット801または802に指定される取得期限Tstartは、直接的には、再送要求パケット801または802が要求する1つまたは複数のデータパケットのうち最初の1つの取得期限を示す。しかし、再送要求パケット801または802に指定される取得期限Tstartは、間接的には、再送要求パケット801または802が要求する2番目以降の各データパケットそれぞれの取得期限についての制約条件を指定している。
ところで、再送期限が絶対時刻で表現される場合にも、図16のステップS508と図21のステップS615は変更不要である。換言すれば、責任子ノード宛の新たな再送要求に設定する新たな制約条件を指定する新たな期限情報は、再送期限の表現形式によらず、同じ方法で算出される。
具体的には、要求生成部413は、少なくとも、受信部401が受信した再送要求に含まれる期限情報と、通信装置400と責任子ノードとの間の通信にかかる遅延時間を用いて、新たな期限情報を算出する。受信部401が受信した再送要求に含まれる期限情報の例は、例えば取得期限Tstartである。また、通信装置400と責任子ノードとの間の通信にかかる遅延時間は、具体的には、遅延αに含まれる(Q−2)の通信遅延である。もちろん、要求生成部413は、上記実施形態のように、さらに内部遅延なども用いて、新たな期限情報を算出してもよい。
変形の第7の観点は、管理サーバ204の有無に関する。上記実施形態の再送制御は、図3の管理サーバ204を含むハイブリッドP2Pシステムだけでなく、管理サーバ204を持たないピュアP2Pシステムにも適用可能である。ピュアP2Pシステムにおいては、新たに論理ネットワークに参加しようとする新規ノードは、参加要求パケットをフラッディングすることにより親ノードの候補を探してもよい。
あるいは、新規ノードは、配信サーバ203に参加要求パケットを送信してもよい。配信サーバ203を含む論理ネットワーク内の既存のノードは、参加要求パケットを受信した場合、子ノードのいずれか1つを選んで、選んだ子ノードに参加要求パケットを転送してもよい。あるいは、参加要求パケットを受信した既存のノードは、新規ノードの親ノードとして当該既存のノード自身を新規ノードに通知してもよい。
また、再送要求先を問い合わせる問い合わせパケットの送信先は、ハイブリッドP2Pシステムでは上記のように管理サーバ204であってもよいが、ピュアP2Pシステムの場合は、親ノードであってもよい。もちろん、ハイブリッドP2Pシステムにおいても、問い合わせパケットの送信先が親ノードであってもよい。
例えば、図2のようなトポロジの論理ネットワーク100において、ノードN8は、親ノードN3に再送要求先を問い合わせてもよい。問い合わせパケットの転送が過度に繰り返されてネットワークに過度の負荷が生じるの防ぐため、問い合わせパケットには、TTL(Time To Live)が設定されていてもよい。
例えば、ノードN8が、TTLの値を4に設定した問い合わせパケットを親ノードN3に送信するものとする。
問い合わせパケットを受信したノード(以下「受信ノード」という)は、TTLの値によらず受信ノード自身を再送要求先としてノードN8に通知してもよい。TTLの値が2以上の場合、受信ノードは、受信ノードの親ノードと子ノードのうち、問い合わせパケットの送信元以外のノードのいずれか1つを適宜選び、TTLの値を1だけ減らして、選んだノードに問い合わせパケットを転送してもよい。TTLの値が1の場合、受信ノードは、受信ノード自身を再送要求先としてノードN8に通知する。
なお、問い合わせパケットの転送先の選択の仕方は任意である。例えば、ランダムな選択が行われてもよい。
すると、ノードN8が、TTLの値を4に設定して問い合わせパケットを親ノードN3に送信した場合、問い合わせパケットは、例えば、ノードN3、ノードN1、ノードN2、ノードN5と順に転送され、ノードN5がノードN8の再送要求先になるかもしれない。あるいは、問い合わせパケットは、例えば、ノードN3、ノードN6、ノードN12と順に転送され、ノードN12がノードN8の再送要求先になるかもしれない。
また、問い合わせパケットの転送先の選択において、転送先の候補から親ノードが除外されてもよいし、親ノードよりも子ノードが優先的に選択されてもよい。すると、結果的に、「根ノードからより遠いノードが再送要求先として選ばれる」ということの蓋然性が高まる。その結果、再送を子孫ノードに委譲する上記メカニズムとあわせて、「論理ネットワーク内での負荷が比較的低いノードが、実際に再送処理を行う」ということの蓋然性がさらに高まり、論理ネットワーク内の負荷分散がさらに進む。
変形の第8の観点は、追加的なエラー処理に関する。上記では説明を省略したが、場合によっては、再送要求を受信した通信装置400が、要求されたデータパケットをバッファ部403に保持していないことがあり得る。よって、図16〜17の処理および図20〜21の処理は、要求されたデータパケットがバッファ部403にない場合はエラーを返すように変形されてもよい。
例えば、図2のノードN2のように根ノードからの距離が短いノードが、パケットロスを検出し、再送要求が論理ネットワーク100内を次々に転送されていき、ノードN13のように根ノードからの距離が長いノードが再送要求を受信することがあり得る。この場合、ノードN13は、再送要求を受信した時点では、要求されたデータパケットをまだ受信していないことがあり得る。
あるいは、例えば図2のノードN2が、シーケンス番号が310番から320番のデータパケットの再送をノードN3に要求し、ノードN3が、ノードN8を責任ノードとして選択するとともにノードN8に315番から320番のデータパケットを割り当てたとする。この場合、ノードN8でも偶然に、315番から320番のデータパケットの一部または全部が消失していることがあり得る。
よって、再送をより確実に保証するために、図16〜17の処理および図20〜21の処理は、例えば次のように変形されてもよい。すなわち、ステップS501の前とステップS601の前に、負荷分散処理部410が以下の処理を行ってもよい。
負荷分散処理部410は、バッファ部403を参照して、「受信部401が受信した再送要求パケット801または802で要求されたすべてのデータパケットを、バッファ部403が保持しているか否か」を判断する。もし、要求されたすべてのデータパケットをバッファ部403が保持していれば、負荷分散処理部410は、ステップS501またはS601以降の処理を開始する。逆に、要求されたデータパケットのうちバッファ部403に保持されていないデータパケットがあれば、負荷分散処理部410は、再送要求パケット801または802の送信元ノードに対して、エラーパケットを返信する。
変形の第9の観点は、使用可能な帯域幅の動的な変化の管理に関する。再送をより確実に保証するために、各ノードは、親ノード以外のノードから再送要求を受けたときに、親ノードに送信可能総帯域幅の変化を通知してもよい。
換言すれば、各ノードは、親ノード以外のノードからの再送要求に応える結果として、使用可能な帯域幅が一時的に変化するときに、親のノードに送信可能総帯域幅の変化を通知してもよい。当該通知により、論理ネットワーク内で再送要求が多発して複数の再送要求に関する処理が同時に発生するような状況においても、適切な割り当てが可能となる。
例えば、図1の例において、ノードN5からの再送要求とは独立して、エッジE4,10上でのパケットロスが原因で、ノードN10が再送要求をノードN7に送信するかもしれない。そして、ノードN7の送信可能帯域幅は、ノードN5への再送とノードN10への再送によってそれぞれ消費される帯域幅の合計よりも狭いかもしれない。
そこで、例えば、ノードN7がステップS31よりも前にノードN10から再送要求を受信した場合は、ノードN7は、ノードN10への再送にともなって一時的に送信可能総帯域幅が減少することを、親ノードN3に通知してもよい。具体的には、ノードN7は、ノードN10への送信の終了予定時刻までの時間と、ノードN7を根ノードとする部分グラフに属するノード(具体的にはノードN7のみ)がノードN10への送信のために消費する帯域幅の合計値を親ノードN3に通知してもよい。
つまり、ノードN7は、ステップS510とS517で計算した一時使用期限のうちの最大値、あるいは|C|回繰り返したステップS617で計算した一時使用期限のうちの最大値を、親ノードN3に通知してもよい。また、ノードN7は、ステップS510とS517で計算した一時使用帯域幅の総計、あるいは|C|回繰り返したステップS617で計算した一時使用帯域幅の総計を、親ノードN3に通知してもよい。
通知を受信したノードN3は、子ノード情報のノードN7のエントリに、一時使用帯域幅と一時使用期限のペアを追加する。具体的には、ノードN3は、ノードN7から通知された帯域幅を一時使用帯域幅として設定してもよい。また、ノードN3は、現在時刻にノードN7から通知された時間を足し、加算の結果得られた時刻から、ノードN7とN3の間のRTTの半分を引き、減算の結果を一時使用期限として設定してもよい。
すると、ノードN3は、ステップS20の再送要求を受信したときに、ノードN7を責任ノードから除外することもできる。あるいは、ノードN3は、ノードN7を責任ノードとして選択するにしても、ノードN7に割り当てる量を小さくすることもできる。
変形の第10の観点は、ハードウェア構成に関する。図5の通信装置400は、図4のようにプログラムを実行する汎用のコンピュータ300により実現されてもよい。しかし、実施形態によっては、通信装置400の一部または全部が、ASIC(Application Specific Integrated Circuit)などの専用のハードウェア回路により実現されてもよい。
変形の第11の観点は、IPアドレスの種類に関する。上記の説明では、説明の簡単化のため、IPアドレスとしてグローバルアドレスを例示した。しかし、端末装置205A〜205Lにプライベートアドレスが設定されている場合でも、適宜のNAT通過(Network Address Translation traversal)技術を利用することにより、上記と同様の再送制御を行うデータ配信システムを実現することが可能である。
最後に、上記の種々の実施形態に関して、さらに下記の付記を開示する。
(付記1)
コンピュータに、
前記コンピュータの属する論理ネットワークに属する要求ノードから、特定情報の送信を求める第1の要求を、前記論理ネットワークのトポロジによらず直接的に、または前記論理ネットワークの前記トポロジにおいて前記コンピュータに相当するノードに入って来るパス上の1つ以上の他のノードを介して、受信し、
前記論理ネットワークの前記トポロジにおいて前記コンピュータに相当する前記ノードから出て行くエッジにより前記コンピュータと論理的に接続された1つ以上の子ノードと、前記コンピュータの中から、前記コンピュータよりは前記1つ以上の子ノードを優先して、前記特定情報の送信に関与する1つ以上の責任ノードを選択し、
各責任ノードに前記特定情報の一部または全部である部分特定情報を対応づけ、
前記コンピュータを前記責任ノードとして選択した場合は、前記コンピュータに対応づけた部分特定情報を、前記要求ノードに送信し、
前記1つ以上の子ノードのうち前記責任ノードとして選択した責任子ノードがある場合は、前記責任子ノードに対応づけた部分特定情報を前記要求ノードに送信するよう求める第2の要求を、前記責任子ノードに送信する
ことを含む処理を実行させるプログラム。
(付記2)
各責任ノードに前記部分特定情報を対応づける処理は、前記責任子ノードが1つ以上ある場合は、各責任子ノードについて、
前記論理ネットワークの前記トポロジにおいて当該責任子ノードを根ノードとする部分グラフに含まれるノードの使用可能リソースの合計量を示す使用可能合計リソース情報を参照し、
前記特定情報のうち、前記使用可能合計リソース情報が示す量以下のリソースで送信可能な部分を、当該責任子ノードに対応づける
ことを含むことを特徴とする付記1に記載のプログラム。
(付記3)
前記プログラムが前記コンピュータに実行させる前記処理は、
各子ノードについて、
前記論理ネットワークの前記トポロジにおいて当該子ノードを根ノードとする部分グラフに含まれるノードのリソースの合計量を示す合計リソース情報を、当該子ノードから受信し、
受信した前記合計リソース情報を当該子ノードと対応づけて記憶し、
前記コンピュータのリソースの量と、各子ノードから受信して記憶した前記合計リソース情報が示す前記合計量との合計を算出し、
算出した前記合計を示す新たな合計リソース情報を、前記論理ネットワークの前記トポロジにおいて前記コンピュータに相当する前記ノードの親ノードに送信し、
前記責任子ノードが1つ以上ある場合は、各責任子ノードについて、当該責任子ノードと対応づけて記憶した前記合計リソース情報から、前記使用可能合計リソース情報を取得すること
をさらに含む、
ことを特徴とする付記2に記載のプログラム。
(付記4)
前記1つ以上の責任ノードを選択する処理は、
前記1つ以上の子ノードが存在する場合は、前記コンピュータのリソースの量によらず、前記1つ以上の子ノードを前記コンピュータよりも優先して前記1つ以上の責任ノードとして選択し、
前記1つ以上の子ノードが存在しない場合は、前記コンピュータを前記1つ以上の責任ノードとして選択する
処理であることを特徴とする付記2または3に記載のプログラム。
(付記5)
前記責任子ノードがある場合、前記プログラムが前記コンピュータに実行させる前記処理は、
前記責任子ノードに対応づけた前記部分特定情報の送信にかかる負荷に応じて消費されるリソースの量を示す消費リソース情報を、前記責任子ノードおよび有効期限と対応づけて記憶する
ことをさらに含み、
前記責任子ノードが1つ以上ある場合は、各責任ノードに前記部分特定情報を対応づける処理は、各責任子ノードについて、
当該責任子ノードと対応づけて記憶され、かつ対応づけられた前記有効期限がまだ満了していない前記消費リソース情報がある場合は、当該責任子ノードから受信した前記合計リソース情報が示す前記合計量から、当該責任子ノードと対応づけて記憶された前記消費リソース情報が示す量を減じることで、当該責任子ノードについての前記使用可能合計リソース情報を取得し、
当該責任子ノードと対応づけて記憶され、かつ対応づけられた前記有効期限がまだ満了していない前記消費リソース情報がない場合は、当該責任子ノードから受信した前記合計リソース情報を当該責任子ノードについての前記使用可能合計リソース情報として取得する
ことを含む、
ことを特徴とする付記3に記載のプログラム。
(付記6)
前記第1の要求は、期限に関する第1の制約条件を指定する第1の期限情報を含み、
前記コンピュータを前記責任ノードとして選択した場合における、前記コンピュータに対応づけた前記部分特定情報を前記要求ノードに送信する処理は、前記第1の制約条件を満たすタイミングで行われ、
前記責任子ノードがある場合、前記プログラムが前記コンピュータに実行させる前記処理は、さらに、
当該責任子ノードと前記コンピュータとの間の通信にかかる通信時間と前記第1の制約条件を用いて、期限に関する第2の制約条件を算出し、
前記第2の制約条件を指定する第2の期限情報を、当該責任子ノードに送信する前記第2の要求に含める
ことを含む、
ことを特徴とする付記1から5のいずれか1項に記載のプログラム。
(付記7)
前記第1の期限情報は、送信開始の期限に関する第1の値と送信終了の期限に関する第2の値を含み、
前記第2の期限情報は、送信開始の期限に関する第3の値と送信終了の期限に関する第4の値を含み、
前記コンピュータを前記責任ノードとして選択した場合における、前記コンピュータに対応づけた前記部分特定情報を前記要求ノードに送信する処理は、前記第1の値と前記第2の値に基づいて送信タイミングを制御することを含み、
個別の責任子ノードに対応してそれぞれ前記第2の制約条件を算出する処理では、前記通信時間と、当該個別の責任子ノードに前記特定情報のうちどの部分を前記部分特定情報として対応づけたかということが、前記第3の値と前記第4の値の算出に用いられる、
ことを特徴とする付記6に記載のプログラム。
(付記8)
前記1つ以上の責任ノードを選択する処理は、前記第1の制約条件にしたがって、前記1つ以上の子ノードの中から前記責任ノードの候補を絞り込むことを含む
ことを特徴とする付記6または7に記載のプログラム。
(付記9)
前記第1の要求は、第1のビットレートを指定する第1のビットレート情報を含み、
前記プログラムが前記コンピュータに実行させる前記処理は、各責任ノードに第1のビットレートの少なくとも一部を割り当てることをさらに含み、
前記コンピュータを前記責任ノードとして選択した場合における、前記コンピュータに対応づけた前記部分特定情報を前記要求ノードに送信する処理は、前記コンピュータに割り当てたビットレートで行われ、
前記責任子ノードがある場合、前記プログラムが前記コンピュータに実行させる前記処理は、当該責任子ノードに割り当てた第2のビットレートを示す第2のビットレート情報を、当該責任子ノードに送信する前記第2の要求に含めることさらに含む、
ことを特徴とする付記1から8のいずれか1項に記載のプログラム。
(付記10)
前記特定情報は、前記論理ネットワーク内で配信される配信情報のうち、前記要求ノードの親ノードから前記要求ノードへのエッジにおいて消失したために前記要求ノードでは受信することのできなかった部分である、
ことを特徴とする付記1から9のいずれか1項に記載のプログラム。
(付記11)
通信装置であって、
前記通信装置の属する論理ネットワークに属する要求ノードから、特定情報の送信を求める第1の要求を、前記論理ネットワークのトポロジによらず直接的に、または前記論理ネットワークの前記トポロジにおいて前記通信装置に相当するノードに入って来るパス上の1つ以上の他のノードを介して、受信する受信手段と、
前記論理ネットワークの前記トポロジにおいて前記通信装置に相当する前記ノードから出て行くエッジにより前記通信装置と論理的に接続された1つ以上の子ノードと、前記通信装置の中から、前記通信装置よりは前記1つ以上の子ノードを優先して、前記特定情報の送信に関与する1つ以上の責任ノードを選択する選択手段と
各責任ノードに前記特定情報の一部または全部である部分特定情報を対応づける対応づけ手段と、
前記通信装置を前記選択手段が前記責任ノードとして選択した場合は、前記通信装置に対応づけた部分特定情報を、前記要求ノードに送信し、前記1つ以上の子ノードのうち前記選択手段が前記責任ノードとして選択した責任子ノードがある場合は、前記責任子ノードに対応づけた部分特定情報を前記要求ノードに送信するよう求める第2の要求を、前記責任子ノードに送信する送信手段と、
を備える通信装置。
(付記12)
通信装置が実行する方法であって、
前記通信装置の属する論理ネットワークに属する要求ノードから、特定情報の送信を求める第1の要求を、前記論理ネットワークのトポロジによらず直接的に、または前記論理ネットワークの前記トポロジにおいて前記通信装置に相当するノードに入って来るパス上の1つ以上の他のノードを介して、受信し、
前記論理ネットワークの前記トポロジにおいて前記通信装置に相当する前記ノードから出て行くエッジにより前記通信装置と論理的に接続された1つ以上の子ノードと、前記通信装置の中から、前記通信装置よりは前記1つ以上の子ノードを優先して、前記特定情報の送信に関与する1つ以上の責任ノードを選択し、
各責任ノードに前記特定情報の一部または全部である部分特定情報を対応づけ、
前記通信装置を前記責任ノードとして選択した場合は、前記通信装置に対応づけた部分特定情報を、前記要求ノードに送信し、
前記1つ以上の子ノードのうち前記責任ノードとして選択した責任子ノードがある場合は、前記責任子ノードに対応づけた部分特定情報を前記要求ノードに送信するよう求める第2の要求を、前記責任子ノードに送信する
ことを特徴とする方法。