(57)【特許請求の範囲】
【請求項１】
コンピュータに、
前記コンピュータの属する論理ネットワークに属する要求ノードから、特定情報の送信を求める第１の要求を、前記論理ネットワークのトポロジによらず直接的に、または前記論理ネットワークの前記トポロジにおいて前記コンピュータに相当するノードに入って来るパス上の１つ以上の他のノードを介して、受信し、
前記論理ネットワークの前記トポロジにおいて前記コンピュータに相当する前記ノードから出て行くエッジにより前記コンピュータと論理的に接続された１つ以上の子ノードと、前記コンピュータの中から、前記コンピュータよりは前記１つ以上の子ノードを優先して、前記特定情報の送信に関与する責任ノードを、前記第１の要求に応じた個数、選択し、
前記個数の責任ノード間での前記特定情報の配分を決めることで、各責任ノードに前記特定情報の一部または全部である部分特定情報を対応づけ、
前記コンピュータを前記責任ノードとして選択した場合は、前記コンピュータに対応づけた部分特定情報を、前記要求ノードに送信し、
前記１つ以上の子ノードのうち前記責任ノードとして選択した責任子ノードがある場合は、各責任子ノードについて、当該責任子ノードに対応づけた部分特定情報を前記要求ノードに送信するよう求める第２の要求を当該責任子ノードに送信する
ことを含む処理を実行させるプログラム。
【請求項２】
コンピュータに、
前記コンピュータの属する論理ネットワークに属する要求ノードから、特定情報の送信を求める第１の要求を、前記論理ネットワークのトポロジによらず直接的に、または前記論理ネットワークの前記トポロジにおいて前記コンピュータに相当するノードに入って来るパス上の１つ以上の他のノードを介して、受信し、
前記論理ネットワークの前記トポロジにおいて前記コンピュータに相当する前記ノードから出て行くエッジにより前記コンピュータと論理的に接続された１つ以上の子ノードと、前記コンピュータの中から、前記コンピュータよりは前記１つ以上の子ノードを優先して、前記特定情報の送信に関与する１つ以上の責任ノードを選択し、
前記１つ以上の子ノードのうち前記責任ノードとして選択した責任子ノードが１つ以上ある場合は、各責任子ノードについて、前記論理ネットワークの前記トポロジにおいて当該責任子ノードを根ノードとする部分グラフに含まれるノードの使用可能リソースの合計量を示す使用可能合計リソース情報を参照し、前記特定情報のうち、前記使用可能合計リソース情報が示す量以下のリソースで送信可能な部分を、当該責任子ノードに対応づけることで、各責任ノードに前記特定情報の一部または全部である部分特定情報を対応づけ、
前記コンピュータを前記責任ノードとして選択した場合は、前記コンピュータに対応づけた部分特定情報を、前記要求ノードに送信し、
前記１つ以上の子ノードのうち前記責任ノードとして選択した責任子ノードがある場合は、前記責任子ノードに対応づけた部分特定情報を前記要求ノードに送信するよう求める第２の要求を、前記責任子ノードに送信する
ことを含む処理を実行させるプログラム。
【請求項３】
前記プログラムが前記コンピュータに実行させる前記処理は、
各子ノードについて、
前記論理ネットワークの前記トポロジにおいて当該子ノードを根ノードとする部分グラフに含まれるノードのリソースの合計量を示す合計リソース情報を、当該子ノードから受信し、
受信した前記合計リソース情報を当該子ノードと対応づけて記憶し、
前記コンピュータのリソースの量と、各子ノードから受信して記憶した前記合計リソース情報が示す前記合計量との合計を算出し、
算出した前記合計を示す新たな合計リソース情報を、前記論理ネットワークの前記トポロジにおいて前記コンピュータに相当する前記ノードの親ノードに送信し、
前記責任子ノードが１つ以上ある場合は、各責任子ノードについて、当該責任子ノードと対応づけて記憶した前記合計リソース情報から、前記使用可能合計リソース情報を取得すること
をさらに含む、
ことを特徴とする請求項２に記載のプログラム。
【請求項４】
コンピュータに、
前記コンピュータの属する論理ネットワークに属する要求ノードから、特定情報の送信を求める第１の要求を、前記論理ネットワークのトポロジによらず直接的に、または前記論理ネットワークの前記トポロジにおいて前記コンピュータに相当するノードに入って来るパス上の１つ以上の他のノードを介して、受信し、
前記論理ネットワークの前記トポロジにおいて前記コンピュータに相当する前記ノードから出て行くエッジにより前記コンピュータと論理的に接続された１つ以上の子ノードと、前記コンピュータの中から、前記コンピュータよりは前記１つ以上の子ノードを優先して、前記特定情報の送信に関与する１つ以上の責任ノードを選択し、
各責任ノードに前記特定情報の一部または全部である部分特定情報を対応づけ、
前記コンピュータを前記責任ノードとして選択した場合は、前記コンピュータに対応づけた部分特定情報を、前記要求ノードに送信し、
前記１つ以上の子ノードのうち前記責任ノードとして選択した責任子ノードがある場合は、前記責任子ノードに対応づけた部分特定情報を前記要求ノードに送信するよう求める第２の要求を、前記責任子ノードに送信する
ことを含む処理を実行させ、
前記第１の要求は、期限に関する第１の制約条件を指定する第１の期限情報を含み、
前記コンピュータを前記責任ノードとして選択した場合における、前記コンピュータに対応づけた前記部分特定情報を前記要求ノードに送信する処理は、前記第１の制約条件を満たすタイミングで行われ、
前記責任子ノードがある場合、前記コンピュータに実行させる前記処理は、さらに、
当該責任子ノードと前記コンピュータとの間の通信にかかる通信時間と前記第１の制約条件を用いて、期限に関する第２の制約条件を算出し、
前記第２の制約条件を指定する第２の期限情報を、当該責任子ノードに送信する前記第２の要求に含める
ことを含む、
ことを特徴とするプログラム。
【請求項５】
コンピュータに、
前記コンピュータの属する論理ネットワークに属する要求ノードから、特定情報の送信を求める第１の要求を、前記論理ネットワークのトポロジによらず直接的に、または前記論理ネットワークの前記トポロジにおいて前記コンピュータに相当するノードに入って来るパス上の１つ以上の他のノードを介して、受信し、
前記論理ネットワークの前記トポロジにおいて前記コンピュータに相当する前記ノードから出て行くエッジにより前記コンピュータと論理的に接続された１つ以上の子ノードと、前記コンピュータの中から、前記コンピュータよりは前記１つ以上の子ノードを優先して、前記特定情報の送信に関与する１つ以上の責任ノードを選択し、
各責任ノードに前記特定情報の一部または全部である部分特定情報を対応づけ、
前記コンピュータを前記責任ノードとして選択した場合は、前記コンピュータに対応づけた部分特定情報を、前記要求ノードに送信し、
前記１つ以上の子ノードのうち前記責任ノードとして選択した責任子ノードがある場合は、前記責任子ノードに対応づけた部分特定情報を前記要求ノードに送信するよう求める第２の要求を、前記責任子ノードに送信する
ことを含む処理を実行させ、
前記第１の要求は、第１のビットレートを指定する第１のビットレート情報を含み、
前記コンピュータに実行させる前記処理は、各責任ノードに第１のビットレートの少なくとも一部を割り当てることをさらに含み、
前記コンピュータを前記責任ノードとして選択した場合における、前記コンピュータに対応づけた前記部分特定情報を前記要求ノードに送信する処理は、前記コンピュータに割り当てたビットレートで行われ、
前記責任子ノードがある場合、前記コンピュータに実行させる前記処理は、当該責任子ノードに割り当てた第２のビットレートを示す第２のビットレート情報を、当該責任子ノードに送信する前記第２の要求に含めることさらに含む、
ことを特徴とするプログラム。
【請求項６】
通信装置であって、
前記通信装置の属する論理ネットワークに属する要求ノードから、特定情報の送信を求める第１の要求を、前記論理ネットワークのトポロジによらず直接的に、または前記論理ネットワークの前記トポロジにおいて前記通信装置に相当するノードに入って来るパス上の１つ以上の他のノードを介して、受信する受信手段と、
前記論理ネットワークの前記トポロジにおいて前記通信装置に相当する前記ノードから出て行くエッジにより前記通信装置と論理的に接続された１つ以上の子ノードと、前記通信装置の中から、前記通信装置よりは前記１つ以上の子ノードを優先して、前記特定情報の送信に関与する責任ノードを、前記第１の要求に応じた個数、選択する選択手段と、
前記個数の責任ノード間での前記特定情報の配分を決めることで、各責任ノードに前記特定情報の一部または全部である部分特定情報を対応づける対応づけ手段と、
前記通信装置を前記選択手段が前記責任ノードとして選択した場合は、前記通信装置に対応づけた部分特定情報を、前記要求ノードに送信し、前記１つ以上の子ノードのうち前記選択手段が前記責任ノードとして選択した責任子ノードがある場合は、各責任子ノードについて、当該責任子ノードに対応づけた部分特定情報を前記要求ノードに送信するよう求める第２の要求を当該責任子ノードに送信する送信手段と、
を備える通信装置。
【請求項７】
通信装置が実行する方法であって、
前記通信装置の属する論理ネットワークに属する要求ノードから、特定情報の送信を求める第１の要求を、前記論理ネットワークのトポロジによらず直接的に、または前記論理ネットワークの前記トポロジにおいて前記通信装置に相当するノードに入って来るパス上の１つ以上の他のノードを介して、受信し、
前記論理ネットワークの前記トポロジにおいて前記通信装置に相当する前記ノードから出て行くエッジにより前記通信装置と論理的に接続された１つ以上の子ノードと、前記通信装置の中から、前記通信装置よりは前記１つ以上の子ノードを優先して、前記特定情報の送信に関与する責任ノードを、前記第１の要求に応じた個数、選択し、
前記個数の責任ノード間での前記特定情報の配分を決めることで、各責任ノードに前記特定情報の一部または全部である部分特定情報を対応づけ、
前記通信装置を前記責任ノードとして選択した場合は、前記通信装置に対応づけた部分特定情報を、前記要求ノードに送信し、
前記１つ以上の子ノードのうち前記責任ノードとして選択した責任子ノードがある場合は、各責任子ノードについて、当該責任子ノードに対応づけた部分特定情報を前記要求ノードに送信するよう求める第２の要求を当該責任子ノードに送信する
ことを特徴とする方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、通信制御技術に関する。
【背景技術】
【０００２】
ネットワーク通信に関しては、「データの消失に対していかに対処するか」、「ネットワーク内でいかにして負荷を分散させるか」などの観点から、様々な研究が行われている。例えば、データの消失に対しては、前方誤り訂正（Forward Error Correction；ＦＥＣ）と、自動再送要求（Automatic repeat-request；ＡＲＱ）が知られている。ＦＥＣは、受信に成功したデータ（具体的には、本来の送信対象のデータのうち受信に成功したデータと、予め付加された冗長データを含む）から、所定の計算により、消失したデータを回復する技術である。また、ＡＲＱは、消失したデータを再送により取得するための技術である。
【０００３】
また、ネットワーク通信は使用可能な帯域幅による制約を受ける。使用可能な帯域幅に照らして多すぎるデータが送信されると、負荷の集中、輻輳の発生、データの消失、再送のための更なるトラフィック発生、などが起こり得る。そこで、通信システムは使用可能な帯域幅を考慮に入れることが好ましい。
【０００４】
例えば、ある方法によるコンテンツの通信は、典型的には、受信側と供給側の間の使用可能帯域幅を自動的に決定することを含む。そして、決定された使用可能帯域幅に基づいて、受信側と供給側の間で通信されるべきコンテンツが選択される。次いで、コンテンツが供給側と受信側の間で通信される。使用可能帯域幅は、所定量のデータを受信側に送信することを含む少なくとも１回の繰り返しを使用して自動的に決定され得る。所定量のデータが受信側によって受信されるのに要する時間が監視され、所定量のデータとデータが受信側によって受信されるのに要する時間とに基づいて、使用可能帯域幅が算出される。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特表２００４−５１６６９３号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
ある種の論理ネットワークでは、ある種の処理により生じる負荷が、論理ネットワーク内の第１のノードでは相対的に高くなりやすく、第１のノードの子孫ノードである１つ以上の第２のノードでは相対的に低くなりやすい。そして、第１のノードが、論理ネットワーク内のいずれかのノードから情報の送信を要求された場合に、もし、第１のノード自身が要求に応えて情報を送信すると、第１のノードの負荷はますます高まる。つまり、第１のノードが送信要求に応えることにより、論理ネットワーク内の負荷の偏りが悪化する。
【０００７】
そこで本発明は、上記のような負荷の偏りの悪化を回避し、論理ネットワーク内での適切な負荷分散を実現することを目的とする。
【課題を解決するための手段】
【０００８】
一態様により提供されるプログラムがコンピュータに実行させる処理は、前記コンピュータの属する論理ネットワークに属する要求ノードから、特定情報の送信を求める第１の要求を、前記論理ネットワークのトポロジによらず直接的に、または前記論理ネットワークの前記トポロジにおいて前記コンピュータに相当するノードに入って来るパス上の１つ以上の他のノードを介して、受信することを含む。
【０００９】
前記処理はさらに、前記論理ネットワークの前記トポロジにおいて前記コンピュータに相当する前記ノードから出て行くエッジにより前記コンピュータと論理的に接続された１つ以上の子ノードと、前記コンピュータの中から、前記コンピュータよりは前記１つ以上の子ノードを優先して、前記特定情報の送信に関与する１つ以上の責任ノードを選択することを含む。また、前記処理は、各責任ノードに前記特定情報の一部または全部である部分特定情報を対応づけることを含む。
【００１０】
そして、前記処理は、前記コンピュータを前記責任ノードとして選択した場合は、前記コンピュータに対応づけた部分特定情報を、前記要求ノードに送信することを含む。また、前記処理は、前記１つ以上の子ノードのうち前記責任ノードとして選択した責任子ノードがある場合は、前記責任子ノードに対応づけた部分特定情報を前記要求ノードに送信するよう求める第２の要求を、前記責任子ノードに送信する送信することを含む。
【発明の効果】
【００１１】
論理ネットワークによっては、ある種の処理により生じる負荷が、論理ネットワーク内の第１のノードでは相対的に高くなりやすく、第１のノードの子孫ノードである１つ以上の第２のノードでは相対的に低くなりやすい。そして、１つ以上の第２のノードよりも第１のノードの方により高い負荷がかかった状況下で、ある要求ノードが第１のノードに特定情報の送信を要求することもあり得る。
【００１２】
しかし、論理ネットワーク内の各ノードが上記プログラムを実行するならば、特定情報の送信による負荷は、既存の負荷の偏りを相殺するように割り当てられる。したがって、論理ネットワーク内での適切な負荷分散が実現される。
【００１３】
すなわち、特定情報の送信を求める第１の要求を第１のノードが受信した場合、上記プログラムを実行するコンピュータである第１のノードは、第１のノード自身よりも子ノードを優先して責任ノードを選択する。そして、論理ネットワーク内の各ノードが上記プログラムを実行することにより、第１のノードよりも第１のノードの子ノードの方が、そして第１のノードの子ノードよりも第１のノードの孫ノードの方が、より優先的に、要求ノードへの特定情報の実際の送信を担うことになる。
【００１４】
その結果、他の処理による負荷が相対的に高くなりやすい祖先ノードよりも、他の処理による負荷が相対的に低くなりやすい子孫ノードの方に、より優先的に、特定情報の送信による負荷がかかることになる。つまり、上記プログラムによれば、負荷の偏りの悪化を回避することができ、論理ネットワーク全体での適切な負荷分散が実現される。
【図面の簡単な説明】
【００１５】
【図１】負荷分散を実現するための再送制御の例を示す図である。
【図２】図１の論理ネットワークのトポロジを示す図である。
【図３】物理ネットワークの例を示す図である。
【図４】コンピュータのハードウェア構成図である。
【図５】通信装置のブロック構成図である。
【図６】管理サーバが制御パケットの受信を契機として実行する処理のフローチャートである。
【図７】管理サーバが保持するノード管理情報の例を示す図である。
【図８】送信可能総帯域幅の変化の検出と通知を示す図である。
【図９】ノード情報の例を示す図である。
【図１０】再送要求以外の制御パケットの受信を契機として通信装置が実行する処理のフローチャートである。
【図１１】データパケットの受信を契機として実行される処理のフローチャートである。
【図１２】再送要求パケットの例を示す図である。
【図１３】バッファリングと再送期限のモデルを示す図である。
【図１４】再送期限を算出する処理のフローチャートである。
【図１５】再送制御の具体例を模式的に示す図である。
【図１６】再送要求の受信を契機として通信装置が実行する処理のフローチャート（その１）である。
【図１７】再送要求の受信を契機として通信装置が実行する処理のフローチャート（その２）である。
【図１８】取得期限に関する制約条件が満たされるか否かを第１の近似モデルによって判断する例を説明する図である。
【図１９】取得期限に関する制約条件が満たされるか否かを第２の近似モデルによって判断する例を説明する図である。
【図２０】他の実施形態において、再送要求の受信を契機として通信装置が実行する処理のフローチャート（その１）である。
【図２１】他の実施形態において、再送要求の受信を契機として通信装置が実行する処理のフローチャート（その２）である。
【図２２】ビットレートに応じて割り当てられたデータパケットの送信を例示する図である。
【図２３】メッシュ型トポロジの論理ネットワークの例を示す図である。
【発明を実施するための形態】
【００１６】
以下、実施形態について、図面を参照しながら詳細に説明する。
具体的には、まず、ピア・ツー・ピア（peer-to-peer；Ｐ２Ｐ）型のデータ配信システムにおける負荷分散に関する実施形態について、図１〜１９を参照して説明する。なお、図１は概要を説明する図であり、図２〜３はネットワークの例を示す図であり、図４〜５は装置の構成を示す図であり、図６〜１９は詳しい処理の内容と処理に使われる情報について説明する図である。
【００１７】
その後、他の実施形態および変形例について図２１〜２３を参照して順に説明する。各種の変形は適宜に組み合わせ可能である。
【００１８】
さて、図１は、負荷分散を実現するための再送制御の例を示す図である。また、図２は、図１の論理ネットワークのトポロジを示す図である。
【００１９】
本実施形態は様々なトポロジの論理ネットワークに適用可能であるが、説明の便宜上、図１〜２には、具体的に論理ネットワーク１００を例示した。図１〜２に示すように、論理ネットワーク１００は、ノードＮ１〜Ｎ１３を含むツリー型のネットワークである。また、ノードＮ１〜Ｎ１３のそれぞれは、コンピュータである。
【００２０】
論理ネットワーク１００は、具体的には、アプリケーションレイヤマルチキャスト（ＡＬＭ）における配信ツリー（distribution tree）として構築された論理ネットワークである。ＡＬＭは、オーバレイマルチキャストとも呼ばれる。つまり、論理ネットワーク１００は、オーバレイネットワークの一例である。
【００２１】
従来のクライアント・サーバ型のデータ配信システムでは、データを受信するクライアント端末装置の数が増加するにしたがい、クライアント端末装置の数に比例して配信サーバに負荷がかかる。そのため、クライアント・サーバ型の大規模なシステムでは、配信サーバを複数台設けたり、ネットワークインフラストラクチャを増強したり、といった対策が必要となり、結果として配信コストの増大を招いてしまう。
【００２２】
そこで、近年注目されているのが、Ｐ２Ｐ技術を応用したデータ配信である。図１〜２の論理ネットワーク１００は、Ｐ２Ｐ型のデータ配信システムにおける配信ツリーとして構築される。
【００２３】
Ｐ２Ｐ型のデータ配信システム（例えば、ストリーミングデータの配信システム）では、データを受信した端末装置が、受信したデータを他の端末装置に中継する。すると、データはネットワーク内でリレー配信されるので、Ｐ２Ｐ型のデータ配信システムによれば、大規模な一斉同報配信も可能である。さらに、Ｐ２Ｐ型のデータ配信システムには、「端末装置の数の増加に対して、配信サーバの配信負荷の増加は、比較的緩やかであるか、または、ほとんど増加しない」という大きな利点がある。
【００２４】
そして、Ｐ２Ｐ型のデータ配信システムには様々なタイプのものがあるが、いずれも、「物理ネットワークではなく、端末装置間（つまりピア間）のリンクで形成される論理ネットワーク上でのデータ配信が行われる」という点が共通である。本実施形態は、Ｐ２Ｐ型のデータ配信システムにおける再送制御に好適である。
【００２５】
図１〜２に示すように、論理ネットワーク１００のトポロジは、グラフ（より具体的には非循環有向グラフ（Directed Acyclic Graph；ＤＡＧ））として表すことができる。論理ネットワーク１００のトポロジを示すグラフにおける各エッジの方向は、コンテンツが配信される方向を示す。
【００２６】
具体的には、論理ネットワーク１００は以下の（Ａ−１）〜（Ａ−１２）のとおり１２本のエッジを含む。各エッジは、換言すれば、隣接する２つのノード間を論理的に接続する通信リンクである。
（Ａ−１）ノードＮ１からノードＮ２へのエッジＥ１，２
（Ａ−２）ノードＮ１からノードＮ３へのエッジＥ１，３
（Ａ−３）ノードＮ２からノードＮ４へのエッジＥ２，４
（Ａ−４）ノードＮ２からノードＮ５へのエッジＥ２，５
（Ａ−５）ノードＮ３からノードＮ６へのエッジＥ３，６
（Ａ−６）ノードＮ３からノードＮ７へのエッジＥ３，７
（Ａ−７）ノードＮ３からノードＮ８へのエッジＥ３，８
（Ａ−８）ノードＮ４からノードＮ９へのエッジＥ４，９
（Ａ−９）ノードＮ４からノードＮ１０へのエッジＥ４，１０
（Ａ−１０）ノードＮ４からノードＮ１１へのエッジＥ４，１１
（Ａ−１１）ノードＮ６からノードＮ１２へのエッジＥ６，１２
（Ａ−１２）ノードＮ６からノードＮ１３へのエッジＥ６，１３
【００２７】
上記（Ａ−１）〜（Ａ−１２）から明らかなように、入次数が０のノードＮ１は、配信ツリーの根ノードである。また、出次数が０のノードＮ５、Ｎ７〜Ｎ１３は葉ノードである。他のノードＮ２〜Ｎ４、Ｎ６は、根ノードでも葉ノードでもないノード（以下「中継ノード」という）である。
【００２８】
論理ネットワーク１００上では、データ（例えばストリーミングデータ）の配信が行われる。しかしながら、ネットワークの状態によっては、データの一部が消失することがある。例えば、物理ネットワークにおける輻輳やルータの故障などが原因で、一部のパケットが消失することがある。
【００２９】
そして、Ｐ２Ｐ型のデータ配信システムでは、トランスポート層のプロトコルとして、ＴＣＰ（Transmission Control Protocol）よりもＵＤＰ（User Datagram Protocol）が使われることの方が多い。なぜなら、ＵＤＰは高速性に優れているので、リアルタイム性が重視される映像や音声などのストリーミングに適しているからである。逆に言えば、ＵＤＰは、ＴＣＰと比べてプロトコルオーバヘッドが小さいが、その代わり、ＴＣＰのような誤り訂正機能を持たない。
【００３０】
そこで、ＵＤＰが使われる場合は、トランスポート層プロトコル以外のメカニズムによって、誤り訂正（具体的には消失したパケットの回復）のための対策が提供される。対策の具体例は、上述のＦＥＣとＡＲＱである。しかし、以下の理由から、たとえＦＥＣが使われる場合であっても、実用的なシステムにおいてはＡＲＱが併用される。
【００３１】
配信されるデータには誤り訂正用の冗長な情報（例えばＦＥＣパケット）が追加されてもよく、冗長な情報を用いた誤り訂正（すなわち、消失したパケットの回復）が行われてもよい。しかし、ＦＥＣパケットにより誤り訂正可能なパケットロス率には、ＦＥＣパケットが挿入される割合に応じた上限がある。
【００３２】
よって、パケットロス率が高いとき、たとえＦＥＣパケットが使われていたとしても、消失したパケットの一部が回復不能なことがある。すると、消失したデータを取得するには、データの再送が必要である。したがって、多くの実用的なシステムにおいてはＡＲＱが採用される。
【００３３】
以下では説明の簡単化のため、ＦＥＣに関する処理については説明を省略し、単に「データが消失した場合に再送が要求される」ものとして説明する。しかしもちろん、ＦＥＣが利用される実施形態も可能である。つまり、再送が要求される契機が、データの消失であろうと、「ＦＥＣによっても回復することのできなかったデータがある」という状況の検出であろうと、本実施形態による再送制御は適用可能である。
【００３４】
図１には、本実施形態による再送制御の概略も示されている。図１において、細い実線の矢印は正常なデータ配信を示し、１点鎖線の矢印は再送要求を示し、太い実線の矢印は再送要求に応じて行われるデータ送信を示す。
【００３５】
例えば、ノードＮ１がノードＮ２とＮ３にデータを送信し、ノードＮ２がノードＮ４とＮ５にデータを送信する。しかし、ステップＳ１０に示すように、輻輳の発生など何らかの原因によって、データの少なくとも一部がノードＮ２からノードＮ５へのエッジＥ２，５上で消失することがある。ノードＮ５は、例えばシーケンス番号を手がかりにして、データの消失を検出し、かつ、データのどの部分が消失したのか（すなわち、一連のデータパケットのうち何番から何番のデータパケットが消失したのか）を認識することができる。
【００３６】
すると、ステップＳ２０でノードＮ５は、消失したデータの送信を要求する。詳しくは後述するが、ノードＮ５がどのノードに送信を要求するかは、実施形態に応じて任意である。図１の例では、ノードＮ５は、ノードＮ３に送信を要求する。
【００３７】
以下では、送信が要求される対象の情報を「特定情報」ともいう。特定情報は、具体的には、上述のとおり、論理ネットワーク１００内で配信される配信情報のうち、エッジＥ２，５において消失した部分である。また、特定情報の送信を要求するノード（図１の例ではノードＮ５）を「要求ノード」ともいう。
【００３８】
上記のようにしてステップＳ２０でノードＮ５から送信された要求は、ノードＮ３において受信される。ここで、ノードＮ３にとって、ノードＮ５は、論理ネットワーク１００のトポロジにおいてノードＮ３自身とエッジで接続された隣接ノードではない。つまり、特定情報の送信を求める要求は、論理ネットワーク１００のトポロジによらず、直接的に、隣接ノード以外のノードから受信されることがある。
【００３９】
特定情報の送信を求める要求を受信したノードＮ３は、次に、特定情報の送信に関与する１つ以上のノード（以下、「責任ノード」（responsible node）という）を選択する。なお、ノードＮ３は、ノードＮ３の子ノードとノードＮ３自身の中から、ノードＮ３自身よりは子ノードを優先して、１つ以上の責任ノードを選択する。
【００４０】
各責任ノードは、実際に特定情報の一部または全部を送信することにより、特定情報の送信に関与することもある。また、各責任ノードは、当該責任ノードの子ノードに特定情報の一部または全部の送信を要求することにより、特定情報の送信に関与することもある。選択された上記１つ以上の責任ノードがそれぞれ特定情報の送信に関与することで、特定情報全体の送信が保証される。よって、ある観点から言えば、個々の責任ノードは、「特定情報の送信を保証するために選択されるノード」でもある。
【００４１】
論理ネットワーク１００のトポロジを示す有向グラフにおいて、あるノードＮｊから他のノードＮｋへのエッジＥｊ，ｋが存在するとき、ノードＮｋはノードＮｊの子ノードであり、ノードＮｊはノードＮｋの親ノードである。図１の例では、ノードＮ３は、３つの子ノードＮ６〜Ｎ８を持つ。
【００４２】
よって、ノードＮ３は、ノードＮ３自身よりは、子ノードＮ６〜Ｎ８を優先的に責任ノードとして選択する。つまり、ノードＮ３は、まず先に、子ノードＮ６〜Ｎ８を責任ノードとして選択する。その後、ノードＮ３は、責任ノードとして選択した子ノードだけで特定情報全体の送信を保証するのに十分か否かを判断する。そして、もし「不十分」という判断結果が得られた場合は、ノードＮ３は、ノードＮ３自身を責任ノードとして選択する。
【００４３】
なお、特定情報の量などの状況に応じて、ノードＮ３は、子ノードＮ６〜Ｎ８の一部のみ（例えばノードＮ６のみ）を責任ノードとして選択することもある。逆に、状況に応じて、ノードＮ３は、すべての子ノードＮ６〜Ｎ８に加えてさらにノードＮ３自身をも責任ノードとして選択することもある。
【００４４】
また、詳しくは後述するが、ノードＮ３は、責任ノードの選択にあたって、ある種の制約条件を考慮に入れてもよい。制約条件によっては、ノードＮ３は、結果的に、例えば、子ノードの一部とノードＮ３自身を責任ノードとして選択することもある。
【００４５】
例えば、ノードＮ３は、まず先に、子ノードＮ６〜Ｎ８が責任ノードとして選択可能か否かを制約条件に基づいて判断し、選択可能な子ノードを実際に責任ノードとして選択する。その後、ノードＮ３は、責任ノードとして選択した子ノードだけで特定情報全体の送信を保証するのに十分か否かを判断する。もし、責任ノードとして選択された子ノードだけでは特定情報全体の送信を保証するのに不十分であれば、ノードＮ３は、さらにノードＮ３を責任ノードとして選択してもよい。
【００４６】
例えば、特定情報の量が多い場合、制約条件が厳しい場合、子ノードが存在しない場合、子ノードは存在するが少数である場合などに、要求を受けたノードが当該ノード自身を責任ノードとして選択することがある。
【００４７】
図１には、ノードＮ３が責任ノードとして３つの子ノードＮ６〜Ｎ８を選択した場合が例示されている。なお、以下では、責任ノードとして選択された子ノードを「責任子ノード」ともいう。
【００４８】
ノードＮ３は、責任ノードを選択するだけでなく、各責任ノードに、特定情報の一部または全部である部分特定情報を対応づける。つまり、ノードＮ３は、１つ以上の責任ノードに部分特定情報をそれぞれ割り当てる。
【００４９】
例えば、特定情報が、具体的にはシーケンス番号が２０１番から２２０番の２０個のパケットであるとする。ノードＮ３は、例えば、ノードＮ６にはシーケンス番号が２０１番から２１０番の１０個のパケットを部分特定情報として対応づけてもよい。つまり、ノードＮ３は、１０個のパケットを要求ノードＮ５へ送信することをノードＮ６に保証させてもよい。同様に、ノードＮ３は、ノードＮ７にはシーケンス番号が２１１番から２１５番の５個のパケットを部分特定情報として対応づけ、ノードＮ８にはシーケンス番号が２１６番から２２０番の５個のパケットを部分特定情報として対応づけてもよい。
【００５０】
そして、ノードＮ３は、責任子ノードがある場合は、当該責任子ノードに対応づけた部分特定情報を要求ノードＮ５に送信するよう求める要求を、当該責任子ノードに送信する。
【００５１】
つまり、ステップＳ３０でノードＮ３は、特定情報のうちでノードＮ６に対応づけられた部分特定情報（例えば、上記の例ではシーケンス番号が２０１番から２１０番の１０個のパケット）をノードＮ５に送信するよう求める要求を、ノードＮ６に送信する。
【００５２】
同様に、ステップＳ３１でノードＮ３は、特定情報のうちでノードＮ７に対応づけられた部分特定情報（例えば、上記の例ではシーケンス番号が２１１番から２１５番の５個のパケット）をノードＮ５に送信するよう求める要求を、ノードＮ７に送信する。
【００５３】
さらに、ステップＳ３２でノードＮ３は、特定情報のうちでノードＮ８に対応づけられた部分特定情報（例えば、上記の例ではシーケンス番号が２１６番から２２０番の５個のパケット）をノードＮ５に送信するよう求める要求を、ノードＮ８に送信する。
【００５４】
換言すれば、ノードＮ３は、要求ノードＮ５から受信した要求を、要求の内容の一部（具体的には、ノードＮ５に送信する対象の指示）を書き換えつつ、子ノードＮ６〜Ｎ８に転送する。なお、ステップＳ３０〜Ｓ３２の実行順は任意に入れ替え可能である。
【００５５】
すると、ノードＮ６〜Ｎ８はそれぞれ要求を受信し、要求の受信に応じてノードＮ３と類似の動作をする。具体的には、次のとおりである。
ノードＮ６にとっては、ノードＮ５への送信が要求される対象の「特定情報」とは、ノードＮ３から指定された情報である。例えば、上記の例では、ノードＮ３にとっての特定情報はシーケンス番号が２０１番から２２０番の２０個のパケットであるが、ノードＮ６にとっての特定情報は、そのうちシーケンス番号が２０１番から２１０番の１０個のパケットである。
【００５６】
また、ノードＮ６は、ノードＮ３のように論理ネットワーク１００のトポロジとは関係なく要求ノードＮ５から直接的に要求を受信するのではない。ノードＮ６は、論理ネットワーク１００のトポロジにおいてノードＮ６に入ってくる（incoming）パス上の１つ以上の他のノードを介して、要求ノードＮ５からの要求を受信する。具体的には、ノードＮ６は、ノードＮ３からノードＮ６へ至るパス（すなわち、エッジＥ３，６のみからなるパス）上の、ノードＮ３を介して、要求ノードＮ５からの要求を受信する。
【００５７】
しかし、要求の直接の送信元がどのノードであれ、要求を受信したノードは、いずれもノードＮ３と同様にして責任ノードを選択する。例えば、図１の例では、ノードＮ６は２つの子ノードＮ１２とＮ１３を持つ。よって、ノードＮ６は、ノードＮ６自身よりも子ノードＮ１２とＮ１３を優先して、責任ノードを選択する。その結果、例えば、ノードＮ１２とＮ１３の双方が責任ノードとして選択される。
【００５８】
また、ノードＮ６は、各責任ノードに特定情報の一部または全部である部分特定情報を対応づける。例えば、上記のようにノードＮ６にとっての特定情報が、シーケンス番号が２０１番から２１０番の１０個のパケットであるとする。この場合、ノードＮ６は、シーケンス番号が２０１番から２０４番の４個のパケットを部分特定情報としてノードＮ１２に対応づけ、シーケンス番号が２０５番から２１０番の６個のパケットを部分特定情報としてノードＮ１３に対応づけてもよい。
【００５９】
そして、ステップＳ３３でノードＮ６は、特定情報のうちでノードＮ１２に対応づけられた部分特定情報をノードＮ５に送信するよう求める要求を、ノードＮ１２に送信する。同様に、ステップＳ３４でノードＮ６は、特定情報のうちでノードＮ１３に対応づけられた部分特定情報をノードＮ５に送信するよう求める要求を、ノードＮ１３に送信する。なお、ステップＳ３３とＳ３４の実行順序は入れ替え可能である。
【００６０】
ところで、上記ステップＳ３１でノードＮ３から要求を受信したノードＮ７は、ノードＮ３と同様にして責任ノードを選択する。しかしながら、ノードＮ３は子ノードを持つのに対して、ノードＮ７は子ノードを持たない。つまり、ノードＮ７自身よりも優先的に責任ノードとして選ばれるノードが存在しないので、結果的にノードＮ７は、ノードＮ７自身を唯一の責任ノードとして選択する。
【００６１】
したがって、ノードＮ７は結果的に、ノードＮ７にとっての特定情報（上記の例ではシーケンス番号が２１１番から２１５番の５個のパケット）のすべてを、部分特定情報として、責任ノードであるノードＮ７自身に対応づける。ノードＮ７のように、自分自身を責任ノードとして選択したノードは、特定情報のうちで自分自身に対応づけた部分特定情報を要求ノードに送信する。つまり、ステップＳ４１でノードＮ７は、特定情報をノードＮ５に送信する。
【００６２】
なお、上記のように論理ネットワーク１００はＡＬＭの配信ツリーとして構築されるオーバレイネットワークである。よって、ノードＮ７にも配信情報が配信される。つまり、ノードＮ３によってノードＮ７に割り当てられた特定情報は、ノードＮ７に配信されて記憶される配信情報の一部である。したがって、ノードＮ７は、ノードＮ３によってノードＮ７に割り当てられた特定情報を、ノードＮ７が備える記憶装置から読み出してノードＮ５に送信することができる。
【００６３】
同様に、ステップＳ４２ではノードＮ８が、ノードＮ８にとっての特定情報（上記の例ではシーケンス番号が２１６番から２２０番の５個のパケット）をノードＮ５に送信する。なお、ステップＳ４１とＳ４２は、並行して実行され得る。また、ステップＳ４１およびＳ４２は、ステップＳ３３およびＳ３４と並行して実行され得る。
【００６４】
さらに、ノードＮ７やＮ８と同様に葉ノードであるノードＮ１２も、ステップＳ４３において同様に、ノードＮ１２にとっての特定情報（上記の例ではシーケンス番号が２０１番から２０４番の４個のパケット）をノードＮ５に送信する。また、ノードＮ１３も、ステップＳ４４において同様に、ノードＮ１３にとっての特定情報（上記の例ではシーケンス番号が２０５番から２１０番の６個のパケット）をノードＮ５に送信する。
【００６５】
なお、ステップＳ４３およびＳ４４は、並行して実行され得る。また、ステップＳ４３およびＳ４４は、ステップＳ４１およびＳ４２と並行して実行され得る。
【００６６】
以上のようにして、要求ノードＮ５は、送信を要求した特定情報を受信することができる。なお、図１の例では、要求ノードは、複数のノードから、送信を要求した特定情報の一部分ずつを受信する。しかし、論理ネットワークのトポロジや特定情報の量などの状況によっては、要求ノードは、送信を要求した特定情報の全部を１つのノードから受信することもあり得る。
【００６７】
また、以上のような再送制御は、論理ネットワーク１００内の負荷の偏りの悪化を防ぐことができ、適切な負荷分散を実現することができる。理由は以下のとおりである。
ＡＬＭの配信ツリーとして構築される論理ネットワーク１００においては、根ノードは配信情報（例えばストリーミングデータ）を生成または取得し、配信情報を配信する。また、中継ノードは、配信情報を受信して再生するのみならず、配信情報を転送する。他方、葉ノードは、単に配信情報を受信して再生するだけである。したがって、一般に、根ノードや中継ノードよりも、葉ノードの負荷が低い。
【００６８】
また、中継ノード間で比較した場合でも、ＡＬＭの配信ツリーの構築アルゴリズムによっては、根ノードに近い中継ノードは、根ノードから遠い中継ノードよりも負荷が高いことがある。なお、以下の説明において、根ノードからの距離は、根ノードからのパスの長さ（つまりパスに含まれるエッジの数）である。
【００６９】
例えば、ある種の構築アルゴリズムでは、リレー遅延を少なくするために、配信ツリーに新規に参加（join）しようとする新規ノードの親ノードとして、根ノードに近いノードほど、より優先的に選ばれる。その結果、構築された配信ツリーでは、中継ノード同士を比較すると、根ノードに近い中継ノードほど多くの子ノードを持つ傾向がある。
【００７０】
そして、多くの子ノードを持つ中継ノードほど、配信情報の転送にかかる負荷は大きい。したがって、配信ツリーの構築アルゴリズムによっては、根ノードに近い中継ノードは、根ノードから遠い中継ノードよりも負荷が高いことがある。
【００７１】
つまり、再送以外の処理による負荷は、論理ネットワーク１００内において、根ノードと中継ノードに偏り、葉ノードの負荷は低い。また、中継ノード同士を比較すると、再送以外の処理による負荷は、配信ツリーの構築アルゴリズムによっては、根ノードに相対的に近い中継ノードに偏りがちである。
【００７２】
すると、再送処理と再送以外の処理に関する総合的な負荷が適切に分散されるようにするためには、再送処理によって生じる負荷は、再送以外の処理による負荷の偏りを相殺するように割り当てられることが望ましい。そして、図１に例示したような本実施形態による再送制御は、そのような割り当てを実現する。
【００７３】
なぜなら、要求ノードへの特定情報の送信を要求されたノードは、子ノードを持っていれば、子ノードを優先的に責任ノードとして選択するからである。そして、子ノードを優先的に責任ノードとして選択する処理が論理ネットワーク１００内で再帰的に行われることによって、次の（Ｂ−１）と（Ｂ−２）が成り立つ。
【００７４】
（Ｂ−１）根ノードや中継ノードよりも、葉ノードの方が、実際に要求ノードへの特定情報の送信を行うノードになりやすい。
（Ｂ−２）根ノードに近いノードよりも、根ノードから遠いノードの方が、実際に要求ノードへの特定情報の送信を行うノードになりやすい。
【００７５】
また、上記（Ｂ−１）と（Ｂ−２）によれば、再送以外の処理による負荷が低いノードの方が、再送以外の処理による負荷が高いノードよりも、実際に要求ノードへの特定情報の送信を行うノードになりやすい。したがって、再送処理による負荷は、再送以外の処理による負荷の偏りを相殺するように割り当てられる。
【００７６】
つまり、本実施形態による再送制御は、負荷の偏りの悪化を防ぎ、論理ネットワーク１００内で適切な負荷分散を実現することができる。また、以上のような本実施形態の利点は、次の２つの比較例と比べるとより明らかである。
【００７７】
第１の比較例では、データの消失を検出したノードは、単純に、親ノードにデータの再送を要求する。そして、再送を要求された親ノードは、他のノードに再送要求を転送することなく、自らデータを再送する。
【００７８】
つまり、第１の比較例では、再送を要求される可能性があるノードは根ノードと中継ノードのみである。そして上記のとおり、根ノードと中継ノードは、葉ノードよりも、再送以外の処理による負荷が高い。したがって、第１の比較例では、負荷の高い根ノードと中継ノードに、ますます負荷が集中してしまう。
【００７９】
仮に、パケットロス率が非常に高かったり、パケットロスが連続して大量に生じたりすると、当然再送の負荷も高まる。場合によっては、再送の負荷だけでも、無視することのできない量になることがある。
【００８０】
また、図１のように本実施形態によれば、状況に応じて複数のノードが特定情報の一部分ずつを送信する。よって、たとえ特定情報の量が多くても、個々のノードの送信負荷はそれほど高くない。しかし、第１の比較例では、再送を要求されたデータの全体を１つのノード（つまりパケットロスを検出したノードの親ノード）が送信する。よって、再送を要求されたデータの量が多いと、親ノードの送信負荷が非常に高くなってしまう。
【００８１】
そして、再送による高負荷は、第１の比較例では、上記のとおり、再送以外の処理による負荷がもともと高い根ノードと中継ノードに集中してしまう。したがって、ノード間での処理負荷の公平性を確保するという観点、および負荷分散によってネットワーク全体での処理効率を向上させるという観点からは、明らかに、第１の比較例よりも本実施形態の方が優れている。
【００８２】
また、第１の比較例の欠点を克服するため、第２の比較例では、ある１台の管理サーバが論理ネットワークのトポロジを集中的に管理する。すると、管理サーバは、リレー中継を行わない葉ノードを把握することができるので、各ノードに対して、適宜選択した葉ノードを再送要求先として通知することができる。
【００８３】
例えば、各ノードは、データの再送を要求しようとするときに（あるいは事前に）、管理ノードに再送要求先を問い合わせる。そして、問い合わせを受けた管理ノードは、適宜選択した葉ノードを再送要求先として返答する。
【００８４】
すると、再送以外の処理による負荷が低い葉ノードに再送の負荷がかかる。したがって、第１の比較例よりも、第２の比較例は、ノード間の負荷分散という点で優れている。しかしながら、この第２の比較例には、ノード数に対するスケーラビリティに欠けるという欠点がある。
【００８５】
すなわち、ノード数が多くなると、トポロジを把握し、かつ再送要求先の問い合わせに応答するための、管理サーバの負荷が増大する。また、第２の比較例では、管理サーバがシステムのＳＰｏＦ（Single Point of Failure）になりかねない。
【００８６】
他方、本実施形態では、後述の図３の管理サーバ２０４が使われてもよいが、管理サーバ２０４は、論理ネットワーク１００全体のトポロジを認識する必要はない。管理サーバ２０４は、単に、論理ネットワーク１００に含まれるノードの中の任意の１つ（例えば、ランダムな１つ）を再送要求先として選択すればよい。
【００８７】
したがって、明らかに、本実施形態の管理サーバ２０４の負荷は、トポロジの認識が必要な第２の比較例の管理サーバの負荷よりも軽い。よって、本実施形態の管理サーバ２０４は、第２の比較例の管理サーバよりもＳＰｏＦになりにくい。
【００８８】
また、本実施形態では、状況に応じて複数のノードが特定情報の一部分ずつを送信する。よって、たとえ特定情報の量が多くても、個々のノードの送信負荷はそれほど高くない。しかし、第２の比較例では、再送を要求されたデータの全体を１つのノード（つまり管理ノードが選択した葉ノード）が送信する。よって、再送を要求されたデータの量が多いと、選択された葉ノードが過負荷状態に陥るおそれがある。
【００８９】
さらに、本実施形態では、再送要求先として管理サーバ２０４から通知されるノードは、根ノードかもしれないし、根ノードに比較的近い中継ノードかもしれない。にもかかわらず、本実施形態によれば、図１に関して説明したとおり、要求されたデータを実際に送信する負荷は、根ノードからより遠いノードに、優先的にかかる。また、負荷が大きい場合は、本実施形態では負荷は複数のノードに分散される。よって、本実施形態によれば、好ましい負荷分散と、管理サーバ２０４の負荷を軽減することで第２の比較例よりもスケーラビリティを向上させることを、ともに実現することができる。
【００９０】
また、詳しくは後述するが、本実施形態は、再送要求先の認識のために管理サーバ２０４を用いないように変形することも可能である。そのような変形例は、より一層、スケーラビリティの点で第２の比較例よりも優れている。
【００９１】
以上のとおり、本実施形態による再送制御は、第１の比較例と第２の比較例のいずれと比べても、優れている。また、図1に関する説明から明らかなとおり、本実施形態による再送制御は自律分散制御であるから、再送要求が多発する場合であっても「特定のノードがＳＰｏＦとなり再送要求がオーバーフローする」といった事態には陥らない。
【００９２】
ところで、図１〜２に示す論理ネットワーク１００は、物理ネットワークとは異なる。つまり、論理ネットワーク１００においてエッジで直接的に接続された隣接ノード同士が、物理的には非常に離れていることもあり得る。逆に、論理ネットワーク１００内で離れたノード同士が、物理的には近接していることもあり得る。
【００９３】
図３は物理ネットワークの例を示す図である。図１〜２に示す論理ネットワーク１００は、例えば、図３の物理ネットワーク２００上のオーバレイネットワークであってもよい。
【００９４】
物理ネットワーク２００は、コアネットワーク２０１と、コアネットワーク２０１を介して互いに接続されたルータ２０２Ａ〜２０２Ｆを含む。また、物理ネットワーク２００は、配信サーバ２０３、管理サーバ２０４、および端末装置２０５Ａ〜２０５Ｌを含む。
【００９５】
図３に示すように、配信サーバ２０３と管理サーバ２０４と端末装置２０５Ａは、ルータ２０２Ａに接続されている。また、端末装置２０５Ｂ〜２０５Ｃはルータ２０２Ｂに接続されており、端末装置２０５Ｄ〜２０５Ｅはルータ２０２Ｃに接続されている。そして、端末装置２０５Ｆはルータ２０２Ｄに接続されており、端末装置２０５Ｇ〜２０５Ｉはルータ２０２Ｅに接続されており、端末装置２０５Ｊ〜２０５Ｌはルータ２０２Ｆに接続されている。
【００９６】
なお、図３では各ルータと端末装置が直接的に線で結ばれている。しかし、ルータと端末装置の間は、スイッチングハブまたは無線ＬＡＮ（Local Area Network）アクセスポイントなどのネットワーク機器を介して接続されていてもよい。
【００９７】
配信サーバ２０３は、端末装置２０５Ａ〜２０５Ｌに配信するための配信情報として、コンテンツ（例えばストリーミングデータ）を生成または取得し、当該コンテンツを配信する。また、管理サーバ２０４は、配信ツリーに属するノードを管理するサーバである。
【００９８】
つまり、管理サーバ２０４を含む図３は、ピュアＰ２Ｐシステムではなく、ハイブリッドＰ２Ｐシステムの例を示している。しかしもちろん、ピュアＰ２Ｐにも本実施形態は適用可能である（詳しくは後述する）。
【００９９】
また、図３の例では、配信サーバ２０３と管理サーバ２０４が分かれているが、１台のサーバが配信サーバ２０３と管理サーバ２０４の機能を兼ね備えてもよい。あるいは、複数の管理サーバ２０４があってもよい。
【０１００】
端末装置２０５Ａ〜２０５Ｌは、所定のＡＬＭアプリケーションソフトウェアがインストールされたコンピュータならば、どのようなコンピュータであってもよい。端末装置２０５Ａ〜２０５Ｌの具体例は、例えば、ＰＣ（Personal Computer）、ワークステーション、ネットワーク通信機能を持つＳＴＢ（Set Top Box）、スマートフォン、携帯電話、タブレット型端末などである。
【０１０１】
以下では、図１〜２の論理ネットワーク１００が図３の物理ネットワーク２００上のオーバレイネットワークである場合について説明する。論理ネットワーク１００が物理ネットワーク２００上のオーバレイネットワークである場合、配信サーバ２０３は、論理ネットワーク１００における根ノードＮ１に相当する。また、管理サーバ２０４は、配信ツリーとして構築される論理ネットワーク１００には含まれない。
【０１０２】
そして、「論理ネットワーク１００における根ノードＮ１以外のノードＮ２〜Ｎ１３が、それぞれ物理ネットワーク２００の端末装置２０５Ａ〜２０５Ｌのいずれに相当するのか」ということは、場合によって様々である。以下に、論理ネットワーク１００と物理ネットワーク２００の対応関係の例を２つ挙げる。
【０１０３】
論理ネットワーク１００と物理ネットワーク２００の対応関係の第１の例は、以下の（Ｃ−１）〜（Ｃ−１３）のとおりである。
（Ｃ−１）ノードＮ１は配信サーバ２０３である。
（Ｃ−２）ノードＮ２は端末装置２０５Ｌである。
（Ｃ−３）ノードＮ３は端末装置２０５Ｂである。
（Ｃ−４）ノードＮ４は端末装置２０５Ｋである。
（Ｃ−５）ノードＮ５は端末装置２０５Ｈである。
（Ｃ−６）ノードＮ６は端末装置２０５Ｃである。
（Ｃ−７）ノードＮ７は端末装置２０５Ｆである。
（Ｃ−８）ノードＮ８は端末装置２０５Ｇである。
（Ｃ−９）ノードＮ９は端末装置２０５Ｊである。
（Ｃ−１０）ノードＮ１０は端末装置２０５Ａである。
（Ｃ−１１）ノードＮ１１は端末装置２０５Ｉである。
（Ｃ−１２）ノードＮ１２は端末装置２０５Ｄである。
（Ｃ−１３）ノードＮ１３は端末装置２０５Ｅである。
【０１０４】
上記（Ｃ−１）〜（Ｃ−１３）に示した第１の例において、図１のステップＳ１０に示すようにノードＮ２からノードＮ５への送信においてデータの消失が生じる理由としては、例えば下記（Ｄ−１）〜（Ｄ−３）がある。
（Ｄ−１）ルータ２０２Ｆにおける故障または輻輳。
（Ｄ−２）コアネットワーク２０１内においてルータ２０２Ｆとルータ２０２Ｅを接続する経路（route）上の、故障または輻輳。
（Ｄ−３）ルータ２０２Ｅにおける故障または輻輳。
【０１０５】
仮にノードＮ５が、上記の第１の比較例のように単純に親ノードＮ２自体に再送を依頼する場合には、原因（Ｄ−１）または（Ｄ−２）によって消失したデータは、回復の見込みが非常に低い。しかし、図１の再送制御によれば、ノードＮ５の論理ネットワーク１００上の親ノードＮ２に相当する端末装置２０５Ｌとは物理ネットワーク２００上で離れた端末装置２０５Ｆ、２０５Ｇ、２０５Ｄ、２０５Ｅから、実際の再送が行われる。よって、図１の再送制御によれば、ステップＳ１０において原因（Ｄ−１）または（Ｄ−２）によって消失したデータを、ノードＮ５が取得することが可能である。
【０１０６】
なお、原因（Ｄ−３）の場合は、どのノードからデータが再送されようとも（つまりどのような再送制御が行われようとも）、再送されたデータをノードＮ５（つまり端末装置２０５Ｈ）がうまく受信できないおそれが高い。例えば、ノードＮ５からの再送要求自体がルータ２０２Ｅで消失するおそれが高い。あるいは、仮に再送要求が消失しなかったとし、かつ図１のステップＳ４１のようにノードＮ７（つまり端末装置２０５Ｆ）からデータが再送されたとしても、再送されたデータは、ノードＮ５に到達する前にルータ２０２Ｅで消失してしまうおそれが高い。
【０１０７】
また、論理ネットワーク１００と物理ネットワーク２００の対応関係の第２の例は、以下の（Ｅ−１）〜（Ｅ−１３）のとおりである。
（Ｅ−１）ノードＮ１は配信サーバ２０３である。
（Ｅ−２）ノードＮ２は端末装置２０５Ｄである。
（Ｅ−３）ノードＮ３は端末装置２０５Ｃである。
（Ｅ−４）ノードＮ４は端末装置２０５Ｊである。
（Ｅ−５）ノードＮ５は端末装置２０５Ｅである。
（Ｅ−６）ノードＮ６は端末装置２０５Ｂである。
（Ｅ−７）ノードＮ７は端末装置２０５Ｋである。
（Ｅ−８）ノードＮ８は端末装置２０５Ｉである。
（Ｅ−９）ノードＮ９は端末装置２０５Ｇである。
（Ｅ−１０）ノードＮ１０は端末装置２０５Ａである。
（Ｅ−１１）ノードＮ１１は端末装置２０５Ｈである。
（Ｅ−１２）ノードＮ１２は端末装置２０５Ｌである。
（Ｅ−１３）ノードＮ１３は端末装置２０５Ｆである。
【０１０８】
上記（Ｅ−１）〜（Ｅ−１３）に示した第２の例では、ノードＮ２とＮ５が同じルータ２０２Ｃに接続されている。したがって、図１のステップＳ１０のような消失の原因は、主に、ルータ２０２Ｃにおける故障または輻輳である。すると、上記の第１の例における原因（Ｄ−３）と同様に、どのノードからデータが再送されようとも、再送されたデータをノードＮ５（つまり端末装置２０５Ｅ）がうまく受信できないおそれが高い。
【０１０９】
以上の対応関係の第１と第２の例に示したように、本実施形態による再送制御は、第１の比較例の再送制御と比較して、優れている。つまり、「物理ネットワーク２００上で要求ノードに近い装置において輻輳または故障が発生した」というような、特定の状況下では、本実施形態でも、第１の比較例でも、消失したデータが再送により取得可能となる見込みは低く、再送制御の仕方による差はない。しかし、別の状況下では、消失したデータは、第１の比較例では再送により取得可能となる見込みが非常に低いのに対し、本実施形態によれば再送により取得可能となる見込みが高い。したがって、本実施形態は、消失したデータの再送による回復率の点においても、第１の比較例より優れている。
【０１１０】
ところで、図３に示した配信サーバ２０３、管理サーバ２０４、および端末装置２０５Ａ〜２０５Ｌは、具体的にはネットワーク通信機能を備えるコンピュータであり、コンピュータは、例えば図４のハードウェア構成図に示すような各種ハードウェアを有する。
【０１１１】
図４のコンピュータ３００は、ＣＰＵ（Central Processing Unit）３０１とＲＡＭ（Random Access Memory）３０２と通信インタフェイス３０３と入力装置３０４と出力装置３０５と不揮発性記憶装置３０６と可搬型記憶媒体３１０の駆動装置３０７を有する。コンピュータ３００内の各部は、バス３０８により互いに接続されている。
【０１１２】
ＣＰＵ３０１は、プログラムをＲＡＭ３０２にロードし、ＲＡＭ３０２をワークエリアとして用いながら、プログラムを実行する。プログラムは、不揮発性記憶装置３０６に予め格納されていてもよい。あるいは、プログラムは、通信インタフェイス３０３を介してネットワークからダウンロードされて不揮発性記憶装置３０６にコピーされてもよい。
【０１１３】
または、プログラムは、可搬型記憶媒体３１０に格納されて提供され、駆動装置３０７により読み取られてもよい。駆動装置３０７により可搬型記憶媒体３１０から読み取られたプログラムは、直接ＲＡＭ３０２にロードされてもよいし、一旦不揮発性記憶装置３０６にコピーされ、不揮発性記憶装置３０６からＲＡＭ３０２にロードされてもよい。可搬型記憶媒体３１０としては、ＣＤ（Compact Disc）やＤＶＤ（Digital Versatile Disk）などの光ディスク、光磁気ディスク、磁気ディスク、不揮発性の半導体メモリカードなどが利用可能である。
【０１１４】
また、通信インタフェイス３０３は、例えば、有線ＬＡＮインタフェイス、無線ＬＡＮインタフェイス、またはそれらの組み合わせである。入力装置３０４は、例えば、ボタン、キーボード、マウスやタッチスクリーンなどのポインティングデバイス、マイク、またはそれらの組み合わせである。出力装置３０５は、例えば、ディスプレイ、スピーカ、またはそれらの組み合わせである。ディスプレイは、タッチスクリーンであってもよい。
【０１１５】
不揮発性記憶装置３０６は、例えば、ＲＯＭ（Read Only Memory）やフラッシュメモリなどの半導体メモリ、ハードディスク装置、またはそれらの組み合わせである。なお、ＲＡＭ３０２、不揮発性記憶装置３０６、および可搬型記憶媒体３１０は、いずれも、コンピュータ読み取り可能な記憶媒体の例である。これらのコンピュータ読み取り可能な記憶媒体は、有形の（tangible）記憶媒体であり、信号搬送波のような一時的な（transitory）媒体ではない。
【０１１６】
ところで、それぞれが図４のようなハードウェアを持つ、図３の端末装置２０５Ａ〜２０５Ｌは、図２の論理ネットワーク１００内の葉ノードまたは中継ノードである。そして、論理ネットワーク１００の葉ノードと中継ノードは、いずれも、図１を参照して説明した本実施形態の再送制御を行う通信装置である。図５は、論理ネットワーク１００の葉ノードと中継ノードとして使われる通信装置のブロック構成図である。
【０１１７】
図５の通信装置４００は、受信部４０１、送信部４０２、バッファ部４０３、再生処理部４０４、転送処理部４０５、ロス検出部４０６、再送要求部４０７、ノード情報記憶部４０８、ノード情報管理部４０９、および負荷分散処理部４１０を有する。また、負荷分散処理部４１０は、選択部４１１、対応づけ部４１２、要求生成部４１３、および再送処理部４１４を含む。
【０１１８】
受信部４０１は他の装置からパケットを受信し、送信部４０２は他の装置にパケットを送信する。受信部４０１と送信部４０２は、例えば通信インタフェイス３０３により実現される。なお、以下では論理ネットワーク１００内で配信される対象のコンテンツ（つまり配信情報）をペイロードに含むパケットを「データパケット」といい、制御用のメッセージを含むパケットを「制御パケット」という。
【０１１９】
また、受信部４０１は、受信したパケットの種類に応じて、パケット（またはパケットに含まれる一部のフィールドの値）を適宜出力する。受信部４０１がパケットの種類を判断する機能は、例えば、ＣＰＵ３０１により実現される。
【０１２０】
バッファ部４０３は、受信部４０１が受信したデータパケットを、ある程度の期間、保持し続ける。バッファ部４０３は、例えばＲＡＭ３０２、不揮発性記憶装置３０６、またはその組み合わせにより実現される。
【０１２１】
再生処理部４０４は、バッファ部４０３が保持するデータパケットを用いて、コンテンツを再生する。再生処理部４０４は、例えば、プログラムを実行するＣＰＵ３０１と、再生結果を出力する出力装置３０５により実現される。
【０１２２】
転送処理部４０５は、受信部４０１により受信されてバッファ部４０３に格納されたデータパケットを、通信装置４００の子ノードに相当する他の通信装置４００に転送するための制御を行う。なお、転送処理部４０５は、ノード情報記憶部４０８を参照することにより、転送先の子ノードの有無、および、子ノードがある場合の子ノードのアドレスを認識する。転送処理部４０５は、ＣＰＵ３０１により実現される。
【０１２３】
ロス検出部４０６は、パケットロスを検出する。本実施形態では、受信部４０１は、データパケットを受信すると、データパケットをバッファ部４０３に格納するだけでなく、データパケットに含まれるシーケンス番号を抽出し、シーケンス番号をロス検出部４０６に通知する。よって、ロス検出部４０６は、受信部４０１から通知されたシーケンス番号に基づいて、パケットロスを検出することができる。
【０１２４】
より具体的には、ロス検出部４０６は、消失したデータパケットのシーケンス番号の範囲を認識する。そして、パケットロスを検出した場合、ロス検出部４０６は、認識したシーケンス番号の範囲を再送要求部４０７に通知する。
【０１２５】
すると、再送要求部４０７は、ロス検出部４０６から通知された範囲のシーケンス番号を持つデータパケットの再送を求めるための再送要求を生成する。そして、再送要求部４０７は、生成した再送要求を送信部４０２に出力する。その結果、送信部４０２が再送要求を送信する。
【０１２６】
なお、再送要求は、具体的には制御パケットの一種である。また、再送要求部４０７は、再送要求の送信先を、ノード情報記憶部４０８を参照して決定する。
なお、ロス検出部４０６と再送要求部４０７は、例えば、ＣＰＵ３０１により実現される。また、ノード情報記憶部４０８は、例えば、ＲＡＭ３０２、不揮発性記憶装置３０６、またはその組み合わせにより実現される。
【０１２７】
ノード情報記憶部４０８は、例えば、下記（Ｆ−１）〜（Ｆ−４）のような情報を記憶する。ノード情報記憶部４０８が記憶する情報の詳細は図９とともに後述する。
（Ｆ−１）通信装置４００自身に関する情報。例えば、通信装置４００のＩＰ（Internet Protocol）アドレスや、通信装置４００が再送用に利用可能な帯域幅など。
（Ｆ−２）論理ネットワーク１００内で通信装置４００の親ノードに当たる他の通信装置４００に関する情報。例えば、親ノードのＩＰアドレスなど。
（Ｆ−３）論理ネットワーク１００内で通信装置４００の子ノードに当たる他の通信装置４００に関する情報。例えば、子ノードのＩＰアドレスや、論理ネットワーク１００において当該子ノードを根とする部分木に含まれる各ノードが再送用に利用可能な帯域幅の総和など。
（Ｆ−４）再送要求部４０７が再送要求を送信する宛先に関する情報。例えば宛先のＩＰアドレスなど。
【０１２８】
また、ノード情報管理部４０９は、受信部４０１が受信した制御パケットに応じて適宜ノード情報記憶部４０８内の情報を更新する。さらに、ノード情報管理部４０９は、適宜のタイミングで適宜の制御パケットを生成し、生成した制御パケットを送信部４０２に出力する。すると、送信部４０２が制御パケットを送信する。
【０１２９】
ノード情報管理部４０９が処理する制御パケットの具体例は後述する。なお、ノード情報管理部４０９は、例えば、ＣＰＵ３０１により実現される。
また、受信部４０１は、再送要求を受信すると、再送要求を負荷分散処理部４１０に出力する。すると、負荷分散処理部４１０は、再送要求に応じて、図１に関して説明したような処理を実行する。なお、負荷分散処理部４１０は、例えばＣＰＵ３０１により実現されてもよく、負荷分散処理部４１０内の各部は、次のように動作する。
【０１３０】
選択部４１１は、通信装置４００自身よりは子ノードを優先して、１つ以上の責任ノードを選択する。選択に際し、選択部４１１は、ノード情報記憶部４０８を参照する。
また、対応づけ部４１２は、各責任ノードに、再送要求によって要求された１つまたは複数のパケット（すなわち特定情報）の一部または全部を対応づける。対応づけに際し、対応づけ部４１２は、ノード情報記憶部４０８を参照してもよい。また、対応づけ部４１２は、対応づけの結果に応じて、ノード情報記憶部４０８上の情報を更新してもよい。
【０１３１】
そして、責任子ノードが１つ以上ある場合、要求生成部４１３は、各責任子ノードへの再送要求を生成し、生成した再送要求を送信部４０２に出力する。すると、送信部４０２が再送要求を送信する。
【０１３２】
また、選択部４１１が通信装置４００を責任ノードとして選択した場合、再送処理部４１４は、対応づけ部４１２により通信装置４００に対応づけられたデータパケットのペイロードをバッファ部４０３から読み出す。そして、再送処理部４１４は、データパケットを要求ノードに宛てて送信するための適宜のヘッダを生成し、生成したヘッダと読み出したペイロードを含むデータパケットを送信部４０２に出力する。すると、送信部４０２がデータパケットを送信する。
【０１３３】
ところで、図３の配信サーバ２０３も、論理ネットワーク１００の根ノードとして図１の再送制御を行うという点では、図５の通信装置４００と同じである。つまり、配信サーバ２０３も、端末装置２０５Ａ〜２０５Ｌに相当する通信装置４００と同様に、他のノードからの再送要求の受信を契機として再送制御を行う負荷分散処理部４１０を有する。
【０１３４】
また、配信サーバ２０３は、受信部４０１、送信部４０２、バッファ部４０３、ノード情報記憶部４０８、およびノード情報管理部４０９も有する。ただし、配信サーバ２０３には、再生処理部４０４、転送処理部４０５、ロス検出部４０６、および再送要求部４０７は不要である。
【０１３５】
なお、配信サーバ２０３は、配信する対象のコンテンツのデータを生成してバッファ部４０３に出力する不図示の生成部、または、カメラなどの外部装置からコンテンツのデータを取得してバッファ部４０３に出力する不図示の取得部を有する。生成部は、例えばＣＰＵ３０１により実現されてもよく、取得部は、例えば、外部装置と配信サーバ２０３を接続するインタフェイスにより実現されてもよい。
【０１３６】
さらに、配信サーバ２０３は、生成部または取得部により生成または取得されてバッファ部４０３に格納されたデータを送信するための制御を行う不図示の配信処理部を有する。配信処理部は、転送処理部４０５と同様に、ノード情報記憶部４０８を参照して子ノードを認識し、バッファ部４０３に格納されたデータを各子ノードに送信するための制御を行う。
【０１３７】
このように、配信サーバ２０３も、図５の通信装置４００と類似の構成を有する。そこで、以下の説明においては、特に誤解のおそれがない場合は、配信サーバ２０３用に上記のごとく変形された通信装置も含めて、「通信装置４００」と称することがある。
【０１３８】
続いて、論理ネットワーク１００内の各ノードに相当する通信装置４００（具体的には配信サーバ２０３または端末装置２０５Ａ〜２０５Ｌ）の動作と、管理サーバ２０４の動作について、詳しく説明する。
【０１３９】
論理ネットワーク１００における根ノードＮ１に相当する配信サーバ２０３は、以下の（Ｇ−１）〜（Ｇ−７）の処理を行う。
（Ｇ−１）端末装置から、配信サーバ２０３の子ノードとして登録するよう求める要求を受信したときに、当該端末装置を配信サーバ２０３の子ノードとして登録する処理。この（Ｇ−１）の処理は、新たな端末装置の論理ネットワーク１００への参加、または配信ツリーの再構築にともなって、イベント駆動で不定期に行われる処理である。
（Ｇ−２）配信サーバ２０３の子ノードから、論理ネットワーク１００から離脱する（leave）ことを知らせる通知を受信したときに、当該子ノードの情報を削除する処理。この（Ｇ−２）の処理は、イベント駆動で不定期に行われる処理である。
（Ｇ−３）配信サーバ２０３を根ノードとするツリー（すなわち論理ネットワーク１００）に含まれるノードがそれぞれ再送用に使用可能な帯域幅の合計値に変化が生じたときに、変化を記録する処理。
（Ｇ−４）配信サーバ２０３自身が再送用に使用可能な帯域幅の変化を検出する処理。この（Ｇ−４）の処理は、定期的な監視処理であってもよいし、不定期に生じるイベントを検出する処理であってもよい。
（Ｇ−５）論理ネットワーク１００内に配信するコンテンツを生成または取得し、コンテンツを適宜パケット化し、適宜のタイミングで（例えばサンプリングレートに応じた適宜の間隔で定期的に）子ノードにデータパケットを送信する処理。なお、配信サーバ２０３は、再送に備えて、送信後一定時間は、データパケットをバッファ部４０３に保持し続ける。
（Ｇ−６）バッファ部４０３から古いデータパケットを削除するエージング処理。この（Ｇ−６）の処理は、例えばタイマ割り込み信号によって、定期的に呼び出されてもよい。
（Ｇ−７）論理ネットワーク１００内のいずれかのノードから再送要求を受信したときに、配信サーバ２０３自ら再送要求に応じるか、または配信サーバ２０３の子ノードに再送を保証させるための処理。この（Ｇ−７）の処理は、イベント駆動で不定期に行われる処理である。
【０１４０】
また、論理ネットワーク１００における葉ノード（図１〜２の例では、ノードＮ５、Ｎ７〜Ｎ１３）は、以下の（Ｈ−１）〜（Ｈ−１３）の処理を行う。
（Ｈ−１）新たに論理ネットワーク１００に参加しようとするとき、親ノードとして適切なノードを管理サーバ２０４に問い合わせる処理。この（Ｈ−１）の処理は、初期設定のための処理である。
（Ｈ−２）上記（Ｈ−１）の問い合わせに対して管理サーバ２０４から返答されたノードに対して、子ノードとしての登録を要求する処理。この（Ｈ−２）の処理も、初期設定のための処理である。
（Ｈ−３）当該葉ノード自身が再送用に使用可能な帯域幅に変化が生じたときに、変化を記録するとともに、親ノードに変化を通知する処理。
（Ｈ−４）当該葉ノード自身が再送用に使用可能な帯域幅の変化を検出する処理。この（Ｈ−４）の処理は、定期的な監視処理であってもよいし、不定期に生じるイベントを検出する処理であってもよい。
（Ｈ−５）データパケットの受信を契機として、パケットロスの有無を検出し、必要に応じて再送要求を送信する処理。なお、葉ノードに相当する通信装置４００は、他のノードから再送要求を受ける場合に備えて、一定時間は、受信したデータパケットをバッファ部４０３に保持し続ける。
（Ｈ−６）バッファ部４０３から古いデータパケットを削除するエージング処理。この（Ｈ−６）の処理は、例えばタイマ割り込み信号によって、定期的に呼び出されてもよい。
（Ｈ−７）受信したデータパケットを用いてコンテンツ（例えば動画や音声など）を再生する処理。
（Ｈ−８）論理ネットワーク１００内のいずれかのノードから再送要求を受信したときに、再送要求に応じる処理。この（Ｈ−８）の処理は、イベント駆動で不定期に行われる処理である。
（Ｈ−９）上記（Ｈ−５）の処理における再送要求の送信先として適切なノードを管理サーバ２０４に問い合わせる処理。この（Ｈ−９）の処理が行われるタイミングは任意である。例えば、この（Ｈ−９）の処理は、上記（Ｈ−１）の処理とともに最初に行われてもよいし、さらにその後、定期的に繰り返し行われてもよい。
（Ｈ−１０）上記（Ｈ−５）の処理において再送要求を送信した場合に、再送要求に応じられない旨のＮＡＣＫ（Negative ACKnowledgment）を受信したら、別のノードに再送要求を送信しなおす処理。
（Ｈ−１１）論理ネットワーク１００から離脱しようとするとき、親ノードと管理サーバ２０４に離脱を通知する処理。
（Ｈ−１２）親ノードから、新たな親ノードの候補を知らせる通知を受信した場合、通知された候補に対して、子ノードとして登録するよう要求する処理。この（Ｈ−１２）の処理における親ノードからの通知は、例えば、今までの親ノードが論理ネットワーク１００から離脱する場合などに行われる。
（Ｈ−１３）当該葉ノードが管理サーバ２０４にかつて通知した情報が表す状況に変化があった場合、管理サーバ２０４に情報の更新を要求する処理。
【０１４１】
また、論理ネットワーク１００における中継ノード（図２の例では、ノードＮ２〜Ｎ４、Ｎ６）は、以下の（Ｉ−１）〜（Ｉ−１４）の処理を行う。
（Ｉ−１）新たに論理ネットワーク１００に参加しようとするとき、親ノードとして適切なノードを管理サーバ２０４に問い合わせる処理。この（Ｉ−１）の処理は、初期設定のための処理である。
（Ｉ−２）上記（Ｉ−１）の問い合わせに対して管理サーバ２０４から返答されたノードに対して、子ノードとしての登録を要求する処理。この（Ｉ−２）の処理も、初期設定のための処理である。
（Ｉ−３）他の端末装置から、子ノードとして登録するよう求める要求を受信したときに、当該端末装置を子ノードとして登録する処理。この（Ｉ−３）の処理は、新たな端末装置の論理ネットワーク１００への参加、または配信ツリーの再構築にともなって、イベント駆動で不定期に行われる処理である。
（Ｉ−４）子ノードから、論理ネットワーク１００からの離脱を知らせる通知を受信したときに、当該子ノードの情報を削除する処理。この（Ｉ−２）の処理は、イベント駆動で不定期に行われる処理である。
（Ｉ−５）当該中継ノード自身を根ノードとするツリー（すなわち論理ネットワーク１００の部分木）に含まれるノードがそれぞれ再送用に使用可能な帯域幅の合計値に変化が生じたときに、変化を記録するとともに、親ノードに変化を通知する処理。
（Ｉ−６）当該中継ノード自身が再送用に使用可能な帯域幅の変化を検出する処理。この（Ｉ−６）の処理は、定期的な監視処理であってもよいし、不定期に生じるイベントを検出する処理であってもよい。
（Ｉ−７）データパケットの受信を契機として、パケットロスの有無を検出し、必要に応じて再送要求を送信し、受信に成功したデータパケットを子ノードに転送する処理。なお、中継ノードに相当する通信装置４００は、他のノードから再送要求を受ける場合に備えて、一定時間は、受信したデータパケットをバッファ部４０３に保持し続ける。
（Ｉ−８）バッファ部４０３から古いデータパケットを削除するエージング処理。この（Ｉ−８）の処理は、例えばタイマ割り込み信号によって、定期的に呼び出されてもよい。
（Ｉ−９）受信したデータパケットを用いてコンテンツ（例えば動画や音声など）を再生する処理。
（Ｉ−１０）論理ネットワーク１００内のいずれかのノードから再送要求を受信したときに、再送要求に応じる処理。この（Ｉ−１０）の処理は、イベント駆動で不定期に行われる処理である。
（Ｉ−１１）上記（Ｉ−７）の処理における再送要求の送信先として適切なノードを管理サーバ２０４に問い合わせる処理。この（Ｉ−１１）の処理が行われるタイミングは任意である。例えば、この（Ｉ−１１）の処理は、上記（Ｉ−１）の処理とともに最初に行われてもよいし、さらにその後、定期的に繰り返し行われてもよい。
（Ｉ−１２）上記（Ｉ−７）の処理において再送要求を送信した場合に、再送要求に応じられない旨のＮＡＣＫを受信したら、別のノードに再送要求を送信しなおす処理。
（Ｉ−１３）論理ネットワーク１００から離脱しようとするとき、親ノードと管理サーバ２０４に離脱を通知するとともに、各子ノードに対して、当該子ノードの新たな親ノードの候補として、当該中継ノード自身の親ノードを通知する処理。例えば、図２の中継ノードＮ６が論理ネットワーク１００から離脱しようとするとき、ノードＮ６は、親ノードＮ３と管理サーバ２０４に離脱を通知する。さらに、中継ノードＮ６は、子ノードＮ１２に対して、ノードＮ１２の新たな親ノードの候補として、ノードＮ６自身の親ノードＮ３を通知する。同様に、ノードＮ６は、子ノードＮ１３に対しても、ノードＮ１３の新たな親ノードの候補として、ノードＮ３を通知する。
（Ｉ−１４）当該中継ノードが管理サーバ２０４にかつて通知した情報が表す状況に変化があった場合、管理サーバ２０４に情報の更新を要求する処理。
【０１４２】
管理サーバ２０４は、以下の（Ｊ−１）〜（Ｊ−４）の処理を行う。（Ｊ−１）〜（Ｊ−４）の処理はいずれも、制御パケットの受信を契機としてイベント駆動で行われる処理である。
（Ｊ−１）論理ネットワーク１００に新たに参加しようとする端末装置からの「どのノードを親ノードとして選択すればよいか」に関する問い合わせを受信した場合、問い合わせに返答する処理。すなわち、上記（Ｈ−１）と（Ｉ−１）の問い合わせに返答する処理。
（Ｊ−２）論理ネットワーク１００内の中継ノードまたは葉ノードからの「どのノードに再送要求を送信すればよいか」に関する問い合わせを受信した場合、問い合わせに返答する処理。すなわち、上記（Ｈ−９）と（Ｉ−１１）の問い合わせに返答する処理。
（Ｊ−３）論理ネットワーク１００内のいずれかのノードから、当該ノードに関して管理サーバ２０４が管理している情報を更新するよう求める要求を受信した場合、要求に応じて情報を更新する処理。すなわち、上記（Ｈ−１３）と（Ｉ−１４）の要求に応じる処理。
（Ｊ−４）論理ネットワーク１００から離脱しようとするノードから離脱の通知を受信した場合、当該ノードに関して管理サーバ２０４が管理している情報を削除する処理。すなわち、上記（Ｈ−１１）と（Ｉ−１３）の通知に応じて、不要な情報を削除する処理。
【０１４３】
以下では、説明の便宜上、まず、管理サーバ２０４による（Ｊ−１）〜（Ｊ−４）の処理について、図６〜７を参照しながら説明する。
その後、論理ネットワーク１００内の各ノードで共通の（Ｇ−４）、（Ｈ−４）、（Ｉ−６）の検出処理と、再送用に使用可能な帯域幅の変化が検出処理によって検出された場合の、（Ｇ−３）、（Ｈ−３）、（Ｉ−５）の処理について、図８を参照して説明する。
【０１４４】
なお、（Ｇ−３）と（Ｉ−５）の処理は、例えば、制御パケットの受信を契機として行われる。そこで、続いて、再送要求以外の制御パケットの受信を契機として行われる（Ｇ−１）〜（Ｇ−３）、（Ｈ−１２）、（Ｉ−３）〜（Ｉ−５）の処理について、図９〜１０を参照しながら説明する。
【０１４５】
その後、データパケットの送受信に関連する（Ｇ−５）、（Ｈ−５）、（Ｈ−７）、（Ｉ−７）、（Ｉ−９）の処理について、図１１〜１４を参照して説明する。
さらにその後、再送要求の受信を契機として行われる（Ｇ−７）、（Ｈ−８）、（Ｈ−１０）、（Ｉ−１０）、（Ｉ−１２）の処理について、図１５〜１９を参照して説明する。
【０１４６】
さて、図６は、管理サーバ２０４が行う（Ｊ−１）〜（Ｊ−４）の処理に関するフローチャートである。すなわち、図６は、管理サーバ２０４が制御パケットの受信を契機として実行する処理のフローチャートである。また、図７は、管理サーバ２０４が保持するノード管理情報５００の例を示す図である。
【０１４７】
管理サーバ２０４は、論理ネットワーク１００内の既存のいずれかのノードまたは論理ネットワーク１００に新たに参加しようとするノードから制御パケットを受信すると、図６の処理を開始する。
【０１４８】
そして、ステップＳ１０１において管理サーバ２０４は、受信した制御パケットが、新規接続の要求であるか否かを判断する。なおここで、「新規接続の要求」とは、まだ論理ネットワーク１００に参加していない新たな端末装置からの、参加要求のことである。本実施形態では、各種制御パケットは、ヘッダ中のタイプフィールドの値によりタイプが判別可能である。
【０１４９】
管理サーバ２０４が受信した制御パケットが新規接続の要求である場合、処理はステップＳ１０２に移行する。また、管理サーバ２０４が受信した制御パケットが他のタイプのメッセージである場合、処理はステップＳ１０３に移行する。
【０１５０】
ステップＳ１０２で管理サーバ２０４は、新規接続の要求の送信元の端末装置（以下、便宜上「新規ノード」という）の親ノードの候補を選択する。そして、管理サーバ２０４は、選択した候補を、新規ノードに通知する。また、管理サーバ２０４は、図７のノード管理情報５００に新規エントリを追加し、新規エントリのフィールドに適宜値を設定する。なお、管理サーバ２０４が選択する候補の数は、１でもよいし２以上でもよいが、以下では説明の簡単化のため、１と仮定する。
【０１５１】
ここで、図７を参照して、管理サーバ２０４が保持するノード管理情報５００について説明する。ノード管理情報５００は、１つ以上のエントリを含む。ノード管理情報５００の各エントリは、論理ネットワーク１００に含まれる各ノードに対応する。
【０１５２】
また、本実施形態におけるノード管理情報５００の各エントリは、「ノードＩＤ（identification）」、「ＩＰアドレス」、「ポート番号」、「接続能力」、「ＩＳＰ（Internet Service Provider）」というフィールドを含む。
【０１５３】
「ノードＩＤ」フィールドは、当該ノードに管理サーバ２０４が割り当てたＩＤを示す。「ＩＰアドレス」フィールドは、当該ノードのＩＰアドレスを示す。「ポート番号」フィールドは、当該ノードの受信ポート番号を示す。
【０１５４】
また、接続能力とＩＳＰは、ノードに関連する補足情報の例である。例えば、「接続能力」フィールドは、「当該ノードは、新たに子ノードを持つことが可能な空き帯域幅を有しているか否か」ということを示し、「ＩＳＰ」フィールドは、当該ノードが接続されたＩＳＰを示す。
【０１５５】
図７の例における１つ目のエントリは、ノードＩＤが１のノードについて示す。１つ目のエントリによれば、ノードＩＤが１のノードは、ＩＰアドレスが２０６．８９．２．１０でポート番号が５０００２である。また、１つ目のエントリによれば、ノードＩＤが１のノードは、接続能力が「空きあり」であり（つまり、新たな子ノードを受け入れ可能であり）、プロバイダＡに接続されている。
【０１５６】
また、２つ目のエントリは、ノードＩＤが２のノードについて示す。２つ目のエントリによれば、ノードＩＤが２のノードは、ＩＰアドレスが２２０．１６１．１．３０でポート番号が５０００１である。また、２つ目のエントリによれば、ノードＩＤが２のノードは、接続能力が「空きなし」であり（つまり、新たな子ノードを受け入れ不能であり）、プロバイダＢに接続されている。
【０１５７】
なお、初期状態におけるノード管理情報５００は、配信サーバ２０３に対応する１つのエントリを含むように、予め設定される。また、配信サーバ２０３のノードＩＤは、予め決められた値（例えば１）である。そして、ノード管理情報５００のエントリ数は、配信ツリーの構築または再構築につれて変化する。
【０１５８】
また、実施形態によっては、ノード管理情報５００はポート番号を含まなくてもよい。例えば、ＡＬＭソフトウェアによってポート番号が一意の定数に決められている場合、ポート番号フィールドは省略可能である。また、補足情報はオプショナルな情報であり、実施形態に応じて補足情報が省略されてもよい。
【０１５９】
ここで図６の説明に戻る。論理ネットワーク１００に参加しようとする端末装置は、新規接続の要求を管理サーバ２０４に送信し、管理サーバ２０４は、新規接続の要求を受信すると、上記のようにステップＳ１０２の処理を行う。新規接続の要求は、上記（Ｈ−１）と（Ｉ−１）に述べたように、親ノードとして適切なノードを管理サーバ２０４に問い合わせるためのメッセージでもある。また、新規接続の要求は、新規ノード（つまり要求の送信元の端末装置）自身のＩＰアドレス、ポート番号、接続能力、およびＩＳＰに関する通知を含む。
【０１６０】
したがって、ステップＳ１０２で管理サーバ２０４は、具体的には次のような処理を行う。
管理サーバ２０４は、新規ノードのための新規ノードＩＤを発行する。そして、管理サーバ２０４は、ノード管理情報５００の既存のエントリの中から、接続能力が「空きあり」の任意の１つのエントリに対応するノードを、新規ノードの親ノードの候補として選択する。なお、接続能力が「空きあり」のエントリがない場合は、管理サーバ２０４は、配信サーバ２０３を選択してもよい。
【０１６１】
そして、管理サーバ２０４は、親ノードの候補として選択したノードのノードＩＤ、ＩＰアドレスおよびポート番号、ならびに、発行した新規ノードＩＤを、新規ノードに通知する。
【０１６２】
さらに、ステップＳ１０２で管理サーバ２０４は、ノード管理情報５００に新規エントリを追加する。そして、管理サーバ２０４は、追加したエントリにおいて、「ノードＩＤ」フィールドには発行した新規ノードＩＤの値を設定し、「ＩＰアドレス」、「接続能力」、および「ＩＳＰ」の各フィールドには、新規接続の要求に含まれる値をそれぞれコピーする。
【０１６３】
なお、実施形態によっては、管理サーバ２０４は、新規接続の要求に含まれるＩＳＰと同じＩＳＰのエントリを優先的に親ノードの候補として選択してもよい。あるいは、管理サーバ２０４は、最上位オクテットから比較したときに、新規接続の要求に含まれるＩＰアドレスとなるべく多くのオクテットが一致するＩＰアドレスを持つノードを、優先的に親ノードの候補として選択してもよい。
【０１６４】
また、ノード管理情報５００の接続能力は、「空きあり」と「空きなし」の２値ではなく、受け入れ可能な子ノードの数などの数値により表されてもよい。管理サーバ２０４は、数値で表された接続能力と、ＩＳＰとを引数とする評価関数を用いて、最も評価の高いノードを、新規ノードの親ノードの候補として選択してもよい。
【０１６５】
以上のようにしてステップＳ１０２の一連の処理が終わると、図６の処理も終わる。
他方、ステップＳ１０１において、新規接続の要求以外の制御パケットを受信したと管理サーバ２０４が判断した場合は、続いて、ステップＳ１０３の処理が行われる。すなわち、ステップＳ１０３で管理サーバ２０４は、受信した制御パケットが、論理ネットワーク１００からの離脱の通知（つまり、（Ｈ−１１）または（Ｉ−１３）の通知）であるか否かを判断する。
【０１６６】
そして、管理サーバ２０４が受信した制御パケットが離脱の通知である場合、処理はステップＳ１０４に移行する。また、管理サーバ２０４が受信した制御パケットが他のタイプのメッセージである場合、処理はステップＳ１０５に移行する。
【０１６７】
ステップＳ１０４で管理サーバ２０４は、離脱の通知の送信元のノードに対応するエントリをノード管理情報５００から削除する。離脱の通知は、論理ネットワーク１００から離脱しようとするノードのＩＰアドレスを含むので、管理サーバ２０４はＩＰアドレスをキーにして削除対象のエントリを特定することができる。エントリの削除後、図６の処理も終了する。
【０１６８】
また、ステップＳ１０５で管理サーバ２０４は、受信した制御パケットが、再送要求先の問い合わせ（つまり（Ｈ−９）または（Ｉ−１１）の問い合わせ）であるか否かを判断する。
【０１６９】
なお、論理ネットワーク１００内の葉ノードまたは中継ノードは、将来の再送要求に備えて、再送要求先の問い合わせを予め管理サーバ２０４に送信してもよい。葉ノードまたは中継ノードは、再送要求先の問い合わせを、任意のタイミングで（例えば、比較的長めの間隔で定期的に）繰り返し管理サーバ２０４に送信してもよい。
【０１７０】
そして、管理サーバ２０４が受信した制御パケットが再送要求先の問い合わせである場合、処理はステップＳ１０６に移行する。また、管理サーバ２０４が受信した制御パケットが他のタイプのメッセージである場合、処理はステップＳ１０７に移行する。
【０１７１】
ステップＳ１０６で管理サーバ２０４は、ノード管理情報５００の既存のエントリのうちで任意の１つのエントリに対応するノードを、再送要求先の候補として選択する。例えば、管理サーバ２０４は、単にランダムに１つのエントリを選択してもよい。
【０１７２】
そして、管理サーバ２０４は、選択した候補（より具体的には、選択した候補のノードＩＤ、ＩＰアドレスおよびポート番号）を、問い合わせの送信元のノードに通知する。すると、図６の処理も終了する。
【０１７３】
また、ステップＳ１０７で管理サーバ２０４は、受信した制御パケットが、ノード管理情報５００の更新要求（つまり、（Ｈ−１３）または（Ｉ−１４）の要求）であるか否かを判断する。
【０１７４】
例えば、論理ネットワーク１００内の葉ノードは、自分自身の接続能力を監視してもよく、接続能力が変化したときに（Ｈ−１３）の要求を送信してもよい。中継ノードも同様にして、（Ｉ−１４）の要求を送信してもよい。例えば、コンテンツ配信以外のアプリケーションが使う帯域幅の変化に応じて、接続能力が変化することがある。
【０１７５】
そして、管理サーバ２０４が受信した制御パケットが、ノード管理情報５００の更新要求である場合、処理はステップＳ１０８に移行する。また、管理サーバ２０４が受信した制御パケットが、ノード管理情報５００の更新要求ではない場合、図６の処理は終了する。
【０１７６】
ステップＳ１０８で管理サーバ２０４は、ノード管理情報５００において、更新要求の送信元のノードに対応するエントリを検索し、検索の結果見つかったエントリの内容を、受信した更新要求に応じて更新する。なお、更新要求は、接続能力以外の値の更新を要求するものであってもよい。例えば、補足情報が接続能力とＩＳＰ以外の付加的項目をさらに含む場合、更新要求は、当該付加的項目の更新を要求するものでもよい。ノード管理情報５００の更新後、図６の処理は終了する。
【０１７７】
続いて、論理ネットワーク１００内の各ノードで共通の（Ｇ−４）、（Ｈ−４）、（Ｉ−６）の検出処理と、再送用に使用可能な帯域幅の変化が検出処理によって検出された場合の、（Ｇ−３）、（Ｈ−３）、（Ｉ−５）の処理について説明する。本実施形態では、再送の信頼性を高めるために、再送用に使用可能な帯域幅の変化の検出および通知が行われる。
【０１７８】
以下では、あるノードＮｊがデータパケットの再送用に使用可能な帯域幅を、ノードＮｊの「送信可能帯域幅」という。送信可能帯域幅は、換言すれば、再送用に予約される帯域幅である。
【０１７９】
また、ノードＮｊを根ノードとする部分グラフに含まれるすべてのノードの送信可能帯域幅の和を、ノードＮｊの「送信可能総帯域幅」という。定義より、葉ノードにおいては送信可能帯域幅と送信可能総帯域幅が等しい。また、上記定義より、送信可能総帯域幅は、式（１）のように表すことができる。
【０１８０】
【数１】
0005672063.tif 000002
【０１８１】
なお、式（１）において、「Ｒｅｓｅｒｖｅｄ（Ｎｊ）」はノードＮｊの送信可能帯域幅である。また、「Ｔｏｔａｌ（Ｎｊ）」はノードＮｊの送信可能総帯域幅であり、「Ｔｏｔａｌ（Ｎｋ）」はノードＮｋの送信可能総帯域幅である。そして、「Ｃｈｉｌｄ（Ｎｊ）」はノードＮｊの子ノードの集合である。
【０１８２】
送信可能帯域幅は、例えば、ユーザによって指定されてもよい。あるいは、ノードを実現するコンピュータ（例えば配信サーバ２０３や端末装置２０５Ａ〜２０５Ｌなどの通信装置４００）にインストールされたデータ配信アプリケーションプログラム（つまりＡＬＭソフトウェア）が、自動的に送信可能帯域幅を設定してもよい。データ配信アプリケーションプログラムは、再送ではない本来のデータ配信に使用される帯域幅、ネットワーク環境、同じコンピュータが実行中の他のアプリケーションプログラムにより使用される帯域幅などに基づき、動的に送信可能帯域幅を変更してもよい。
【０１８３】
すなわち、（Ｇ−４）、（Ｈ−４）、（Ｉ−６）の検出処理とは、例えば、下記（Ｋ−１）〜（Ｋ−４）のようなイベントの発生を監視し、送信可能帯域幅の変化をもたらすイベントの発生を検出する処理である。以下、説明の便宜上、例えば（Ｋ−１）〜（Ｋ−４）のようなイベントを「ネットワーク状況の変化」と総称する。
（Ｋ−１）ユーザが新たな値を送信可能帯域幅として設定した。
（Ｋ−２）物理的なネットワーク環境が変化した。例えば、検出処理を行うノードが具体的には図３の端末装置２０５Ｈである場合、端末装置２０５Ｈと同じルータ２０２Ｅに接続された他の端末装置２０５Ｇまたは２０５Ｉによる通信量が変化し、その影響で端末装置２０５Ｈが使用可能な帯域幅が変化した。あるいは、ルータ２０２Ｅに接続されたコアネットワーク２０１内の回線の帯域幅が変化した。
（Ｋ−３）データ配信アプリケーションにおいて、再送以外の処理のために確保することが好ましい帯域幅が変化した。例えば、子ノードの数が変化した。
（Ｋ−４）同じコンピュータ内で実行中の他のアプリケーションが使用する帯域幅が変化した。
【０１８４】
ところで、各ノードが送信可能帯域幅の変化の検出を行う理由は、上記のとおり、再送の信頼性を高めるため（つまり、再送がより確実に保証されるようにするため）である。
例えば、図１の例では、ノードＮ６が、ステップＳ３３においてノードＮ１２に再送処理を委譲する。しかし、もしノードＮ１２において物理的に使用可能なほとんどの帯域幅が再送以外の他の処理によって既に占有されていたとすると、ノードＮ１２からの再送が失敗するおそれが高い。つまり、ノードＮ１２は、責任ノードとして選択されたにもかかわらず、再送を保証することができないおそれが高い。
【０１８５】
また、ノードＮ３は、「ノードＮ６を根ノードとする部分グラフに属する１つ以上の任意のノードによって再送が保証される」ということを前提として、ノードＮ６を責任ノードとして選択し、ステップＳ３０でノードＮ６に再送を委譲する。したがって、仮にもし上記のようにノードＮ１２が再送を保証することができないとすると、ノードＮ３にとっての責任ノードを選択するうえでの前提が成り立たない。
【０１８６】
そこで、再送がより確実に保証されるようにするため（すなわち、上記に例示したような前提を成り立たせるため）、本実施形態では、各ノードが再送用に送信可能帯域幅を予約し、かつ、各ノードが送信可能総帯域幅の変化を認識する。
【０１８７】
具体的には、式（１）からも明らかなように、ノードＮｊの送信可能総帯域幅Ｔｏｔａｌ（Ｎｊ）は、以下の（Ｌ−１）〜（Ｌ−４）の理由で変化する。
（Ｌ−１）ノードＮｊ自身の送信可能帯域幅Ｒｅｓｅｒｖｅｄ（Ｎｊ）が変化した。
（Ｌ−２）ノードＮｊがノードＮｋを新たに子ノードとしたため、ノードＮｋの送信可能総帯域幅Ｔｏｔａｌ（Ｎｋ）の分だけノードＮｊの送信可能総帯域幅Ｔｏｔａｌ（Ｎｊ）が増加した。
（Ｌ−３）ノードＮｊが既に子ノードＮｋを持つ場合において、子ノードＮｋの送信可能総帯域幅Ｔｏｔａｌ（Ｎｋ）が変化した。
（Ｌ−４）ノードＮｊが既に子ノードＮｋを持つ場合において、子ノードＮｋが論理ネットワークから離脱したため、ノードＮｋの送信可能総帯域幅Ｔｏｔａｌ（Ｎｋ）の分だけノードＮｊの送信可能総帯域幅Ｔｏｔａｌ（Ｎｊ）が減少した。
【０１８８】
そして、（Ｌ−１）の変化は、具体的には上記（Ｋ−１）〜（Ｋ−４）のようなネットワーク状況の変化によって生じる。また、（Ｌ−３）から明らかなとおり、あるノードＮｋの送信可能総帯域幅Ｔｏｔａｌ（Ｎｋ）が変化した場合、ノードＮｋの親ノードＮｊの送信可能総帯域幅Ｔｏｔａｌ（Ｎｊ）も、それにともなって変化する。
【０１８９】
したがって、本実施形態では、論理ネットワーク１００内の各ノードが当該ノード自身の送信可能総帯域幅の変化を認識するための処理として、子ノードから親ノードへ、送信可能総帯域幅の変化を知らせる通知が送信される。その結果、あるノードが通知を送信すると、論理ネットワーク１００内のエッジを逆向きにたどって根ノードに至るまで、通知が順次連鎖的に送信される。
【０１９０】
例えば、図１のノードＮ９がノードＮ９自身の送信可能帯域幅Ｒｅｓｅｒｖｅｄ（Ｎ９）の変化を検出すると、ノードＮ９の送信可能総帯域幅Ｔｏｔａｌ（Ｎ９）も当然変化する。そこで、ノードＮ９は親ノードＮ４に、送信可能総帯域幅Ｔｏｔａｌ（Ｎ９）の変化を通知する。
【０１９１】
その結果、ノードＮ４の送信可能総帯域幅Ｔｏｔａｌ（Ｎ４）も変化する。よって、ノードＮ４は親ノードＮ２に送信可能総帯域幅Ｔｏｔａｌ（Ｎ４）の変化を通知する。すると、ノードＮ２の送信可能総帯域幅Ｔｏｔａｌ（Ｎ２）が変化するので、ノードＮ２は、送信可能総帯域幅Ｔｏｔａｌ（Ｎ２）の変化を親ノードＮ１に通知する。
【０１９２】
すると、ノードＮ１の送信可能総帯域幅Ｔｏｔａｌ（Ｎ１）も変化する。ただし、ノードＮ１は、論理ネットワーク１００における根ノードなので、送信可能総帯域幅Ｔｏｔａｌ（Ｎ１）の変化にともなう通知を送信する必要はない。
【０１９３】
例えば以上説明したような連鎖的な通知により、論理ネットワーク１００内の各ノードは、送信可能総帯域幅の変化を認識することができる。そして、再送要求を受けたノードが、子ノードの送信可能総帯域幅を考慮に入れて責任ノードを選択することにより、再送がより確実に保証され、再送の信頼性が向上する。
【０１９４】
ここで、送信可能帯域幅に関する（Ｇ−４）、（Ｈ−４）、（Ｉ−６）の検出処理の説明に戻る。（Ｇ−４）、（Ｈ−４）、（Ｉ−６）の検出処理により、上記（Ｌ−１）の原因による送信可能総帯域幅の変化が検出可能である。
【０１９５】
よって、葉ノードまたは中継ノードは、（Ｈ−４）、（Ｉ−６）の検出処理により送信可能帯域幅の変化を検出した場合は、送信可能帯域幅の変化に起因して変化した送信可能総帯域幅を計算し、計算結果を記憶し、計算結果を親ノードに通知する。つまり、葉ノードは（Ｈ−３）の通知を行い、中継ノードは（Ｉ−５）の通知を行う。
【０１９６】
なお、根ノードは、（Ｇ−４）の検出処理により送信可能帯域幅の変化を検出した場合、送信可能帯域幅の変化に起因して変化した送信可能総帯域幅を計算し、計算結果を記憶するが、計算結果を他のノードに通知する必要はない。つまり、根ノードは（Ｇ−３）のように単に変化を記録するだけでよい。
【０１９７】
さて、以上説明した送信可能総帯域幅の変化の検出と通知について模式的に図示すると、図８のとおりである。図８の論理ネットワーク１００ａは、ある論理ネットワークの一部を抜粋したものである。論理ネットワーク１００ａは、ノードＮ２０〜Ｎ２４を含む。また、ノードＮ２１はノードＮ２０の子ノードであり、ノードＮ２２〜Ｎ２４はノードＮ２１の子ノードである。
【０１９８】
なお、ノードＮ２０は、根ノードでもよいし中継ノードでもよい。また、ノードＮ２２〜Ｎ２４は、葉ノードでもよいし中継ノードでもよい。
図１〜２と同様に、図８においても、データパケット６０１が配信される方向が実線の矢印により示されている。破線の矢印は、送信可能総帯域幅の通知が送信される方向を示す。
【０１９９】
図８に示すように、ノードＮ２２は、子ノードとして登録するようノードＮ２１に求めるとき、および、ノードＮ２２の送信可能総帯域幅Ｔｏｔａｌ（Ｎ２２）に変化があったときに、送信可能総帯域幅の通知６０２をノードＮ２１に送信する。同様に、ノードＮ２３は、子ノードとして登録するようノードＮ２１に求めるとき、および、ノードＮ２３の送信可能総帯域幅Ｔｏｔａｌ（Ｎ２３）に変化があったときに、送信可能総帯域幅の通知６０３をノードＮ２１に送信する。さらに同様に、ノードＮ２４は、子ノードとして登録するようノードＮ２１に求めるとき、および、ノードＮ２４の送信可能総帯域幅Ｔｏｔａｌ（Ｎ２４）に変化があったときに、送信可能総帯域幅の通知６０４をノードＮ２１に送信する。
【０２００】
なお、送信可能総帯域幅の通知６０２〜６０４は、任意の順序で送信され得るし、必要に応じて何度でも送信され得る。ノードＮ２１は、送信可能総帯域幅の通知６０２〜６０４のいずれか１つを受信するたびに、ノードＮ２１の送信可能総帯域幅Ｔｏｔａｌ（Ｎ２１）を計算しなおし、計算結果を記憶するとともに、計算結果を記録した通知６０５をノードＮ２０に送信する。さらに、ノードＮ２１は、ノードＮ２１自身の送信可能帯域幅Ｒｅｓｅｒｖｅｄ（Ｎ２１）が変化した場合も、送信可能総帯域幅Ｔｏｔａｌ（Ｎ２１）を計算しなおし、計算結果を記憶するとともに、計算結果を記録した通知６０５をノードＮ２０に送信する。
【０２０１】
ところで、以上説明した送信可能総帯域幅の通知のために、図５の通信装置４００のノード情報記憶部４０８は、通信装置４００自身の送信可能帯域幅や通信装置４００の各子ノードの送信可能総帯域幅をノード情報として保持する。また、図８に例示した送信可能総帯域幅の通知６０２〜６０５は制御パケットの一種であるが、図８の説明から明らかなとおり、各ノード（すなわち通信装置４００）は、制御パケットの受信を契機として様々な処理を行う。
【０２０２】
そこで、以下では、図９を参照して、ノード情報記憶部４０８が保持するノード情報の例について説明し、図１０を参照して、制御パケットの受信を契機とする処理について説明する。
【０２０３】
上記（Ｆ−１）〜（Ｆ−４）に簡単に説明したように、通信装置４００のノード情報記憶部４０８が保持するノード情報は、いくつかの種類の情報を含む。具体的には、ノード情報は、通信装置４００の親ノードに関する親ノード情報７０１と、通信装置４００が再送要求を送信する宛先である再送要求先のノードに関する再送要求先情報７０２と、通信装置４００の子ノードに関する子ノード情報と、通信装置４００自身に関する自ノード情報を含む。
【０２０４】
なお、子ノード情報と自ノード情報は、通信装置４００が再送要求を受信すると変化する。そこで、図９では、２つの状態の子ノード情報に、「７０３ａ」と「７０３ｂ」という別の参照符号が付与されている。同様に、図９では、２つの状態の自ノード情報に、「７０４ａ」と「７０４ｂ」という別の参照符号が付与されている。
【０２０５】
また、図９では図示の便宜上、各種情報をテーブル形式で例示しているが、データ形式は実施形態に応じて任意である。例えば、線形リストや連想配列が使われてもよい。
【０２０６】
親ノード情報７０１は、通信装置４００の親ノードのＩＰアドレスと、親ノードのポート番号（具体的には受信ポート番号）と、通信装置４００と親ノードの間のＲＴＴ（Round Trip Time）を含む。親ノード情報７０１は、親ノードのノードＩＤをさらに含んでもよい。図９の親ノード情報７０１の例では、ＩＰアドレスは２２０．１６１．１．３０であり、ポート番号は５０００１であり、ＲＴＴは５ｍｓである。
【０２０７】
例えば、ノード情報管理部４０９は任意のタイミングで親ノードとの間のＲＴＴを計測し、計測結果を親ノード情報７０１に書き込む。ＲＴＴの計測には、例えば、「ｐｉｎｇ」コマンドなどが利用可能である。
【０２０８】
つまり、ノード情報管理部４０９は、親ノードのＩＰアドレスを宛先に指定したＩＣＭＰ（Internet Control Message Protocol）のエコー要求パケットを生成し、送信部４０２がエコー要求パケットを送信する。そして、受信部４０１が親ノードからのエコー応答パケットを受信してノード情報管理部４０９に出力する。すると、ノード情報管理部４０９は、エコー要求パケットの送信からエコー応答パケットの受信までにかかった時間を親ノードと通信装置４００自身との間のＲＴＴとして認識し、認識したＲＴＴを親ノード情報７０１に書き込む。
【０２０９】
また、再送要求先情報７０２は、通信装置４００にとっての再送要求先のＩＰアドレスと、再送要求先のポート番号（具体的には受信ポート番号）と、通信装置４００と再送要求先の間のＲＴＴを含む。再送要求先情報７０２は、再送要求先のノードＩＤをさらに含んでもよい。図９の再送要求先情報７０２の例では、ＩＰアドレスは２１７．１２５．１０．１６であり、ポート番号は５０００２であり、ＲＴＴは９ｍｓである。
【０２１０】
なお、ノード情報管理部４０９は、将来のパケットロスと再送要求に備えて、予め再送要求先情報７０２を取得してノード情報記憶部４０８に記憶しておくことが好ましい。しかし、ノード情報管理部４０９は、ロス検出部４０６がパケットロスを検出したときに、ロス検出部４０６からの依頼にしたがって再送要求先情報７０２を取得してもよい。
【０２１１】
つまり、ノード情報管理部４０９は、送信部４０２を介して、（Ｈ−９）または（Ｉ−１１）の問い合わせを任意のタイミングで管理サーバ２０４に送信することができる。すると、管理サーバ２０４は図６のステップＳ１０６で問い合わせに返答する。そして、送信部４０２は、返答を受信してノード情報管理部４０９に出力する。
【０２１２】
その結果、ノード情報管理部４０９は、再送要求先のＩＰアドレスとポート番号を認識する。また、ノード情報管理部４０９は、認識した再送要求先のＩＰアドレスを指定して任意のタイミングで「ｐｉｎｇ」コマンドを実行することにより、再送要求先と通信装置４００との間のＲＴＴを計測することができる。ノード情報管理部４０９は、計測結果を再送要求先情報７０２のＲＴＴとして記録する。
【０２１３】
子ノード情報７０３ａと７０３ｂは、異なる時点での異なる２つの状態の子ノード情報の例である。通信装置４００のノード情報記憶部４０８が記憶する子ノード情報は、通信装置４００の子ノードの数だけエントリを持つ。
【０２１４】
また、子ノード情報の各エントリは、子ノードのＩＰアドレス、子ノードのポート番号（具体的には受信ポート番号）、子ノードの送信可能総帯域幅、および子ノードと通信装置４００の間のＲＴＴを含む。実施形態によっては、子ノード情報の各エントリは、子ノードのノードＩＤをさらに含んでもよい。
【０２１５】
子ノード情報の各エントリはさらに、「一時使用帯域幅」と「一時使用期限」のペアを０個、１個、または複数個含む。図９では図示の都合上、一時使用帯域幅と一時使用期限のペアの数が０の場合、一時使用帯域幅と一時使用期限の列に「−」と表示してある。
【０２１６】
例えば、子ノード情報７０３ａの１つ目のエントリに対応する子ノードは、ＩＰアドレスが２１０．５０．６３．１０であり、ポート番号が５０００４である。また、１つ目のエントリの送信可能総帯域幅が「３Ｍｂｐｓ」と例示されているが、これは、「ノード情報管理部４０９が当該子ノードから図８と同様の送信可能総帯域幅の通知を受信したことがあり、受信した通知に３Ｍｂｐｓと記録されていた」ということを示す。
【０２１７】
ノード情報管理部４０９は、子ノードと通信装置４００の間のＲＴＴも例えば「ｐｉｎｇ」コマンドなどを利用して任意のタイミングで計測し、計測結果を子ノード情報のＲＴＴとして記録する。ノード情報管理部４０９は、例えば子ノードの登録直後にＲＴＴの計測を行ってもよい。子ノード情報７０３ａの１つ目のエントリには、例えば、ＲＴＴとして７ｍｓという計測結果が書き込まれている。
【０２１８】
また、子ノード情報７０３ａの２つ目のエントリでは、ＩＰアドレスが２１３．４．３０．２０であり、ポート番号が５０００３であり、送信可能総帯域幅が１０Ｍｂｐｓであり、ＲＴＴが３ｍｓである。
【０２１９】
なお、図９の子ノード情報７０３ａは２つのエントリを含むが、どちらのエントリも、一時使用帯域幅と一時使用期限のペアを持たない。ところが、子ノード情報７０３ｂでは、１つ目のエントリが、以下の（Ｍ−１）と（Ｍ−２）のペアを含む。
（Ｍ−１）０．５Ｍｂｐｓという一時使用帯域幅と、１４時１０分５．３５０秒という一時使用期限のペア
（Ｍ−２）０．３Ｍｂｐｓという一時使用帯域幅と、１４時１０分５．３７２秒という一時使用期限のペア
【０２２０】
一時使用帯域幅と一時使用期限の詳細については後述するが、概要を説明すると以下のとおりである。上記（Ｍ−１）のペアは以下の（Ｎ−１）〜（Ｎ−３）のことを示し、上記（Ｍ−２）のペアは以下の（Ｎ−４）〜（Ｎ−６）のことを示す。
（Ｎ−１）以前通信装置４００が受信した再送要求に対応して、１つ目のエントリに対応する子ノードを、選択部４１１が責任ノードとして選んだ。
（Ｎ−２）上記（Ｎ−１）の再送要求により要求されたデータパケット（つまり特定情報）のうち、１つ目のエントリに対応する子ノードに対応づけ部４１２が対応づけた部分は、送信可能総帯域幅の３Ｍｂｐｓのうち、０．５Ｍｂｐｓを消費する、と予測される。
（Ｎ−３）上記（Ｎ−１）の再送要求により要求されたデータの送信は、１４時１０分５．３５０秒までに完了する、と予測される。すなわち、１４時１０分５．３５０秒以降は、０．５Ｍｂｐｓが再び利用可能になる、と予測される。
（Ｎ−４）上記（Ｎ−１）の再送要求とは別の再送要求を通信装置４００がさらに受信し、選択部４１１は、１つ目のエントリに対応する子ノードを再度責任ノードとして選んだ。
（Ｎ−５）上記（Ｎ−４）の再送要求により要求されたデータパケットのうち、１つ目のエントリに対応する子ノードに対応づけ部４１２が対応づけた部分は、０．３Ｍｂｐｓを消費する、と予測される。
（Ｎ−６）上記（Ｎ−４）の再送要求により要求されたデータの送信は、１４時１０分５．３７２秒までに完了する、と予測される。すなわち、１４時１０分５．３７２秒以降は、０．３Ｍｂｐｓが再び利用可能になる、と予測される。
【０２２１】
つまり、一時使用帯域幅と一時使用期限のペアを持つエントリに対応する子ノードは、責任ノードとして選択されたノードである。また、「一時使用帯域幅と一時使用期限のペアを持つエントリに対応する子ノードを根ノードとする部分グラフ中の、少なくとも１つのノードは、現在再送処理中である」と推定される。
【０２２２】
さて、自ノード情報７０４ａと７０４ｂは、異なる時点での異なる２つの状態の自ノード情報の例である。自ノード情報は、通信装置４００自身のＩＰアドレスと、通信装置４００自身のポート番号（具体的には受信ポート番号）と、通信装置４００自身の送信可能帯域幅と、通信装置４００の送信可能総帯域幅を含む。また、自ノード情報も、子ノード情報と同様に、一時使用帯域幅と一時使用期限のペアを０個、１個、または複数個含む。
【０２２３】
自ノード情報７０４ａと７０４ｂの例では、通信装置４００のＩＰアドレスは２１４．４５．３．５であり、通信装置４００のポート番号は５０００５であり、通信装置４００の送信可能帯域幅は５Ｍｂｐｓである。また、子ノード情報７０３ａと７０３ｂに示すように、図９の例では子ノードの数が２であり、それぞれの子ノードから通知された送信可能総帯域幅は３Ｍｂｐｓと１０Ｍｂｐｓである。したがって、式（１）より、通信装置４００の送信可能総帯域幅は、１８（＝５＋３＋１０）Ｍｂｐｓである。
【０２２４】
自ノード情報７０４ａは一時使用帯域幅と一時使用期限のペアを含まない。他方、自ノード情報７０４ｂは、１．５Ｍｂｐｓという一時使用帯域幅と、１５時３５分７．２５５秒という一時使用期限のペアを１個含む。つまり、自ノード情報７０４ｂは、以下の（Ｏ−１）〜（Ｏ−３）のことを示す。
（Ｏ−１）以前通信装置４００が受信した再送要求に対応して、通信装置４００自身を選択部４１１が責任ノードとして選んだ。
（Ｏ−２）上記（Ｏ−１）の再送要求により要求されたデータパケット（つまり特定情報）のうち、通信装置４００自身に対応づけ部４１２が対応づけた部分は、送信可能帯域幅の５Ｍｂｐｓのうち、１．５Ｍｂｐｓを消費する、と予測される。
（Ｏ−３）上記（Ｏ−１）の再送要求により要求された再送は、１５時３５分７．２５５秒までに完了する、と予測される。すなわち、１５時３５分７．２５５秒以降は、１．５Ｍｂｐｓが再び利用可能になる、と予測される。
【０２２５】
なお、図９の親ノード情報７０１、再送要求先情報７０２、子ノード情報７０３ａ〜７０３ｂ、および自ノード情報７０４ａ〜７０４ｂはポート番号を含むが、実施形態によっては、これらの各情報がポート番号のフィールドを含まなくてもよい。例えば、データ配信アプリケーションにより固定的に一意のポート番号が決められている場合は、各種のノード情報自体がポート番号を含まなくてもよい。
【０２２６】
さて、続いて、図１０を参照して、再送要求以外の制御パケットの受信を契機として図５の通信装置４００が実行する処理について説明する。なお、再送要求の受信を契機とする処理については、図１５〜１９とともに後述する。
【０２２７】
通信装置４００の受信部４０１は、パケットを受信すると、例えばヘッダのタイプフィールドを参照することでパケットのタイプを判別する。判別したタイプが再送要求以外の制御パケットのいずれかであった場合、受信部４０１は、図１０の処理を開始する。
【０２２８】
そして、ステップＳ２０１で受信部４０１は、受信した制御パケットが、親ノードからの離脱の通知であるか否かを判断する。受信した制御パケットが、親ノードからの離脱の通知である場合、受信部４０１は受信したパケットをノード情報管理部４０９に出力し、処理はステップＳ２０２に移行する。また、他の制御パケットが受信された場合、処理はステップＳ２０３に移行する。
【０２２９】
上記（Ｉ−１３）のように、中継ノードは、論理ネットワーク１００から離脱しようとするときに、各子ノードに対して、当該子ノードの新たな親ノードの候補として、当該中継ノード自身の親ノードを通知する。つまり、ステップＳ２０２は、（Ｉ−１３）の通知を受信した子ノードにおける処理である。
【０２３０】
具体的には、ステップＳ２０２でノード情報管理部４０９は、今までの親ノードから通知された、新たな親ノード（つまり、今まで親ノードの親ノード）に対して、通信装置４００を子ノードとして登録するよう要求する。また、ノード情報管理部４０９は、ノード情報記憶部４０８の自ノード情報から通信装置４００の送信可能総帯域幅を読み取り、新たな親ノードに通信装置４００の送信可能総帯域幅を通知する。
【０２３１】
なお、ステップＳ２０２における新たな親ノードに対する要求と通知は、例えば１つの制御パケットにより実現されてもよい。本実施形態では１つの制御パケットに要求と通知の双方が含まれるものとする。したがって、ステップＳ２０２でノード情報管理部４０９は、具体的には、新たな親ノードに送信するための１つの制御パケットを生成し、生成した制御パケットを、送信部４０２に送信させる。
【０２３２】
また、ノード情報管理部４０９は、親ノード情報７０１に新たな親ノードのＩＰアドレスとポート番号を記録する。ノード情報管理部４０９はさらに、新たな親ノードと通信装置４００との間のＲＴＴを計測し、親ノード情報７０１の「ＲＴＴ」フィールドに計測結果を記録してもよい。そして、処理はステップＳ２０７に移行する。
【０２３３】
他方、受信部４０１が受信した制御パケットが、親ノードからの離脱の通知ではなかった場合、すなわち、既存または新規の子ノードからのメッセージであった場合、受信部４０１は、ステップＳ２０３において、メッセージの種類を判断する。
【０２３４】
そして、受信した制御パケットが、既存の子ノードからの離脱の通知であった場合、受信部４０１は受信したパケットをノード情報管理部４０９に出力し、処理はステップＳ２０４に移行する。また、受信した制御パケットが、新たに論理ネットワーク１００に参加しようとするノードからの、子ノードとしての登録を求める要求であった場合、受信部４０１は受信したパケットをノード情報管理部４０９に出力し、処理はステップＳ２０５に移行する。あるいは、受信した制御パケットが、既存の子ノードからの送信可能総帯域幅の通知であった場合、受信部４０１は受信したパケットをノード情報管理部４０９に出力し、処理はステップＳ２０６に移行する。
【０２３５】
ステップＳ２０４でノード情報管理部４０９は、離脱の通知を送信した子ノードに対応するエントリを、ノード情報記憶部４０８内の子ノード情報から削除する。そして、処理はステップＳ２０７に移行する。なお、ステップＳ２０４におけるエントリの削除は、上記（Ｌ−４）のとおり、通信装置４００自身の送信可能総帯域幅の変化を引き起こす原因の一つである。
【０２３６】
また、ステップＳ２０５でノード情報管理部４０９は、ノード情報記憶部４０８内の子ノード情報に新規エントリを追加する。そして、ノード情報管理部４０９は、新規エントリの「ＩＰアドレス」フィールドに、要求の送信元のノード（つまり新たな子ノード）のＩＰアドレスを設定し、新規エントリの「ポート番号」フィールドに、新たな子ノードから通知されたポート番号を設定する。ノード情報管理部４０９はさらに、新たな子ノードと通信装置４００との間のＲＴＴを計測して、新規エントリの「ＲＴＴ」フィールドに計測結果を記録してもよい。
【０２３７】
なお、ステップＳ２０２に関して説明したように、本実施形態では、子ノードとしての登録を求める要求は、要求を送信するノード自身の送信可能総帯域幅の通知を兼ねる。
そして、これから論理ネットワーク１００に参加しようとする新たなノードは、最初は葉ノードとなることが明らかである。よって、新たなノードの送信可能総帯域幅とは、新たなノード自身の送信可能帯域幅に等しい。つまり、これから論理ネットワーク１００に参加しようとする新たなノードは、参加を要求する時点での送信可能総帯域幅を認識すること可能であり、認識した送信可能総帯域幅を通知することが可能である。
【０２３８】
よって、ステップＳ２０５でノード情報管理部４０９は、さらに、新たなノードから通知された送信可能総帯域幅を、追加した新規エントリの「送信可能総帯域幅」フィールドに設定する。そして、処理はステップＳ２０７に移行する。
【０２３９】
また、ステップＳ２０６でノード情報管理部４０９は、ノード情報記憶部４０８の子ノード情報において、送信可能総帯域幅の通知を送信してきた子ノードに対応するエントリを検索する。ノード情報管理部４０９は、例えばＩＰアドレスを検索キーにすることで、送信可能総帯域幅の通知を送信してきた子ノードに対応するエントリを特定することができる。
【０２４０】
そして、ノード情報管理部４０９は、検索の結果として特定したエントリの送信可能総帯域幅を、通知された送信可能総帯域幅に書き換える。すると、処理はステップＳ２０７に移行する。
【０２４１】
さて、ネットワーク状況の変化に起因する通信装置４００自身の送信可能帯域幅の変化を検出するための検出処理は、ノード情報管理部４０９によって、任意のタイミングで行われてよい。例えば、図１０の例では、再送要求以外の制御パケットの受信を契機に、ノード情報管理部４０９がネットワーク状況を調べる。しかしもちろん、ノード情報管理部４０９は、再送要求以外の制御パケットの受信とは関係なく、定期的に検出処理を行ってもよい。
【０２４２】
ステップＳ２０７でノード情報管理部４０９は、ネットワーク状況に変化がないかを調査する。そして、ネットワーク状況に変化がある場合、処理はステップＳ２０８に移行し、ネットワーク状況に変化がない場合、処理はステップＳ２０９に移行する。
【０２４３】
なお、ノード情報管理部４０９は、例えば「ｉｐｅｒｆ」などのネットワーク帯域測定ツールを用いて、ステップＳ２０７の調査を行うこともできる。例えば、ノード情報管理部４０９は、ネットワーク帯域測定ツールを用いて、通信装置４００が使用可能なネットワーク帯域幅を推定してもよい。説明の便宜上、推定結果が２０Ｍｂｐｓであったとする。
【０２４４】
すると、ノード情報管理部４０９は、データ配信アプリケーションが使用する帯域幅の最大値を、推定した帯域幅（つまり２０Ｍｂｐｓ）以下の範囲内で任意に決定する。説明の便宜上、決定された最大値が１５Ｍｂｐｓであったとする。
【０２４５】
ノード情報管理部４０９はさらに、再送以外の、本来のデータ配信で使用する帯域幅を、決定した最大値から減じることで、再送に利用可能な帯域幅（すなわち送信可能帯域幅）を算出する。例えば、本来のデータ配信で使用する帯域幅が１２Ｍｂｐｓであるとすると、ノード情報管理部４０９は、送信可能帯域幅として３（＝１５−１２）Ｍｂｐｓを算出する。
【０２４６】
ステップＳ２０７では、「以上のようにして算出した新たな送信可能帯域幅が、ノード情報記憶部４０８に現在保持されている自ノード情報の送信可能帯域幅と等しいか否か」ということを、ノード情報管理部４０９が判断してもよい。二つの送信可能帯域幅が異なれば、ノード情報管理部４０９は「ネットワーク状況が変化した」と判断する。
【０２４７】
さて、ステップＳ２０８では、ノード情報管理部４０９は、ステップＳ２０７で検出した変化に応じた新たな送信可能帯域幅を記録する。つまり、ノード情報管理部４０９は、ノード情報記憶部４０８内の自ノード情報の送信可能帯域幅を更新する。そして、処理はステップＳ２０９に移行する。
【０２４８】
ステップＳ２０９でノード情報管理部４０９は、自ノード（つまり通信装置４００自身）の送信可能総帯域幅を計算する。そして、計算結果を、自ノード情報の「送信可能総帯域幅」フィールドに格納する。なお、ステップＳ２０９における計算は、式（１）にしたがった計算であり、より具体的には、自ノード情報の送信可能帯域幅と、子ノード情報の全エントリの送信可能総帯域幅の総和とを足す計算である。
【０２４９】
そして、ステップＳ２０９に続いて、ステップＳ２１０でノード情報管理部４０９は、親ノードが存在するか否かを判断する。つまり、ノード情報管理部４０９は、親ノード情報７０１が空であれば「親ノードが存在しない」と判断し、親ノード情報７０１が空でなければ「親ノードが存在する」と判断する。例えば、配信サーバ２０３におけるノード情報管理部４０９は、「親ノードが存在しない」と判断し、端末装置２０５Ａ〜２０５Ｌのノード情報管理部４０９は、「親ノードが存在する」と判断する。
【０２５０】
そして、親ノードが存在しない場合、図１０の処理も終了する。逆に、親ノードが存在する場合、処理はステップＳ２１１に移行する。
ステップＳ２１１でノード情報管理部４０９は、ステップＳ２０９で計算した送信可能総帯域幅を親ノードに通知するための制御パケットを生成し、生成した制御パケットを送信部４０２に出力する。すると、送信部４０２が制御パケットを親ノードに送信する。そして、図１０の処理も終了する。
【０２５１】
例えば、図８のノードＮ２１は、ノードＮ２３から送信可能総帯域幅の通知６０３を受信すると図１０の処理を開始する。そして、ノードＮ２１のノード情報管理部４０９は、ステップＳ２０６で子ノード情報を更新し、ステップＳ２１１で親ノードＮ２０宛の送信可能総帯域幅の通知６０５を生成する。その結果、ステップＳ２１１ではノードＮ２１の送信部４０２が通知６０５をノードＮ２０に送信する。
【０２５２】
さて、続いて、データパケットの配信に関する種々の処理について説明する。論理ネットワーク１００の根ノードである配信サーバ２０３は、上記（Ｇ−５）のとおり、配信対象のコンテンツを生成または取得し、コンテンツをパケット化し、子ノードにデータパケットを送信する。また、中継ノードと葉ノードは、データパケットの受信を契機に図１１の処理を実行する。さらに、中継ノードと葉ノードにおいては、図１１の処理と並行して、再生処理部４０４がバッファ部４０３からデータパケットを読み出して再生処理を行う。
【０２５３】
図１１は、データパケットの受信を契機として実行される処理のフローチャートである。つまり、中継ノードまたは葉ノードに相当する通信装置４００の受信部４０１がデータパケットを受信すると、図１１の処理が開始される。
【０２５４】
ステップＳ３０１で受信部４０１は、受信したデータパケットのシーケンス番号（以下「Ｑ」と表記する）を抽出する。そして、受信部４０１は、抽出したシーケンス番号Ｑをロス検出部４０６に通知する。なお、本実施形態では各データパケットがシーケンス番号を含む。
【０２５５】
ストリーミングデータの配信システムでは、ＲＴＰ（Real-time Transport Protocol）がしばしば利用される。そして、ＲＴＰヘッダはシーケンス番号のフィールドを含む。ステップＳ３０１および他のステップで利用されるシーケンス番号は、例えばＲＴＰヘッダに含まれるシーケンス番号でもよいし、ＲＴＰヘッダ以外の部分に含まれるシーケンス番号であってもよい。
【０２５６】
そして、次のステップＳ３０２でロス検出部４０６は、受信部４０１から通知されたシーケンス番号Ｑが、以前再送を要求した番号であるか否かを判断する。例えば、シーケンス番号が３５番のデータパケットの消失をロス検出部４０６が以前検出したことがあり、今回受信部４０１が３５番のデータパケットを受信した場合、受信部４０１から通知されたシーケンス番号Ｑは、以前再送を要求した番号である。
【０２５７】
そして、受信部４０１から通知されたシーケンス番号Ｑが、以前再送を要求した番号である場合、処理はステップＳ３０９に移行する。逆に、受信部４０１から通知されたシーケンス番号Ｑが、以前再送を要求した番号ではない場合、処理はステップＳ３０３に移行する。
【０２５８】
ステップＳ３０３でロス検出部４０６は、パケットロスの有無を検出する。ここで、通信装置４００が受信済みの最新のデータパケットのシーケンス番号を「Ｑｌａｓｔ」と表記し、「最新受信シーケンス番号」と呼ぶことにする。すると、今回受信される予定のデータパケットのシーケンス番号は、（Ｑｌａｓｔ＋１）である。よって、ロス検出部４０６は、式（２）が成り立つときにパケットロスを検出する。
Qlast+1 < Q      (2)
【０２５９】
すなわち、ステップＳ３０３でロス検出部４０６は、式（２）が成立するか否かを判断する。そして、式（２）が成立する場合、ロス検出部４０６は「パケットが消失した」と判断し、処理はステップＳ３０４に移行する。逆に、式（２）が成立しない場合、ロス検出部４０６は「パケットは消失していない」と判断し、処理はステップＳ３０８に移行する。
【０２６０】
なお、ロス検出部４０６は、ステップＳ３０３の判断のため、最新受信シーケンス番号Ｑｌａｓｔの値を保持する。最新受信シーケンス番号Ｑｌａｓｔの初期値は、例えば、データ配信アプリケーションによって、０などの特定の値に予め決められていてもよいし、制御パケットによって予め通知されてもよい。
【０２６１】
また、実施形態によっては、ロス検出部４０６は、ステップＳ３０３とは異なる任意の公知の手順でパケットロスを検出してもよい。例えば、データパケットの順序の入れ替わりが想定される場合は、ステップＳ３０３よりも複雑な検出手順が使われてもよい。
【０２６２】
ロス検出部４０６がパケットロスを検出する手順によらず、本実施形態の再送制御は適用可能である。図１１では、説明の簡略化のため、ステップＳ３０３のようなシンプルな検出手順を例示した。
【０２６３】
さて、ステップＳ３０４でロス検出部４０６は、再送要求部４０７にパケットロスの発生を通知する。すると、再送要求部４０７が再送要求先を決定する。
上記のとおり、ノード情報管理部４０９は、予め、あるいは、ロス検出部４０６によるパケットロスの検出を契機として、送信部４０２を介して管理サーバ２０４に再送要求先を問い合わせる。よって、ステップＳ３０４において、ノード情報記憶部４０８には再送要求先情報７０２が存在する。したがって、再送要求部４０７は、再送要求先情報７０２を参照することで、再送要求先を決定することができる。
【０２６４】
また、次のステップＳ３０５でロス検出部４０６は再送範囲を算出し、算出結果を再送要求部４０７に出力する。すなわち、ロス検出部４０６は、再送の対象となるデータパケットのシーケンス番号の範囲を式（３）と（４）にしたがって算出し、算出結果を再送要求部４０７に出力する。
Qfrom=Qlast+1      (3)
Qto=Q-1            (4)
【０２６５】
例えば、既に１００番までのデータパケットが受信済みで、今回受信されたデータパケットのシーケンス番号が１１０番であるとする。すると、Ｑｌａｓｔ＝１００かつＱ＝１１０である。つまり、１０１〜１０９番のデータパケットが消失しているので、再送範囲は１０１〜１０９番である。式（３）によれば、再送範囲の開始番号Ｑｆｒｏｍ＝１００＋１＝１０１であり、式（４）によれば、再送範囲の終了番号Ｑｔｏ＝１１０−１＝１０９である。
【０２６６】
続いて、ステップＳ３０６で再送要求部４０７は、図１４に示すようにして「再送期限」を算出する。ここで、図１２と図１３を参照して再送期限について説明する。
図１２は、再送要求パケットの例を示す図である。図１２に示すように、本実施形態の再送要求パケット８０１は、ヘッダと、再送期限を示す２つのフィールドと、再送先を示す２つのフィールドと、再送範囲を示す２つのフィールドを含む。
【０２６７】
再送要求パケット８０１のヘッダは、例えば、ＩＰヘッダとＵＤＰヘッダを含む。また、再送要求パケット８０１のヘッダは、ＵＤＰよりも上位層のヘッダ(例えば、ＲＴＰヘッダ、データ配信アプリケーション独自のヘッダ、またはその双方など）をさらに含んでもよい。例えば、データ配信アプリケーション独自のヘッダの中には、パケットの種類を示すタイプフィールドがあってもよい。
【０２６８】
再送期限は、具体的には、「取得期限」（以下「Ｔｓｔａｒｔ」と表記する）と「完了期限」（以下「Ｔｅｎｄ」と表記する）のペアにより表される。
取得期限は、「パケットロスを検出した通信装置４００は、再送範囲で指定されるデータパケットを、いつまでに取得し始めるべきか」ということに関する制約条件から導出される期限である。別の観点から説明すれば、取得期限は、送信開始の期限に関する。
【０２６９】
また、完了期限は、「パケットロスを検出した通信装置４００は、再送範囲で指定されるデータパケットを、いつまでに取得し終わるべきか」ということに関する制約条件から導出される期限である。別の観点から説明すれば、完了期限は、送信終了の期限に関する。
【０２７０】
再送先は、具体的には、ＩＰアドレス（以下「Ａ」と表記する）とポート番号（以下「Ｐ」と表記する）のペアにより表される。すなわち、パケットロスを検出した通信装置４００のＩＰアドレスＡと、パケットロスを検出した通信装置４００がデータパケットを受信するためのポート番号（例えばＵＤＰポート番号）Ｐが、再送要求パケット８０１に再送先として設定される。
【０２７１】
また、再送範囲は、開始番号Ｑｆｒｏｍと終了番号Ｑｔｏのペアにより表される。再送範囲は、図１に関して説明した「特定情報」の範囲を示す。
【０２７２】
なお、図１に関して説明したとおり、責任ノードとして子ノードが選択されて子ノードに再送が委譲されるたびに、特定情報の範囲は書き換えられる。例えば、パケットロスを検出した通信装置４００が送信する再送要求パケット８０１に指定される開始番号Ｑｆｒｏｍと終了番号Ｑｔｏは、式（３）と（４）のとおりである。しかし、子ノードに再送が委譲された場合の、子ノード宛の再送要求パケット８０１に指定される開始番号Ｑｆｒｏｍと終了番号Ｑｔｏは、後述のようにして算出される値である。
【０２７３】
なお、実施形態によっては、再送要求パケット８０２のように、ビットレート（以下「Ｂｒｅｑ」と表記する）を指定するフィールドを含む形式が採用されてもよい。再送要求パケット８０２のような形式が採用される実施形態については後述する。
【０２７４】
また、再送要求パケット８０１と８０２におけるフィールドの順序は一例にすぎない。実施形態に応じて適宜のパケット形式が使われてよいことは無論である。
【０２７５】
図１３は、バッファリングと再送期限のモデルを示す図である。図５のバッファ部４０３は、ＦＩＦＯ（First In First Out）構造とよく似た構造を持つ。具体的には、図１３に示すように、バッファ部４０３は、受信された各データパケットをシーケンス番号の順に格納する。図１３では、各長方形がデータパケットを示し、古いデータパケット（すなわちシーケンス番号が小さいデータパケット）ほど下に描かれている。
【０２７６】
受信部４０１が受信したデータパケットは、一旦バッファ部４０３にバッファリングされ、再生処理部４０４によって読み出されて再生される。図１３は、パケットロスが検出されたときのバッファ部４０３の状態を模式的に示す。
【０２７７】
なお、白い矢印は、再生処理部４０４が次に読み出すデータパケットを指し示す、読み出し位置のポインタを図示したものである。また、読み出し位置を基準として、バッファ部４０３にバッファリングされる時間を示す矢印が模式的に示されている。
【０２７８】
バッファ部４０３は、既に受信されているがまだ再生はされていないｍ個（１≦ｍ）のデータパケットをバッファリング中である。具体的には、シーケンス番号が（Ｑｌａｓｔ−ｍ＋１）番からＱｌａｓｔ番までのｍ個のデータパケットが、再生処理部４０４による読み出しに備えてバッファ部４０３にバッファリングされている。
【０２７９】
そして、ステップＳ３０３〜Ｓ３０４とともに説明したように、シーケンス番号が（Ｑｌａｓｔ＋１）番から（Ｑ−１）番までの（Ｑ−Ｑｌａｓｔ−１）個のデータパケットが消失し、シーケンス番号がＱ番のデータパケットが今回受信されたものとする。
【０２８０】
なお、バッファ部４０３は、他ノード宛の再送に備えて、シーケンス番号が（Ｑｌａｓｔ−ｍ＋１）番より古いデータパケット（すなわち、再生処理部４０４により既に読み取られたデータパケット）をさらに格納していてもよい。
【０２８１】
また、バッファ部４０３は、例えば、ＲＡＭ３０２とＣＰＵ３０１によって実現されてもよい。ＲＡＭ３０２はデータパケットを保持する。ＣＰＵ３０１は、読み出し位置のポインタを管理するとともに、古いデータパケットを削除するためのエージング処理を行う。エージング処理による削除対象のデータパケットは、例えば、読み出し位置のポインタが示すデータパケット（あるいは、再送用に保持される読み取り済みのデータパケットのうちの最新の所定個数のデータパケット）よりもさらに古いデータパケットである。
【０２８２】
バッファ部４０３におけるバッファリング時間は、長ければ長いほど、再送処理によるリカバリ性能が向上する。しかし、バッファリング時間が長いほど（換言すれば、ｍが大きいほど）、受信から再生処理部４０４による再生までの遅延時間が長くなる。
【０２８３】
つまり、リカバリ性能と遅延時間はトレードオフの関係にある。したがって、バッファリング時間を規定するｍの値は、トレードオフを考慮に入れたうえで、実施形態に応じて適宜決められることが望ましい。
【０２８４】
図１３の例では、シーケンス番号がＱ番のデータパケットの受信を契機としてパケットロスが検出された時点で、シーケンス番号が（Ｑｌａｓｔ−ｍ＋１）番からＱｌａｓｔ番までのｍ個のデータパケットがバッファ部４０３にバッファリングされている。また、説明の簡単化のため、本実施形態ではデータパケットが固定長であるものとし、データパケットのサイズを「ｐＳｉｚｅ」と表記する。
【０２８５】
すると、バッファ部４０３に残っているデータパケットがすべて消費されて枯渇するまでにかかる時間（すなわち再生処理部４０４がｍ個のデータパケットをすべて読み終えるまでにかかる時間）は、式（５）の「Ｌｓｔａｒｔ」のとおりである。なお、式（５）における「ｃＲａｔｅ」は、再生処理部４０４によるバッファ消費レートである。
Lstart=m×pSize/cRate      (5)
【０２８６】
つまり、再生されるコンテンツ（例えば動画や音声）が飛ぶことを防ぐには、遅くとも、時間Ｌｓｔａｒｔが経過するまでには、シーケンス番号が（Ｑｌａｓｔ＋１）番のデータパケットのバッファ部４０３への格納処理が始まっている必要がある。また、再生処理部４０４がバッファ消費レートｃＲａｔｅで再生を続けるとすると、消失した（Ｑ−Ｑｌａｓｔ−１）個すべてのデータパケットの再生が終わるまでの時間は、式（６）の「Ｌｅｎｄ」のとおりである。
Lend=Lstart+(Q-Qlast-1)×pSize/cRate      (6)
【０２８７】
つまり、時間Ｌｅｎｄは、時間Ｌｓｔａｒｔに、消失した（Ｑ−Ｑｌａｓｔ−１）個すべてのデータパケットの読み出しにかかる時間を足した時間である。時間Ｌｅｎｄは、換言すれば、パケットロスのリカバリにかけることが許容される最長の時間である。
【０２８８】
そして、パケットロスを検出した通信装置４００が送信する図１２の再送要求パケット８０１における取得期限Ｔｓｔａｒｔと完了期限Ｔｅｎｄは、それぞれ、時間Ｌｓｔａｒｔと時間Ｌｅｎｄに基づいて設定される。具体的には、再送要求部４０７が図１１のステップＳ３０６に相当する図１４の処理を行うことで、取得期限Ｔｓｔａｒｔと完了期限Ｔｅｎｄが算出される。図１４は、再送期限を算出する処理のフローチャートである。
【０２８９】
まず、ステップＳ４０１で再送要求部４０７は、バッファ部４０３の残量を取得する。すなわち、再送要求部４０７は、バッファ部４０３の読み出し位置のポインタが示すシーケンス番号（Ｑｌａｓｔ−ｍ＋１）と、最新受信シーケンス番号Ｑｌａｓｔから、バッファ部４０３がバッファリング中のデータパケットの個数ｍを取得する。
【０２９０】
そして、次のステップＳ４０２で再送要求部４０７は、上記の式（５）と（６）にしたがって、バッファ枯渇予測時間Ｌｓｔａｒｔと、リカバリ完了までにかけることが許容される最長の時間Ｌｅｎｄを計算する。
【０２９１】
また、次のステップＳ４０３で再送要求部４０７は、図１１のステップＳ３０４で決定した再送要求先と通信装置４００との間のＲＴＴを取得する。本実施形態では、ＲＴＴは、既に取得されて再送要求先情報７０２に記憶されているので、再送要求部４０７は、ノード情報記憶部４０８内の再送要求先情報７０２を参照することで、ＲＴＴを取得することができる。
【０２９２】
そして、ステップＳ４０４で再送要求部４０７は、再送要求パケット８０１に設定する再送期限（つまり取得期限Ｔｓｔａｒｔと完了期限Ｔｅｎｄ）を算出する。すなわち、再送要求部４０７は、式（７）に示すように、ステップＳ４０２で算出した時間ＬｓｔａｒｔからステップＳ４０３で取得したＲＴＴを減じることにより、取得期限Ｔｓｔａｒｔを算出する。また、再送要求部４０７は、式（８）に示すように、ステップＳ４０２で算出した時間ＬｅｎｄからステップＳ４０３で取得したＲＴＴを減じることにより、完了期限Ｔｅｎｄを算出する。
Tstart=Lstart-RTT     (7)
Tend=Lend-RTT         (8)
【０２９３】
例えば、Ｌｓｔａｒｔ＝２５ｍｓ、Ｌｅｎｄ＝４０ｍｓ、ＲＴＴ＝６ｍｓとし、現在時刻が１０時２０分３０．４００秒だとする。すると、シーケンス番号が（Ｑｌａｓｔ＋１）番のデータパケットは、１０時２０分３０．４２５秒までにバッファ部４０３に格納され始める必要がある。また、シーケンス番号が（Ｑ−１）番のデータパケットは、１０時２０分３０．４４０秒までにバッファ部４０３に格納され終わっている必要がある。
【０２９４】
一方で、通信装置４００から再送要求先までの通信時間はＲＴＴの半分の３ｍｓであるから、今すぐ再送要求パケット８０１が送信されると仮定して再送要求パケット８０１が再送要求先に到着するのは、１０時２０分３０．４０３秒である。また、式（７）と（８）によれば、Ｔｓｔａｒｔ＝２５−６＝１９ｍｓであり、Ｔｅｎｄ＝４０−６＝３４ｍｓである。
【０２９５】
ここで、再送要求先のノードが、仮に、責任ノードとして自分自身を選択し、再送要求パケット８０１の受信からＴｓｔａｒｔ＝１９ｍｓ経過してから（つまり１０時２０分３０．４２２秒に）データパケットを送信し始めるとする。すると、送信されたデータパケットが通信装置４００に受信され始めるのは、その３ｍｓ（＝ＲＴＴ／２）後の１０時２０分３０．４２５秒である。よって、バッファ部４０３に残っているデータパケットが枯渇する前に、送信されたデータパケットの格納が始まる。
【０２９６】
同様に、再送要求先のノードが、仮に、責任ノードとして自分自身を選択し、再送要求パケット８０１の受信からＴｅｎｄ＝３４ｍｓ経過した時点（つまり１０時２０分３０．４３７秒に）データパケットの送信を完了するとする。すると、送信されたデータパケットが通信装置４００に受信され終わるのは、その３ｍｓ（＝ＲＴＴ／２）後の１０時２０分３０．４４０秒である。よって、許容範囲内の時間で再送によるリカバリが完了する。
【０２９７】
式（７）と（８）でＲＴＴの減算が行われる理由は、例えば上記の具体的な数値の例から理解されるとおりである。なお、式（７）と（８）ではＲＴＴの減算が行われるが、通信装置４００の処理遅延などを考慮に入れて、適宜の正のマージンがさらに減じられてもよい。そして、以上のようにして取得期限Ｔｓｔａｒｔと完了期限Ｔｅｎｄが算出された後、処理は図１１のステップＳ３０７に移行する。
【０２９８】
ステップＳ３０７で再送要求部４０７は、再送要求パケット８０１を生成し、送信部４０２に出力する。そして、送信部４０２が再送要求パケット８０１を送信する。具体的には、再送要求部４０７は、再送要求パケット８０１のヘッダを生成し、再送期限と再送範囲として、それぞれステップＳ３０５とＳ３０６で得られた値を設定し、再送先として通信装置４００自身のＩＰアドレスとポート番号を設定する。
【０２９９】
なお、再送要求部４０７は、ノード情報記憶部４０８内の自ノード情報を参照することで通信装置４００自身のＩＰアドレスを認識することができる。また、再送要求パケット８０１に設定するポート番号Ｐは、データ配信アプリケーション内で定数として定義されていてもよいし、図９のように自ノード情報に設定されていてもよく、いずれにしろ、再送要求部４０７が認識することができる。
【０３００】
そして、ステップＳ３０７での再送要求パケット８０１の送信後、あるいは、ステップＳ３０３でパケットロスが検出されなかった場合に、ステップＳ３０８の処理が行われる。具体的には、ロス検出部４０６が、最新受信シーケンス番号Ｑｌａｓｔを、ステップＳ３０１で得られたシーケンス番号Ｑに更新する。そして、処理はステップＳ３０９に移行する。
【０３０１】
ステップＳ３０９では、受信部４０１が、今回受信したデータパケット（つまりシーケンス番号がＱ番のデータパケット）をバッファ部４０３に格納する。
【０３０２】
続いて、ステップＳ３１０で転送処理部４０５が、ノード情報記憶部４０８内の子ノード情報を参照することにより、「通信装置４００には子ノードがあるか否か」を判断する。子ノードがある場合、処理はステップＳ３１１に移行する。子ノードがない場合、図１１の処理も終了する。
【０３０３】
ステップＳ３１１で転送処理部４０５は、今回受信されたデータパケット（つまりシーケンス番号がＱ番のデータパケット）を、送信部４０２を介して、子ノード情報が示す各子ノードに転送する。そして、図１１の処理も終了する。
【０３０４】
さて、続いて、再送要求パケットの受信を契機とする処理について、図１５〜１９を参照して説明する。
図１５は、本実施形態による再送制御の具体例を模式的に示す図である。本実施形態における再送制御の概要は、図１とともに説明したとおりである。しかし、より具体的には、再送要求を受信したノードは、各子ノードの送信可能総帯域幅と、図１１〜１４とともに説明した再送期限に関する制約条件を考慮に入れながら、責任ノードとして適切な子ノードを選び、各責任ノードに割り当てる特定情報の量を決める。図１５は、再送要求を受信したノードが、子ノードに再送要求を転送することによって子ノードに再送を委譲するとともに、自らも再送処理の一部を担う場合の処理について例示する図である。
【０３０５】
図１５の論理ネットワーク１００ｂは、ある論理ネットワークの一部を抜粋したものである。論理ネットワーク１００ｂは、ノードＮ３０〜Ｎ３５を含む。また、ノードＮ３１はノードＮ３０の子ノードであり、ノードＮ３３〜Ｎ３５はノードＮ３２の子ノードである。なお、ノードＮ３１、Ｎ３３〜Ｎ３５は、葉ノードでもよいし中継ノードでもよい。
【０３０６】
図８〜１０とともに説明したとおり、ノードＮ３３は、適宜のタイミングで、ノードＮ３３の送信可能総帯域幅Ｔｏｔａｌ（Ｎ３３）の通知９０１を親ノードＮ３２に送信する。同様に、ノードＮ３４も、適宜のタイミングで、ノードＮ３４の送信可能総帯域幅Ｔｏｔａｌ（Ｎ３４）の通知９０２を親ノードＮ３２に送信する。また、ノードＮ３５も、適宜のタイミングで、ノードＮ３５の送信可能総帯域幅Ｔｏｔａｌ（Ｎ３５）の通知９０３を親ノードＮ３２に送信する。
【０３０７】
また、送信可能総帯域幅の通知９０１〜９０３の送信とは独立して、論理ネットワーク１００ｂ内ではデータパケットの配信が行われる。図１５には、一連のデータパケットのうち、シーケンス番号が４１番から４９番のデータパケット９０４の配信が図示されている。
【０３０８】
具体的には、４１番から４９番のデータパケット９０４は、論理ネットワーク１００ｂ内で配信されて、ノードＮ３０に受信される。すると、ノードＮ３０は、４１番から４９番のデータパケット９０４を子ノードＮ３１に転送する。しかし、図１５の例では、ノードＮ３０とＮ３１の間のエッジに相当する通信路上で、何らかの原因により、４１番から４９番のデータパケット９０４が消失してしまう。
【０３０９】
また、４１番から４９番のデータパケット９０４は、論理ネットワーク１００ｂ内で配信されて、ノードＮ３２においても受信される。すると、ノードＮ３２は、４１番から４９番のデータパケット９０４を子ノードＮ３３〜Ｎ３５にそれぞれ転送する。図１５の例では、ノードＮ３３〜Ｎ３５は、いずれも、４１番から４９番のデータパケット９０４の受信に成功する。
【０３１０】
ところで、ノードＮ３１は、シーケンス番号が４０番のデータパケットの次に５０番のデータパケットをノードＮ３０から受信する。よって、ノードＮ３１は、図１１のステップＳ３０３の処理により、４１番から４９番のデータパケット９０４が消失したことを検出する（なぜなら、ステップＳ３０３においてＱｌａｓｔ＝４０かつＱ＝５０だからである）。そして、ノードＮ３１は、ステップＳ３０４で再送要求先としてノードＮ３２を選択する。
【０３１１】
さらに、ノードＮ３１は、ステップＳ３０５で再送範囲を「４１番から４９番」と算出する。また、ノードＮ３１は、ステップＳ３０６で再送期限を算出し、ステップＳ３０７で、再送範囲と再送期限を指定した再送要求９０５を送信する。図１５では再送要求９０５に指定された再送範囲が「＃４１−＃４９」と表記されている。
【０３１２】
ノードＮ３２が再送要求９０５の受信を契機として行う処理は、詳細については図１６〜１７とともに後述するが、概要は図１に関して説明したとおりである。すなわち、ノードＮ３２は、ノードＮ３２自身よりは子ノードＮ３３〜Ｎ３５を優先して責任ノードを選択する。
【０３１３】
そして、責任ノードの選択と各責任ノードへの割り当てに際しては、ノードＮ３２は、再送要求９０５で指定された再送期限と、子ノードＮ３３〜Ｎ３５それぞれからの通知９０１〜９０３で通知された各子ノードの送信可能総帯域幅を考慮に入れる。つまり、ノードＮ３２は、子ノードに再送を委譲した場合にも再送期限に関する制約条件が満たされるように、責任ノードとなり得る子ノードを選別する。また、ノードＮ３２は、子ノードに再送を委譲した場合にも再送期限に関する制約条件が満たされるように、責任ノードとして選んだ子ノードに割り当てる再送範囲を決定する。
【０３１４】
図１５の例では、ノードＮ３２が、ノードＮ３３を責任ノードとして選ぶとともに、ノードＮ３３には４１番から４３番のデータパケットを割り当てる。つまり、ノードＮ３２は、４１番から４３番を再送範囲として指定する再送要求９０６を、ノードＮ３３に送信する。換言すれば、ノードＮ３２は、受信した再送要求をノードＮ３３に転送するが、転送にあたっては、受信した再送要求９０５を再送要求９０６のように書き換える。
【０３１５】
また、ノードＮ３２は、ノードＮ３４を責任ノードとして選ぶとともに、ノードＮ３４には４４番から４６番のデータパケットを割り当てる。つまり、ノードＮ３２は、４４番から４６番を再送範囲として指定する再送要求９０７を、ノードＮ３４に送信する。換言すれば、ノードＮ３２は、受信した再送要求をノードＮ３４に転送するが、転送にあたっては、受信した再送要求９０５を再送要求９０７のように書き換える。
【０３１６】
さらに、ノードＮ３２は、ノードＮ３５を責任ノードとして選ぶとともに、ノードＮ３５には４７番から４８番のデータパケットを割り当てる。つまり、ノードＮ３２は、４７番から４８番を再送範囲として指定する再送要求９０８を、ノードＮ３５に送信する。換言すれば、ノードＮ３２は、受信した再送要求をノードＮ３５に転送するが、転送にあたっては、受信した再送要求９０５を再送要求９０８のように書き換える。
【０３１７】
そして、図１５の例では、ノードＮ３２が以上のようにして子ノードを優先的に責任ノードとして選択しても、まだ４９番のデータパケットが残っている。そこで、ノードＮ３２は、最後にノードＮ３２自身も責任ノードとして選択し、残った４９番のデータパケットをノードＮ３２自身に割り当てる。
【０３１８】
再送要求９０６を受信したノードＮ３３は、もし子ノードを持っていれば子ノードを優先して責任ノードを選択してもよいが、図１５の例では、ノードＮ３３自身が、４１番から４３番のデータパケット９０９をノードＮ３１に送信する。同様に、再送要求９０７を受信したノードＮ３４は、４４番から４６番のデータパケット９１０をノードＮ３１に送信し、再送要求９０８を受信したノードＮ３５は、４７番から４８番のデータパケット９１１をノードＮ３１に送信する。また、ノードＮ３２は、４９番のデータパケット９１２を送信する。その結果、ノードＮ３１は、４１番から４９番のデータパケットを受信する。
【０３１９】
続いて、図１６〜１７を参照して、再送要求の受信を契機として通信装置４００が実行する処理について説明する。根ノード、中継ノード、または葉ノードに相当する通信装置４００の受信部４０１が図１２の再送要求パケット８０１を受信し、再送要求パケット８０１を負荷分散処理部４１０に出力すると、負荷分散処理部４１０が図１６〜１７の処理を開始する。
【０３２０】
図１６〜１７の処理において、ステップＳ５０１〜Ｓ５０３は初期化のためのステップである。また、ステップＳ５０４〜Ｓ５１３は、子ノードの中から責任ノードを選択し、選択した責任ノードに、要求された特定情報の一部または全部である部分特定情報を対応づけるためのステップである。そして、ステップＳ５１４〜Ｓ５１９は、必要に応じて通信装置４００自身を責任ノードとして選択し、責任ノードとして選択した通信装置４００自身に、要求された特定情報の一部または全部である部分特定情報を対応づけるためのステップである。ステップＳ５２０〜Ｓ５２２は、再送要求パケット８０１の直接の送信元のノードに、ＡＣＫまたはＮＡＣＫを返すためのステップである。
【０３２１】
ステップＳ５０１で選択部４１１は、ノード情報記憶部４０８に格納されている子ノード情報において、一時使用帯域幅と一時使用期限のペアのうち、一時使用期限が切れているペアがもしあれば、当該ペアをクリアする。同様に、選択部４１１は、ノード情報記憶部４０８に格納されている自ノード情報において、一時使用帯域幅と一時使用期限のペアのうち、一時使用期限が切れているペアがもしあれば、当該ペアをクリアする。
【０３２２】
続いて、ステップＳ５０２で選択部４１１は、受信部４０１から受け取った再送要求パケット８０１に指定されている開始番号Ｑｆｒｏｍを読み取る。そして、選択部４１１は、読み取った開始番号Ｑｆｒｏｍの値を変数Ｕに代入することで、変数Ｕを初期化する。変数Ｕは、送信を要求されたＱｆｒｏｍ番からＱｔｏ番までのデータパケットのうちで、まだ責任ノードが決まっていない最初のデータパケットのシーケンス番号を示す。
【０３２３】
また、次のステップＳ５０３で選択部４１１は、責任子ノードを選択するためのインデックスを示す変数ｉを１に初期化する。
そして、次のステップＳ５０４で選択部４１１は、変数ｉの値が通信装置４００の子ノードの数（すなわち子ノード情報のエントリの数）以下であるか否かを判断する。
【０３２４】
変数ｉの値が通信装置４００の子ノードの数以下の場合、責任ノードの候補としてまだ注目していない子ノードが残っている。そこで、処理はステップＳ５０５に移行する。
逆に、変数ｉの値が通信装置４００の子ノードの数より大きい場合とは、次の（Ｐ−１）または（Ｐ−２）の場合である。（Ｐ−１）または（Ｐ−２）の場合、責任ノードとして通信装置４００自身を選択するか否かを決定するため、処理は図１７のステップＳ５１４に移行する。
（Ｐ−１）通信装置４００がまったく子ノードを持たない。
（Ｐ−２）通信装置４００は１つ以上の子ノードを持つ。そして、選択部４１１が既に、責任ノードの候補として通信装置４００のすべての子ノードに注目した。しかし、送信を要求されたＱｆｒｏｍ番からＱｔｏ番までのデータパケットのうち、まだ責任ノードに割り当てられずに残っているデータパケットが１つ以上ある。
【０３２５】
ステップＳ５０５〜Ｓ５０７で選択部４１１は、ｉ番目の子ノードを責任ノードとして選択可能か否かを判断する。具体的には、選択部４１１は、まずステップＳ５０５において、「ｉ番目の子ノードは、Ｕ番のデータパケットの取得期限に間に合うようにＵ番以降のデータパケットを送信することを保証できるか否か」を判断する。
【０３２６】
より具体的には、選択部４１１は、適宜の近似モデルによって遅延（以下「α」と表記する）を見積もり、見積もったαの値を用いて、式（９）が満たされるか否かを判断する。
Tstart+(Tend-Tstart)×(U-Qfrom)/(Qto-Qfrom+1)-α > 0     (9)
【０３２７】
なお、式（９）において、ＴｓｔａｒｔとＴｅｎｄは、図１２に示すとおり、受信部４０１が受信した再送要求パケット８０１に設定されている取得期限と完了期限の値である。また、式（９）において、ＱｆｒｏｍとＱｔｏは、受信部４０１が受信した再送要求パケット８０１に設定されている開始番号と終了番号の値である。以下、式（９）の意味について、変数Ｕが初期化された状態の場合と、変数Ｕの値が後述のステップＳ５１１で更新された場合に分けて説明する。
【０３２８】
ステップＳ５０２で変数Ｕが初期化された状態でステップＳ５０５が実行された場合、Ｕ＝Ｑｆｒｏｍである。よって、変数Ｕが初期化された状態のとき、式（９）は、式（１０）のように書き換えられる。
Tstart-α>0      (10)
【０３２９】
式（１０）は、「受信部４０１が受信した再送要求パケット８０１で要求された最初のデータパケット（つまりＱｆｒｏｍ番のデータパケット）の送信を、通信装置４００がｉ番目の子ノードに委譲しても問題ないか否か」に関する制約条件を示す。具体的には、通信装置４００がｉ番目の子ノードにデータパケットの送信を委譲する場合に生じると予測される遅延αよりも、再送要求パケット８０１で指定された取得期限Ｔｓｔａｒｔの示す時間の方が長ければ、委譲は許容可能である。そして、遅延αは、以下の（Ｑ−１）〜（Ｑ−４）を含む。
（Ｑ−１）通信装置４００自身の内部処理による遅延
（Ｑ−２）通信装置４００がｉ番目の子ノードにデータパケットの送信を委譲するための通知（すなわち新たな再送要求パケット８０１の送信）にかかる通信遅延
（Ｑ−３）ｉ番目の子ノードの内部処理による遅延
（Ｑ−４）データパケットの再送を要求した要求ノードに宛ててｉ番目の子ノードがデータパケットを送信する場合にかかる通信遅延と、要求ノードに宛てて通信装置４００自身がデータパケットを送信する場合にかかる通信遅延との差
【０３３０】
そして、上記（Ｑ−１）〜（Ｑ−４）をいかに見積もるかは、実施形態に応じて様々であってよい。つまり、遅延αを見積もるための近似モデルは実施形態に応じて様々である。
【０３３１】
例えば、（Ｑ−１）の遅延は、通信装置４００を実現するコンピュータ３００のＣＰＵ３０１の性能に依存する。そこで、通信装置４００は、予め、例えばダミーのノード情報とダミーの再送要求パケットを用いて図１６〜１７の処理を実行し、実行にかかった時間を、（Ｑ−１）の遅延時間として計測してもよい。
【０３３２】
あるいは、実施形態によっては、予備実験などから、ＣＰＵ３０１の性能を示す指標（例えばクロック周波数）の関数として（Ｑ−１）の遅延を表せる場合もある。その場合、選択部４１１は、ＣＰＵ３０１の性能を表す指標から、当該関数にしたがって、（Ｑ−１）の遅延を計算してもよい。
【０３３３】
同様に、（Ｑ−３）の遅延も、ｉ番目の子ノードを実現する他のコンピュータ３００のＣＰＵ３０１の性能に依存する。また、（Ｑ−３）の遅延も、（Ｑ−１）の遅延と類似の方法によって、ｉ番目の子ノードが予め計測することにより、またはｉ番目の子ノードが関数から予め計算することにより、得ることが可能である。
【０３３４】
そして、ｉ番目の子ノードが、計測または計算によって得た（Ｑ−３）の遅延を、親ノードである通信装置４００に予め通知することにより、通信装置４００（特に負荷分散処理部４１０の選択部４１１）は、（Ｑ−３）の遅延を認識することができる。あるいは、ｉ番目の子ノードは、ｉ番目の子ノードのＣＰＵ３０１の性能を示す指標を、親ノードである通信装置４００に通知してもよい。
【０３３５】
なお、（Ｑ−３）の遅延自体が通知される場合も、ｉ番目の子ノードのＣＰＵ３０１の性能を示す指標が通知される場合も、ｉ番目の子ノードからの通知は、例えば、図８や図１０に関して説明した送信可能総帯域幅の通知と同じ制御パケットに含まれていてもよい。通知を受信した通信装置４００は、ノード情報記憶部４０８内の子ノード情報に、ｉ番目の子ノードから通知された内容を記録することができる。そして、選択部４１１は、子ノード情報を参照し、必要に応じて計算を行うことにより、（Ｑ−３）の遅延を認識することができる。
【０３３６】
もちろん、実施形態によっては、より簡素な近似モデルにしたがって選択部４１１が（Ｑ−１）と（Ｑ−３）の遅延を認識してもよい。例えば、「論理ネットワーク１００内のすべてのノードは、ある一定レベル以上の性能のＣＰＵ３０１を有する」という仮定に基づく近似モデルが採用されてもよい。そして、選択部４１１は、上記「一定レベル」のＣＰＵ３０１による内部遅延として想定される定数値を、（Ｑ−１）と（Ｑ−３）の遅延と見なしてもよい。
【０３３７】
また、（Ｑ−２）の遅延は、通信装置４００とｉ番目の子ノードとの間のＲＴＴの半分と見積もることが妥当である。そして、通信装置４００とｉ番目の子ノードとの間のＲＴＴは、図９に関して説明したとおり、子ノード情報の一部として、ノード情報記憶部４０８に記録されている。したがって、選択部４１１は、子ノード情報を参照することにより、（Ｑ−２）の遅延を認識することができる。
【０３３８】
ところで、詳しくは後述するが、（Ｑ−４）の時間の長さは、論理ネットワーク１００のトポロジが変化せずに同じ要求ノードからの再送要求が２回以上生じる場合は、２回目以降の再送では、実測値に基づく見積もりが可能である。しかし、ある要求ノードからの初めての再送要求のときには、（Ｑ−４）の時間の長さを見積もる根拠となり得る実測値は存在しないので、（Ｑ−４）の時間の長さは何らかの近似モデルによって見積もられる。そこで、図１８と図１９を参照して、２つの近似モデルの例を説明する。
【０３３９】
図１８と図１９は、「取得期限に関する制約条件が満たされるか否か」ということを、それぞれ第１と第２の近似モデルによって判断する例を説明する図である。また、図１８と図１９は、図１のようにノードＮ５が最初に再送要求をノードＮ３に送信する場合に行われる、ノードＮ３からノードＮ６への委譲とノードＮ６からノードＮ１２への委譲の例を示す。
【０３４０】
また、図１８と図１９においては、ノードＮｊからノードＮｋまでの通信遅延を「Ｄｊ，ｋ」と表記する。通信遅延Ｄｊ，ｋは、ノードＮｊとノードＮｋの間のＲＴＴ（以下、「ＲＴＴｊ，ｋ」と表記する）の半分と見なせる。よって、任意のｊとｋについて、Ｄｊ，ｋ＝Ｄｋ，ｊ＝ＲＴＴｊ，ｋ／２である。ノードＮｊとノードＮｋは、いずれも、予めＲＴＴｊ，ｋを計測することにより、再送要求を受信する前に通信遅延Ｄｊ，ｋ（すなわちＤｋ，ｊ）を認識することができる。
【０３４１】
また、図１８と図１９においては、ノードＮｊの内部処理による遅延を「Ｉｊ」と表記する。ノードＮｊにとっての遅延Ｉｊは、上記（Ｑ−１）の遅延である。また、ノードＮｊの親ノードがノードＮｋであるとき、ノードＮｋにとっての遅延Ｉｊは、上記（Ｑ−３）の遅延である。そして、（Ｑ−１）と（Ｑ−３）に関して説明したとおり、ノードＮｊとＮｋのいずれも、何らかの方法により、再送要求を受信する前に遅延Ｉｊを認識することが可能である。
【０３４２】
また、図１、１８、および１９の例では、データパケットの消失を契機として再送を要求する要求ノードはノードＮ５であり、ノードＮ５にとっての再送要求先はノードＮ３である。そして、図１４のステップＳ４０４に関して説明したように、ノードＮ５が再送要求パケット８０１に取得期限として設定する値は、ステップＳ４０２でノードＮ５の再送要求部４０７が計算した時間Ｌｓｔａｒｔから、ＲＴＴ５，３を引いた値である。
【０３４３】
図１８と図１９では、ノードＮ５が再送要求パケット８０１に取得期限として設定する値を「Ｔａ」と表記してある。式（７）から、ノードＮ５が図１のステップＳ２０で送信する再送要求パケット８０１の取得期限の値Ｔａは、式（１１）のように表される。そして、式（１１）は図１８と図１９に表現されているとおりである。
Ta=Lstart-RTT5,3=Lstart-(D5,3+D3,5)      (11)
【０３４４】
よって、図１のステップＳ２０で送信された再送要求パケット８０１を受信したノードＮ３にとっては、図１６のステップＳ５０５の判断に用いる式（９）のＴｓｔａｒｔの値が、図１８および１９の値Ｔａである。そして、上記のとおり、Ｕ＝Ｑｆｒｏｍの初期状態においては、式（９）は式（１０）と同値である。
【０３４５】
また、式（１０）の遅延αは、上記（Ｑ−１）〜（Ｑ−４）を含む。そして、図１のステップＳ２０で送信された再送要求パケット８０１を受信したノードＮ３にとっては、（Ｑ−１）の遅延は、図１８に示すとおりノードＮ３自身の内部遅延Ｉ３である。また、ノードＮ３が図１６のステップＳ５０５で１番目の子ノードとしてノードＮ６に注目しているとする。すると、図１８に示すとおり、ノードＮ３にとっての（Ｑ−２）の遅延は遅延Ｄ３，６であり、ノードＮ３にとっての（Ｑ−３）の遅延は子ノードＮ６の内部遅延Ｉ６である。
【０３４６】
そして、図１８に示す近似モデルは、第１のノードから第２のノードまでの通信遅延を、第１のノードから第３のノードまでの通信遅延と第３のノードから第２のノードまでの通信遅延との和によって近似するモデルである。つまり、図１８の近似モデルによれば、ノードＮ３は、責任ノードの候補として子ノードＮ６に注目する場合に、ノードＮ６から要求ノードＮ５への通信遅延Ｄ６，５を、式（１２）のように近似する。
D6,5≒D6,3+D3,5      (12)
【０３４７】
図１６のステップＳ５０５の判断を行うノードＮ３の選択部４１１にとっての（Ｑ−４）の時間の長さは、（Ｄ６，５−Ｄ３，５）である。よって、式（１２）の近似のもとでは、ノードＮ３の選択部４１１にとっての（Ｑ−４）の時間の長さは、遅延Ｄ６，３と等しい。
【０３４８】
以上より、ノードＮ３の選択部４１１にとって、式（１０）の遅延αは、具体的には、式（１３）のとおりである。
α=I3+D3,6+I6+D6,3      (13)
【０３４９】
すなわち、要求ノードＮ５からの再送要求パケット８０１を受信したノードＮ３の選択部４１１にとって、式（１０）は、式（１４）のとおりである。
Ta-(I3+D3,6+I6+D6,3) > 0      (14)
【０３５０】
なお、図１８では、式（１４）の左辺の値を「Ｔｂ」と表記してある。図１８の近似モデルが採用される実施形態では、ノードＮ３の選択部４１１は、図１６のステップＳ５０５において、具体的には、値Ｔｂが０より大きいか否かを判断する。
【０３５１】
ここで説明の便宜上、図１８に例示するようにＴｂ＞０であるとする。また、説明の便宜上、仮に後述のステップＳ５０７の条件も満たされるとする。すると、詳しくは図１６のステップＳ５０８〜Ｓ５０９に関して後述するが、ノードＮ３は、子ノードＮ６に再送を委譲するための新たな再送要求パケット８０１を作成し、作成した再送要求パケット８０１を子ノードＮ６に送信する。
【０３５２】
そして、作成される新たな再送要求パケット８０１の取得期限としてノードＮ３が設定する値は、図１８に「Ｔｃ」と示す値である。値Ｔｃは、具体的には式（１５）のとおりである。
Tc=Ta-(I3+D3,6+D6,3)=Tb+I6      (15)
【０３５３】
そして、取得期限として値Ｔｃが設定された再送要求パケット８０１を図１のステップＳ３０で受信したノードＮ６の負荷分散処理部４１０は、図１６〜１７の処理を開始する。すると、ノードＮ６の選択部４１１にとっての式（９）と（１０）の取得期限Ｔｓｔａｒｔの値は、式（１５）の値Ｔｃである。また、ノードＮ６においても、Ｕ＝Ｑｆｒｏｍの初期状態では、式（９）は式（１０）と同値である。
【０３５４】
そして、ノードＮ６にとっては、（Ｑ−１）の遅延はノードＮ６自身の内部遅延Ｉ６である。また、ノードＮ６が図１６のステップＳ５０５で１番目の子ノードとしてノードＮ１２に注目しているとする。すると、図１８に示すとおり、ノードＮ６にとっての（Ｑ−２）の通信遅延は遅延Ｄ６，１２であり、ノードＮ６にとっての（Ｑ−３）の遅延は子ノードＮ１２の内部遅延Ｉ１２である。
【０３５５】
そして、図１８の近似モデルによれば、ノードＮ６は、責任ノードの候補として子ノードＮ１２に注目する場合に、ノードＮ１２から要求ノードＮ５への通信遅延Ｄ１２，５を、式（１６）のように近似する。
D12,5≒D12,6+D6,5      (16)
【０３５６】
また、図１６のステップＳ５０５の判断を行うノードＮ６の選択部４１１にとっての（Ｑ−４）の時間の長さは、（Ｄ１２，５−Ｄ６，５）である。よって、式（１６）の近似のもとでは、ノードＮ６の選択部４１１にとっての（Ｑ−４）の時間の長さは、遅延Ｄ１２，６と等しい。
【０３５７】
以上より、ノードＮ６の選択部４１１にとって、式（１０）の遅延αは、具体的には、式（１７）のとおりである。
α=I6+D6,12+I12+D12,6      (17)
【０３５８】
すなわち、親ノードＮ３から再送要求パケット８０１を受信した子ノードＮ６の選択部４１１にとって、式（１０）は式（１８）のとおりである。
Tc-(I6+D6,12+I12+D12,6) > 0      (18)
【０３５９】
なお、図１８では、式（１７）の左辺の値を「Ｔｄ」と表記してある。図１８の近似モデルが採用される実施形態では、ノードＮ６の選択部４１１は、図１６のステップＳ５０５において、具体的には、値Ｔｄが０より大きいか否かを判断する。
【０３６０】
ここで説明の便宜上、図１８に例示するようにＴｄ＞０であるとする。また、説明の便宜上、仮に後述のステップＳ５０７の条件も満たされるとする。すると、詳しくは図１６のステップＳ５０８〜Ｓ５０９に関して後述するが、ノードＮ６は、子ノードＮ１２に再送を委譲するための新たな再送要求パケット８０１を作成し、作成した再送要求パケット８０１を子ノードＮ１２に送信する。
【０３６１】
そして、作成される新たな再送要求パケット８０１の取得期限としてノードＮ６が設定する値は、図１８に「Ｔｅ」と示す値である。値Ｔｅは、具体的には式（１９）のとおりである。
Te=Tc-(I6+D6,12+D12,6)=Td+I12      (19)
【０３６２】
そして、取得期限として値Ｔｅが設定された再送要求パケット８０１を図１のステップＳ３３で受信したノードＮ１２の負荷分散処理部４１０は、図１６〜１７の処理を開始する。
【０３６３】
以上のように、再送要求パケット８０１の取得期限Ｔｓｔａｒｔの値は、「再送要求パケット８０１を受信したノード自身がデータパケットの送信を行うと仮定した場合に、当該ノードはいつまでに送信を開始する必要があるか」という制約条件を示す。
【０３６４】
例えば、図１８のように、値Ｔａが設定された再送要求パケット８０１は、ノードＮ３に受信される。そして、値Ｔａは、「ノードＮ３がデータパケットをノードＮ５に送信する場合は、ノードＮ３は値Ｔａが示す時間以内にデータパケットの送信を開始しなくてはならない」という制約条件を示す。
【０３６５】
同様に、図１８の例では、値Ｔｃが設定された再送要求パケット８０１は、ノードＮ６に受信される。そして、値Ｔｃは、「ノードＮ６がデータパケットをノードＮ５に送信する場合は、ノードＮ６は値Ｔｃが示す時間以内にデータパケットの送信を開始しなくてはならない」という制約条件を示す。
【０３６６】
同様に、図１８の例では、値Ｔｅが設定された再送要求パケット８０１は、ノードＮ１２に受信される。そして、値Ｔｅは、「ノードＮ１２がデータパケットをノードＮ５に送信する場合は、ノードＮ１２は値Ｔｅが示す時間以内にデータパケットの送信を開始しなくてはならない」という制約条件を示す。
【０３６７】
以上例示したとおり、ある再送要求パケット８０１に取得期限として設定される値は、当該再送要求パケット８０１を受信するノード自身がデータパケットの送信を行う場合についての制約条件を表す。そして、再送の委譲のたびに、何らかの遅延が生じる。したがって、再送の委譲のたびに、新たな再送要求パケット８０１に取得期限として設定される値は、適宜の近似モデルに基づいて見積もられた遅延αに基づいて、順次減らされてゆく。例えば、図１８のように、取得期限として設定される値は、再送の委譲のたびに、値Ｔａから値Ｔｃへ、値Ｔｃから値Ｔｅへ、というように順次減らされてゆく。
【０３６８】
ところで、上記の図１８の近似モデルとは別の近似モデルを採用する実施形態も可能である。具体的には、（Ｑ−４）の時間の長さに関して、図１９に示す近似モデルが採用されてもよい。
【０３６９】
図１９に示す近似モデルは、第１のノードと第２のノードの間の物理ネットワーク上の距離が比較的近い場合に、第１のノードから第３のノードまでの通信遅延と第２のノードから第３のノードまでの通信遅延を同じと見なす近似モデルである。図１９の近似モデルは、以下に説明する場合に特に好適である。
【０３７０】
ある種のＡＬＭシステムでは、新規ノードが配信ツリーへ参加しようとするときに、物理ネットワーク上で新規ノードに近いノードが優先的に親ノードとして選ばれる。以下、説明の便宜上、このような親ノードの選択アルゴリズムを「物理距離優先アルゴリズム」と呼ぶことにする。物理距離優先アルゴリズムによれば、配信遅延の短縮が期待される。
【０３７１】
例えば図１の論理ネットワーク１００が、物理距離優先アルゴリズムによって構築された配信ツリーであるとする。すると、「ノードＮ３とＮ６の間の物理ネットワーク上の距離は近い」という蓋然性が高く、「ノードＮ６とＮ１２の間の物理ネットワーク上の距離は近い」という蓋然性も高い。なお、２つのノードの間の物理ネットワーク上での距離は、例えば、「２つのノードの間に存在するルータの数」と定義されてもよい。
【０３７２】
そして、親ノードと子ノードの間の物理ネットワーク上の距離が近い場合、親ノードから或るノードまでの通信遅延と、子ノードから当該「或るノード」までの通信遅延は、ほとんど同じであると推定される。つまり、上記２つの通信遅延の差は、わずかである。
【０３７３】
そこで、図１９の近似モデルでは、「親ノードＮ３と子ノードＮ６の間の物理ネットワーク上の距離は近い」という推定にしたがい、ノードＮ３からノードＮ５までの通信遅延とノードＮ６からノードＮ５までの通信遅延を同じと見なす近似が行われる。同様に、図１９の近似モデルでは、「親ノードＮ６と子ノードＮ１２の間の物理ネットワーク上の距離は近い」という推定にしたがい、ノードＮ６からノードＮ５までの通信遅延とノードＮ１２からノードＮ５までの通信遅延を同じと見なす近似が行われる。すなわち、図１９の近似モデルによれば、通信遅延は式（２０）のように近似される。
D3,5≒D6,5≒D12,5      (20)
【０３７４】
図１９および式（２０）に例示する近似モデルによれば、上記（Ｑ−４）の時間の長さは、ゼロと見積もられる。もちろん、実際には、多くの場合において、通信遅延Ｄ６，５と通信遅延Ｄ３，５の差Ｔｆは厳密にはゼロではなく、通信遅延Ｄ１２，５と通信遅延Ｄ３，５の差Ｔｇも厳密にはゼロではない。しかしながら、差Ｔｆの絶対値は小さいと推定され、差Ｔｇの絶対値も小さいと推定される。したがって、（Ｑ−４）の時間の長さは、ゼロと見積もられる。
【０３７５】
したがって、図１９の近似モデルのもとでは、図１６のステップＳ５０５の判断を行うノードＮ３の選択部４１１にとって、式（１０）の遅延αは、具体的には、式（２１）のとおりである。
α=I3+D3,6+I6      (21)
【０３７６】
すなわち、要求ノードＮ５からの再送要求パケット８０１を受信したノードＮ３の選択部４１１にとって、式（１０）は、式（２２）のとおりである。
Ta-(I3+D3,6+I6) > 0      (22)
【０３７７】
なお、図１９では、式（２２）の左辺の値を「Ｔｈ」と表記してある。図１９の近似モデルが採用される実施形態では、ノードＮ３の選択部４１１は、図１６のステップＳ５０５において、具体的には、値Ｔｈが０より大きいか否かを判断する。
【０３７８】
ここで説明の便宜上、図１９に例示するようにＴｈ＞０であるとする。また、説明の便宜上、仮に後述のステップＳ５０７の条件も満たされるとする。すると、詳しくは図１６のステップＳ５０８〜Ｓ５０９に関して後述するが、ノードＮ３は、子ノードＮ６に再送を委譲するための新たな再送要求パケット８０１を作成し、作成した再送要求パケット８０１を子ノードＮ６に送信する。
【０３７９】
そして、作成される新たな再送要求パケット８０１の取得期限としてノードＮ３が設定する値は、図１９に「Ｔｉ」と示す値である。値Ｔｉは、具体的には式（２３）のとおりである。
Ti=Ta-(I3+D3,6)=Th+I6      (23)
【０３８０】
そして、取得期限として値Ｔｉが設定された再送要求パケット８０１を図１のステップＳ３０で受信したノードＮ６の負荷分散処理部４１０は、図１６〜１７の処理を開始する。すると、ノードＮ６の選択部４１１にとっての式（９）と（１０）の取得期限Ｔｓｔａｒｔの値は、式（２３）の値Ｔｉである。また、ノードＮ６においても、Ｕ＝Ｑｆｒｏｍの初期状態では、式（９）は式（１０）と同値である。
【０３８１】
そして、ノードＮ６にとっては、（Ｑ−１）の遅延はノードＮ６自身の内部遅延Ｉ６である。また、ノードＮ６が図１６のステップＳ５０５で１番目の子ノードとしてノードＮ１２に注目しているとする。すると、図１９に示すとおり、ノードＮ６にとっての（Ｑ−２）の通信遅延は遅延Ｄ６，１２であり、ノードＮ６にとっての（Ｑ−３）の遅延は子ノードＮ１２の内部遅延Ｉ１２である。
【０３８２】
そして、図１９の近似モデルでは、上記のとおり（Ｑ−４）の時間の長さはゼロと見積もられる。したがって、ノードＮ６の選択部４１１にとって、式（１０）の遅延αは、具体的には、式（２４）のとおりである。
α=I6+D6,12+I12      (24)
【０３８３】
すなわち、親ノードＮ３から再送要求パケット８０１を受信した子ノードＮ６の選択部４１１にとって、式（１０）は式（２５）のとおりである。
Ti-(I6+D6,12+I12) > 0      (25)
【０３８４】
なお、図１９では、式（２５）の左辺の値を「Ｔｊ」と表記している。図１９の近似モデルが採用される実施形態では、ノードＮ６の選択部４１１は、図１６のステップＳ５０５において、具体的には、値Ｔｊが０より大きいか否かを判断する。
【０３８５】
ここで説明の便宜上、図１９に例示するようにＴｊ＞０であるとする。また、説明の便宜上、仮に後述のステップＳ５０７の条件も満たされるとする。すると、詳しくは図１６のステップＳ５０８〜Ｓ５０９に関して後述するが、ノードＮ６は、子ノードＮ１２に再送を委譲するための新たな再送要求パケット８０１を作成し、作成した再送要求パケット８０１を子ノードＮ１２に送信する。
【０３８６】
そして、作成される新たな再送要求パケット８０１の取得期限としてノードＮ６が設定する値は、図１９に「Ｔｋ」と示す値である。値Ｔｋは、具体的には式（２６）のとおりである。
Tk=Ti-(I6+D6,12)=Tj+I12      (26)
【０３８７】
そして、取得期限として値Ｔｋが設定された再送要求パケット８０１を図１のステップＳ３３で受信したノードＮ１２の負荷分散処理部４１０は、図１６〜１７の処理を開始する。
【０３８８】
以上のように、どのような近似モデルが採用されるにしろ、再送要求パケット８０１に取得期限Ｔｓｔａｒｔとして設定される値は、再送要求パケット８０１を受信したノード自身がデータパケットの送信を行う場合の送信開始期限に関する制約条件を示す。よって、選択部４１１は、ｉ番目の子ノードが責任ノードとして選択可能か否かを判断する際には、ｉ番目の子ノード（つまり、もし責任ノードとして選択されれば新たな再送要求パケット８０１を受信することになるノード）の内部処理遅延を考慮に入れる。他方、ｉ番目の子ノードが責任ノードとして実際に選択された場合にｉ番目の子ノード宛に送信される新たな再送要求パケット８０１の取得期限の計算においては、ｉ番目の子ノードの内部処理遅延は減算されない。なぜなら、ｉ番目の子ノードの内部処理遅延は、新たな再送要求パケット８０１をｉ番目の子ノードが受信した後に生じる遅延だからである。
【０３８９】
ここで、図１６のステップＳ５０５の説明に戻る。図１８〜１９の例は、Ｕ＝Ｑｆｒｏｍという初期状態におけるステップＳ５０５の判断の例である。しかし、変数Ｕの値は、後のステップＳ５１１で更新されて、開始番号Ｑｆｒｏｍより大きくなる場合がある。
【０３９０】
また、Ｕ＞Ｑｆｒｏｍのとき、図１３からも明らかなとおり、Ｕ番のデータパケットの取得期限はＱｆｒｏｍ番のデータパケットの取得期限より遅い。そして、Ｕ番とＱｆｒｏｍ番のデータパケットの取得期限の差は、（Ｕ−Ｑｆｒｏｍ）個のデータパケットの消費にかかる時間である。
【０３９１】
ここで、受信部４０１が受信した再送要求パケット８０１に指定されている完了期限Ｔｅｎｄと取得期限Ｔｓｔａｒｔの差は、図１３〜１４からも理解されるように、（Ｑｔｏ−Ｑｆｒｏｍ＋１）個のデータパケットの消費にかかる時間である。よって、（Ｕ−Ｑｆｒｏｍ）個のデータパケットの消費にかかる時間は、式（２７）のとおりである。
(Tend-Tstart)×(U-Qfrom)/(Qto-Qfrom+1)      (27)
【０３９２】
つまり、Ｕ番のデータパケットの取得期限は、Ｑｆｒｏｍ番のデータパケットの取得期限よりも、式（２７）の時間のぶんだけ遅い。式（９）は、以上説明したような、Ｕ番とＱｆｒｏｍ番のデータパケットの取得期限の差を考慮に入れた式であり、式（１０）の左辺に式（２７）の時間を足した式である。
【０３９３】
例えば、Ｑｆｒｏｍ＝１０の場合、受信部４０１が受信した再送要求パケット８０１に設定されている取得期限Ｔｓｔａｒｔは、より具体的には、１０（＝Ｑｆｒｏｍ）番のデータパケットの取得期限を示す。また、例えば、Ｑｔｏ＝１５の場合、受信部４０１が受信した再送要求パケット８０１に設定されている完了期限Ｔｅｎｄは、より具体的には、１５（＝Ｑｔｏ）番のデータパケットの完了期限を示す。
【０３９４】
また、上記のＱｆｒｏｍ＝１０かつＱｔｏ＝１５の場合において、さらにＵ＝１２と仮定して、Ｕ＞Ｑｆｒｏｍの場合の式（９）について説明すれば次のとおりである。
この場合、送信が要求されているデータパケットの個数は６（＝Ｑｔｏ−Ｑｆｒｏｍ＋１）個であり、既に１０番と１１番の２（＝Ｕ−Ｑｆｒｏｍ）個のデータパケットはいずれかの責任ノードに割り当て済みである。よって、１２（＝Ｕ）番のデータパケットの取得期限は、式（２７）の時間（つまり（Ｔｅｎｄ−Ｔｓｔａｒｔ）×２／６）だけ、１０番のデータパケットの取得期限Ｔｓｔａｒｔよりも遅い。
【０３９５】
以上説明したとおり、式（９）は変数Ｕの値によらず適用可能なように一般化された式である。よって、選択部４１１は、ステップＳ５０５において式（９）が満たされるか否かを判断する。選択部４１１は、式（９）により、「ｉ番目の子ノードは、Ｕ番のデータパケットの取得期限に間に合うようにＵ番以降のデータパケットを送信することを保証できるか否か」を判断することができる。
【０３９６】
そして、式（９）が満たされる場合、「ｉ番目の子ノードに、何番のデータパケットまでを割り当てることが可能か」を判断するため、処理はステップＳ５０６に移行する。
逆に、式（９）が満たされない場合、選択部４１１は、「ｉ番目の子ノードは責任ノードとして適していない」と判断する。そして、選択部４１１は、責任ノードの候補として他の子ノードに注目するために、続いてステップＳ５１３の処理を実行する。
【０３９７】
ステップＳ５０６で選択部４１１は、ｉ番目の子ノードが完了期限に間に合うように送信を保証することが可能な、Ｑｔｏ番以下で最大の番号を計算する。そして、選択部４１１は、計算結果を変数Ｖに代入する。
【０３９８】
つまり、選択部４１１は、式（２８）と（２９）をともに満たす最大の番号Ｖを計算する。なお、番号Ｖは整数である。
α+(V-U+1)×pSize/B+β <
Tend-(Tend-Tstart)×(Qto-V)/(Qto-Qfrom+1)      (28)
V≦Qto      (29)
【０３９９】
ここで、式（２８）の左辺の「α」は、式（９）と同じである。つまり、「α」は、ｉ番目の子ノードへの委譲にともなう遅延を表す。
また、式（２８）の「Ｂ」は、ｉ番目の子ノードの送信可能総帯域幅から、ｉ番目の子ノードの一時使用帯域幅の合計を引いた残りの帯域幅である。つまり、帯域幅Ｂは、ｉ番目の子ノードを根ノードとする部分グラフに属するノードが現在使用可能な帯域幅の総和である。選択部４１１は、ノード情報記憶部４０８の子ノード情報を参照することで、式（２８）の「Ｂ」の値を得ることができる。
【０４００】
なお、図９を参照して説明したとおり、ｉ番目の子ノードに対応して、一時使用帯域幅が記憶されていないこともあるし、１つまたは複数の一時使用帯域幅が記憶されていることもある。一時使用帯域幅が記憶されていない場合は、式（２８）の「Ｂ」は、ｉ番目の子ノードの送信可能総帯域幅に等しい。
【０４０１】
さらに、前述のとおり本実施形態では、データパケットが固定長であり、データパケットの長さはｐＳｉｚｅである。そして、Ｕ番からＶ番までのデータパケットの数は（Ｖ−Ｕ＋１）個である。よって、式（２８）の左辺の第２項（つまり、（Ｖ−Ｕ＋１）×ｐＳｉｚｅ／Ｂ）は、「Ｕ番からＶ番までのデータパケットの送信のために帯域幅Ｂのすべてが占有される」と仮定した場合の、送信にかかる時間を示す。
【０４０２】
式（２８）の左辺の第３項の「β」はマージンである。マージンβは、ゼロでもよいが、実施形態に応じた適宜の正の値であることが望ましい。マージンβを用いる理由は次のとおりである。
【０４０３】
仮に選択部４１１がｉ番目の子ノードを責任ノードとして選択したとしても、ｉ番目の子ノード自身がデータパケットの送信を行うとは限らない。例えば、図１の例では、ノードＮ３によって責任ノードとして選択されたノードＮ６は、データパケットの送信自体は行わず、送信を子ノードＮ１２とＮ１３に委譲する。
【０４０４】
そして、仮に図１のようにノードＮ６がさらに別のノードＮ１２やＮ１３にデータパケットの送信を委譲すれば、再委譲にともなう新たな遅延が発生する。しかし、ノードＮ３の選択部４１１は、「仮にノードＮ３がデータパケットの送信をノードＮ６に委譲した場合に、ノードＮ６がさらに別のノードにデータパケットの送信を委譲するか否か」を認識しない。つまり、ノードＮ３は、ノードＮ６からノードＮ１２やＮ１３への再委譲にともなう新たな遅延が発生するか否かを認識せず、新たな遅延の長さも認識しない。
【０４０５】
また、ｉ番目の子ノードが中継ノードの場合、ｉ番目の子ノードについての式（２８）の帯域幅Ｂは、ｉ番目の子ノード自身が使用可能な帯域幅と、ｉ番目の子ノードの子孫ノードが使用可能な帯域幅の和である。したがって、「Ｕ番からＶ番までのデータパケットの送信のために帯域幅Ｂのすべてが占有される」という上記の仮定は、「ｉ番目の子ノードとその子孫ノードのすべてが、データパケットの送信を同時に行う」という仮定を含意する。しかし、仮にｉ番目の子ノードからの再委譲が生じれば、ｉ番目の子ノードとその子孫ノードがデータパケットの送信をそれぞれ開始する時刻は、互いに異なるであろう。
【０４０６】
つまり、上記で含意された仮定は常に成立するとは限らない。そのため、式（２８）の左辺の第２項は、再委譲が生じる場合は、少々の誤差を含み得る。
そこで、再委譲の可能性を考慮に入れるため、式（２８）には適宜のマージンβが使われる。マージンβの値は、例えば、予備実験などから求めた定数でもよい。
【０４０７】
あるいは、各個別のノードが、「当該個別のノードは葉ノードであるか否か」を示す情報を親ノードに通知することで、親ノードは再委譲の可能性の有無を認識してもよい。親ノードは子ノードから通知された情報を、子ノード情報の一部としてノード情報記憶部４０８に記憶することができる。
【０４０８】
そして、例えば、通信装置４００のｉ番目の子ノードが葉ノードの場合、通信装置４００の選択部４１１は、「ｉ番目の子ノードからの再委譲は生じない」と判断し、マージンβをゼロに設定してもよい。逆に、通信装置４００のｉ番目の子ノードが中継ノードの場合、通信装置４００の選択部４１１は、マージンβを正の値（例えば予め決められた正の定数）に設定することが好ましい。
【０４０９】
また、式（２８）の右辺は、Ｖ番のデータパケットの完了期限を示す。Ｖ番のデータパケットの完了期限は、Ｑｔｏ番のデータパケットの完了期限よりも、（Ｑｔｏ−Ｖ）個のデータパケットの消費にかかる時間のぶんだけ早い。そして、式（２７）に関する説明と同様の理屈から、（Ｑｔｏ−Ｖ）個のデータパケットの消費にかかる時間は、式（３０）のとおりである。
(Tend-Tstart)×(Qto-V)/(Qto-Qfrom+1)      (30)
【０４１０】
よって、式（２８）の右辺は、Ｑｔｏ番のデータパケットの完了期限Ｔｅｎｄから式（３０）の時間を引いた差を示す。したがって、式（２８）と（２９）をともに満たすＶに関しては、「再委譲の可能性も考慮に入れても、ｉ番目の子ノードは、Ｖ番までのデータパケットの送信がＶ番のデータパケットの完了期限までに終了することを、ほぼ確実に保証することができる」と言える。
【０４１１】
そして、上記のとおりステップＳ５０６で選択部４１１は、式（２８）と（２９）を満たす最大の整数を計算し、計算結果を変数Ｖに代入する。
【０４１２】
続いて、ステップＳ５０７で選択部４１１は、Ｕ≦Ｖであるか否かを判断する。
Ｕ≦Ｖのとき、ｉ番目の子ノードには少なくとも１つのデータパケット（具体的には（Ｖ−Ｕ＋１）個のデータパケット）を割り当てることが可能である。すなわち、ｉ番目の子ノードは、責任ノードとして選択可能である。よって、対応づけ部４１２は、ｉ番目の子ノードにＵ番からＶ番までのデータパケットを対応づける（つまり割り当てる）。そして、ｉ番目の子ノードへの委譲のため、処理はステップＳ５０８に移行する。
【０４１３】
逆に、Ｕ≦Ｖではないとき、選択部４１１は「ｉ番目の子ノードは責任ノードに適していない」と判断する。そして、選択部４１１は、責任ノードの候補として他の子ノードに注目するために、続いてステップＳ５１３の処理を実行する。
【０４１４】
さて、ステップＳ５０８で要求生成部４１３は、ｉ番目の子ノードへ送信する新たな再送要求パケット８０１に設定する取得期限と完了期限を計算する。
以下では説明の便宜上、ステップＳ５０８で計算される取得期限と完了期限をそれぞれ「Ｔｓｔａｒｔ２」と「Ｔｅｎｄ２」と表記する。また、ｉ番目の子ノードの内部処理による遅延（すなわち上記（Ｑ−３）の遅延）を「Ｉ」と表記する。
【０４１５】
ステップＳ５０８で要求生成部４１３は、具体的には式（３１）にしたがって取得期限Ｔｓｔａｒｔ２を計算し、式（３２）にしたがって完了期限Ｔｅｎｄ２を計算する。
Tstart2=Tstart+(Tend-Tstart)×(U-Qfrom)/(Qto-Qfrom+1)-α+I      (31)
Tend2=Tend-(Tend-Tstart)×(Qto-V)/(Qto-Qfrom+1)-α+I            (32)
【０４１６】
式（３１）の右辺は、式（９）の左辺と遅延Ｉの和である。式（３１）において遅延Ｉが足される意味は、図１８の値ＴｃおよびＴｅを計算するための式（１５）および（１９）と、図１９の値ＴｉおよびＴｋを計算するための式（２３）および（２６）から明らかであろう。
【０４１７】
また、式（３２）の右辺は、式（２８）の右辺から遅延αを引き、式（３１）と同様に内部処理による遅延Ｉを足すことで得られる。
式（３１）と（３２）のとおり、要求生成部４１３は、責任子ノード宛に送信する新たな再送要求パケット８０１用に制約条件を算出する際には、少なくとも、通信装置４００と責任子ノードとの間の通信時間（つまり遅延αに含まれる通信遅延）を用いる。また、要求生成部４１３は、新たな再送要求パケット８０１用に制約条件を算出する際には、さらに、対応づけ部４１２が当該責任子ノードに特定情報のうちどの部分を対応づけたかということ（つまり変数ＵとＶで示される範囲）も考慮に入れる。
【０４１８】
なお、式（２８）のマージンβは、「ｉ番目の子ノードからの再委譲が発生するか否か」ということを認識しない選択部４１１が、ｉ番目の子ノードへの委譲の実現可能性（feasibility）をより適切に見積もるために導入される項である。一方、完了期限Ｔｅｎｄ２は、ｉ番目の子ノードへの通知のために計算される値である。そして、完了期限Ｔｅｎｄ２の設定された再送要求パケット８０１を受信するｉ番目の子ノード自身は、もちろん「ｉ番目の子ノードからの再委譲が発生するか否か」ということを認識する。そのため、式（３２）の右辺では、マージンβを引く必要はない。
【０４１９】
なお、式（３２）から式（３１）を引くと式（３３）が得られる。式（３３）の右辺は、パケットロスを検出して再送を要求した要求ノードの再生処理部４０４が（Ｖ−Ｕ＋１）個のデータパケットを再生する（つまり消費する）のにかかる時間である。
Tend2-Tstart2=(Tend-Tstart)×(V-U+1)/(Qto-Qfrom+1)      (33)
【０４２０】
つまり、本実施形態で再送要求パケット８０１に設定される完了期限と取得期限の差は、再送要求パケット８０１に設定される終了番号と開始番号の差に応じて一意に決まる値である。したがって、例えば完了期限は開始番号と終了番号と取得期限から計算可能であるから、実施形態によっては、再送要求パケット８０１から完了期限のフィールドが省略されてもよい。
【０４２１】
要求生成部４１３は、以上のようにして取得期限Ｔｓｔａｒｔ２と完了期限Ｔｅｎｄ２を計算した後、続いて、ステップＳ５０９において新たな再送要求パケット８０１を生成する。そして、要求生成部４１３は生成した再送要求パケット８０１を送信部４０２に出力し、送信部４０２は再送要求パケット８０１をｉ番目の子ノードに送信する。
【０４２２】
具体的には、要求生成部４１３は、新たな再送要求パケット８０１のヘッダに適宜の値を設定する。要求生成部４１３は、ノード情報記憶部４０８内の自ノード情報と子ノード情報を参照して、再送要求パケット８０１のヘッダに設定する送信元ＩＰアドレス、送信先ＩＰアドレス、ポート番号などを取得することができる。
【０４２３】
また、要求生成部４１３は、新たな再送要求パケット８０１に、ステップＳ５０８で計算した取得期限Ｔｓｔａｒｔ２と完了期限Ｔｅｎｄ２を設定する。さらに、要求生成部４１３は、新たな再送要求パケット８０１の再送先のＩＰアドレスとポート番号のフィールドに、受信部４０１が受信した再送要求パケット８０１の再送先のＩＰアドレスとポート番号の値をコピーする。そして、要求生成部４１３は、新たな再送要求パケット８０１の開始番号と終了番号に、それぞれ変数ＵとＶの値を設定する。
【０４２４】
以上のようにして各フィールドに値が設定された新たな再送要求パケット８０１が、送信部４０２から送信される。
また、次のステップＳ５１０で対応づけ部４１２は、ノード情報記憶部４０８内の子ノード情報においてｉ番目の子ノードに対応する一時使用帯域幅と一時使用期限を設定する。つまり、対応づけ部４１２は、一時使用帯域幅と一時使用期限の新たなペアを生成し、子ノード情報においてｉ番目の子ノードに対応するエントリに、生成した新たなペアを登録する。
【０４２５】
具体的には、ステップＳ５０６で式（２８）を満たすことが判明した最大の番号Ｖが、式（２９）も満たす場合（以下では便宜上「第１の場合」という）には、対応づけ部４１２は、ｉ番目の子ノードの送信可能総帯域幅自体を一時使用帯域幅に設定する。
【０４２６】
逆に、テップＳ５０６で式（２８）を満たすことが判明した最大の番号Ｖが、再送を要求されたデータパケットの終了番号Ｑｔｏよりも大きい場合もあり得る（以下では便宜上「第２の場合」という）。第２の場合、対応づけ部４１２は、第１の場合と同様に、ｉ番目の子ノードの送信可能総帯域幅自体を一時使用帯域幅に設定してもよい。あるいは、第２の場合、対応づけ部４１２は、例えば式（３４）にしたがって一時使用帯域幅ｔｍｐＢを計算してもよい。
tmpB=pSize×(V-U+1)/(Tend-α+I)      (34)
【０４２７】
式（３４）は、「ｉ番目の子ノードが、Ｕ番からＶ番までのデータパケットを、（Ｔｅｎｄ−α＋Ｉ）という時間をかけて送信する」という仮定のもとでの一時使用帯域幅を計算する式である。なお、式（３４）の「α」と「Ｉ」は、式（３１）〜（３２）と同様である。また、第２の場合には、式（２９）を満たす番号Ｖが選ばれることから、Ｖ＝Ｑｔｏである。そして、Ｖ＝Ｑｔｏを式（３２）の右辺に代入して得られるのが、式（３４）に除数として現れる（Ｔｅｎｄ−α＋Ｉ）という時間である。
【０４２８】
なお、本実施形態では、選択部４１１と対応づけ部４１２は、割り当てが可能な範囲でなるべく多くのデータパケットを子ノードに順に割り当てていく。よって、責任ノードとして選択される子ノードのうち最後の子ノードには、割り当て可能な数よりも少ないデータパケットのみが割り当てられることがある。
【０４２９】
つまり、上記の第２の場合とは、ｉ番目の子ノードが、責任ノードとして選択される子ノードのうち最後の子ノードである場合である。したがって、第２の場合には、ｉ番目の子ノードとその子孫ノードは、ｉ番目の子ノードの送信可能総帯域幅をまるまる全部使わなくても、割り当てられたデータパケットの送信を期限内に終わらせることが可能な場合がある。
【０４３０】
そこで、第２の場合には、「割り当てられたデータパケットを送信するノードは、期限に間に合う範囲でなるべく低いビットレートでデータパケットを送信する」という仮定にしたがい、対応づけ部４１２は式（３４）にしたがって一時使用帯域幅ｔｍｐＢを計算してもよい。なお、この仮定は、実際に要求ノードへデータパケットを送信する各通信装置４００が、後述のステップＳ５１８の処理におけるデータパケットの送信間隔を適宜調整することによって、満たされる。
【０４３１】
なお、第１の場合でも第２の場合でも、対応づけ部４１２は、受信部４０１が受信した再送要求パケット８０１に設定されていた完了期限Ｔｅｎｄを現在時刻に足し、加算によって得られた時刻を、ｉ番目の子ノードに関する新たな一時使用期限に設定する。あるいは、対応づけ部４１２は、上記（Ｑ−４）の遅延に基づいて完了期限Ｔｅｎｄを調整した値を、現在時刻に足し、加算によって得られたた時刻を、ｉ番目の子ノードの一時使用期限に設定してもよい。
【０４３２】
そして、上記のようにしてステップＳ５１０で子ノード情報の更新が行われた後、次のステップＳ５１１で選択部４１１は、次の割り当て対象のデータパケットのシーケンス番号を示す変数Ｕに、Ｖ＋１を代入する。
【０４３３】
また、次のステップＳ５１２で選択部４１１は、Ｖ＜Ｑｔｏか否かを判断する。
もし、Ｖ＜Ｑｔｏであれば、受信部４０１が受信した再送要求パケット８０１により再送が要求されたデータパケットのうち、まだ割り当て先の責任ノードが決まっていないデータパケットが１つ以上残っている。よって、Ｖ＜Ｑｔｏのとき、処理はステップＳ５１３に移行する。
【０４３４】
逆に、既に変数Ｖの値が、指定された終了番号Ｑｔｏに達していれば（つまりＶ＝Ｑｔｏならば）、さらに責任ノードを選択する必要はない。そこで、処理は図１７のステップＳ５２０に移行する。
【０４３５】
ステップＳ５１３で選択部４１１は、責任子ノードを選択するためのインデックスを示す変数ｉを１だけインクリメントする。そして、処理はステップＳ５０４に戻る。
ところで、上記のとおりステップＳ５０４で変数ｉの値が子ノードの数より大きい場合、図１７のステップＳ５１４の処理が行われる。具体的には、選択部４１１は、ステップＳ５１４〜Ｓ５１６で、通信装置４００自身が責任ノードとして選択可能か否かを判断する。
【０４３６】
より具体的には、選択部４１１はステップＳ５１４で、「通信装置４００自身は、Ｕ番のデータパケットの取得期限に間に合うようにＵ番以降のデータパケットを送信することができるか否か」を判断する。ここで、説明の便宜上、上記（Ｑ−１）に示す通信装置４００自身の内部処理遅延を「Ｉｓｅｌｆ」と表記することにすると、選択部４１１は、ステップＳ５１４において式（３５）が成立するか否かを判断する。
Tstart+(Tend-Tstart)×(U-Qfrom)/(Qto-Qfrom+1)-Iself > 0      (35)
【０４３７】
式（３５）は、式（９）の遅延αを内部処理遅延Ｉｓｅｌｆで置き換えた式である。式（３５）が満たされる場合、選択部４１１は、「通信装置４００自身は、Ｕ番のデータパケットの取得期限に間に合うようにＵ番以降のデータパケットを送信することができる」と判断し、処理はステップＳ５１５に移行する。逆に、式（３５）が満たされない場合、選択部４１１は「通信装置４００自身は責任ノードとして適していない」と判断し、処理はステップＳ５２１に移行する。
【０４３８】
ステップＳ５１５で選択部４１１は、通信装置４００自身が完了期限に間に合うように送信することが可能な、Ｑｔｏ番以下で最大の番号を計算する。そして、選択部４１１は、計算結果を変数Ｖに代入する。
【０４３９】
つまり、選択部４１１は、式（３６）と（３７）をともに満たす最大の番号Ｖを計算する。なお、式（３７）は式（２９）と同じである。
Iself+(V-U+1)×pSize/Bself < 
Tend-(Tend-Tstart)×(Qto-V)/(Qto-Qfrom+1)      (36)
V≦Qto      (37)
【０４４０】
ここで、式（３６）の右辺はステップＳ５０６の式（２８）の右辺と同じである。また、式（３６）の左辺は、式（２８）の左辺における遅延αとマージンβの和（α＋β）を、通信装置４００の内部処理遅延Ｉｓｅｌｆで置換し、さらに、帯域幅Ｂを帯域幅Ｂｓｅｌｆで置き換えたものである。式（３６）の帯域幅Ｂｓｅｌｆは、通信装置４００自身の送信可能帯域幅から、通信装置４００の一時使用帯域幅の合計を引いた残りの帯域幅である。選択部４１１は、ノード情報記憶部４０８の自ノード情報を参照することで、式（３６）の帯域幅Ｂｓｅｌｆの値を得ることができる。
【０４４１】
そして、式（３６）と（３７）を満たす最大の整数の計算の後、次のステップＳ５１６で選択部４１１は、Ｕ≦Ｖであるか否かを判断する。
Ｕ≦Ｖのとき、通信装置４００自身には少なくとも１つのデータパケット（具体的には（Ｖ−Ｕ＋１）個のデータパケット）を割り当てることが可能である。すなわち、通信装置４００は責任ノードとして選択可能である。よって、対応づけ部４１２は、通信装置４００自身にＵ番からＶ番までのデータパケットを対応づける（つまり割り当てる）。そして、処理はステップＳ５１７に移行する。
【０４４２】
逆に、Ｕ≦Ｖではないとき、選択部４１１は「通信装置４００自身は責任ノードに適していない」と判断する。そして、処理はステップＳ５２１に移行する。
さて、ステップＳ５１７で対応づけ部４１２は、一時使用帯域幅と一時使用期限の新たなペアを生成し、ノード情報記憶部４０８内の自ノード情報に、生成した新たなペアを登録する。
【０４４３】
具体的には、ステップＳ５１５で式（３６）を満たすことが判明した最大の番号Ｖが、式（３７）も満たす場合（以下では便宜上「第１の場合」という）には、対応づけ部４１２は、通信装置４００自身の送信可能帯域幅自体を一時使用帯域幅に設定する。
【０４４４】
逆に、テップＳ５１５で式（３６）を満たすことが判明した最大の番号Ｖが、再送を要求されたデータパケットの終了番号Ｑｔｏよりも大きい場合もあり得る（以下では便宜上「第２の場合」という）。第２の場合、対応づけ部４１２は、第１の場合と同様に、通信装置４００自身の送信可能帯域幅自体を一時使用帯域幅に設定してもよい。あるいは、第２の場合、対応づけ部４１２は、例えば式（３８）にしたがって一時使用帯域幅ｔｍｐＢを計算してもよい。
tmpB=pSize×(V-U+1)/(Tend-Iself)      (38)
【０４４５】
式（３８）は、「通信装置４００が、Ｕ番からＶ番までのデータパケットを、（Ｔｅｎｄ−Ｉｓｅｌｆ）という時間をかけて送信する」という仮定のもとでの使用帯域幅を計算する式である。式（３８）は、式（３４）における除数を別の除数に置き換えた式である。
【０４４６】
つまり、式（３８）は、「通信装置４００自身が責任ノードとして選択された場合、通信装置４００は、期限に間に合う範囲でなるべく低いビットレートでデータパケットを送信する」という仮定にしたがった式である。
【０４４７】
なお、第１の場合と第２の場合のいずれにおいても、対応づけ部４１２は、受信部４０１が受信した再送要求パケット８０１に設定されていた完了期限Ｔｅｎｄを現在時刻に足し、加算によって得られた時刻を一時使用期限に設定する。
【０４４８】
そして、上記のステップＳ５１７での自ノード情報の更新の後、次のステップＳ５１８で再送処理部４１４は、Ｕ番からＶ番のデータパケットの送信を開始する。Ｕ番からＶ番のデータパケットを送信する処理は、例えば、図１６〜１７の処理の子プロセスであってもよいし、図１６〜１７の処理とは別のスレッドであってもよい。
【０４４９】
なお、ステップＳ５１７で再送処理部４１４は、Ｕ番からＶ番のデータパケットの送信を開始するための処理を行う。そして、ステップＳ５１９以降の処理が行われるのと並行して、再送処理部４１４は実際のデータパケットの送信を行う。
【０４５０】
具体的には、再送処理部４１４は、例えば、ステップＳ５１７において、Ｕ番からＶ番のデータパケットの送信をスケジューリングする。そして、再送処理部４１４は、スケジューリング結果にしたがって、Ｕ番からＶ番のデータパケットの送信を制御する。例えば、再送処理部４１４は、Ｕ番のデータパケットの送信を今すぐに実行するようスケジューリングするとともに、以後Ｖ番までのデータパケットを、間隔（Ｔｅｎｄ−Ｉｓｅｌｆ）／（Ｖ−Ｕ＋１）で送信するようスケジューリングしてもよい。
【０４５１】
このように、選択部４１１が通信装置４００自身を責任ノードとして選択した場合、再送処理部４１４は、受信部４０１が受信した再送要求パケット８０１に取得期限と完了期限として指定された２つの値に基づいて、データパケットの送信タイミングを制御する。
【０４５２】
なお、Ｕ番からＶ番のデータパケットは、スケジュールにしたがって、下記のように送信される。再送処理部４１４は、バッファ部４０３から送信対象のデータパケットのペイロードを読み出し、適宜のヘッダをペイロードの前に付けることで、要求ノード宛のデータパケットを生成する。再送処理部４１４は、受信部４０１が受信した再送要求パケット８０１に設定されていた要求元のＩＰアドレスＡとポート番号Ｐを参照することで、データパケットのヘッダを適切に設定することができる。そして、再送処理部４１４は、生成したデータパケットを送信部４０２に出力し、送信部４０２がデータパケットを送信する。
【０４５３】
さて、ステップＳ５１８に続いて、ステップＳ５１９で選択部４１１は、Ｖ＝Ｑｔｏか否かを判断する。
もし、Ｖ＝Ｑｔｏであれば、受信部４０１が受信した再送要求パケット８０１で要求されたすべてのデータパケットは、いずれかの責任ノードに割り当てられている。したがって、「通信装置４００は受信した再送要求パケット８０１に対処することができた」という通知のため、処理はステップＳ５２０に移行する。
【０４５４】
逆に、Ｖ≠Ｑｔｏであれば（より具体的には、Ｖ＜Ｑｔｏであれば）、受信部４０１が受信した再送要求パケット８０１により再送が要求されたデータパケットのうち、割り当て先の責任ノードを決めることができなかったデータパケットが１つ以上残っている。よって、Ｖ＜Ｑｔｏのとき、「通信装置４００は受信した再送要求パケット８０１に対処しきることができなかった」ということの通知のため、処理はステップＳ５２２に移行する。
【０４５５】
さて、ステップＳ５２０が実行されるのは、受信部４０１が受信した再送要求パケット８０１で要求されたＱｆｒｏｍ番からＱｔｏ番までのすべてのデータパケットが、いずれかの責任ノードに割り当て済みの場合である。したがって、ステップＳ５２０で負荷分散処理部４１０は、「Ｑｆｒｏｍ番からＱｔｏ番までのデータパケットの送信を保証する」旨を通知するＡＣＫ（ACKnowledgment）パケットを生成する。そして、負荷分散処理部４１０は生成したＡＣＫパケットを送信部４０２に出力し、送信部４０２はＡＣＫパケットを送信する。
【０４５６】
なお、ＡＣＫパケットの送信先は、データパケットの再送を要求した要求ノードではなく、受信部４０１が受信した再送要求パケット８０１の直接の送信元のノードである。例えば、図１のステップＳ３０でノードＮ３から再送要求パケット８０１を受信したノードＮ６では、ステップＳ５２０において、負荷分散処理部４１０が、要求ノードＮ５宛ではなくノードＮ３宛のＡＣＫパケットを生成する。
【０４５７】
そして、ＡＣＫパケットの送信後、図１６〜１７の処理は終了する。
また、ステップＳ５２１が実行されるのは、Ｕ番以降のデータパケットの割り当て先の適切な責任ノードが見つからなかった場合である。そこで、ステップＳ５２１で負荷分散処理部４１０は、「送信を要求されたＱｆｒｏｍ番からＱｔｏ番までのデータパケットのうち、Ｕ番からＱｔｏ番までのデータパケットの送信ができない」旨を通知するエラーパケットを生成する。当該エラーパケットは、換言すれば、「再送要求に応じきれない」旨を示すＮＡＣＫパケットである。
【０４５８】
そして、負荷分散処理部４１０は生成したエラーパケットを送信部４０２に出力し、送信部４０２はエラーパケットを送信する。なお、エラーパケットの送信先も、データパケットの再送を要求した要求ノードではなく、受信部４０１が受信した再送要求パケット８０１の直接の送信元のノードである。
【０４５９】
そして、エラーパケットの送信後、図１６〜１７の処理は終了する。
また、ステップＳ５２２が実行されるのは、（Ｖ＋１）番以降のデータパケットの割り当て先の適切な責任ノードが見つからなかった場合である。そこで、ステップＳ５２２で負荷分散処理部４１０は、「送信を要求されたＱｆｒｏｍ番からＱｔｏ番までのデータパケットのうち、（Ｖ＋１）番からＱｔｏ番までのデータパケットの送信ができない」旨を通知するエラーパケットを生成する。そして、負荷分散処理部４１０は生成したエラーパケットを送信部４０２に出力し、送信部４０２はエラーパケットを送信する。
【０４６０】
ステップＳ５２２の処理は、「Ｕ番」が「（Ｖ＋１）番」に置き換わる以外は、ステップＳ５２１と同様である。ステップＳ５２２でのエラーパケットの送信後、図１６〜１７の処理は終了する。
【０４６１】
なお、ステップＳ５２１またはＳ５２２で送信されるエラーパケットを受信したときのノードの動作は、実施形態に応じて様々であってよい。
例えば、図９の再送要求先情報７０２は１つのエントリのみを含むが、再送要求先情報７０２は複数のエントリを含んでもよい。つまり、図６のステップＳ１０６で管理サーバ２０４が複数の再送要求先の候補を通知してもよく、ノード情報管理部４０９は、通知された複数の再送要求先の候補をノード情報記憶部４０８の再送要求先情報７０２に記憶してもよい。そして、再送要求部４０７は図１１のステップＳ３０４で、複数の再送要求先の候補のうちの１つを再送要求先として選んでもよい。
【０４６２】
以上のように複数の再送要求先の候補が記憶される実施形態では、パケットロスを検出してデータパケットの再送を要求した要求ノードは、再送要求パケット８０１の送信先のノードからエラーパケットを受信した場合、別の再送要求先の候補を選びなおしてもよい。例えば、図１のように要求ノードＮ５が再送要求先の第１候補としてノードＮ３を選んだ場合において、仮にノードＮ３がエラーパケットをノードＮ５に送信したとする。この場合、ノードＮ３は、再送要求先の第２候補を選び、取得期限と完了期限を計算しなおし、選んだ第２候補に宛てて、新たな再送要求パケット８０１を送信してもよい。
【０４６３】
あるいは、実施形態によっては、要求ノードは、再送要求先のノードからエラーパケットを受信した場合は、親ノードを新たな再送要求先として選び、取得期限と完了期限を計算しなおし、親ノードに宛てて、新たな再送要求パケット８０１を送信してもよい。
【０４６４】
また、子ノードを責任ノードとして選択して子ノードにデータパケットの送信を委譲したノードが、当該責任子ノードからエラーパケットを受信することも、まれには起こり得る。例えば、図１のステップＳ３０で子ノードＮ６に再送要求パケット８０１を送信したノードＮ３が、ノードＮ６からエラーパケットを受信する場合も、皆無ではない。
【０４６５】
この場合、ノードＮ６からエラーパケットを受信したノードＮ３は、ノードＮ３が受信した再送要求パケット８０１の直接の送信元に、受信したエラーパケットを転送してもよい。なお、図１の例では、ノードＮ３が受信した再送要求パケット８０１の直接の送信元はノードＮ５であり、ノードＮ５は、たまたま要求ノードでもある。
【０４６６】
あるいは、ノードＮ６からエラーパケットを受信したノードＮ３は、「ノードＮ３自身およびノードＮ３の子ノードの中に、データパケットの送信をさらに引き受ける余力のあるノードがあるか否か」ということを判断してもよい。そして、もし余力のあるノードが１つ以上見つかったら、ノードＮ３の負荷分散処理部４１０は、エラーパケットにおいてシーケンス番号が指定されたデータパケットを、見つかった１つ以上のノードに適宜割り当ててもよい。逆に、余力のあるノードが見つからなかった場合、ノードＮ３は、ノードＮ３が受信した再送要求パケット８０１の直接の送信元にエラーパケットを転送してもよい。
【０４６７】
なお、「余力のあるノードは見つかったが、エラーパケットで指定されているすべてのデータパケットを割り当てるには、見つかったノードだけでは不十分である」という場合もあり得る。その場合、ノードＮ３は、ノードＮ６から受信したエラーパケットにおいてシーケンス番号が指定されたデータパケットのうち、新たな割り当て先が見つからなかったものの番号を指定した新たなエラーパケットを生成してもよい。そして、ノードＮ３は、見つかったノードにデータパケットの送信を割り当てるとともに、生成した新たなエラーパケットを、ノードＮ３が受信した再送要求パケット８０１の直接の送信元に宛てて送信してもよい。
【０４６８】
ところで、図１２に関して簡単に述べたとおり、再送要求に指定されるパラメタは実施形態に応じて様々である。以下では図１２の再送要求パケット８０１の代わりに、ビットレートの指定を含む再送要求パケット８０２が使われる実施形態について説明する。なお、上記実施形態との共通点については適宜説明を省略する。
【０４６９】
まず、図１２を参照して再送要求パケット８０２の形式について説明する。
再送要求パケット８０２は、再送要求パケット８０１と同様のヘッダと取得期限Ｔｓｔａｒｔをを含む。しかし、再送要求パケット８０２は、再送要求パケット８０１のような完了期限Ｔｅｎｄを含まず、代わりにビットレートＢｒｅｑを含む。再送要求パケット８０２はさらに、再送要求パケット８０１と同様の再送先のＩＰアドレスＡおよびポート番号Ｐを含む。
【０４７０】
ところで、再送要求パケット８０１では、開始番号Ｑｆｒｏｍと終了番号Ｑｔｏのペアによって再送範囲が指定される。つまり、再送要求パケット８０１により要求されるデータパケットが複数ある場合、それら複数のデータパケットのシーケンス番号は、連続している。しかし、本実施形態では、不連続なシーケンス番号を持つ複数のデータパケットの送信が要求されることがある。
【０４７１】
そこで、再送要求パケット８０２は、開始番号Ｑｆｒｏｍと終了番号Ｑｔｏのペアの代わりに、送信を要求するデータパケットのシーケンス番号のリスト（以下「再送リスト」という）を含む。図１２の例では、再送要求パケット８０２の再送リストは、Ｍ個（１≦Ｍ）のシーケンス番号Ｑ１、…、ＱＭを含む。
【０４７２】
以下に詳しく説明するとおり、ビットレートＢｒｅｑの指定を含む再送要求パケット８０２を用いることにより、大量のデータパケットが消失した場合にも、要求ノードにおけるデータパケットの受信が時間的に集中する度合を緩和することができる。すなわち、以下に説明する本実施形態は、バースト受信に起因する再送失敗を回避するのに効果的である。つまり、本実施形態は、「再送失敗によって再び新たな再送要求が発生する」という悪循環を回避する効果がある。
【０４７３】
大量のデータパケットが消失すると、パケットロスを検出したノードは、消失した大量のデータパケットの再送を要求する。場合によっては、要求された大量のデータパケットのすべてを１つのノードが送信することもあり得る。しかし、例えば図１のような委譲が１回以上行われ、その結果として、複数のノードがそれぞれ、大量のデータパケットのうちの割り当てられた一部を送信することもある。
【０４７４】
いずれにしろ、或るノードが複数のデータパケットを送信する場合に、非常に高いビットレートでバースト的にそれら複数のデータパケットを送信することは、好ましくない。なぜなら、要求ノード（つまりパケットロスを検出したノード）や、物理ネットワーク上で当該「或るノード」から要求ノードに至るまでの経路上に存在するルータなどにおいて、バースト的な受信に起因するパケットロスが発生しかねないからである。
【０４７５】
また、複数のノードがそれぞれ、大量のデータパケットのうちの割り当てられた一部のみを送信する場合、たとえ１つ１つのノードはそれほど高いビットレートでデータパケットを送信していなくても、バースト的な受信に起因するパケットロスは起こり得る。なぜなら、要求ノードや、物理ネットワーク上において要求ノードに近いルータなどが、複数のノードから送信されたデータパケットをほぼ同時にバースト的に受信する可能性があるからである。
【０４７６】
したがって、要求されたデータパケットを実際に送信する各ノードは、要求ノードにおけるバースト受信を緩和するように、自律的に送信タイミングを制御することが好ましい。再送要求パケット８０２に指定されるビットレートＢｒｅｑは、論理ネットワーク１００内の複数のノードが自律分散的にバースト受信の緩和を実現するために使われる。
【０４７７】
さて、再送要求パケット８０２が使われる本実施形態においては、データパケットの受信を契機とする図１１の処理が次のように変形される。
すなわち、ステップＳ３０６で再送要求部４０７は、取得期限Ｔｓｔａｒｔのみを算出すればよく、完了期限Ｔｅｎｄを算出する必要はない。その代わり、再送要求部４０７は、再送要求パケット８０２に設定するビットレートＢｒｅｑを適宜決定する。例えば、再送要求部４０７は、バッファ消費レートｃＲａｔｅ（式（５）に関する説明を参照）を再送要求パケット８０２にビットレートＢｒｅｑとして設定することが好ましい。
【０４７８】
また、ステップＳ３０７で再送要求部４０７は、再送要求パケット８０１の代わりに再送要求パケット８０２を生成する。なお、再送要求部４０７は、Ｑｆｒｏｍ（＝Ｑｌａｓｔ＋１）番からＱｔｏ（＝Ｑ−１）番までの（Ｑｔｏ−Ｑｆｒｏｍ＋１）個のシーケンス番号を含むリストを、再送要求パケット８０２に再送リストとして設定する。
【０４７９】
さらに、再送要求パケット８０２が使われる本実施形態においては、図１６〜１７の処理が図２０〜２１のように変形される。
以下、図２０〜２１のフローチャートを参照して、再送要求パケット８０２の受信を契機とする処理について説明する。根ノード、中継ノード、または葉ノードに相当する通信装置４００の受信部４０１が図１２の再送要求パケット８０２を受信し、再送要求パケット８０２を負荷分散処理部４１０に出力すると、負荷分散処理部４１０が図２０〜２１の処理を開始する。
【０４８０】
図２０〜２１の処理において、ステップＳ６０１は初期化のためのステップである。また、ステップＳ６０２〜Ｓ６０９は、子ノードを優先して責任ノードを選択し、各責任ノードに、要求された特定情報の一部または全部である部分特定情報を対応づけるためのステップである。そして、ステップＳ６１０〜Ｓ６１８は、責任子ノードがあれば各責任子ノードに再送要求パケット８０２を送信し、通信装置４００自身が責任ノードであればデータパケットを送信するためのステップである。ステップＳ６１９〜Ｓ６２１は、再送要求パケット８０２の直接の送信元のノードに、ＡＣＫまたはＮＡＣＫを返すためのステップである。
【０４８１】
また、図１２の再送要求パケット８０２の再送リストに含まれるシーケンス番号は、どのような順序で並んでいてもよい。しかし、以下では処理の簡素化と説明の便宜のため、再送リストはシーケンス番号の昇順にソートされているものと仮定する。つまり、図１２の例ではＱ１＜…＜ＱＭである。
【０４８２】
ステップＳ６０１で選択部４１１は、ステップＳ５０１と同様の処理を行う。すなわち、選択部４１１は、ノード情報記憶部４０８に格納されている子ノード情報において、一時使用帯域幅と一時使用期限のペアのうち、一時使用期限が切れているペアがもしあれば、当該ペアをクリアする。同様に、選択部４１１は、ノード情報記憶部４０８に格納されている自ノード情報において、一時使用帯域幅と一時使用期限のペアのうち、一時使用期限が切れているペアがもしあれば、当該ペアをクリアする。
【０４８３】
そして、次のステップＳ６０２で選択部４１１は、再送要求パケット８０２の再送リスト中の最小のシーケンス番号（すなわちＱ１番）のデータパケットの取得期限に間に合うようにデータパケットの送信を行うことが可能な子ノードの集合Ｃを求める。集合Ｃは、責任ノードの集合である。
【０４８４】
具体的には、選択部４１１は、以下に再掲する式（１０）が成り立つ子ノードの集合を求める。
Tstart-α > 0      (10)
【０４８５】
そして、次のステップＳ６０３で選択部４１１は、集合Ｃに属する子ノードの使用可能帯域幅の和（以下「Ｂｓｕｍ」と表記する）を計算する。具体的には、選択部４１１は集合Ｃに属する各子ノードについて、子ノード情報における当該子ノードのエントリの送信可能総帯域幅から、当該エントリに含まれる一時使用帯域幅の合計を引くことで、各子ノードの使用可能帯域幅を計算する。そして、選択部４１１は、集合Ｃに属する各子ノードについて計算した使用可能帯域幅の総和を計算する。以上のようにして得られる総和が帯域幅Ｂｓｕｍである。
【０４８６】
なお、後のステップＳ６０９の処理のために、選択部４１１は、各子ノードについて計算した使用可能帯域幅の値を記憶する。また、上記の定義からも明らかなように、或る子ノードの使用可能帯域幅は、論理ネットワーク１００のトポロジにおいて当該「或る子ノード」を根ノードとする部分グラフに含まれるノードが再送に使うことのできる、現状における余力の総和である。
【０４８７】
続いて、ステップＳ６０４で選択部４１１は、受信部４０１が受信した再送要求パケット８０２に指定されているビットレートＢｒｅｑと、計算した帯域幅Ｂｓｕｍを比較する。なお、図９で送信可能総帯域幅や一時使用帯域幅がＭｂｐｓ単位で示されていることからも明らかなとおり、本実施形態の帯域幅は、換言すればビットレートである。したがってビットレートＢｒｅｑと帯域幅Ｂｓｕｍは比較可能である。
【０４８８】
そして、Ｂｒｅｑ≦Ｂｓｕｍの場合、子ノードだけで要求されたデータパケットの送信に対処することが可能であり、通信装置４００自身を責任ノードとして選択する必要はない。よって、処理はステップＳ６０５に移行する。
【０４８９】
逆に、Ｂｒｅｑ＞Ｂｓｕｍの場合、子ノードだけでは要求されたデータパケットの送信に対処しきれない。そこで、選択部４１１が通信装置４００自身も責任ノードとして選択するため、処理はステップＳ６０６に移行する。以上のように、本実施形態においてはステップＳ６０４の判断によって、子ノードの方が通信装置４００よりも優先的に責任ノードとして選ばれる。
【０４９０】
ところで、上記の仮定のとおり再送リストがソートされている場合、再送リスト中の或る１つのシーケンス番号（以下「Ｖ」と表記する）を用いて、通信装置４００が送信を保証するデータパケットの範囲を示すことができる。例えば、再送リストが（３０１，３０４，３０７，３１０）というリストでありＶ＝３０７であるとすると、通信装置４００が送信を保証するのは、シーケンス番号が３０１番と３０４番と３０７番の３つのデータパケットである。シーケンス番号Ｖは、以下のようにステップＳ６０５またはＳ６０８で設定される。
【０４９１】
ステップＳ６０５では、選択部４１１は、受信部４０１が受信した再送要求パケット８０２の再送リスト中の最後の番号ＱＭを、変数Ｖに代入する。そして、処理はステップＳ６０９に移行する。
【０４９２】
また、ステップＳ６０６で選択部４１１は、集合Ｃに通信装置４００自身を加える。つまり、選択部４１１は、通信装置４００自身を責任ノードとして選択する。
さらに、次のステップＳ６０７で選択部４１１は、ノード情報記憶部４０８の自ノード情報を参照する。そして、選択部４１１は、通信装置４００自身の送信可能帯域幅から、通信装置４００の一時使用帯域幅の合計を引いて使用可能帯域幅（すなわち式（３６）の帯域幅Ｂｓｅｌｆ）を計算する。そして、選択部４１１は、帯域幅Ｂｓｕｍを、計算した通信装置４００の使用可能帯域幅Ｂｓｅｌｆのぶんだけ増やす。
【０４９３】
また、次のステップＳ６０８で選択部４１１は、帯域幅Ｂｓｕｍの送信でも期限に間に合う最大の番号を計算し、計算結果を変数Ｖに代入する。具体的には、選択部４１１は式（３９）を満たす最大の値を計算し、計算結果を変数Ｖに代入する。
count(QM)×pSize/Breq≧count(V)×pSize/Bsum      (39)
【０４９４】
なお、式（３９）における関数ｃｏｕｎｔ（ｚ）は、受信部４０１が受信した再送要求パケット８０２の再送リストにおいて、ｚ番以下のシーケンス番号の数である。例えば、受信部４０１が受信した再送要求パケット８０２の再送リストが、（１０２，１０５，１０８，１１１）というリストである場合、ｃｏｕｎｔ（１０８）＝３である。
【０４９５】
式（３９）の左辺は、受信部４０１が受信した再送要求パケット８０２の再送リストに指定されているＭ個すべてのデータパケットを、指定されたビットレートＢｒｅｑで送信するのにかかる時間である。また、式（３９）の右辺は、受信部４０１が受信した再送要求パケット８０２の再送リストに指定されたデータパケットのうち、Ｖ番以下のシーケンス番号を持つデータパケットを、使用可能帯域幅Ｂｓｕｍのビットレートで送信するのにかかる時間である。よって、式（３９）を満たす最大値は、帯域幅Ｂｓｕｍでの送信でも期限に間に合う最大の番号である。
【０４９６】
例えば、ｃｏｕｎｔ（ＱＭ）＝Ｍ＝１２であり、かつ、Ｂｓｕｍ＝０．７×Ｂｒｅｑだとする。この場合、受信部４０１が受信した再送要求パケット８０２の再送リストの中から、ｃｏｕｎｔ（Ｖ）＝８を満たす番号Ｖが選ばれる。なぜなら、式（３９）より、番号Ｖは、１２×０．７≧ｃｏｕｎｔ（Ｖ）を満たす最大の整数だからである。
【０４９７】
以上のようにしてステップＳ６０５またはＳ６０８において、通信装置４００が送信を保証するデータパケットの範囲が決定されると、続いて、処理はステップＳ６０９に移行する。そして、ステップＳ６０９で対応づけ部４１２は、使用可能帯域幅を重みとして用いた重み付けラウンドロビンアルゴリズムにより、集合Ｃに属するノードに、受信部４０１が受信した再送要求パケット８０２の再送リスト中のＶ番までのデータパケットを分配する。
【０４９８】
ここで、図２２を参照して、ステップＳ６０９の具体例を説明する。図２２はビットレートに応じて割り当てられたデータパケットの送信を例示する図である。図２２では、上から下に向かう時間軸が矢印で示されている。また、図２２では、再送要求パケット８０２内の再送リストが吹き出し内に示されている。図２２中の他の要素については後述する。
【０４９９】
例えば、図１の例において、ステップＳ２０でノードＮ５からノードＮ３に送信される再送要求パケット８０２の再送リストが、１０１番から１１２番までの１２個のシーケンス番号を含むとする。そして、再送要求パケット８０２を受信したノードＮ３が図２０〜２１の処理を開始し、式（４０）のような集合Ｃが得られたとする。
C={N6, N7, N8}      (40)
【０５００】
また、説明の便宜上、ノードＮ６、Ｎ７、およびＮ８それぞれの使用可能帯域幅の比が、３：２：１であるとする。この場合、ノードＮ３の対応づけ部４１２は、ステップＳ６０９において、ノードＮ６に６（＝１２×３／（３＋２＋１））個、ノードＮ７に４（＝１２×２／（３＋２＋１））個、ノードＮ８に２（＝１２×１／（３＋２＋１））個のデータパケットを割り当てる。
【０５０１】
より具体的には、ステップＳ６０９で対応づけ部４１２は、受信部４０１が受信した再送要求パケット８０２の再送リスト中の番号を、重み付けラウンドロビンアルゴリズムによって順に、集合Ｃに属するいずれかのノードに割り当てる。その結果、例えば図２２の例では、１０１〜１１２番のデータパケットは、次の（Ｒ−１）〜（Ｒ−１２）のようにいずれか１つのノードに対応づけられる。
（Ｒ−１）１０１番のデータパケットはノードＮ６に対応づけられる。
（Ｒ−２）１０２番のデータパケットはノードＮ７に対応づけられる。
（Ｒ−３）１０３番のデータパケットはノードＮ６に対応づけられる。
（Ｒ−４）１０４番のデータパケットはノードＮ８に対応づけられる。
（Ｒ−５）１０５番のデータパケットはノードＮ７に対応づけられる。
（Ｒ−６）１０６番のデータパケットはノードＮ６に対応づけられる。
（Ｒ−７）１０７番のデータパケットはノードＮ６に対応づけられる。
（Ｒ−８）１０８番のデータパケットはノードＮ７に対応づけられる。
（Ｒ−９）１０９番のデータパケットはノードＮ６に対応づけられる。
（Ｒ−１０）１１０番のデータパケットはノードＮ８に対応づけられる。
（Ｒ−１１）１１１番のデータパケットはノードＮ７に対応づけられる。
（Ｒ−１２）１１２番のデータパケットはノードＮ６に対応づけられる。
【０５０２】
以上の（Ｒ−１）〜（Ｒ−１２）に示した対応づけは、図２２の吹き出しの中に示されているとおりである。
【０５０３】
また、図１のステップＳ３０でノードＮ３がノードＮ６に送信する再送要求パケット８０２の再送リストは、図２２の例では（１０１，１０３，１０６，１０７，１０９，１１２）というリストである。ここで、仮に、再送要求パケット８０２を受信したノードＮ６が、図１と同様に子ノードＮ１２とＮ１３を責任ノードとして選ぶとする。つまり、図２０〜２１の処理を行うノードＮ６の選択部４１１が、式（４１）のような集合Ｃを得たとする。
C={N12, N13}      (41)
【０５０４】
また、ノードＮ１２とＮ１３それぞれの使用可能帯域幅の比が２：１であるとする。この場合、ノードＮ６の対応づけ部４１２は、ステップＳ６０９において、ノードＮ１２に４（＝６×２／（２＋１））個、ノードＮ１３に２（＝６×１／（２＋１））個のデータパケットを割り当てる。
【０５０５】
より具体的には、ステップＳ６０９でノードＮ６の対応づけ部４１２は、受信部４０１が受信した再送要求パケット８０２の再送リスト中の番号を、重み付けラウンドロビンアルゴリズムによってノードＮ１２またはＮ１３に割り当てる。その結果、例えば図２２の例では、（１０１，１０３，１０６，１０７，１０９，１１２）という再送リスト中に指定された６つのシーケンス番号のデータパケットは、次の（Ｓ−１）〜（Ｓ−６）のように、ノードＮ１２またはＮ１３に対応づけられる。
（Ｓ−１）１０１番のデータパケットはノードＮ１２に対応づけられる。
（Ｓ−２）１０３番のデータパケットはノードＮ１３に対応づけられる。
（Ｓ−３）１０６番のデータパケットはノードＮ１２に対応づけられる。
（Ｓ−４）１０７番のデータパケットはノードＮ１２に対応づけられる。
（Ｓ−５）１０９番のデータパケットはノードＮ１３に対応づけられる。
（Ｓ−６）１１２番のデータパケットはノードＮ１２に対応づけられる。
【０５０６】
以上の（Ｓ−１）〜（Ｓ−６）に示した対応づけは、図２２の吹き出しの中に示されているとおりである。
【０５０７】
なお、図２２では説明の簡単化のために、集合Ｃに属するノードの使用可能帯域幅の比が単純な整数比の場合を例示した。しかし、使用可能帯域幅の比が単純な整数比でない場合にも、もちろん、重み付けラウンドロビンアルゴリズムで利用可能な適宜の端数処理によって、対応づけ部４１２は、ステップＳ６０９での割り当てを適切に遂行することができる。
【０５０８】
ここで、図２０〜２１の説明に戻る。ステップＳ６０９で各責任ノードに対応づけ部４１２がデータパケットを適宜対応づけた後、処理は図２１のステップＳ６１０に移行する。そして、ステップＳ６１０で負荷分散処理部４１０は、集合Ｃ内のノードに順に注目するためのインデックスｉを１に初期化する。
【０５０９】
続いて、ステップＳ６１１で負荷分散処理部４１０は、ｉ≦｜Ｃ｜か否か（すなわち、集合Ｃに属するすべてのノードに注目し終えたか否か）を判断する。なお、｜Ｃ｜は集合Ｃの要素数である。
【０５１０】
もし、ｉ≦｜Ｃ｜であれば、まだ負荷分散処理部４１０が注目していない責任ノードが残っている。そこで、負荷分散処理部４１０は集合Ｃに属するｉ番目のノードに注目する。そして、処理はステップＳ６１２に移行する。
【０５１１】
逆に、ｉ＞｜Ｃ｜であれば、集合Ｃのすべてのノードに負荷分散処理部４１０は既に注目し終わっている。そこで、処理はステップＳ６１９に移行する。
【０５１２】
ステップＳ６１２で要求生成部４１３は、集合Ｃに属するｉ番目のノード用のビットレートを計算する。ここで、説明の便宜上、受信部４０１が受信した再送要求パケット８０２の再送リストの要素数が図１２のとおりＭであるものとする。また、ステップＳ６０９において集合Ｃ中のｉ番目のノードに対応づけ部４１２が割り当てたデータパケットの数を「Ｘｉ」と表記する。すると、ステップＳ６１２における計算は式（４２）のように表される。
Breq2=Breq×Xi/M      (42)
【０５１３】
すなわち、要求生成部４１３は、受信部４０１が受信した再送要求パケット８０２に指定されたビットレートＢｒｅｑを、各責任ノードが送信を保証するデータパケットの数に応じて、各責任ノードに比例配分する。例えば、図２２の例で、ノードＮ３の要求生成部４１３は、ノードＮ６用のビットレートとして、ノードＮ５から受信した再送要求パケット８０２に指定されていたビットレートの１／２（＝６／１２）を得る。
【０５１４】
そして、次のステップＳ６１３で負荷分散処理部４１０は、集合Ｃ中のｉ番目のノードが通信装置４００自身であるか否かを判断する。そして、集合Ｃ中のｉ番目のノードが通信装置４００自身である場合、処理はステップＳ６１４に移行する。逆に、集合Ｃ中のｉ番目のノードが通信装置４００のいずれかの子ノードである場合、処理はステップＳ６１５に移行する。
【０５１５】
ステップＳ６１４で再送処理部４１４は、対応づけ部４１２が通信装置４００自身に割り当てたＸｉ個のデータパケットの送信を開始する。再送処理部４１４が実際にＸｉ個のデータパケットを送信する処理は、例えば、図２０〜２１の処理の子プロセスであってもよいし、図２０〜２１の処理とは別のスレッドであってもよい。
【０５１６】
なお、ステップＳ６１４で再送処理部４１４は、データパケットの送信を開始するための処理を行う。そして、次のステップＳ６１７以降の処理が行われるのと並行して、再送処理部４１４は実際のデータパケットの送信を行う。
【０５１７】
具体的には、再送処理部４１４は、例えば、ステップＳ６１４において、対応づけ部４１２が通信装置４００に対応づけたＸｉ個のデータパケットの送信をスケジューリングする。そして、再送処理部４１４は、スケジューリング結果にしたがって、Ｘｉ個のデータパケットの送信を制御する。
【０５１８】
例えば、再送処理部４１４は、通信装置４００に割り当てられた最初のデータパケットの送信を今すぐに実行するようスケジューリングするとともに、以後、式（４３）の送信間隔τで残りのデータパケットを送信するようスケジューリングする。
τ=pSize/Breq2=(pSize/Breq)×(M/Xi)      (43)
【０５１９】
ところで、「ビットレートＢｒｅｑでデータパケットが送信される」とは、具体的には、次の（Ｔ−１）〜（Ｔ−３）のような意味である。
（Ｔ−１）データパケットの送信が一定の送信間隔で断続的に行われる。
（Ｔ−２）結果として、ある程度の長さの時間の平均的なビットレートは、データパケットの１つあたりの大きさを送信間隔で割った商と見なすことができる。
（Ｔ−３）上記の商がＢｒｅｑである。
【０５２０】
したがって、ビットレートと送信間隔は反比例する。そして、式（４３）における（ｐＳｉｚｅ／Ｂｒｅｑ）は、受信部４０１が受信した再送要求パケット８０２に指定されているビットレートＢｒｅｑで複数のデータパケットが送信されるときの送信間隔である。よって、式（４２）のように割り当てられたビットレートＢｒｅｑ２での送信を実現するための送信間隔は、式（４３）のとおりである。
【０５２１】
なお、再送処理部４１４は、バッファ部４０３から送信対象のデータパケットのペイロードを読み出し、適宜のヘッダをペイロードの前に付けることで、要求ノード宛のデータパケットを生成する。再送処理部４１４は、受信部４０１が受信した再送要求パケット８０２に設定されていた要求元のＩＰアドレスＡとポート番号Ｐを参照することで、データパケットのヘッダを適切に設定することができる。そして、再送処理部４１４は、生成したデータパケットを送信部４０２に出力し、送信部４０２がデータパケットを送信する。
なお、ステップＳ６１４の実行後、処理はステップＳ６１７に移行する。
【０５２２】
他方、ステップＳ６１５では、要求生成部４１３が、集合Ｃ中のｉ番目のノードに送信するための新たな再送要求パケット８０２に設定する取得期限を計算する。すなわち、要求生成部４１３は、式（４４）にしたがって取得期限Ｔｓｔａｒｔ２を計算する。
Tstart2=Tstart-α+Ii      (44)
【０５２３】
なお、式（４４）における遅延αは式（１０）と同様である。また、式（４４）では、集合Ｃ中のｉ番目のノードの内部処理遅延が「Ｉｉ」と表記されている。式（４４）において遅延αが引かれ、内部処理遅延Ｉｉが足される理由は、図１６のステップＳ５０８の式（３１）に関して説明したの理由と同様である。
【０５２４】
また、次のステップＳ６１６で要求生成部４１３は、新たな再送要求パケット８０２を生成して送信部４０２に出力する。そして、送信部４０２は、集合Ｃ中のｉ番目のノード宛に再送要求パケット８０２を送信する。
【０５２５】
具体的には、要求生成部４１３は新たな再送要求パケット８０２のヘッダに適宜の値を設定する。要求生成部４１３は、ノード情報記憶部４０８内の自ノード情報と子ノード情報を参照して、再送要求パケット８０１のヘッダに設定する送信元ＩＰアドレス、送信先ＩＰアドレス、ポート番号などを取得することができる。
【０５２６】
また、要求生成部４１３は、新たな再送要求パケット８０２に、ステップＳ６１５で計算した取得期限Ｔｓｔａｒｔ２と、ステップＳ６１２で計算したビットレートＢｒｅｑ２を設定する。さらに、要求生成部４１３は、新たな再送要求パケット８０２の再送先のＩＰアドレスとポート番号のフィールドに、受信部４０１が受信した再送要求パケット８０２の再送先のＩＰアドレスとポート番号の値をコピーする。そして、要求生成部４１３は、新たな再送要求パケット８０２の再送リストに、対応づけ部４１２が集合Ｃ中のｉ番目のノードにステップＳ６０９で割り当てたＸｉ個のシーケンス番号のリストを設定する。
【０５２７】
ステップＳ６１６では、以上のようにして各フィールドに値が設定された新たな再送要求パケット８０２が、送信部４０２から送信される。そして、処理はステップＳ６１７に移行する。
【０５２８】
ステップＳ６１７で対応づけ部４１２は、集合Ｃ中のｉ番目のノードに対応する一時使用帯域幅と一時使用期限を設定する。具体的には、集合Ｃ中のｉ番目のノードが通信装置４００であれば、対応づけ部４１２は、自ノード情報に一時使用帯域幅と一時使用期限のペアを追加する。また、集合Ｃ中のｉ番目のノードが通信装置４００のいずれかの子ノードであれば、対応づけ部４１２は、子ノード情報中の当該子ノードのエントリに、一時使用帯域幅と一時使用期限のペアを追加する。
【０５２９】
いずれにしろ、対応づけ部４１２は、一時使用帯域幅として、ステップＳ６１２で要求生成部４１３が計算したビットレートＢｒｅｑ２を設定する。また、対応づけ部４１２は、一時使用期限として、例えば式（４５）の時刻ｔｍｐＴを設定してもよい。
tmpT=Now+(pSize×M/Breq)×((Xi-1)/Xi)+α      (45)
【０５３０】
式（４５）におけるＮｏｗは現在時刻である。また、式（４５）における（Ｍ×ｐＳｉｚｅ／Ｂｒｅｑ）は、受信部４０１が受信した再送要求パケット８０２の再送リストで要求されているＭ個のデータパケットを、指定されたビットレートＢｒｅｑで送信するのにかかる時間である。
【０５３１】
また、集合Ｃ中のｉ番目のノードに割り当てられたＸｉ個のデータパケットのうちで最初のデータパケットは、式（１０）の遅延αが経過するまでには、送信されると予測される。したがって、Ｘｉ個のデータパケットが一定間隔で送信される場合、集合Ｃ中のｉ番目のノードに割り当てられたＸｉ個のデータパケットのうちで最後のデータパケットが送信される予測時刻は、式（４５）の時刻ｔｍｐＴである。
【０５３２】
以上のようにして、ステップＳ６１７で一時使用帯域幅と一時使用期限のペアが自ノード情報または子ノード情報に追加されると、処理はステップＳ６１８に移行する。
そして、ステップＳ６１８で負荷分散処理部４１０は、インデックスｉを１だけインクリメントする。そして処理はステップＳ６１１に戻る。
【０５３３】
さて、ステップＳ６１９の処理が実行されるのは、上記のとおり｜Ｃ｜＜ｉの場合である。ステップＳ６１９で負荷分散処理部４１０は、番号Ｖが、受信部４０１が受信した再送要求パケット８０２の再送リスト中の最後の番号であるか否かを判断する。番号Ｖが最後の番号の場合（すなわちＶ＝ＱＭの場合）、処理はステップＳ６２０に移行する。逆に、番号Ｖが最後の番号ではない場合（すなわちＶ＜ＱＭの場合）、処理はステップＳ６２１に移行する。
【０５３４】
そして、ステップＳ６２０で負荷分散処理部４１０は、「受信部４０１が受信した再送要求パケット８０２の再送リストに指定されたすべてのデータパケットの送信を保証する」という旨を通知するＡＣＫパケットを生成する。そして、負荷分散処理部４１０は生成したＡＣＫパケットを送信部４０２に出力し、送信部４０２はＡＣＫパケットを送信する。
【０５３５】
なお、図１７のステップＳ５２０と同様に、ＡＣＫパケットの送信先は、受信部４０１が受信した再送要求パケット８０２の直接の送信元のノードである。そして、ＡＣＫパケットの送信後、図２０〜２１の処理は終了する。
【０５３６】
また、ステップＳ６２１で負荷分散処理部４１０は、「送信を要求されたＭ個のデータパケットのうち、Ｖ番より大きいシーケンス番号のデータパケットの送信ができない」という旨を通知するエラーパケットを生成する。そして、負荷分散処理部４１０は生成したエラーパケットを送信部４０２に出力し、送信部４０２はエラーパケットを送信する。
【０５３７】
なお、エラーパケットの送信先も、受信部４０１が受信した再送要求パケット８０２の直接の送信元のノードである。そして、エラーパケットの送信後、図２０〜２１の処理は終了する。
【０５３８】
また、ステップＳ６２１で送信されるエラーパケットを受信したときのノードの動作は、実施形態に応じて様々であってよい。エラーパケットを受信したノードは、例えば、ステップＳ５２１またはＳ５２２で送信されるエラーパケットを受信したノードに関して説明した処理と類似の処理を行い、新たな再送要求パケット８０２を送信してもよい。
【０５３９】
続いて、図２０〜２１を参照して説明した再送制御の効果について、再び図２２の例を参照しながら説明する。
図２２において、「Ｎ５」と書かれた列には、シーケンス番号が１０１番から１１２番のデータパケットの消失を検出したノードＮ５において図１４のステップＳ４０２で計算される時間Ｌｓｔａｒｔが示されている。なお、本実施形態では、再送要求部４０７は、上記のとおり図１１のステップＳ３０６で完了期限Ｔｅｎｄを計算する必要がないので、図１４のステップＳ４０２で時間Ｌｅｎｄを計算する必要もない。しかし、説明の便宜上、図２２の「Ｎ５」と書かれた列には、時間Ｌｅｎｄも示されている。時間差（Ｌｅｎｄ−Ｌｓｔａｒｔ）は、ノードＮ５の再生処理部４０４が１０１番から１１２番までの１２個のデータパケットを消費するのにかかる時間である。
【０５４０】
また、図２２には、個々のデータパケットの消費にかかる時間も、横線によって示されている。上記のとおりＢｒｅｑ＝ｃＲａｔｅであることが好ましいので、図２２ではＢｒｅｑ＝ｃＲａｔｅの場合が例示されている。すなわち、１つのデータパケットの消費にかかる時間は、図２２において隣接する２本の横線の間の間隔であり、その長さはｐＳｉｚｅ／Ｂｒｅｑ（＝ｐＳｉｚｅ／ｃＲａｔｅ）である。
【０５４１】
また、図２２における太い縦線の長さは、再送要求パケット８０２に指定される取得期限の長さを示す。例えば、「Ｎ３」と書かれた列の縦線は、ノードＮ３がノードＮ５から受信する再送要求パケット８０２に指定されている取得期限の長さを示す。他の列の縦線も同様である。また、各縦線の上端の位置は、再送要求パケット８０２の受信時刻に対応する。
【０５４２】
また、縦線に重なる小さな黒い円は、データパケットの送信を依頼されたノードが実際にデータパケットの送信を開始する時刻を示す。責任ノードとして選択されるノードは、取得期限に関する制約条件を満たすので、図２２においてどの円も縦線の上端と下端の間にある。
【０５４３】
例えば、ノードＮ７には、上記のように１０２番、１０５番、１０８番、１１１番のデータパケットの送信が割り当てられる。「Ｎ７」と書かれた列の円は、ノードＮ７が、割り当てられたうちで最初の（つまり１０２番の）データパケットを送信する時刻を示す。
【０５４４】
なお、「Ｎ６」と書かれた列の円は、「ノードＮ６が、データパケットの送信をノードＮ１２とＮ１３に委譲せずに、自らデータパケットを送信する」と仮定した場合に、ノードＮ６が１０１番のデータパケットを送信する時刻を示す。逆に、ノードＮ６がデータパケットの送信をノードＮ１２とＮ１３に委譲した場合は、「Ｎ１２」の列の円が示す時刻にノードＮ１２が１０１番のデータパケットを送信し、「Ｎ１３」の列の円が示す時刻にノードＮ１３が１０３番のデータパケットを送信する。
【０５４５】
また、図２２におけるバツ印は、送信されたデータパケットが要求ノードＮ５で受信される時刻を示す。円からバツ印へ向かう矢印は、要求ノードＮ５がデータパケットを受信するまでの遅延を示す。
【０５４６】
例えば、「Ｎ７」と書かれた列には、ノードＮ７から送信される１０２番、１０５番、１０８番、１１１番のデータパケットがそれぞれノードＮ５で受信される時刻を示す４つのバツ印が示されている。図２１のステップＳ６１４に関連して説明したスケジューリングにしたがってデータパケットが送信されると、図２２に示すように、任意のシーケンス番号Ｑについて、Ｑ番のデータパケットの取得期限までにＱ番のデータパケットが要求ノードに受信される。
【０５４７】
また、例えばノードＮ７には４つのデータパケットが割り当てられる。よって、ノードＮ３がノードＮ７に送信する再送要求パケット８０２に指定されるビットレートは、ノードＮ５がノードＮ３に送信する再送要求パケット８０２に指定されるビットレートの４／１２である。したがって、図２２において「Ｎ７」と書かれた列の４つのバツ印は、間隔（ｐＳｉｚｅ／Ｂｒｅｑ）／（４／１２）で並んでいる。同様に、２つのデータパケットが割り当てられたノードＮ８の列の２つのバツ印の間の間隔は、（ｐＳｉｚｅ／Ｂｒｅｑ）／（２／１２）である。
【０５４８】
また、ノードＮ６が、データパケットの送信をノードＮ１２とＮ１３に委譲せずに、自らデータパケットを送信する場合、ノードＮ６は６個のデータパケットを送信することになる。したがって、「Ｎ６」の列には、間隔（ｐＳｉｚｅ／Ｂｒｅｑ）／（６／１２）で並んだ６つのバツ印が示されている。
【０５４９】
逆に、ノードＮ６が、データパケットの送信をノードＮ１２とＮ１３に委譲する場合、ノードＮ１２は４個のデータパケットを送信し、ノードＮ１３は２個のデータパケットを送信する。よって、「Ｎ１２」の列には、間隔（ｐＳｉｚｅ／Ｂｒｅｑ）／（４／１２）で並んだ４つのバツ印が示されており、「Ｎ１３」の列には、間隔（ｐＳｉｚｅ／Ｂｒｅｑ）／（２／１２）で並んだ２つのバツ印が示されている。
【０５５０】
以上説明したように、図２２には、説明の便宜上、ノードＮ６が責任ノードとしてノードＮ６のみを選ぶ場合と、２つの子ノードＮ１２とＮ１３のみを選ぶ場合が両方とも図示されている。しかし、いずれの場合であろうとも、各ノードは適宜の間隔をあけてデータパケットを送信する。その結果、再送が要求された１２個のデータパケットは、平均的には、最初にノードＮ５が指定したビットレートＢｒｅｑでノードＮ５に受信される。
【０５５１】
したがって、「ノードＮ５や、物理ネットワーク上でノードＮ５に近いルータ等において、１０１〜１１２番のデータパケットが短期間に集中してバースト的に受信されたために輻輳が生じる」という事態は起こりにくい。つまり、再送リストに指定されるデータパケットの数に応じてビットレートが比例配分されることにより、バースト受信が緩和される。その結果、「再送されたデータパケットの一部または全部が消失する」といった事態が回避される。
【０５５２】
もちろん、図２２に例示するように、再送が要求された１２個のデータパケットのうちの一部（例えば２〜４個のデータパケット）が、互いに非常に近い時刻にノードＮ５において受信されることはあり得る。例えば、ノードＮ６が責任ノードとしてノードＮ１２とＮ１３を選んだ場合、要求ノードＮ５における１０１〜１０４番の４つのデータパケットの受信時刻は、互いに近い。
【０５５３】
しかしながら、本実施形態では輻輳は起こりにくい。その理由は、たとえ或る複数個のデータパケットの受信時刻が互いに近くても、当該「或る複数個のデータパケット」の受信に続く、次の１つまたは複数のデータパケット受信までには、ある程度の長さの間隔があくからである。
【０５５４】
例えば、図２２に示すように、たとえ要求ノードＮ５における１０１〜１０４番の４つのデータパケットの受信時刻が非常に近いとしても、次の１０５番のデータパケットの受信までには、およそ（ｐＳｉｚｅ／Ｂｒｅｑ）×３の間隔があく。よって、要求ノードＮ５や、物理ネットワーク上でノードＮ５に近いルータは、この（ｐＳｉｚｅ／Ｂｒｅｑ）×３の時間を利用して、時間的に集中して到着した１０１〜１０４番の４つのデータパケットに関する処理を済ませることができる。したがって、要求ノードＮ５や、物理ネットワーク上でノードＮ５に近いルータにおいて、バッファオーバフロー等に起因するパケットロスは起こりにくい。
【０５５５】
例えば、各ノードが可能な限り高いビットレートでデータパケットを送信する場合（すなわち次の受信までの間隔が非常に短い場合）と比較すれば、図２２の例による輻輳回避の効果（換言すれば、バースト受信を緩和する効果）は明らかである。
【０５５６】
以上説明したように、ノードＮ５における１２個のデータパケットの受信は、全体としては、平均してビットレートＢｒｅｑで達成される。そして、複数のノードからのデータパケットの送信を全体で均したビットレートを、要求ノードＮ５が指定したビットレートＢｒｅｑに保つための制御は、上記のように、再送要求パケット８０２のビットレートフィールドを介して、自律分散的に実現される。
【０５５７】
例えば、ノードＮ７、Ｎ８、Ｎ１２、Ｎ１３という４つのノードが実際にデータパケットを送信するとする。この場合、４つのノードがそれぞれ、受信した再送要求パケット８０２にしたがって送信を自律分散的にスケジューリングすることにより、要求ノードＮ５における平均受信ビットレートＢｒｅｑが実現される。
【０５５８】
なお、バースト的な受信を一層緩和するために、要求生成部４１３は、図２１のステップＳ６１５において、式（４４）の代わりに、式（４６）を用いて取得期限Ｔｓｔａｒｔ２を計算してもよい。式（４６）における「Ｆｉ」は、集合Ｃ中のｉ番目のノードに対応づけ部４１２が対応づけたＸｉ個のデータパケットのうちで最初のデータパケットのシーケンス番号である。
Tstart2=Tstart-α+Ii+pSize/Breq×(Fi-Q1)      (46)
【０５５９】
例えば、図２２の例において、ノードＮ３の要求生成部４１３が、集合Ｃ中のｉ番目のノードとしてノードＮ８に注目している場合、ノードＮ８に対応づけられているデータパケットのシーケンス番号は１０４番と１１０番なので、Ｆｉ＝１０４である。また、ノードＮ３が受信した再送要求パケット８０２の再送リストの最初のシーケンス番号は１０１番なので、Ｑ１＝１０１である。したがって、式（４６）により計算される取得期限Ｔｓｔａｒｔ２は、式（４４）により計算される取得期限Ｔｓｔａｒｔ２よりも、３つのデータパケット（具体的には１０１〜１０３番のデータパケット）の消費時間のぶんだけ、遅い。
【０５６０】
要求生成部４１３が式（４６）によって取得期限Ｔｓｔａｒｔ２を計算した場合でも、図２２から明らかなように、各データパケットは、要求ノードＮ５における取得期限までに要求ノードに受信される。また、要求生成部４１３が式（４６）によって取得期限Ｔｓｔａｒｔ２を計算することで、要求ノードＮ５において複数のデータパケットの受信時刻が時間的に集中する度合は、一層緩和され得る。
【０５６１】
さらに、以上のようなビットレートの自律分散制御は、期限内の受信を犠牲にすることなく実現される。すなわち、ステップＳ６１４に関連して説明したスケジューリングによれば、ノードＮ５は、図２２にバツ印で示すタイミングで各データパケットを受信することができる。そして、図２２にバツ印で示すタイミングは、明らかに、「任意のシーケンス番号Ｑについて、Ｑ番のデータパケットの取得期限までにＱ番のデータパケットが要求ノードに受信される」ということを示している。
【０５６２】
ところで、本発明は上記実施形態に限られるものではなく、上記実施形態は様々に変形可能である。以下に、上記実施形態を変形するいくつかの観点を例示する。例えば、上記実施形態は、下記の観点から様々に変形することができ、上記に例示したいくつかの変形および下記の変形は、相互に矛盾しない限り、任意に組み合わせることが可能である。
【０５６３】
変形の第１の観点は、論理ネットワークのトポロジに関する。例えば、図２のようなツリー型のトポロジの論理ネットワーク１００ではなく、メッシュ型のトポロジの論理ネットワーク上でデータパケットが配信されるデータ配信システムにも、上記実施形態の再送制御は適用可能である。図２３は、メッシュ型トポロジの論理ネットワークの例を示す図である。
【０５６４】
例えば、図２３の論理ネットワーク１００ｃは、ノードＮ４０〜Ｎ５４を含むメッシュ型トポロジの論理ネットワークである。論理ネットワーク１００ｃのトポロジは、図２３において非循環有向グラフ（ＤＡＧ）により表されている。
【０５６５】
たとえ論理ネットワーク１００ｃのようにメッシュ型の論理ネットワークであっても、トポロジを有向グラフで表すことのできる論理ネットワークならば、親ノードと子ノードが定義可能である。つまり、論理ネットワーク上において、あるノードＮｊから他のノードＮｋへのエッジが存在するとき、ノードＮｋはノードＮｊの子ノードであり、ノードＮｊはノードＮｋの親ノードである。
【０５６６】
メッシュ型の論理ネットワーク１００ｃにおいては、親ノードを複数持つノードもある。例えば、ノードＮ４６は、３つの親ノードノードＮ４０、Ｎ４２、Ｎ４３を持ち、４つの子ノードＮ４５、Ｎ４９、Ｎ５１、Ｎ５２を持つ。複数の親ノードを持つ場合、ノード情報記憶部４０８の親ノード情報も複数のエントリを含む。
【０５６７】
また、トポロジがＤＡＧで表される論理ネットワークには閉路が存在しないので、任意のノードＮｊについて、「ノードＮｊを根ノードとする部分グラフ」を親ノードと子ノードの関係に基づいて定義することができる。
【０５６８】
具体的には、ノードＮｊが子ノードを持たない場合、ノードＮｊを根ノードとする部分グラフは、ノードＮｊのみを含み、エッジを含まない。逆に、ノードＮｊが子ノードＮｋを持つ場合、ノードＮｋを根ノードとする部分グラフに属するすべてのノードと、ノードＮｊは、ノードＮｊを根ノードとする部分グラフに属する。また、ノードＮｊが子ノードＮｋを持つ場合、ノードＮｋを根ノードとする部分グラフに属するすべてのエッジと、ノードＮｊからノードＮｋへのエッジは、ノードＮｊを根ノードとする部分グラフに属する。
【０５６９】
すると、メッシュ型の論理ネットワーク１００ｃにおいても、任意のノードＮｊについて、ノードＮｊの送信可能総帯域幅Ｔｏｔａｌ（Ｎｊ）が定義可能である。つまり、ノードＮｊの送信可能総帯域幅Ｔｏｔａｌ（Ｎｊ）は、ノードＮｊを根ノードとする部分グラフに属するすべてのノードの送信可能帯域幅の総和である。
【０５７０】
ただし、送信可能総帯域幅の通知と認識に関して、メッシュ型の論理ネットワーク１００ｃとツリー型の論理ネットワークでは次のような違いがある。
ツリー型の論理ネットワーク１００では、根ノード以外のすべてのノードが必ず１つの親ノードを持つ。そのため、各ノードが図１０のフローチャートにしたがって動作することにより、各ノードは、送信可能総帯域幅を正しく認識し、記憶することができる。
【０５７１】
他方、論理ネットワーク１００ｃ内の各ノードが図１０のフローチャートにしたがって動作すると、ノードＮｊのノード情報記憶部４０８の自ノード情報に記録される送信可能総帯域幅の値は、必ずしも、上記のように定義されるＴｏｔａｌ（Ｎｊ）ではない。
【０５７２】
例えば、論理ネットワーク１００ｃでは、ノードＮ４５は子ノードＮ４９、Ｎ５０、Ｎ５１を持ち、ノードＮ４９は子ノードＮ５０を持ち、ノードＮ５１は子ノードＮ５０を持ち、ノードＮ５０は子ノードを持たない。換言すれば、ノードＮ５０は３つの親ノードＮ４５、Ｎ４９、Ｎ５１を持ち、このうち２つの親ノードＮ４９とＮ５１は、偶然にも、ノードＮ５０のもう１つの親ノードＮ４５の子孫ノードである。
【０５７３】
したがって、論理ネットワーク１００ｃ内の各ノードが図１０のフローチャートにしたがって動作する場合、以下の（Ｕ−１）〜（Ｕ−４）のような処理が行われる。
（Ｕ−１）ノードＮ５０は、３つの親ノードＮ４５、Ｎ４９、Ｎ５０のすべてに、ノードＮ５０の送信可能総帯域幅として、ノードＮ５０の送信可能帯域幅Ｒｅｓｅｒｖｅｄ（Ｎ５０）を通知する。
（Ｕ−２）ノードＮ４９は、（Ｕ−１）で通知されたノードＮ５０の送信可能帯域幅Ｒｅｓｅｒｖｅｄ（Ｎ５０）とノードＮ４９の送信可能帯域幅Ｒｅｓｅｒｖｅｄ（Ｎ４９）の和を計算する。そして、ノードＮ４９は、２つの親ノードＮ４５とＮ４６の両方に、計算結果を、ノードＮ４９の送信可能総帯域幅として通知する。
（Ｕ−３）ノードＮ５１は、（Ｕ−１）で通知されたノードＮ５０の送信可能帯域幅Ｒｅｓｅｒｖｅｄ（Ｎ５０）とノードＮ５１の送信可能帯域幅Ｒｅｓｅｒｖｅｄ（Ｎ５１）の和を計算する。そして、ノードＮ５１は、３つの親ノードＮ４５、Ｎ４６、Ｎ４７のすべてに、計算結果を、ノードＮ５１の送信可能総帯域幅として通知する。
（Ｕ−４）ノードＮ４５は、（Ｕ−１）、（Ｕ−２）、（Ｕ−３）で通知された値と、ノードＮ４５の送信可能帯域幅Ｒｅｓｅｒｖｅｄ（Ｎ４５）の和を計算する。そして、ノードＮ４５は、２つの親ノードＮ４２とＮ４６の両方に、計算結果を、ノードＮ４５の送信可能総帯域幅として通知する。
【０５７４】
上記の（Ｕ−４）においてノードＮ４５が親ノードＮ４２とＮ４６に通知する値には、ノードＮ５０の送信可能帯域幅Ｒｅｓｅｒｖｅｄ（Ｎ５０）が３重にカウントされている。したがって、（Ｕ−４）においてノードＮ４５から通知される値は、ノードＮ４５を根ノードとする部分グラフに属するすべてのノードの送信可能帯域幅の総和よりも大きい。換言すれば、（Ｕ−４）においてノードＮ４５から通知される値は、上記定義による送信可能総帯域幅Ｔｏｔａｌ（Ｎ４５）の正確な値ではない。
【０５７５】
そこで、論理ネットワーク１００ｃのようなメッシュ型トポロジの論理ネットワークが利用される実施形態においては、例えば、以下の２つの方針が採用可能である。
第１の方針は、「上記（Ｕ−４）のような重複カウントを容認する」という方針である。換言すれば、第１の方針は、「図１０のフローチャートによる処理では、必ずしも各ノードが正確な送信可能総帯域幅を認識することができるとは限らないが、通知される値は、送信可能総帯域幅の推定値として利用可能である」という立場に拠るものである。
【０５７６】
第１の方針によれば、図１０の処理は基本的には変更不要である。つまり、図１０のステップＳ２１１での通知先の親ノードの数が複数の場合があり得る点は、上記実施形態と異なるが、その他の点は変わらない。したがって、第１の方針によれば、ステップＳ２０９の計算方法を変更する必要もなく、ステップＳ２１１ではステップＳ２０９の計算結果がそのまま各親ノードに通知される。
【０５７７】
以上の第１の方針が採用された場合であっても、ステップＳ５２１、Ｓ５２２またはＳ６２１で送信されるエラーパケットに応じて責任ノードの再選択が適宜行われれば、特に問題は生じない。
【０５７８】
また、論理ネットワークのトポロジによっては、上記（Ｕ−４）のような重複カウントが多発するとは限らない。つまり、図１０のフローチャートにしたがって通知される値と、定義にしたがった正しい送信可能総帯域幅との間の誤差は、わずかかもしれない。誤差が小さければ、誤差の影響は無視しても差し支えないので、第１の方針は妥当である。
【０５７９】
また、論理ネットワーク１００ｃ内の各ノードは、論理ネットワーク１００ｃ全体のトポロジを認識してはいない。よって、各ノードは、「上記（Ｕ−４）のような重複カウントが生じるか否か」ということも認識しない。そして、第１の方針は、上記（Ｕ−４）のような重複カウントの原因となるトポロジを把握するための追加的な処理を必要としないので、各ノードが論理ネットワーク１００ｃ全体のトポロジを認識しないＰ２Ｐシステムに適している。
【０５８０】
なお、第１の方針が採用される場合に、要求されたデータパケットの送信が保証されることの信頼性を向上させるために、再送要求パケットを受信したノードが付加的な処理を行ってもよい。具体的には、複数の親ノードを持つノードは、親ノードのうちの１つから再送要求パケットを受信した場合、他のすべての親ノードに対して、後述の第９の観点と同様の通知を送信してもよい。詳しくは第９の観点とともに後述するが、親ノードのうちの１つから受信した再送要求パケットに応じて一時的に消費される帯域幅を他の親ノードに通知することにより、エラー（つまりＮＡＣＫ）の発生を未然に防ぐことが可能となる。
【０５８１】
さて、第２の方針は、「上記（Ｕ−４）のような重複カウントを避ける」という方針である。具体的には、第２の方針によれば、図１０のステップＳ２１１で通知する帯域幅の計算方法が変更される。
【０５８２】
図１０の処理では、ステップＳ２０９で計算された値がステップＳ２１１で通知される。しかし、第２の方針によって変形された処理によれば、ステップＳ２０９で計算された値を親ノードの数で割った値が、ステップＳ２１１で通知される。
【０５８３】
変形の第２の観点は、子ノードが複数ある場合の責任ノードの選択とデータパケットの割り当てに関する。
【０５８４】
図１６〜１７の処理は、先に見つかった子ノードから順に、再送期限に関する制約条件が満たされる限りなるべく多くのデータパケットを、見つかった子ノードに割り当てる処理である。換言すれば、図１６〜１７の処理は、貪欲法（greedy algorithm）に基づく処理であり、「処理フローが単純である」という利点を持つ。しかし、ノード間の負荷の公平性をより高めるために、図１６〜１７の処理が変形されてもよい。
【０５８５】
例えば、或るノードが５つの子ノードを持ち、当該「或るノード」が何回も再送要求パケット８０１を受信する場合、図１６〜１７の処理によれば、複数の再送要求全体の傾向として、負荷が偏ることがある。具体的には、当該「或るノード」の１番目の子ノードを根ノードとする部分グラフ中のノードは、当該「或るノード」の５番目の子ノードを根ノードとする部分グラフ中のノードよりも、実際にデータパケットの送信を担うことが多くなりがちである。
【０５８６】
そこで、複数の再送要求全体での負荷の偏りを均すため、選択部４１１は、子ノード情報の複数のエントリに決まった順番で注目する（例えば１番目のエントリから順に注目する）代わりに、ランダムな順番で注目してもよい。あるいは、図１６〜１７のような貪欲法による処理の代わりに、比例配分による処理が行われてもよい。
【０５８７】
例えば、選択部４１１は、通信装置４００のすべての子ノードを、仮に責任ノードとして選択してもよい。そして、対応づけ部４１２は、各子ノードの現在使用可能な帯域幅（すなわち式（２８）の帯域幅Ｂ）を計算し、現在使用可能な帯域幅に基づいて、要求された（Ｑｔｏ−Ｑｆｒｏｍ＋１）個のデータパケットを全子ノードに仮に比例配分してもよい。
【０５８８】
例えば、図１のステップＳ２０で、６１番から６８番までの８個のデータパケットの送信を要求する再送要求パケット８０１をノードＮ３が受信したとする。すると、ノードＮ３の選択部４１１は、３つの子ノードＮ６、Ｎ７、Ｎ８すべてを仮に責任ノードとして選択する。また、ノードＮ６、Ｎ７、Ｎ８がそれぞれ現在使用可能な帯域幅の比が、２：１：１であるとする。すると、ノードＮ３の対応づけ部４１２は、比例配分により、ノードＮ６には４個、ノードＮ７には２個、ノードＮ８には２個のデータパケットをそれぞれ仮に割り当てる。
【０５８９】
その後、対応づけ部４１２は、「各子ノードが、再送期限による制約条件を満たしつつ、比例配分により仮に割り当てられた数のデータパケットの送信を保証することが可能か否か」をチェックする。そして、もし、仮に割り当てられた数のデータパケットの送信を保証しきれない子ノードがあれば、対応づけ部４１２は、仮に割り当てたデータパケットの数を調整する。
【０５９０】
同じシーケンス番号のデータパケットの送信に関しては、明らかに、式（９）の遅延αが大きい子ノードの方が、遅延αが小さい子ノードよりも、制約条件を満たすのが難しい。そこで、対応づけ部４１２は、例えば、遅延αが小さい子ノード（すなわち制約条件を満たす見込みの高い子ノード）から順に、上記のチェック処理を行ってもよい。
【０５９１】
例えば、上記のようにノードＮ６、Ｎ７、Ｎ８に仮に割り当てられたデータパケットの個数がそれぞれ４個、２個、２個の場合に、ノードＮ８の遅延αが最小で、ノードＮ６の遅延αが２番目に小さく、ノードＮ７の遅延αが最大とする。
【０５９２】
すると、ノードＮ３の対応づけ部４１２は、遅延αが小さい順に、まず「遅延αが最小のノードＮ８は、６１〜６２番の２つのデータパケットについて、再送期限に関する制約条件を満たしつつ送信を保証することが可能か否か」をチェックする。チェックの結果として「可能」と判明すれば、対応づけ部４１２は、ノードＮ８に実際に６１〜６２番の２つのデータパケットを対応づける。あるいは、チェックの結果として、例えば「ノードＮ８が制約条件を満たしつつ送信を保証するのが可能なのは６１番のデータパケットのみ」と判明すれば、対応づけ部４１２は、ノードＮ８に実際に６１番の１つのデータパケットのみを対応づける。
【０５９３】
そして、対応づけ部４１２は、次に、「遅延αが２番目に小さいノードＮ６は、ノードＮ８に割り当てた直後の４つのシーケンス番号を持つデータパケットについて、再送期限に関する制約条件を満たしつつ送信を保証することが可能か否か」をチェックする。例えば、対応づけ部４１２は、ノードＮ８に実際に６１〜６２番のデータパケットを割り当てた場合は、「６３〜６６番の４つのデータパケットの送信をノードＮ６が保証することができるか否か」をチェックする。あるいは、対応づけ部４１２は、ノードＮ８に実際に６１番のデータパケットのみを割り当てた場合は、「６２〜６５番の４つのデータパケットの送信をノードＮ６が保証することができるか否か」をチェックする。
【０５９４】
そして、対応づけ部４１２は、チェック結果に応じて、ノードＮ６に実際に割り当てるデータパケットのシーケンス番号の範囲を決定する。また、対応づけ部４１２は、遅延αが最大のノードＮ７についても、上記と同様にして、チェック処理とデータパケットの実際の割り当てを行う。
【０５９５】
また、対応づけ部４１２は、遅延αが最大のノードＮ７に実際に割り当てたデータパケットのシーケンス番号を、変数Ｖに代入する。そして、Ｖ＜Ｑｔｏの場合は、図１７のステップＳ５１４以降の処理が続いて行われ、Ｖ≧Ｑｔｏの場合は、続いてステップＳ５２０の処理が行われる。
【０５９６】
例えば以上のようにして、貪欲法に基づく図１６〜１７の処理は、比例配分に基づく処理に変形されてもよい。
変形の第３の観点は、送信可能総帯域幅以外のリソースに関する。上記のように、送信可能総帯域幅は、責任ノードとして選択可能な子ノードを選択部４１１が選択する際にも参照され、対応づけ部４１２が責任ノードに対応づけるデータパケットを決める際にも参照される。
【０５９７】
しかし、帯域幅はノードが使用するリソースの一例である。ノードは、そのほかにも、ＣＰＵリソースやメモリリソースを使用する。ＣＰＵリソースの量は、例えば、ＣＰＵ３０１のクロック周波数により測られる。メモリリソースの量は、例えば、ＲＡＭ３０２のバイト数により測られる。
【０５９８】
例えば、使用可能な帯域幅が同じ２つの子ノードがある場合、対応づけ部４１２は、ＣＰＵリソースが多い方のノードに、より多くのデータパケットを対応づけてもよいし、メモリリソースが多い方のノードに、より多くのデータパケットを対応づけてもよい。対応づけ部４１２は、帯域幅、ＣＰＵリソース、メモリリソースなどの複数の種類のリソースの量を総合的に評価する評価値にしたがって、各責任ノードに対応づけるデータパケットの量を決めてもよい。
【０５９９】
そのために、各ノードは、対応づけ部４１２が参照する各種のリソースの量について、送信可能総帯域幅と同様に、親ノードに通知してもよい。また、各ノードは、各種のリソースの量について、一時使用帯域幅と同様に、一時使用中のリソース量を管理してもよい。
【０６００】
つまり、受信部４０１は、論理ネットワークのトポロジにおいて通信装置４００の子ノードを根ノードとする部分グラフに含まれるノードのリソースの合計量を示す合計リソース情報を、当該子ノードから受信してもよい。
【０６０１】
すると、ノード情報管理部４０９は、受信部４０１が受信した合計リソース情報を、当該子ノードと対応づけて子ノード情報としてノード情報記憶部４０８に記憶することができる。また、ノード情報管理部４０９は、通信装置４００自身のリソースの量と、各子ノードから受信して記憶した合計リソース情報が示す合計量との合計を、通信装置４００自身についての合計リソース情報として算出することができる。その結果、送信部４０２は、ノード情報管理部４０９が算出した新たな合計リソース情報を、通信装置４００の親ノードに送信することができる。送信可能総帯域幅は、上記のような合計リソース情報が表すリソースの合計量の一例である。
【０６０２】
そして、上記のように、帯域幅に限らず、何らかのリソースについて合計リソース情報の通知が行われる場合、対応づけ部４１２は、ノード情報記憶部４０８を参照することにより、責任子ノードに対応する使用可能合計リソース情報を得ることができる。使用可能合計リソース情報の具体例は、例えば、送信可能総帯域幅から一時使用帯域幅の総和を引いた帯域幅（例えば、式（２８）の帯域幅Ｂ）である。
【０６０３】
或る１つの子ノードの使用可能合計リソース情報とは、換言すれば、当該子ノードを根ノードとする部分グラフに含まれるノードの使用可能リソースの合計量を示す情報である。そして、使用可能合計リソース情報の認識を可能とするために、対応づけ部４１２は、部分特定情報を責任ノードに対応づけたら、対応づけた当該部分特定情報の送信にかかる負荷に応じて消費されるリソースの量を算出する。さらに、対応づけ部４１２は、算出した量を示す消費リソース情報を、当該責任ノードおよび有効期限と対応づけてノード情報記憶部４０８に記憶する。
【０６０４】
図９の一時使用帯域幅は、上記の消費リソース情報の具体例であり、図９の一時使用期限は上記の有効期限の具体例である。以上のように、リソースの種類によらず、帯域幅と同様の管理が可能であり、使用可能なリソースの量に応じた割り当てが可能である。
【０６０５】
また、再送要求パケットを受信したノードの選択部４１１は、当該ノード自身よりも子ノードを優先的に責任ノードとして選択するが、「子ノードを優先する」という方針は、換言すれば、以下のとおりである。
【０６０６】
すなわち、通信装置４００が１つ以上の子ノードを持つ場合、選択部４１１は、通信装置４００自身のリソースの量によらず、子ノードを通信装置４００自身よりも優先して責任ノードとして選択する。たとえ通信装置４００自身が使用可能なリソースの量が個々の子ノードの合計リソース量より多くても、選択部４１１は、責任ノードの候補としてまず先に子ノードに注目する。それにより、データパケットの配信用のリレーネットワークとして使われる論理ネットワークにおいて、より根ノードから遠い（つまり、より下流の）ノードがデータパケットの送信を行う蓋然性が高まる。
【０６０７】
もちろん、通信装置４００が子ノードを持たない場合は、選択部４１１は、通信装置４００自身を責任ノードとして選択してもよい。
変形の第４の観点は、再送期限に関する。上記実施形態では、取得期限と完了期限のペアまたは取得期限とビットレートのペアにより、再送期限が表され、子ノードへの委譲と実際のデータパケットの送信は、再送期限に関する制約条件が満たされるように行われる。しかし、論理ネットワークの用途によっては、データパケットのペイロードは、リアルタイム性を持たないデータのこともある。リアルタイム制約のない種類のデータの配信が行われる実施形態においては、再送期限は考慮不要である。
【０６０８】
つまり、再送要求パケット８０１から取得期限と完了期限が省略されてもよく、再送要求パケット８０２から取得期限が省略されてもよい。ただし、バースト受信の回避のためには、ビットレートのフィールドが、取得期限が省略された形の再送要求パケット８０２においても残され、送信ビットレートの制御に使われることが好ましい。
【０６０９】
各ノードが再送期限を考慮しない実施形態において、選択部４１１は、単にすべての子ノードを責任ノードとして選択してもよい。そして、対応づけ部４１２は、受信部４０１が受信した再送要求パケットで要求されたデータパケットを、式（２８）の帯域幅Ｂなどの使用可能合計リソース情報に応じて、単に子ノードに比例配分してもよい。
【０６１０】
変形の第５の観点は、遅延αの推定に関する。第４の観点で示した例とは逆に、図１６〜１７や図２０〜２１のように再送期限が考慮される場合は、遅延αが利用される。そして、遅延αは、上記（Ｑ−１）〜（Ｑ−４）を含み、上記のとおり、（Ｑ−４）の時間の長さは、適宜の近似モデルにしたがって見積もられる。
【０６１１】
しかし、（Ｑ−４）の時間の長さは、論理ネットワーク１００のトポロジが変化せずに同じ要求ノードからの再送要求が２回以上生じる場合は、２回目以降の再送では、実測値に基づく見積もりが可能である。つまり、２回目以降の再送では、１回目と同じく近似モデルによって（Ｑ−４）の時間が見積もられてもよいが、実測値に基づいて（Ｑ−４）の時間が見積もられてもよい。
【０６１２】
実測値に基づく（Ｑ−４）の時間の見積もりは、再送要求パケットを親ノードから受信した子ノードが、当該子ノード自身と要求ノードとの間のＲＴＴを計測し、計測結果を記憶するとともに親ノードに通知することにより、可能となる。
【０６１３】
例えば、図１のようにノードＮ５がノードＮ３に再送要求を送信することが複数回繰り返されたと仮定する。そして、１回目の再送要求が、図１に示すように転送されたとする。
【０６１４】
すると、親ノードＮ３から再送要求を受信したノードＮ６は、任意のタイミングで（例えば、ネットワーク負荷の低いときなどに）、ノードＮ６自身と、再送要求に指定された要求ノードＮ５との間のＲＴＴを計測する。そして、ノードＮ６は、計測結果をノード情報記憶部４０８に記憶するとともに、親ノードＮ３に通知する。
【０６１５】
同様に、ノードＮ７は、ノードＮ７とノードＮ５の間のＲＴＴを計測し、計測結果を記憶するとともに親ノードＮ３に通知する。また、ノードＮ８は、ノードＮ８とノードＮ５の間のＲＴＴを計測し、計測結果を記憶するとともに親ノードＮ３に通知する。
【０６１６】
さらに同様に、ノードＮ１２は、ノードＮ１２とノードＮ５の間のＲＴＴを計測し、計測結果を記憶するとともに親ノードＮ６に通知する。また、ノードＮ１３は、ノードＮ１３とノードＮ５の間のＲＴＴを計測し、計測結果を記憶するとともに親ノードＮ６に通知する。
【０６１７】
また、親ノードではないノードＮ５から再送要求を受信したノードＮ３は、任意のタイミングで（例えば、ネットワーク負荷の低いときなどに）、ノードＮ３自身と、再送要求の送信元の要求ノードＮ５との間のＲＴＴを計測する。そして、ノードＮ３は、計測結果をノード情報記憶部４０８に記憶する。
【０６１８】
すると、ノードＮ５が再びノードＮ３に再送要求を送信した場合、ノードＮ３は、子ノードＮ６に関する（Ｑ−４）の遅延（つまり、Ｄ６，５−Ｄ３，５）を、子ノードＮ６から通知されたＲＴＴ６，５とノードＮ３自身が計測したＲＴＴ３，５から計算することができる。同様に、ノードＮ３は、子ノードＮ７に関する（Ｑ−４）の遅延も、実測されたＲＴＴから計算することができ、子ノードＮ８に関する（Ｑ−４）の遅延も、実測されたＲＴＴから計算することができる。
【０６１９】
さらに、ノードＮ５からの２回目の再送要求に応じて、ノードＮ３がノードＮ６を責任ノードとして選択したと仮定する。すると、ノードＮ６は、ノードＮ３から再送要求パケットを受信する。この場合、ノードＮ６は、子ノードＮ１２に関する（Ｑ−４）の遅延（つまり、Ｄ１２，５−Ｄ６，５）を、子ノードＮ１２から通知されたＲＴＴ１２，５とノードＮ６自身が計測したＲＴＴ６，５から計算することができる。同様に、ノードＮ６は、子ノードＮ１３に関する（Ｑ−４）の遅延も、実測されたＲＴＴから計算することができる。
【０６２０】
このように、２回目以降の再送では、実測値に基づいて（Ｑ−４）の時間が見積もられてもよい。その結果、遅延αがより正確に見積もられ、より適切な割り当てが実現される。
【０６２１】
変形の第６の観点は、ノード間の同期と期限の表現に関する。実施形態に応じて、論理ネットワークは、同期系のこともあるし非同期系のこともある。つまり、論理ネットワーク内のノードがそれぞれ内蔵する時計がすべて同期されていることもあるし、時計が同期されていないこともある。
【０６２２】
例えば、論理ネットワーク１００内の各ノードを実現する通信装置４００が、いずれもＳＴＢ（Set Top Box）の場合、論理ネットワーク１００は同期系である。なぜなら、テレビ放送電波には時刻同期信号が含まれるからである。
【０６２３】
また、データ配信アプリケーションプログラムが、ＮＴＰ（Network Time Protocol）などによる時刻同期処理のプログラムコードを含むこともあり得る。この場合、当該データ配信アプリケーションプログラムにしたがって動作して論理ネットワーク１００を構成する全ノードの時計は、同期される。
【０６２４】
逆に、データ配信アプリケーションプログラムが時刻同期処理のプログラムコードを含まないこともある。しかも、通信装置４００は、例えば個人ユーザのＰＣなど、必ずしも標準時刻への同期がなされているとは限らない装置かもしれない。すると、論理ネットワーク１００は非同期系である。
【０６２５】
論理ネットワーク１００が非同期系のとき、再送要求パケット８０１または８０２に指定される再送期限は、時間の長さにより表される。しかし、論理ネットワーク１００が同期系のとき、再送要求パケット８０１または８０２に指定される再送期限は、時間の長さにより表されてもよいし、絶対時刻により表されてもよい。
【０６２６】
なお、再送期限が絶対時刻により表される実施形態では、以下のようにいくつかのステップの処理が変形される。
まず、図１４のステップＳ４０４で再送要求部４０７は、式（７）と（８）の代わりに、式（４７）と（４８）にしたがって取得期限Ｔｓｔａｒｔと完了期限Ｔｅｎｄを計算する。式（４７）と（４８）における「Ｎｏｗ」は、ステップＳ４０４が実行される時点の現在時刻である。
Tstart=Now+Lstart-RTT/2      (47)
Tend=Now+Lend-RTT/2          (48)
【０６２７】
なお、式（７）と（８）ではＲＴＴが減算されるのに対し、式（４７）と（４８）ではＲＴＴ／２が減算される。この違いの理由は、例えば図１８から明らかである。
【０６２８】
つまり、取得期限Ｔｓｔａｒｔが時間の長さで表される場合、図１８の値Ｔａのように、図１８の太い矢印の長さが取得期限Ｔｓｔａｒｔとして設定される。それに対し、取得期限Ｔｓｔａｒｔが絶対時刻で表される場合、取得期限Ｔｓｔａｒｔは、図１８の太い矢印の下端の位置に相当する。したがって、図１８からも明らかなように、取得期限Ｔｓｔａｒｔが絶対時刻で表される場合、取得期限Ｔｓｔａｒｔは、式（４７）により得られる。
【０６２９】
また、図１６のステップＳ５０５で選択部４１１は、式（９）が満たされるか否かではなく、式（４９）が満たされるか否かを判断する。式（４９）における「Ｎｏｗ」は、ステップＳ５０５が実行される時点の現在時刻である。
Tstart+(Tend-Tstart)×(U-Qfrom)/(Qto-Qfrom+1)-α > Now      (49)
【０６３０】
そして、図１６のステップＳ５０６で選択部４１１は、式（２８）と（２９）をともに満たす最大の番号Ｖの代わりに、式（５０）と（２９）をともに満たす最大の番号Ｖを計算する。式（５０）における「Ｎｏｗ」は、ステップＳ５０６が実行される時点の現在時刻である。
Now+α+(V-U+1)×pSize/B+β <
Tend-(Tend-Tstart)×(Qto-V)/(Qto-Qfrom+1)      (50)
【０６３１】
また、図１７のステップＳ５１４で選択部４１１は、式（３５）が満たされるか否かではなく、式（５１）が満たされるか否かを判断する。式（５１）における「Ｎｏｗ」は、ステップＳ５１４が実行される時点の現在時刻である。
Tstart+(Tend-Tstart)×(U-Qfrom)/(Qto-Qfrom+1)-Iself > Now      (51)
【０６３２】
そして、ステップＳ５１５で選択部４１１は、式（３６）と（３７）をともに満たす最大の番号Ｖではなく、式（５２）と（３７）をともに満たす最大の番号Ｖを計算する。式（５２）における「Ｎｏｗ」は、ステップＳ５１５が実行される時点の現在時刻である。
Now+Iself+(V-U+1)×pSize/Bself < 
Tend-(Tend-Tstart)×(Qto-V)/(Qto-Qfrom+1)      (52)
【０６３３】
また、図２０のステップＳ６０２で選択部４１１は、式（１０）が成り立つ子ノードの集合の代わりに、式（５３）が成り立つ子ノードの集合を求める。式（５３）の「Ｎｏｗ」は、ステップＳ６０２が実行される時点の現在時刻である。
Tstart-α > Now      (49)
【０６３４】
以上説明したように、再送要求パケット８０１または８０２に指定される期限は、時間の長さにより表現されていてもよいし、絶対時刻により表現されていてもよい。いずれにしろ、受信部４０１が受信した再送要求が、期限に関する制約条件を指定する期限情報を含む場合に、もし選択部４１１が通信装置４００自身を責任ノードとして選択したら、通信装置４００は制約条件を満たすタイミングでデータパケットを送信する。
【０６３５】
例えば、再送要求パケット８０１に指定される取得期限Ｔｓｔａｒｔと完了期限Ｔｅｎｄのペアは、制約条件を指定する期限情報の一例である。また、再送要求パケット８０２に指定される取得期限ＴｓｔａｒｔとビットレートＢｒｅｑも、期限情報の一例である。
【０６３６】
なお、再送要求パケット８０１または８０２に指定される取得期限Ｔｓｔａｒｔは、直接的には、再送要求パケット８０１または８０２が要求する１つまたは複数のデータパケットのうち最初の１つの取得期限を示す。しかし、再送要求パケット８０１または８０２に指定される取得期限Ｔｓｔａｒｔは、間接的には、再送要求パケット８０１または８０２が要求する２番目以降の各データパケットそれぞれの取得期限についての制約条件を指定している。
【０６３７】
ところで、再送期限が絶対時刻で表現される場合にも、図１６のステップＳ５０８と図２１のステップＳ６１５は変更不要である。換言すれば、責任子ノード宛の新たな再送要求に設定する新たな制約条件を指定する新たな期限情報は、再送期限の表現形式によらず、同じ方法で算出される。
【０６３８】
具体的には、要求生成部４１３は、少なくとも、受信部４０１が受信した再送要求に含まれる期限情報と、通信装置４００と責任子ノードとの間の通信にかかる遅延時間を用いて、新たな期限情報を算出する。受信部４０１が受信した再送要求に含まれる期限情報の例は、例えば取得期限Ｔｓｔａｒｔである。また、通信装置４００と責任子ノードとの間の通信にかかる遅延時間は、具体的には、遅延αに含まれる（Ｑ−２）の通信遅延である。もちろん、要求生成部４１３は、上記実施形態のように、さらに内部遅延なども用いて、新たな期限情報を算出してもよい。
【０６３９】
変形の第７の観点は、管理サーバ２０４の有無に関する。上記実施形態の再送制御は、図３の管理サーバ２０４を含むハイブリッドＰ２Ｐシステムだけでなく、管理サーバ２０４を持たないピュアＰ２Ｐシステムにも適用可能である。ピュアＰ２Ｐシステムにおいては、新たに論理ネットワークに参加しようとする新規ノードは、参加要求パケットをフラッディングすることにより親ノードの候補を探してもよい。
【０６４０】
あるいは、新規ノードは、配信サーバ２０３に参加要求パケットを送信してもよい。配信サーバ２０３を含む論理ネットワーク内の既存のノードは、参加要求パケットを受信した場合、子ノードのいずれか１つを選んで、選んだ子ノードに参加要求パケットを転送してもよい。あるいは、参加要求パケットを受信した既存のノードは、新規ノードの親ノードとして当該既存のノード自身を新規ノードに通知してもよい。
【０６４１】
また、再送要求先を問い合わせる問い合わせパケットの送信先は、ハイブリッドＰ２Ｐシステムでは上記のように管理サーバ２０４であってもよいが、ピュアＰ２Ｐシステムの場合は、親ノードであってもよい。もちろん、ハイブリッドＰ２Ｐシステムにおいても、問い合わせパケットの送信先が親ノードであってもよい。
【０６４２】
例えば、図２のようなトポロジの論理ネットワーク１００において、ノードＮ８は、親ノードＮ３に再送要求先を問い合わせてもよい。問い合わせパケットの転送が過度に繰り返されてネットワークに過度の負荷が生じるの防ぐため、問い合わせパケットには、ＴＴＬ（Time To Live）が設定されていてもよい。
【０６４３】
例えば、ノードＮ８が、ＴＴＬの値を４に設定した問い合わせパケットを親ノードＮ３に送信するものとする。
問い合わせパケットを受信したノード（以下「受信ノード」という）は、ＴＴＬの値によらず受信ノード自身を再送要求先としてノードＮ８に通知してもよい。ＴＴＬの値が２以上の場合、受信ノードは、受信ノードの親ノードと子ノードのうち、問い合わせパケットの送信元以外のノードのいずれか１つを適宜選び、ＴＴＬの値を１だけ減らして、選んだノードに問い合わせパケットを転送してもよい。ＴＴＬの値が１の場合、受信ノードは、受信ノード自身を再送要求先としてノードＮ８に通知する。
【０６４４】
なお、問い合わせパケットの転送先の選択の仕方は任意である。例えば、ランダムな選択が行われてもよい。
すると、ノードＮ８が、ＴＴＬの値を４に設定して問い合わせパケットを親ノードＮ３に送信した場合、問い合わせパケットは、例えば、ノードＮ３、ノードＮ１、ノードＮ２、ノードＮ５と順に転送され、ノードＮ５がノードＮ８の再送要求先になるかもしれない。あるいは、問い合わせパケットは、例えば、ノードＮ３、ノードＮ６、ノードＮ１２と順に転送され、ノードＮ１２がノードＮ８の再送要求先になるかもしれない。
【０６４５】
また、問い合わせパケットの転送先の選択において、転送先の候補から親ノードが除外されてもよいし、親ノードよりも子ノードが優先的に選択されてもよい。すると、結果的に、「根ノードからより遠いノードが再送要求先として選ばれる」ということの蓋然性が高まる。その結果、再送を子孫ノードに委譲する上記メカニズムとあわせて、「論理ネットワーク内での負荷が比較的低いノードが、実際に再送処理を行う」ということの蓋然性がさらに高まり、論理ネットワーク内の負荷分散がさらに進む。
【０６４６】
変形の第８の観点は、追加的なエラー処理に関する。上記では説明を省略したが、場合によっては、再送要求を受信した通信装置４００が、要求されたデータパケットをバッファ部４０３に保持していないことがあり得る。よって、図１６〜１７の処理および図２０〜２１の処理は、要求されたデータパケットがバッファ部４０３にない場合はエラーを返すように変形されてもよい。
【０６４７】
例えば、図２のノードＮ２のように根ノードからの距離が短いノードが、パケットロスを検出し、再送要求が論理ネットワーク１００内を次々に転送されていき、ノードＮ１３のように根ノードからの距離が長いノードが再送要求を受信することがあり得る。この場合、ノードＮ１３は、再送要求を受信した時点では、要求されたデータパケットをまだ受信していないことがあり得る。
【０６４８】
あるいは、例えば図２のノードＮ２が、シーケンス番号が３１０番から３２０番のデータパケットの再送をノードＮ３に要求し、ノードＮ３が、ノードＮ８を責任ノードとして選択するとともにノードＮ８に３１５番から３２０番のデータパケットを割り当てたとする。この場合、ノードＮ８でも偶然に、３１５番から３２０番のデータパケットの一部または全部が消失していることがあり得る。
【０６４９】
よって、再送をより確実に保証するために、図１６〜１７の処理および図２０〜２１の処理は、例えば次のように変形されてもよい。すなわち、ステップＳ５０１の前とステップＳ６０１の前に、負荷分散処理部４１０が以下の処理を行ってもよい。
【０６５０】
負荷分散処理部４１０は、バッファ部４０３を参照して、「受信部４０１が受信した再送要求パケット８０１または８０２で要求されたすべてのデータパケットを、バッファ部４０３が保持しているか否か」を判断する。もし、要求されたすべてのデータパケットをバッファ部４０３が保持していれば、負荷分散処理部４１０は、ステップＳ５０１またはＳ６０１以降の処理を開始する。逆に、要求されたデータパケットのうちバッファ部４０３に保持されていないデータパケットがあれば、負荷分散処理部４１０は、再送要求パケット８０１または８０２の送信元ノードに対して、エラーパケットを返信する。
【０６５１】
変形の第９の観点は、使用可能な帯域幅の動的な変化の管理に関する。再送をより確実に保証するために、各ノードは、親ノード以外のノードから再送要求を受けたときに、親ノードに送信可能総帯域幅の変化を通知してもよい。
【０６５２】
換言すれば、各ノードは、親ノード以外のノードからの再送要求に応える結果として、使用可能な帯域幅が一時的に変化するときに、親のノードに送信可能総帯域幅の変化を通知してもよい。当該通知により、論理ネットワーク内で再送要求が多発して複数の再送要求に関する処理が同時に発生するような状況においても、適切な割り当てが可能となる。
【０６５３】
例えば、図１の例において、ノードＮ５からの再送要求とは独立して、エッジＥ４，１０上でのパケットロスが原因で、ノードＮ１０が再送要求をノードＮ７に送信するかもしれない。そして、ノードＮ７の送信可能帯域幅は、ノードＮ５への再送とノードＮ１０への再送によってそれぞれ消費される帯域幅の合計よりも狭いかもしれない。
【０６５４】
そこで、例えば、ノードＮ７がステップＳ３１よりも前にノードＮ１０から再送要求を受信した場合は、ノードＮ７は、ノードＮ１０への再送にともなって一時的に送信可能総帯域幅が減少することを、親ノードＮ３に通知してもよい。具体的には、ノードＮ７は、ノードＮ１０への送信の終了予定時刻までの時間と、ノードＮ７を根ノードとする部分グラフに属するノード（具体的にはノードＮ７のみ）がノードＮ１０への送信のために消費する帯域幅の合計値を親ノードＮ３に通知してもよい。
【０６５５】
つまり、ノードＮ７は、ステップＳ５１０とＳ５１７で計算した一時使用期限のうちの最大値、あるいは｜Ｃ｜回繰り返したステップＳ６１７で計算した一時使用期限のうちの最大値を、親ノードＮ３に通知してもよい。また、ノードＮ７は、ステップＳ５１０とＳ５１７で計算した一時使用帯域幅の総計、あるいは｜Ｃ｜回繰り返したステップＳ６１７で計算した一時使用帯域幅の総計を、親ノードＮ３に通知してもよい。
【０６５６】
通知を受信したノードＮ３は、子ノード情報のノードＮ７のエントリに、一時使用帯域幅と一時使用期限のペアを追加する。具体的には、ノードＮ３は、ノードＮ７から通知された帯域幅を一時使用帯域幅として設定してもよい。また、ノードＮ３は、現在時刻にノードＮ７から通知された時間を足し、加算の結果得られた時刻から、ノードＮ７とＮ３の間のＲＴＴの半分を引き、減算の結果を一時使用期限として設定してもよい。
【０６５７】
すると、ノードＮ３は、ステップＳ２０の再送要求を受信したときに、ノードＮ７を責任ノードから除外することもできる。あるいは、ノードＮ３は、ノードＮ７を責任ノードとして選択するにしても、ノードＮ７に割り当てる量を小さくすることもできる。
【０６５８】
変形の第１０の観点は、ハードウェア構成に関する。図５の通信装置４００は、図４のようにプログラムを実行する汎用のコンピュータ３００により実現されてもよい。しかし、実施形態によっては、通信装置４００の一部または全部が、ＡＳＩＣ（Application Specific Integrated Circuit）などの専用のハードウェア回路により実現されてもよい。
【０６５９】
変形の第１１の観点は、ＩＰアドレスの種類に関する。上記の説明では、説明の簡単化のため、ＩＰアドレスとしてグローバルアドレスを例示した。しかし、端末装置２０５Ａ〜２０５Ｌにプライベートアドレスが設定されている場合でも、適宜のＮＡＴ通過（Network Address Translation traversal）技術を利用することにより、上記と同様の再送制御を行うデータ配信システムを実現することが可能である。
【０６６０】
最後に、上記の種々の実施形態に関して、さらに下記の付記を開示する。
（付記１）
コンピュータに、
前記コンピュータの属する論理ネットワークに属する要求ノードから、特定情報の送信を求める第１の要求を、前記論理ネットワークのトポロジによらず直接的に、または前記論理ネットワークの前記トポロジにおいて前記コンピュータに相当するノードに入って来るパス上の１つ以上の他のノードを介して、受信し、
前記論理ネットワークの前記トポロジにおいて前記コンピュータに相当する前記ノードから出て行くエッジにより前記コンピュータと論理的に接続された１つ以上の子ノードと、前記コンピュータの中から、前記コンピュータよりは前記１つ以上の子ノードを優先して、前記特定情報の送信に関与する１つ以上の責任ノードを選択し、
各責任ノードに前記特定情報の一部または全部である部分特定情報を対応づけ、
前記コンピュータを前記責任ノードとして選択した場合は、前記コンピュータに対応づけた部分特定情報を、前記要求ノードに送信し、
前記１つ以上の子ノードのうち前記責任ノードとして選択した責任子ノードがある場合は、前記責任子ノードに対応づけた部分特定情報を前記要求ノードに送信するよう求める第２の要求を、前記責任子ノードに送信する
ことを含む処理を実行させるプログラム。
（付記２）
各責任ノードに前記部分特定情報を対応づける処理は、前記責任子ノードが１つ以上ある場合は、各責任子ノードについて、
前記論理ネットワークの前記トポロジにおいて当該責任子ノードを根ノードとする部分グラフに含まれるノードの使用可能リソースの合計量を示す使用可能合計リソース情報を参照し、
前記特定情報のうち、前記使用可能合計リソース情報が示す量以下のリソースで送信可能な部分を、当該責任子ノードに対応づける
ことを含むことを特徴とする付記１に記載のプログラム。
（付記３）
前記プログラムが前記コンピュータに実行させる前記処理は、
各子ノードについて、
前記論理ネットワークの前記トポロジにおいて当該子ノードを根ノードとする部分グラフに含まれるノードのリソースの合計量を示す合計リソース情報を、当該子ノードから受信し、
受信した前記合計リソース情報を当該子ノードと対応づけて記憶し、
前記コンピュータのリソースの量と、各子ノードから受信して記憶した前記合計リソース情報が示す前記合計量との合計を算出し、
算出した前記合計を示す新たな合計リソース情報を、前記論理ネットワークの前記トポロジにおいて前記コンピュータに相当する前記ノードの親ノードに送信し、
前記責任子ノードが１つ以上ある場合は、各責任子ノードについて、当該責任子ノードと対応づけて記憶した前記合計リソース情報から、前記使用可能合計リソース情報を取得すること
をさらに含む、
ことを特徴とする付記２に記載のプログラム。
（付記４）
前記１つ以上の責任ノードを選択する処理は、
前記１つ以上の子ノードが存在する場合は、前記コンピュータのリソースの量によらず、前記１つ以上の子ノードを前記コンピュータよりも優先して前記１つ以上の責任ノードとして選択し、
前記１つ以上の子ノードが存在しない場合は、前記コンピュータを前記１つ以上の責任ノードとして選択する
処理であることを特徴とする付記２または３に記載のプログラム。
（付記５）
前記責任子ノードがある場合、前記プログラムが前記コンピュータに実行させる前記処理は、
前記責任子ノードに対応づけた前記部分特定情報の送信にかかる負荷に応じて消費されるリソースの量を示す消費リソース情報を、前記責任子ノードおよび有効期限と対応づけて記憶する
ことをさらに含み、
前記責任子ノードが１つ以上ある場合は、各責任ノードに前記部分特定情報を対応づける処理は、各責任子ノードについて、
当該責任子ノードと対応づけて記憶され、かつ対応づけられた前記有効期限がまだ満了していない前記消費リソース情報がある場合は、当該責任子ノードから受信した前記合計リソース情報が示す前記合計量から、当該責任子ノードと対応づけて記憶された前記消費リソース情報が示す量を減じることで、当該責任子ノードについての前記使用可能合計リソース情報を取得し、
当該責任子ノードと対応づけて記憶され、かつ対応づけられた前記有効期限がまだ満了していない前記消費リソース情報がない場合は、当該責任子ノードから受信した前記合計リソース情報を当該責任子ノードについての前記使用可能合計リソース情報として取得する
ことを含む、
ことを特徴とする付記３に記載のプログラム。
（付記６）
前記第１の要求は、期限に関する第１の制約条件を指定する第１の期限情報を含み、
前記コンピュータを前記責任ノードとして選択した場合における、前記コンピュータに対応づけた前記部分特定情報を前記要求ノードに送信する処理は、前記第１の制約条件を満たすタイミングで行われ、
前記責任子ノードがある場合、前記プログラムが前記コンピュータに実行させる前記処理は、さらに、
当該責任子ノードと前記コンピュータとの間の通信にかかる通信時間と前記第１の制約条件を用いて、期限に関する第２の制約条件を算出し、
前記第２の制約条件を指定する第２の期限情報を、当該責任子ノードに送信する前記第２の要求に含める
ことを含む、
ことを特徴とする付記１から５のいずれか１項に記載のプログラム。
（付記７）
前記第１の期限情報は、送信開始の期限に関する第１の値と送信終了の期限に関する第２の値を含み、
前記第２の期限情報は、送信開始の期限に関する第３の値と送信終了の期限に関する第４の値を含み、
前記コンピュータを前記責任ノードとして選択した場合における、前記コンピュータに対応づけた前記部分特定情報を前記要求ノードに送信する処理は、前記第１の値と前記第２の値に基づいて送信タイミングを制御することを含み、
個別の責任子ノードに対応してそれぞれ前記第２の制約条件を算出する処理では、前記通信時間と、当該個別の責任子ノードに前記特定情報のうちどの部分を前記部分特定情報として対応づけたかということが、前記第３の値と前記第４の値の算出に用いられる、
ことを特徴とする付記６に記載のプログラム。
（付記８）
前記１つ以上の責任ノードを選択する処理は、前記第１の制約条件にしたがって、前記１つ以上の子ノードの中から前記責任ノードの候補を絞り込むことを含む
ことを特徴とする付記６または７に記載のプログラム。
（付記９）
前記第１の要求は、第１のビットレートを指定する第１のビットレート情報を含み、
前記プログラムが前記コンピュータに実行させる前記処理は、各責任ノードに第１のビットレートの少なくとも一部を割り当てることをさらに含み、
前記コンピュータを前記責任ノードとして選択した場合における、前記コンピュータに対応づけた前記部分特定情報を前記要求ノードに送信する処理は、前記コンピュータに割り当てたビットレートで行われ、
前記責任子ノードがある場合、前記プログラムが前記コンピュータに実行させる前記処理は、当該責任子ノードに割り当てた第２のビットレートを示す第２のビットレート情報を、当該責任子ノードに送信する前記第２の要求に含めることさらに含む、
ことを特徴とする付記１から８のいずれか１項に記載のプログラム。
（付記１０）
前記特定情報は、前記論理ネットワーク内で配信される配信情報のうち、前記要求ノードの親ノードから前記要求ノードへのエッジにおいて消失したために前記要求ノードでは受信することのできなかった部分である、
ことを特徴とする付記１から９のいずれか１項に記載のプログラム。
（付記１１）
通信装置であって、
前記通信装置の属する論理ネットワークに属する要求ノードから、特定情報の送信を求める第１の要求を、前記論理ネットワークのトポロジによらず直接的に、または前記論理ネットワークの前記トポロジにおいて前記通信装置に相当するノードに入って来るパス上の１つ以上の他のノードを介して、受信する受信手段と、
前記論理ネットワークの前記トポロジにおいて前記通信装置に相当する前記ノードから出て行くエッジにより前記通信装置と論理的に接続された１つ以上の子ノードと、前記通信装置の中から、前記通信装置よりは前記１つ以上の子ノードを優先して、前記特定情報の送信に関与する１つ以上の責任ノードを選択する選択手段と
各責任ノードに前記特定情報の一部または全部である部分特定情報を対応づける対応づけ手段と、
前記通信装置を前記選択手段が前記責任ノードとして選択した場合は、前記通信装置に対応づけた部分特定情報を、前記要求ノードに送信し、前記１つ以上の子ノードのうち前記選択手段が前記責任ノードとして選択した責任子ノードがある場合は、前記責任子ノードに対応づけた部分特定情報を前記要求ノードに送信するよう求める第２の要求を、前記責任子ノードに送信する送信手段と、
を備える通信装置。
（付記１２）
通信装置が実行する方法であって、
前記通信装置の属する論理ネットワークに属する要求ノードから、特定情報の送信を求める第１の要求を、前記論理ネットワークのトポロジによらず直接的に、または前記論理ネットワークの前記トポロジにおいて前記通信装置に相当するノードに入って来るパス上の１つ以上の他のノードを介して、受信し、
前記論理ネットワークの前記トポロジにおいて前記通信装置に相当する前記ノードから出て行くエッジにより前記通信装置と論理的に接続された１つ以上の子ノードと、前記通信装置の中から、前記通信装置よりは前記１つ以上の子ノードを優先して、前記特定情報の送信に関与する１つ以上の責任ノードを選択し、
各責任ノードに前記特定情報の一部または全部である部分特定情報を対応づけ、
前記通信装置を前記責任ノードとして選択した場合は、前記通信装置に対応づけた部分特定情報を、前記要求ノードに送信し、
前記１つ以上の子ノードのうち前記責任ノードとして選択した責任子ノードがある場合は、前記責任子ノードに対応づけた部分特定情報を前記要求ノードに送信するよう求める第２の要求を、前記責任子ノードに送信する
ことを特徴とする方法。
【符号の説明】
【０６６１】
１００、１００ａ、１００ｂ、１００ｃ  論理ネットワーク
Ｎ１〜Ｎ５４  ノード
Ｅ１，２〜Ｅ６，１３  エッジ
２００  物理ネットワーク
２０１  コアネットワーク
２０２Ａ〜２０２Ｆ  ルータ
２０３  配信サーバ
２０４  管理サーバ
２０５Ａ〜２０５Ｌ  端末装置
３００  コンピュータ
３０１  ＣＰＵ
３０２  ＲＡＭ
３０３  通信インタフェイス
３０４  入力装置
３０５  出力装置
３０６  不揮発性記憶装置
３０７  駆動装置
３０８  バス
３１０  可搬型記憶媒体
４００  通信装置
４０１  受信部
４０２  送信部
４０３  バッファ部
４０４  再生処理部
４０５  転送処理部
４０６  ロス検出部
４０７  再送要求部
４０８  ノード情報記憶部
４０９  ノード情報管理部
４１０  負荷分散処理部
４１１  選択部
４１２  対応づけ部
４１３  要求生成部
４１４  再送処理部
５００  ノード管理情報
６０１、９０４、９０９〜９１２  データパケット
６０２〜６０５、９０１〜９０３  送信可能総帯域幅の通知
７０１  親ノード情報
７０２  再送要求先情報
７０３ａ、７０３ｂ  子ノード情報
７０４ａ、７０４ｂ  自ノード情報
８０１、８０２  再送要求パケット
９０５〜９０８  再送要求
【図１】
0005672063.tif 000003
【図２】
0005672063.tif 000004
【図３】
0005672063.tif 000005
【図４】
0005672063.tif 000006
【図５】
0005672063.tif 000007
【図６】
0005672063.tif 000008
【図７】
0005672063.tif 000009
【図８】
0005672063.tif 000010
【図９】
0005672063.tif 000011
【図１０】
0005672063.tif 000012
【図１１】
0005672063.tif 000013
【図１２】
0005672063.tif 000014
【図１４】
0005672063.tif 000015
【図１５】
0005672063.tif 000016
【図１６】
0005672063.tif 000017
【図１７】
0005672063.tif 000018
【図１８】
0005672063.tif 000019
【図１９】
0005672063.tif 000020
【図２０】
0005672063.tif 000021
【図２１】
0005672063.tif 000022
【図２２】
0005672063.tif 000023
【図２３】
0005672063.tif 000024
【図１３】
0005672063.tif 000025