(57)【要約】【課題】  協同デスクトップＰＣに依存してコンテンツを配信する、コンテンツ配信機構を提供すること。【解決手段】  この機構は、少なくとも１つの中間ネットワークノード（すなわち、ソースとクライアントの間の）が、当該ノードで入手可能なコンテンツの一部の線形結合を含んだパケットを生成して送信することを可能にすることにより、堅牢な方法でコンテンツを配信する。このような線形結合は、符号化済みまたは未符号化形式の元のコンテンツファイルの少なくとも一部を使用して、ソースとクライアントにより作成することができる。クライアントは、パケットの十分な線形独立結合を受信した後で、元のコンテンツを再構築することができる。【選択図】  図１
2006031693.tif 000002
【特許請求の範囲】
【請求項１】
１つまたは複数の実行可能命令を備える１つまたは複数のコンピュータ可読媒体であって、読み取られた場合に、１つまたは複数のプロセッサに、
１つまたは複数の符号化済みブロックを作成するために、１つまたは複数のブロックを再符号化するようノードに対して要求させ、
前記１つまたは複数の符号化済みブロックを受信させる
ことを特徴とするコンピュータ可読媒体。
【請求項２】
前記１つまたは複数のブロックが予め符号化されていることを特徴とする請求項１に記載のコンピュータ可読媒体。
【請求項３】
前記１つまたは複数のブロックが線形に符号化されていることを特徴とする請求項２に記載のコンピュータ可読媒体。
【請求項４】
前記ノードが、前記ブロックのサイズとファイル内のブロック数とを送信することを特徴とする請求項１に記載のコンピュータ可読媒体。
【請求項５】
読み取られた場合に、前記１つまたは複数のプロセッサに、前記１つまたは複数のブロックを符号化するよう前記ノードに要求させる前に、前記１つまたは複数のプロセッサに、前記１つまたは複数のブロックを符号化するために使用された情報をさらに受信させる、１つまたは複数の命令をさらに備えることを特徴とする請求項１に記載のコンピュータ可読媒体。
【請求項６】
前記１つまたは複数のブロックを再符号化するための要求を前記ノードに対して発行すべきか否かを判定するために、前記１つまたは複数のブロックを符号化するために前記情報を使用した計算の結果を、前記１つまたは複数のプロセッサにさらに利用させる、１つまたは複数の命令をさらに備えることを特徴とする請求項５に記載のコンピュータ可読媒体。
【請求項７】
読み取られた場合に、前記１つまたは複数のプロセッサに、前記計算の結果に基づいて前記１つまたは複数の符号化済みブロックを破棄することをさらに選択させる、１つまたは複数の命令をさらに備えることを特徴とする請求項６に記載のコンピュータ可読媒体。
【請求項８】
前記１つまたは複数の符号化済みブロックを復号化させることをさらに備えることを特徴とする請求項１に記載のコンピュータ可読媒体。
【請求項９】
ノードから係数を受信するステップと、
係数ベクトルが、１つまたは複数の既存の係数ベクトルから線形独立か否かを判定するステップと、
新しい符号化済みブロックを作成するために、１つまたは複数の符号化済みブロックを再符号化するよう前記ノードに要求するステップと
を備えることを特徴とする方法。
【請求項１０】
前記新しい符号化済みブロックを転送することを前記ノードに要求するステップをさらに備えることを特徴とする請求項９に記載の方法。
【請求項１１】
前記判定するステップは、前記１つまたは複数の既存の係数ベクトルを使用して第１の行列を作成するステップをさらに備えることを特徴とする請求項９に記載の方法。
【請求項１２】
前記判定するステップは、
前記１つまたは複数の既存の係数ベクトルを使用して第１の行列を作成するステップと、
前記係数ベクトルと前記１つまたは複数の既存の係数ベクトルとを使用して第２の行列を作成するステップと
をさらに含むことを特徴とする請求項９に記載の方法。
【請求項１３】
前記判定するステップは、
前記第１の行列のランクを計算するステップと、
前記第２の行列のランクを計算するステップと
をさらに含むことを特徴とする請求項１２に記載の方法。
【請求項１４】
前記判定するステップは、
前記第１の行列のランクを計算するステップと、
前記第２の行列のランクを計算するステップと
をさらに含み、
前記要求するステップは、前記第２の行列の前記ランクが前記第１の行列の前記ランクよりも大きい場合に、１つまたは複数の符号化済みブロックを再符号化するよう前記ノードに要求するステップをさらに含む
ことを特徴とする請求項１２に記載の方法。
【請求項１５】
前記１つまたは複数の符号化済みブロックを復号化するステップと、前記１つまたは複数の符号化済みブロックのそれぞれから１つまたは複数の復号化済みブロックを作成するステップとをさらに備えることを特徴とする請求項９に記載の方法。
【請求項１６】
ファイルを作成するために、前記１つまたは複数の復号化済みブロックを結合するステップをさらに備えることを特徴とする請求項１５に記載の方法。
【請求項１７】
前記復号化するステップは、前記１つまたは複数の符号化済みブロックに関連付けられたデータを使用して形成された線形方程式の集合を解くステップを含み、前記解くステップは、１つまたは複数の符号化済みブロックの受信が完了した時に開始することを特徴とする請求項１５に記載の方法。
【請求項１８】
要求を受信するための手段と、
ファイルの１つまたは複数の分割されたブロックを符号化するために使用される各係数ベクトルの線形結合を含む、マスター係数を作成するための手段と、
前記１つまたは複数のブロックから新たな符号化済みブロックを作成するための手段と、
前記新たな符号化済みブロックを送信するための手段と
を備えることを特徴とするシステム。
【請求項１９】
前記マスター係数ベクトルを送信するための手段をさらに備えることを特徴とする請求項１８に記載のシステム。
【請求項２０】
新たな符号化済みブロックを作成するための前記手段は、前記１つまたは複数のブロックを線形結合するための手段をさらに含むことを特徴とする請求項１８に記載のシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ネットワークコーディングを使用したコンテンツ配信に関する。
【背景技術】
【０００２】
現代のネットワーク接続コンピューティング環境では、ネットワーク内で大規模なコンテンツ配信を提供することが必須であるかまたは望ましい場合がしばしばある。大規模コンテンツ配信に使用される１つの機構は、ネットワークコーディングを使用したコンテンツ配信システムである。一般に、コンテンツ配信システムは、１つのソースから相互接続された協力ノード（ｃｏｏｐｅｒａｔｉｖｅ  ｎｏｄｅ）の１つまたは複数に、任意のタイプのデジタルコンテンツを配信するために、ネットワークコーディングを使用した、相互接続された協力ノードのネットワークである。通常のコンテンツ配信システムは、まず効率的なオーバーレイトポロジを構築し、次いですべてのノードが均等に配信作業を分担するように、そのトポロジを横断した情報送信をスケジュール設定する必要がある。
【０００３】
典型的なコンテンツ配信システムの効率には、いくつかの要因が影響する場合がある。第１に、オーバーレイトポロジ内のノード数が増加するにつれて、典型的なコンテンツ配信システムの効率が低下する場合がある。第２に、ネットワークが、特に個別のノードの帯域幅性能に関して不均一になるにつれて、典型的なコンテンツ配信システムの効率が低下する場合がある。第３に、「リーチング（ｌｅｅｃｈｉｎｇ）」ノードを防止、または最小限に抑えるように設計されたインセンティブ機構の実施により、典型的なコンテンツ配信システムの効率が低下する場合がある。リーチングノードは、ネットワーク上で共同することはなく、ネットワーク上で受信側としてのみ動作し、したがって他の用途のためにアップロード機能を節約するよう変更されたノードである。
【発明の開示】
【発明が解決しようとする課題】
【０００４】
コンテンツ配信ネットワークの、高速かつスケーラブルなコンテンツ配信を提供する。
【課題を解決するための手段】
【０００５】
このサマリーは、以下の詳細な説明で説明する１つまたは複数の精選された概念を読者に、簡略な形式で、全般的に紹介するために提供される。このサマリーは、特許請求の主題の主要な、かつ／または必要な特徴を特定すること意図するものでも、特許請求の主題の範囲を規定する補助として使用されることを意図するものでもない。
【０００６】
本明細書では、コンテンツ配信ネットワークの、高速かつスケーラブルなコンテンツ配信を提供するための様々な技術が開示される。
【０００７】
本明細書で説明する技術の一部によれば、デジタルコンテンツ（例えば、ファイル）は、まずＮブロックのコンテンツに分割することができるが、これは符号化済みであっても符号化済みでなくてもよい。Ｎブロックの１つまたは複数は次いで、ネットワーク上で協力する複数ノード間に配信することができる。
【０００８】
コンテンツ配信ネットワークの協力ノード（ｃｏｏｐｅｒａｔｉｎｇ  ｎｏｄｅｓ）のどれかで、コンテンツの配信済みブロックは、符号化データパケットに符号化することができる。コンテンツ配信ネットワークの協力ノードでの符号化データパケットは、特定の協力ノードで受信されたコンテンツの配信済みブロックに関する情報を含むことができる。さらに、その特定の協力ノードでの符号化データパケットは、他の符号化データパケットに関する情報を含めることもできる。したがって、１つの符号化データパケットは、下流の受信側ノードでデジタルコンテンツを再構築する時に、いかなる配信済みのＮブロックのコンテンツの代わりとしても使用することができる。
【０００９】
すなわち、Ｎブロックのコンテンツに分割されたデジタルコンテンツの少なくとも１つのコピーをダウンロードしようとするクライアントは、ソースノードまたはネットワークの複数ノードの内の任意の組合せから、元のＮブロックのコンテンツのそれぞれを探し出してダウンロードすることが要求されるのではなく、ＮブロックのＮ個の符号化された表現を、コンテンツ配信ネットワークの協力ノードの内の任意のものからダウンロードすることになる。
【００１０】
本明細書は、添付の図面に照らして以下の詳細な説明を読むことにより、よりよく理解することができよう。
【発明を実施するための最良の形態】
【００１１】
本明細書では、コンピュータネットワーク内のデジタルコンテンツの配信を容易にするための様々な技術を開示する。
【００１２】
本明細書で説明する様々な実施形態により、受信側ノード間で共有されるべきデジタルコンテンツの１ファイルまたは一部を記憶するソースノードは、ネットワーク上の管理サービスと通信して、デジタルコンテンツのそのファイルまたは一部が入手可能であることを告知することができる。デジタルコンテンツのファイルまたは一部のダウンロードまたは配信を開始する前に、そのファイルのソースノード（または、一般的には、デジタルコンテンツの一部）は、そのファイル（または、デジタルコンテンツの一部）を、所定サイズの所定数ブロックに分割し、その情報を、ネットワーク上の管理サービス、ネットワーク上の別のサービス、コンテンツをダウンロードすることのできるネットワーク上の受信側ノード、または別の方法でコンテンツの有用性を検出できるネットワーク上の任意の他のノードのどれか１つに提供することができる。
【００１３】
ソースノードが、デジタルコンテンツのファイルまたは一部がダウンロードまたは配信のために入手可能であることが一度告知すると、ネットワーク上の受信側ノードは管理サービスと通信し、ダウンロードのためにデジタルコンテンツのファイルまたは一部を選択する。ネットワークコーディングを使用したコンテンツ配信の少なくとも１つの実施態様では、受信側ノードがダウンロードするためにデジタルコンテンツのファイルまたは一部を選択した場合、受信側ノードは、少なくともデジタルコンテンツの配信済みファイルまたは一部の部分をソースノードから受信すべき他の受信側ノードを知るために、ネットワーク上の管理サービスと通信することができる。
【００１４】
ソースノードが元のデジタルコンテンツのファイルまたは一部を所定数ブロックに分割することを完了した場合、ソースノードは、そのブロックを符号化するために選択された数学システム（ｍａｔｈｅｍａｔｉｃａｌ  ｓｙｓｔｅｍ）に従い、数学的修飾子（ｍａｔｈｅｍａｔｉｃａｌ  ｍｏｄｉｆｉｅｒｓ）の集合を選択することによりブロックを符号化することができる。この選択された数学システムは、デジタルコンテンツのブロック、ファイルまたは一部を、等式における変数として扱うことができ、さらに符号化されたブロックを等式の解として扱うことができる。未符号化ブロックも同じ方法で使用することができ、符号化されたブロックと共に数学システムに同様に含めることができる。例えば、未符号化ブロックは、元のブロックの線形結合であり、他のブロックの線形結合ではないと見なすことができる。さらにソースノードは、ファイルの特定領域のみを符号化し、他の領域は符号化せずに残すことを選択することができる。
【００１５】
したがって、受信側ノードは、十分な符号化済みブロックまたは未符号化ブロックおよびそれらの対応する数学的修飾子を一度受信すると、変数の値（すなわち、ブロック）を知るために等式の体系を解くことができる。本明細書で開示した特徴を有するいかなる数学システムも使用することができ、したがって、本明細書で説明する実施例はそのようには限定されない。
【００１６】
ソースノードは、元のデジタルコンテンツの少なくとも１つのブロックを符号化すると、受信側ノードに対してその１つまたは複数のブロックの配信を開始することができる。ネットワークコーディングを使用したコンテンツ配信の少なくとも別の実施例では、受信側ノードは、特定ブロックに要求を送信することはできないが、数学的修飾子の集合を受信する要求を送信することはできる。さらに、受信側ノードは、要求した数学的修飾子を一度受信すると、その数学的修飾子がその数学システムを解くために役立つ追加情報を提供するか否かを判定するために、その数学システムによる計算を実行することができる。最後に、その数学的修飾子が、その数学システムを解くために役立つ情報を含んでいると判定すると、受信側ノードは、数学的修飾子の集合に対応する符号化済みブロックを送信するよう、ソースノードに要求を送信することができる。
【００１７】
さらに、ネットワークコーディングを使用したコンテンツ配信の少なくとも１つの他の実施例では、受信側ノード（例えば、Ｒ）が任意の数のブロックを一度受信すると、その受信側ノード（Ｒ）は、コンテンツ配信ネットワークのソースノードに対して同様に機能する送信側ノードとして動作することができる。例えば、他の受信側ノード（Ｇ）から要求を受信すると、受信側ノード（Ｒ）は、元々ブロックを符号化するためにソースノードが使用したのと同じ方法により受信側ノード（Ｒ）でブロックを再符号化することにより、ソースノードとして働くことができる。
【００１８】
最小限の数のブロックと数学的修飾子を受信すると、受信側ノードは、受信済みブロックを復号化するために数学システムを解くことを開始することができる。数学システムを解くことは、符号化済みブロックまたは未符号化ブロックのいかなる混合でも、使用して開始することができ、ブロックの完全な集合が受信される前に開始することができる。ブロックが元のブロックを再生する（ｒｅｐｒｏｄｕｃｅ）ために一度復号化されると、受信側ノードは、復号化されたブロックを組み合わせて、デジタルコンテンツの元のファイルまたは一部のコピーを作成することができる。
【００１９】
図１は、ネットワークコーディングを使用したコンテンツ配信の１つまたは複数の例を実施することのできる、複数の相互接続されたネットワークノードを含むコンピュータネットワーク１００の例を示す。
【００２０】
本明細書で使用される「ノード」という用語は、ネットワーク１００の一意にアドレス指定可能な、またはそうでなければ一意に識別可能な、またネットワーク１００の他のノードと通信するように動作可能な、いかなるコンピュータシステム、デバイスまたはプロセスをも意味する。限定ではなく一例として、ノードは、パーソナルコンピュータ、サーバコンピュータ、ハンドヘルドまたはラップトップデバイス、タブレットデバイス、マルチプロセッサシステム、マイクロプロセッサベースのシステム、セットトップボックス、家庭用電化製品、ネットワークＰＣ、ミニコンピュータ、メインフレームコンピュータ、上記システムまたはデバイスのいれずかを含む分散型コンピューティング環境などであってよい。
【００２１】
ネットワーク１００上の１ノードは、ある形式のコンピュータシステムまたは処理装置を含む場合、通常、プロセッサ、１つまたは複数の形式のコンピュータ可読媒体、およびノードがネットワーク１００と動作可能に接続することを可能にする１つまたは複数の通信接続を含むことができる。本明細書で使用されるコンピュータ可読媒体とは、コンピュータによってアクセスされ、理解されることのできる形式で符号化された情報を記憶または具現化することのできる、いかなる媒体であってもよい。コンピュータ可読媒体の典型的な形式は、限定はしないが、揮発性および不揮発性の両方のメモリ、取り外し可能および／または取り外し不能な媒体を含むデータ記憶装置、および通信媒体を含む。
【００２２】
通信媒体は、搬送波または他の移送機構などの変調されたデータ信号中にコンピュータ可読情報を具現化することができるものであり、いかなる情報伝達媒体も含むことができる。「変調されたデータ信号」という用語は、信号に情報を符号化するようにその特性の１つまたは複数を設定または変更させた信号を意味する。限定ではなく一例として、通信媒体は、有線ネットワークまたは直接配線接続などの有線媒体、および音響、ＲＦ、赤外線および他の無線媒体などの無線媒体を含む。
【００２３】
ネットワーク１００上の特定ノードに関して本明細書で説明する機能は、そのノード自体により、またはそのノードに含まれるか、あるいはそうでなければ関連付けることのできる１つまたは複数のモジュールと共同してそのノードにより、またはいくつかのサブモジュールにより実施することができる。例えば、ネットワークコーディングを使用したコンテンツ配信の少なくとも１つの実施例では、ネットワーク１００上の１ノードまたはモジュールにより実行される演算は、１つまたは複数のコンピュータ可読媒体に具現化されるコンピュータ可読命令として実施することができる。これらの実施例では、ノードまたはモジュールの演算は、モジュールがそこに含まれるか関連付けられるノード中の１つまたは複数のプロセッサによって実行することができる。他の実施例では、ノードの動作は、ハードウェア、ファームウェア、またはハードウェア、ファームウェアおよびソフトウェアの何らかの組合せとして、モジュールが含まれるか関連付けられるノードの一部として、またはそれに関連付けられた何らかの他の方法で実施することができる。さらに、特定ノードに関して本明細書で説明する機能は、複数のノードにより実行しても、複数のノードにわたり分散してもよい。
【００２４】
ネットワークコーディングを使用したコンテンツ配信を、図１を参照して、ソース１１０がネットワーク１００を介して参加ノード（ｐａｒｔｉｃｉｐａｔｉｎｇ  ｎｏｄｅｓ）にコンテンツＡ  １８０を配信するという実施例を検討することによって、さらに説明する。コンテンツＡ  １８０はいかなるタイプまたはサイズのファイルであってもよいが、この実施例のために、コンテンツＡ  １８０は、２進数０と２進数１を含む２つのデジタルビットだけから構成されるものと仮定する。
【００２５】
少なくとも１つの実施態様によれば、ソース１１０は、コンテンツＡ  １８０を、２進数０を含むブロックＢ  １９０と２進数１を含むブロックＣ  ２００とに分割することができる。さらに、ソース１１０は、ブロックＢ  １９０をノード１  １２０に送信することができ、またブロックＣ  ２００をノード２  １３０に送信することができる。ノード１  １２０は、ブロックＢ  １９０をノード３  １４０ならびにノード５  １６０に転送することができる。ノード２  １３０は、ブロックＣ  ２００をノード３  １４０ならびにノード６  １７０に転送することができる。
【００２６】
ブロックＢ  １９０およびブロックＣ  ２００を受信すると、ノード３  １４０は、次いで、ノード４  １５０へのブロックＣ  ２００に対するブロックＢ  １９０の転送効率を測ることができる。この効率測定は、ノード４  １５０が接続することのできるいかなる他のノードの知識、またはノード４  １５０が接続するノードがコンテンツＡ  １８０を再構築するために要求することのできるいかなるデータの知識もノード３  １４０は持たない場合があることを考慮に入れることができる。
【００２７】
前述の効率測定の結果、生じるシナリオの一例として、ノード３  １４０がブロックＢ  １９０をノード３  １４０に送信する場合を考えることができる。ノード４  １５０はこの場合、有用な情報をノード６  １７０だけに転送することができ、ノード５  １６０はコンテンツＡ  １８０を再構築するためにブロックＢ  １９０を受信するまで待機しなければならない場合がある。別のシナリオ例として、ノード３  １４０がブロックＣ  ２００をノード４  １５０に送信する場合を考えることができる。ノード４  １５０はこの場合、有用な情報をノード５  １６０だけに転送することができ、ノード６  １７０はコンテンツＡ  １８０を再構築するためにブロックＢ  １９０を受信するまで待機しなければならない場合がある。
【００２８】
しかし、ネットワークコーディングを使用したコンテンツ配信の少なくとも１つの実施例は、次いでノード４  １５０に転送される場合のあるブロックＤ  ２１０を形成するために、ブロックＢ  １９０およびブロックＣ  ２００を符号化するノード３  １４０を含む。例えば、ノード３  １４０は、ノード３  １４０でブロックＢ  １９０およびブロックＣ  ２００に対応する情報の排他的論理和演算を実行することにより、ブロックＤ  ２１０を作成することができる。この結果、ブロックＤ  ２１０は、２進数０（ブロックＢ  １９０に対応する）と２進数１（ブロックＣ  ２００に対応する）の排他的論理和である、２進数１を含むことができる。
【００２９】
ノード４  １５０はこの場合、ブロックＤ  ２１０をノード５  １６０およびノード６  １７０に転送することができる。さらに、ブロックＢ  １９０およびブロックＣ  ２００の両方に対応する情報は、ブロックＤ  ２１０についての復号化機能を実行することにより回復することができるので、ブロックＤ  ２１０は、コンテンツＡ  １８０を再構築するためにノード５  １６０およびノード６  １７０の両方にとって同時に有用となる。
【００３０】
すなわち、ノード５  １６０は、ノード１  １２０からブロックＢ  １９０を既に受信している場合がある。この場合、ノード４  １５０からブロックＤ  ２１０を受信し、ブロックＤ  ２１０を作成するために使用された符号化スキームの知識を有することにより、ノード５  １６０は、ブロックＤ  ２１０についての復号化機能を実行して、ブロックＣ  ２００を実際に受信せずにブロックＣ  ２００に対応する情報を計算することができる。したがって、ノード５  １６０は、ネットワークコーディングを使用したコンテンツ配信の少なくとも１つの実施例に従って、コンテンツＡ  １８０を再構築するために、ブロックＢ  １９０およびブロックＣ  ２００に対応する情報を利用することができる。
【００３１】
同様に、ノード６  １７０は、ノード２  １３０からブロックＣ  ２００を既に受信している場合がある。この場合、ノード４  １５０からブロックＤ  ２１０を受信し、ブロックＤ  ２１０を作成するために使用された符号化スキームの知識を有することにより、ノード６  １７０は、ブロックＤ  ２１０についての復号化機能を実行して、ブロックＣ  ２００を実際に受信せずにブロックＢ  １９０に対応する情報を計算することができる。したがって、ノード６  １７０は、コンテンツＡ  １８０を再構築するために、ブロックＢ  １９０およびブロックＣ  ２００に対応する情報を利用することができる。
【００３２】
ネットワークコーディングを使用したコンテンツ配信の１つまたは複数の実施例は、複数のネットワーク経路から複数ブロックの情報をクライアントノードに提供するために、ネットワーク資源を効率的に利用する終端システムコンテンツ配信ソリューションをさらに提供することができる。このような資源の効率的な利用は、ネットワーク１００上の１つまたは複数のノードにネットワーク１００上の他のノードの配置および位置の予備知識、ならびにネットワーク１００上のそのようなノードのどれが元のブロックを配信し、どのノードが符号化済みブロックを配信するかに関する予備知識を提供することを含むことができる。したがって、ネットワークコーディングを使用したコンテンツ配信は、ネットワークのサイズが大きくなり、そのネットワーク上のノードがオンラインとオフラインを切り替えるとしても、妥当である場合がある。
【００３３】
例えば、ソースノードが受信側ノードにブロックを送信した場合、ソースノードは、ソースノードで入手可能なデータの線形結合を生成して送信することができる。この線形結合は、排他的論理和演算を含むことができる。したがって、受信側ノードは、ブロックの十分に線形な独立結合を受信した場合、受信した線形結合を復号化するために線形方程式の系を解くことにより、元のデジタルコンテンツを再構築することができる。
【００３４】
さらに、浪費される転送を低減するために、ネットワーク１００上のノードは、ネットワーク１００上の他のノードに全く新しい（ｉｎｎｏｖａｔｉｖｅ）情報を有するブロックだけを送信するよう努める場合がある。ただし、この要求に完全に従うことは、本明細書に記載する例によるコンテンツ配信の効率的な実施例には必要ない。このような効率的な転送は、ネットワーク１００上のそれぞれのノードにローカルに記憶されたブロックに関する情報を定期的に交換する、ネットワーク１００上のノードにより達成することができる。ローカルに記憶された情報は、別のノードが元のデジタルコンテンツの少なくとも一部を再構築するために有用であるかもしれないと、ネットワーク１００上のノードのそれぞれが判断した場合、情報の定期的な交換を行うことができる。
【００３５】
上記の情報の定期的な交換は、ネットワーク１００上の１つまたは複数の中央サーバに情報を記憶することにより実施することができる。様々なノードはこの場合、ネットワーク１００上の他のノードのどれが、全く新しい情報を含んでいるブロックを記憶しているかを判定するために、中央サーバの１つにアクセスすることができる。あるいは、それぞれのノードに記憶されたブロックに関する情報を交換するために、ネットワーク１００上の他のノードと直接通信するよう分散型機構を利用することができる。さらにまた、上記の手法のすべてまたは一部のいかなる組合せでも実施することができる。
【００３６】
したがって、ネットワーク１００上の特定ノードは、ネットワーク１００上の他のノードに記憶されたブロックに含まれる情報の知識を有する場合、その特定ノードに現在欠けている情報（すなわち、全く新しい情報）だけを他のノードが転送することを要求することができる。あるいは、ネットワーク１００上の特定ノードは、その特定ノードが全く新しい情報をローカルに記憶しているとネットワーク上の他のノードが判断したかしないかにかかわらず、新しいブロックを任意に生成し、その新しいブロックをネットワーク１００上の他のノードにプッシュすることができる。これに応答して、それぞれの受信側ノードは、それぞれの受信側ノードに対して全く新しい情報を含んでいないと判断することのできるパケットを破棄することができる。
【００３７】
図２は、ネットワークコーディングを使用したコンテンツ配信の１つまたは複数の例を実施することのできる、コンピュータネットワーク２００の例を示す。コンピュータネットワーク２００は、図１のそれと類似の形で、複数の相互接続されたノードを含むことができる。
【００３８】
ネットワークコーディングを使用したコンテンツ配信のさらなる実施例を、ソース２１０が、ネットワーク２００を介して、６バイト（すなわち、バイト１〜６）を含んだ元のコンテンツファイルを配信するシナリオの一例を検討することにより説明することができる。さらに、このシナリオの例は、サンプル値：バイト１＝７０、バイト２＝９１、バイト３＝５、バイト４＝３５、バイト５＝２２およびバイト６＝１５を仮定することができる。
【００３９】
この例によれば、ソース２１０は、各ブロックが元のコンテンツファイルから２つの連続するバイトを含んだ状態で、元のコンテンツファイルから複数のブロックを作成することができる。例えば、ソース２１０は、バイト１およびバイト２を含むブロック１、バイト３およびバイト４を含むブロック２、およびバイト５およびバイト６を含むブロック３を作成することができる。
【００４０】
ソース２１０はこの場合、ブロック１、ブロック２およびブロック３を単一の符号化済みブロックに符号化するために、係数ベクトルの集合を使用して、ブロック１、ブロック２およびブロック３の線形結合を作成することができる。係数ベクトルは、ブロック１、ブロック２およびブロック３を線形に符号化するために、任意に選択しても、設定されたスケジュールに従って選択しても、ネットワーク上のそのような情報の中央レポジトリから選択しても、ソース２１０によって使用可能な係数ベクトルの集合を作る任意の方法によって選択してもよい。
【００４１】
本実施例を説明するために、ソース２１０は、１と２５６の間の数の集合から係数ベクトルを任意に選択することができる。係数ベクトルをそこから選択することのできるこの数の集合は、例えばコンテンツ配信システムの線形独立係数ベクトル（ｌｉｎｅａｒｌｙ  ｉｎｄｅｐｅｎｄｅｎｔ  ｃｏｅｆｆｉｃｉｅｎｔ  ｖｅｃｔｏｒｓ）の最大数（ｇｒｅａｔｅｓｔ  ｎｕｍｂｅｒ）を作る数の集合など、いかなる数の集合であってもよい。符号化済みブロックを用意する際に、例えばソース２１０は、第１の係数ベクトルが６、９０および５２になるように選択することができる。符号化済みブロックを作成するために、ソース２１０は、ブロックの個々のバイトをベクトルとして扱うことができる。しかしソース２１０は、各ブロック１、ブロック２およびブロック３の情報を、元のブロックに記憶された情報の線形結合である情報を含んだ新しいブロックを作ることに整合したいかなる方法によっても、線形に符号化することができる。この例では、ｅ１と呼ばれる第１の符号化済みブロックは、係数ベクトルにベクトル内の各値を乗じることにより作成される。
【００４２】
例えば、第１の係数ベクトル［６，９０，５２］と、バイト値の、バイト１＝７０、バイト２＝９１、バイト３＝５、バイト４＝３５、バイト５＝２２、およびバイト６＝１５を使用することにより、ソース２１０は、
【００４３】
【数１】
2006031693.tif 000003
【００４４】
を作成することができる。この乗算を実行することにより、
【００４５】
【数２】
2006031693.tif 000004
【００４６】
が得られる。この加算を実行することにより、
【００４７】
【数３】
2006031693.tif 000005
【００４８】
が得られる。ソース２１０は次いで、新たな符号化済みブロックｅ１と係数ベクトル［６，９０，５２］をノード１  ２２０に転送することができる。
【００４９】
ソース２１０は次いで、新しい係数ベクトルを使用してｅ１を作成するために使用される演算を繰り返すことにより、新しい符号化済みブロックｅ２を作成することができる。例えば、別の係数ベクトル［１８，２，１２８］とバイト値の、バイト１＝７０、バイト２＝９１、バイト３＝５、バイト４＝３５、バイト５＝２２、およびバイト６＝１５を使用することにより、ソース２１０は、上記と同じ方法を使用して符号化済みブロックｅ２を作ることができる。この例では、
【００５０】
【数４】
2006031693.tif 000006
【００５１】
である。ソース２１０は、新たな符号化済みブロックｅ２と係数ベクトル［１８，２，１２８］をノード２  ２３０に転送することができる。
【００５２】
ノード１  ２２０は次いで、ブロックが、符号化済みブロックを復号して元のコンテンツファイルを復元するためにノード１  ２２０が使用することのできる全く新しい情報を含んでいるか否かをさらに判定するために、ネットワーク２００上の他のノードを所有している線形に符号化されたブロックの線形独立を知ることができる。したがって、ノード１  ２２０はこの場合、ノード２  ２３０が現在所有しているブロック内の符号化済み情報の線形独立を判定するためにノード１  ２２０が使用することのできる情報をノード２  ２３０が送信することを要求するために、ノード２  ２３０にクエリを送信することができる。
【００５３】
ノード２  ２３０は、ノード１  ２２０が符号化済みブロック内の情報の線形独立を判定することを可能にすることができる情報を作るために、いかなる方法でも使用することができる。例えば、ノード２  ２３０は、マスター係数ベクトル（ｍａｓｔｅｒ  ｃｏｅｆｆｉｃｉｅｎｔｖｅｃｔｏｒ）を作るために、現在ノード２  ２３０にある個々の係数ベクトルの線形結合を作成することができる。この例では、係数ベクトル［１８，２，１２８］を有する符号化済みブロックｅ２は現在ノード２  ２３０にあり、したがってノード２  ２３０は、上記の線形結合を実行する必要はない場合がある。したがってノード２  ２３０は、係数ベクトル［１８，２，１２８］をノード１  ２２０に転送することができる。
【００５４】
ノード１  ２２０は、ノード２  ２３０から係数ベクトル［１８，２，１２８］を受信し、ノード１  ２２０が現在所有しているブロックの係数ベクトルに関する受信した係数ベクトルの線形独立を判定しようとする。ノード１  ２２０がノード２  ２３０から受信した係数ベクトルの線形独立を判定することになる、いかなる数学的演算でも使用することができる。
【００５５】
例えば、ノード１  ２２０は、ノード２  ２３０から受信した係数ベクトル［１８，２，１２８］を行例に入れて、行列の行縮小形式（ｒｏｗ−ｒｅｄｕｃｅｄ  ｆｏｒｍ）を作ることができる。ノード１  ２２０は次いで、行列の行縮小形式で非ゼロ行の数を解析して、この行列のランクを見つけることができる。それぞれの行列のランクは、それぞれの行列の線形独立行の数を示す。本実施例では、受信した係数ベクトルを行列に追加し、この行列のランクを計算することによって、ノード１  ２２０は、ノード１  ２２０が現在所有している線形方程式の系に対する解の数を決定する。
【００５６】
例えば、ノード１  ２２０は、ノード１  ２２０が既に所有している符号化済みブロックの係数ベクトルの集合を使用して形成された行列のランクを計算することができる。ノード１  ２２０は、行列で行縮小を実行することによりランク１を計算することができる。行列のランクを計算するための行縮小は、周知の数学演算である。したがって、ノード１  ２００での行列のランクの計算は、いかなる特定の方法にも限定されない。
【００５７】
したがって、行列（６  ９０  ５２）の行縮小版は、
【００５８】
【数５】
2006031693.tif 000007
【００５９】
であり、行縮小行列（ｒｏｗ  ｒｅｄｕｃｅｄ  ｍａｔｒｉｘ）の非ゼロ行の数は１であり、したがって行列のランクは１である。
【００６０】
さらに、ノード１  ２２０はこれで、ノード１  ２２０が既に所有しているブロックの係数ベクトルと、ノード２  ２３０から受信した係数ベクトルとを使用して新しい行列を作ることができる。これは、本実施例では、
【００６１】
【数６】
2006031693.tif 000008
【００６２】
となる。ノード１  ２２０が新しい行列を一度形成すると、ノード１  ２２０は新しい行列のランクを計算することができる。
【００６３】
したがって、行列の行縮小版は、
【００６４】
【数７】
2006031693.tif 000009
【００６５】
であり、さらにこの行列の非ゼロ行の数は２であり、したがってこの行列のランクは２である。ノード１  ２２０は、例えば、第２の行列のランク（すなわち、２）と第１の行列のランク（すなわち、１）を比較し、第２の行列のランクの方が大きく、したがって、ノード２  ２３０が所有している情報が線形独立であると判定することができる。ノード１  ２２０は、送信されノード１  ２２０が上記の計算を実行するために使用した係数ベクトルを使用して作成された、１つまたは複数のブロックを送信するための要求を、ノード２  ２２０に送信することができる。
【００６６】
この実施形態では、ノード１  ２２０は上記の計算を実行するが、ノード２  ２２０はソース２１０から追加の符号化済みブロックをさらに受信している場合がある。例えば、ソース２１０は、
【００６７】
【数８】
2006031693.tif 000010
【００６８】
に等しい新しいブロックｅ３を符号化して、ブロックｅ３と、ブロックｅ３を作成するために使用された係数ベクトルとをノード２  ２３０に送信するために、別の係数ベクトル［２１３，９１，１５９］を選択することができる。
【００６９】
ノード１  ２２０は、ノード１  ２２０が現在所有している情報に関して線形独立である任意の情報をノード２  ２３０が所有しているかを判定するための新しい要求を、ノード２  ２３０に送信することができる。ノード２  ２３０は、各々が係数ベクトル［１８，２，１２８］、［２１３，９１，１５９］を伴う、ノード２  ２３０が所有する符号化済みブロック（すなわち、ｅ２およびｅ３）すべての係数ベクトルの線形結合から作成することのできる、マスター係数ベクトルを再び用意することができる。ノード２  ２３０は、ノード２  ２３０が次いでノード１  ２２０に送信する新しい係数ベクトル［２３１，９３，２８７］を作るために、上記係数ベクトルの線形結合を作ることにより、マスター係数ベクトルを用意することができる。
【００７０】
ノード１  ２２０は、新しい係数ベクトル［２３１，９３，２８７］を受信し、ノード１  ２２０が現在所有している係数ベクトルに関して新しい係数ベクトルが線形独立であるか否かを判定することができる。ノード１  ２２０は、ブロックｅ２およびブロックｅ３の係数ベクトルを使用して形成された行列のランクの最後の計算の結果（すなわち、２）を記憶している。ノード１  ２２０は、例えば、ブロックｅ２およびブロックｅ３の係数ベクトルを、ノード２  ２３０から受信した新しい係数ベクトルと組み合わせて使用して、新しい行列を作ることができる。その結果、
【００７１】
【数９】
2006031693.tif 000011
【００７２】
という形式の行列が得られる。
【００７３】
したがって、行列の行縮小形式は
【００７４】
【数１０】
2006031693.tif 000012
【００７５】
であり、行列の非ゼロ行の数は３なので、行列のランクは３である。ノード１  ２２０は、新しい行列のランク（すなわち、３）を、前の行列のランク（すなわち、２）と比較して、新しい行列のランクが前の行列のランクよりも大きいと判定することができる。したがって、ノード１  ２２０は、ノード１  ２２０が所有している情報から線形独立した情報をノード２  ２３０が所有していると判定することができる。ノード１  ２２０は次いで、ノード１  ２２０に送信された係数ベクトルを使用してノード２  ２３０が作った符号化済みブロックを再符号化する要求をノード２  ２３０に送信することができる。
【００７６】
ノード２  ２３０は、ソース２１０から受信した元の符号化済みブロックに関する線形独立情報を送信することに整合する、新たな符号化済みブロックを作るためにいかなる方法でも使用することができる。例えば、ノード２  ２３０は、新しい符号化済みブロックｅ４を作るためにｅ２とｅ３の和を作成することができ、ｅ４は
【００７７】
【数１１】
2006031693.tif 000013
【００７８】
に等しいとすることができる。ノード２  ２３０はこれで、ブロックｅ４をノード１  ２２０に送信することができるが、ブロックｅ４を作るために使用した係数ベクトルは、計算を実行するためにノード１  ２２０に送信されたので、この係数ベクトルをさらに送信する必要はない。
【００７９】
例えば、ノード１  ２２０は、ノード２  ２３０からブロックｅ４を受信済みの場合があり、ノード１  ２２０は、符号化済みブロックの復号化を開始するために十分な符号化済みブロックが受信されているか否かを判定することができる。ノード１  ２２０は次いで、ソース２１０が所有する元の未符号化ブロックにあるベクトルの値を特定するために、ノード１  ２２０が所有する符号化済みブロックによって表される線形方程式の系を解くことができる。ノード１  ２２０は、元の未符号化ブロックに格納されたベクトルの値を特定するために、線形方程式の系を解くのに適した、ノード１  ２２０が計算を実行することのできる方法には限定はされない任意の方法を使用することができる。
【００８０】
例えば、ｅ１は、係数ベクトル［６，９０，５２］を伴う
【００８１】
【数１２】
2006031693.tif 000014
【００８２】
に相当する。ｅ２は、係数ベクトル［１８，２，１２８］を伴う
【００８３】
【数１３】
2006031693.tif 000015
【００８４】
に相当する。ｅ４は、係数ベクトル［２３１，９３，２８７］を伴う
【００８５】
【数１４】
2006031693.tif 000016
【００８６】
に相当する。元のブロックにあるベクトルの値を知るべく線形方程式の系を解くために、ノード１  ２２０は、未符号化ブロックそれぞれを表すために変数を割り当てることができる。例えば、ノード１  ２２０は、第１の未符号化ブロックを表すために変数ｘを割り当てることができ、第２の未符号化ブロックを表すために変数ｙを割り当てることができ、第３の未符号化ブロックを表すために変数ｚを割り当てることができる。したがって、ノード１  ２２０は、線形方程式の系の第１の等式は、符号化済みブロックｅ１を表す
【００８７】
【数１５】
2006031693.tif 000017
【００８８】
であり、第２の等式は、符号化済みブロックｅ２を表す
【００８９】
【数１６】
2006031693.tif 000018
【００９０】
であり、第３の等式は、符号化済みブロックｅ４を表す
【００９１】
【数１７】
2006031693.tif 000019
【００９２】
であると決定することができる。
【００９３】
ノード１  ２２０は次いで、任意の方法を使用して線形方程式の体系を解くことができる。ノード１  ２２０は、等式を解く際に、ｘ（すなわち、未符号化ブロック１）は
【００９４】
【数１８】
2006031693.tif 000020
【００９５】
に等しいと判定し、ｙ（すなわち、未符号化ブロック２）は
【００９６】
【数１９】
2006031693.tif 000021
【００９７】
に等しいと判定し、さらにｚ（すなわち、未符号化ブロック３）は
【００９８】
【数２０】
2006031693.tif 000022
【００９９】
に等しいと判定する。ノード１  ２２０は、これらのベクトルを解釈し、元のファイルのバイト構造を再現することができる。ノード１  ２２０は、元のファイルを再現するために現在の実施形態の態様により、これらのベクトルを解釈するためにいかなる方法でも使用することができる。
【０１００】
図２と共に使用される実施例はある種の基準を使用したが、別の実施例には明らかに異なる選択をすることができる。例えば、パケットを符号化するために使用された係数に関する情報を交換するための別の実施例は、再符号化済みブロックが新しい情報を含んでいるか、またはまったく情報を交換しないかを予め判定せずに、再符号化済みブロックを送信することを考慮することができる。同様に、すべての受信した情報が新しい符号化済みブロックを作成するために使用されたが、その部分集合を使用することができる。特定用途に依存する特定の符号化スキームのような、他の交換（ｔｒａｄｅｏｆｆ）または選択を行うこともできる。
【０１０１】
さらに、図２と共に使用された実施例は、説明のために実数系で実施されたが、この実施例は、例えば有限体またはガロア体など、いかなる数学的な数の系を使用して実施されていてもよい。
【０１０２】
図３は、ノードがどのようにしてコンテンツ配信ネットワークの受信側として動作するかを説明するために、処理フロー３００を示す。
【０１０３】
動作３１０は、ネットワーク上に存在する特定ブロックに関する情報をノードが取得することを表す。図２を参照して説明した実施例に戻ると、ブロック情報は、ブロックを再符号化するために使用された係数の集合の形式を取ることができる。しかしブロック情報は、ブロックの内容に関する指示（ｉｎｄｉｃａｔｉｏｎ）を提供するいかなる形式または構造でも取ることができ、ブロック情報は、ネットワーク、ネットワーク上のノードなどの機能と整合したいかなる方法によっても取得することができる。例えば、ネットワーク上の、ブロック情報の中央レポジトリから取得されうるブロック情報は、ネットワーク上の別のノードから直接取得することができる。つまり、そのノードはそのブロックを既に受信しており、その情報を特定するためにブロックの検査を済ませることができる。
【０１０４】
決定３２０は、元のコンテンツの少なくとも一部を再構築する際に役立ちうる全く新しい情報をブロックが含んでいることをブロック情報が示すか否かに関する、ノードによる判定を表す。ノードにとって全く新しい情報は、例えば、そのノードが現在所有していないブロック全体またはブロックの一部である。この判定は、例えばブロック情報を使用した計算を実行することにより、いかなる形式でも取ることができる。あるいは、ブロック内にある情報が全く新しいか否かに関する指示を戻すブロック情報を使用した、いかなる演算でも使用することができる。例えば、図２に関連する実施例では、この判定は、行列のランクを計算することにより実行することができる。
【０１０５】
動作３３０は、肯定的決定３２０に引き続いて、物理メモリ、ハードドライブ、不揮発性フラッシュメモリなどを含むことのできる、中間ブロックストレージ（ｉｎｔｅｒｍｅｄｉａｔｅ  ｂｌｏｃｋ  ｓｔｏｒａｇｅ）にブロックを転送することを意味する。動作３３０が一度完了すると、手順フローは決定ブロック３４０に続く。
【０１０６】
決定３４０は、否定的決定３２０と動作３３０に引き続いて、元のファイルコンテンツを再アセンブルするために必須の最小ブロック数が受信されたか否かの判定を表す。元のファイルコンテンツを再アセンブルするために必須のブロックの最低数は、元のファイルコンテンツが分割されるブロック数である、Ｎであってよい。否定的判定に応えて、処理フロー３００は、さらなるブロックを処理することができるように動作３１０に戻ることができる。肯定的決定３４０に応えて、処理フロー３００は、動作３５０に進むことができる。
【０１０７】
動作３５０は、中間ブロックストレージに記憶された符号化済みブロック数が、ファイルを含む元のブロックの集合または部分集合を作るために復号化される、動作を意味する。ブロックの復号化は、復号化動作の結果がコンテンツ配信ネットワーク内のファイルのソースによって作成された可能性のある元のブロックの集合となる形式を取ることができる。処理フロー３００は次いで、動作３６０に進むことができる。
【０１０８】
動作３６０は、元のコンテンツファイルをアセンブルするために組み合わされている、動作３５０内の復号化動作によって作られた元のブロックの集合を表すことができる。元のブロックがそれによって元のコンテンツを形成するために再構築される方法を使用することができる。
【０１０９】
図３に関連する動作の順番とタイミングを、一例としてのみ提供する。別の実施例では、動作の順番とタイミングの一方または両方は異なっていてよい。例えば、少なくとも１つの符号化済みブロックで復号化を開始するのに十分な符号化済みブロックが受信されている場合、動作３５０は、動作３１０の後に行うことができる。
【０１１０】
図４は、ノードが、どのようにしてコンテンツ配信ネットワーク内の送信側として動作することができるかを説明するために、フロー例４００を示す。
【０１１１】
動作４１０は、コンテンツ配信ネットワーク内の別のノード上の別のブロックまたはブロックの集合を復号化するために有用でありうる全く新しい情報を含む複数のブロックを、送信側が所有することの判定を意味する。この判定は、送信側で、またはネットワーク上の別のノードで、またはこのような動作に関与する中央ノードで、またはいかなる他の適した場所でローカルに行うことができる。ブロックが全く新しい情報を含んでいるか否かの判定により、全く新しい情報とコンテンツ配信ネットワーク上に分散された送信側ノードでの他の情報との線形結合を得ることができる。
【０１１２】
動作４２０は、送信側が、新たな符号化済みブロックを作るために１つまたは複数のローカルブロックを再符号化することを意味する。再符号化するということは、コンテンツ配信ネットワーク上の別のノードが使用することのできる新しいブロックを作るために、送信側上にローカルに記憶されたブロックをいくつでも結合することに基づいている動作を含むことができる。
【０１１３】
動作４３０は、送信側が、動作４２０で作成された新たな符号化済みブロックを送信することを意味する。この新たな符号化済みブロックは、現在の実施形態の態様に従って送信することができ、送信することのできる方法には限定されない。
【０１１４】
任意選択であってよい動作４４０は、新しい符号化済みブロックに符号化されなかったブロックを再符号化するために、別個のステップでブロックを再符号化するために使用される情報が使用される場合、送信側がその情報をさらに送信することを選択することを意味する。情報を符号化するブロックは、現在の実施形態の態様に従って送信することができ、送信することのできる方法には限定されない。
【０１１５】
図４に関連する動作の順番とタイミングを、一例としてのみ提供する。別の実施例では、動作の順番とタイミングの一方または両方は異なっていてよい。例えば、ブロック４２０は、受信側ノードならびに受信側ノードに接続されたすべてのノードに有用な新しいブロックを再符号化するために始められうる。この方法で、受信側ノードは、直接通信しているノードと異なるノードにとって有用なブロックを作成することができる。
【０１１６】
図５は、コンテンツ配信ネットワークのノード５００の例を示す。
【０１１７】
ネットワークマネージャ５１０は、ノード５００がコンテンツ配信ネットワークの他のノード、サーバ、デバイスなどと通信することを可能にすることができる。ネットワークマネージャ５１０は、情報のパケットまたはブロックを送信および受信してもよいし、いかなるタイプの動作でも実行するための要求を送信または受信してもよいし、コンテンツ配信ネットワークに参加するためにノード５００が使用する他の情報を送信および受信してもよい。
【０１１８】
コンテンツ配信ネットワーク上の他のノードと通信する際に、ネットワークマネージャ５１０は、送信中のエラーを訂正することができ、コンテンツ配信ネットワーク上の他のノード、サーバ、デバイスなどに対する情報の送信を中断し再開することができ、さらにノード５００がコンテンツ配信ネットワークに参加することが許可されていることを検証することができる。さらにまた、ネットワークマネージャ５１０は、符号化済みブロックの妥当性または信頼性を検証することができる。
【０１１９】
ネットワークマネージャ５１０は、さらに、例えばアプリケーションプログラミングインターフェース（ＡＰＩ）など、ネットワークを介した遠隔手順呼び出しを介してコンテンツマネージャ５２０と通信することができる。ネットワークマネージャ５１０は、現在の実施形態の態様に従い、ブロック、ネットワーク上の別の場所に記憶されたブロックに関する情報、またはノード５００がコンテンツ配信ネットワークに参加することをコンテンツマネージャ５２０が要求することのできる情報を送信することができる。
【０１２０】
コンテンツマネージャ５２０は、起点ソース（ｏｒｉｇｉｎａｔｉｏｎ  ｓｏｕｒｃｅ）によって元のファイルコンテンツが分割されたブロックの数とサイズを、ネットワークマネージャ５１０から受信することができる。コンテンツマネージャ５２０は、さらに、ネットワークマネージャ５１０からブロックを受信し、ネットワークマネージャ５１０を使用してブロックを送信し、受信したブロックを符号化ブロックストア（Ｅｎｃｏｄｅｄ  Ｂｌｏｃｋ  Ｓｔｏｒｅ）５４０に収容し、全体をまだ受信していないブロックもしくはエラーまたは破損を含んでいると判定されたブロックの記憶を中止し、符号化ブロックストア５４０に記憶されたブロックをネットワークマネージャ５１０とファイルマネージャ５３０の両方に転送することができる。
【０１２１】
コンテンツマネージャ５２０は、コンテンツ配信ネットワーク内のノードが、元のファイルコンテンツがコンテンツ配信ネットワーク上の起点ノードによって分割された元のブロックを復号化する際に、そのノードにとって有用な全く新しい情報を含んでいるか否かを判定するために、少なくとも１つの計算を実行することができる。コンテンツマネージャ５２０は、コンテンツ配信ネットワーク内のノードが全く新しい情報を含んでいると判定した場合、コンテンツマネージャ５２０は、ネットワークマネージャ５１０と通信してブロックを受信するように要求を発行するか、全く新しい情報を含んだノードに対して情報を再符号化してその情報を送信するように要求を発行するか、コンテンツマネージャ５２０がコンテンツ配信ネットワーク内のノードの参加に従って機能する旨の別の要求を発行することができる。
【０１２２】
さらに、コンテンツマネージャ５２０は、ノードがコンテンツ配信ネットワーク上の別のノードにとって全く新しい情報を含んでいるか否かを判定するために、コンテンツ配信ネットワーク上の別のノードに代わって、少なくとも１つの演算を実行することもできる。
【０１２３】
コンテンツマネージャ５２０は、さらに、現在の実施形態の態様に従い、ノードがコンテンツ配信ネットワーク内の他のノードにとって有用な符号化済みブロックを作る方法、またはノードがコンテンツ配信ネットワークに参加する方法を使用して、符号化ブロックストア５４０に記憶されたブロックを再符号化することができる。
【０１２４】
符号化ブロックストア５４０のブロックの削除、符号化ブロックストア５４０でのメモリ管理、または符号化ブロックストア５４０の最適な動作をもたらすいかなる動作でも、コンテンツマネージャ５４０によって実行することができる。
【０１２５】
コンテンツマネージャ５２０は、ブロックを復号化し元のファイルを復元するために必要な符号化済みブロック数がいつ受信されて、符号化ブロックストレージ５４０に記憶されたかを特定することもできる。この特定を行う際に、コンテンツマネージャ５２０は、符号化済みブロックを復号化して、各復号化済みブロックをファイルマネージャ５３０に転送することができる。
【０１２６】
ファイルマネージャ５３０およびコンテンツマネージャ５２０は、例えばアプリケーションプログラミングインターフェース（ＡＰＩ）、つまりネットワークを介した遠隔手順呼び出しを使用して通信することができる。ファイルマネージャ５３０は、コンテンツマネージャ５２０から複数の未符号化ブロックを受信して、コンテンツ配信ネットワーク内の起点ノードにより送信された元のファイルコンテンツのコピーを作成するために複数の未符号化ブロックを結合することができる。
【０１２７】
ファイルマネージャ５３０が、元のファイルコンテンツのコピーを作成するために未符号化ブロックを一度結合すると、ファイルマネージャ５３０は、元のファイルのコピーをファイルシステム５５０の記憶機能に収容するためにファイルシステム５５０と通信することができる。ファイルシステム５５０は、ハードドライブ、ネットワーク共有、不揮発性の取り外し可能ストレージ、または現在の実施形態の態様に従い元のファイルのコピーを記憶することのできる任意の物理的記憶媒体に相当しうる。ファイルマネージャ５３０はさらに、オペレーティングシステム、コンポーネント、アプリケーションプログラミングインターフェース（ＡＰＩ）、またはファイルマネージャ５３０に代わって元のファイルのコピーを記憶するいかなる他のデバイスとも通信することができる。
【０１２８】
システムおよび方法のいくつかの特定の実施例を添付の図面に示し、上記の詳細な説明で説明したが、図示し説明したシステムおよび方法は、説明した特定の実施例に限定されるのではなく、特許請求の範囲に記載し規定した趣旨を逸脱することなく、多数の再構成、修正および置換が可能であることは理解されよう。
【図面の簡単な説明】
【０１２９】
【図１】ネットワークコーディングを使用したコンテンツ配信の例を実施することのできる、コンテンツ配信ネットワーク環境を示す図である。
【図２】同様にネットワークコーディングを使用したコンテンツ配信の例を実施することのできる、コンテンツ配信ネットワーク環境を示す図である。
【図３】受信側の立場から見た、ネットワークコーディングを使用したコンテンツ配信のための処理フローの一例を示す図である。
【図４】送信側の立場から見た、ネットワークコーディングを使用したコンテンツ配信のための処理フローの一例を示す図である。
【図５】ネットワークコーディングを使用したコンテンツ配信を実施することのできる、システム例を示す図である。
【符号の説明】
【０１３０】
１１０  ソース
１２０  ノード１
１３０  ノード２
１４０  ノード３
１５０  ノード４
１６０  ノード５
１７０  ノード６
２１０  ソース
２２０  ノード１
２３０  ノード２
５１０  ネットワークマネージャ
５２０  コンテンツマネージャ
５３０  ファイルマネージャ
５４０  符号化済みブロックストア
５５０  ファイルシステム
５６０  ピアツーピアネットワーク
【図１】
2006031693.tif 000023
【図２】
2006031693.tif 000024
【図３】
2006031693.tif 000025
【図４】
2006031693.tif 000026
【図５】
2006031693.tif 000027
【外国語明細書】
2006031693000001.pdf