(57)【要約】【課題】ネットワークコーディングを利用した通信システムにおいて通信効率をより向上させる。【解決手段】通信システム１では、提供側ノードＮ１に初期化ベクトルや打診ベクトルを送信させ、利用側ノードＮ４で受信される符号化されたデータ（受信ベクトル）から全体符号化関数Ｈ、ひいては復号化関数を特定し、以後、その特定した復号化関数を使用して受信ベクトルからコンテンツデータを復元する。従って、通信システム１によれば、符号化データメッセージを使用したコンテンツデータの送信時には、符号化データメッセージに復号化関数を特定するための情報を含める必要がないため、コンテンツデータの送信を効率よく行うことができる。【選択図】図１
2014072660.tif 000002
【特許請求の範囲】
【請求項１】
コンテンツデータから切り出したＫ（Ｋは２以上の整数）ビットのデータを成分とするベクトルを送信ベクトルとして、予め設定されたＫ行Ｋ列の行列で表現される符号化関数を用いて前記送信ベクトルを順次符号化し、該符号化によって得られるＫ種類のデータ系列毎に通信データを生成し、該通信データを前記データ系列毎に別々の隣接ノードに送信する提供側ノードと、
Ｍ，Ｎをいずれも１以上の整数として、Ｍ個の隣接ノードから受信する他ノード宛の通信データのそれぞれから１ビットずつ抽出したＭビットのデータを成分とするベクトルを入力ベクトルとして、予め設定されたＭ行Ｎ列の行列で表現される符号化関数を用いて前記入力ベクトルを符号化し、該符号化によって得られるＮ種類のデータ系列毎に通信データを生成し、該通信データを前記データ系列毎に別々の隣接ノードに転送する複数の中継ノードと、
Ｋ個の隣接ノードから受信する自ノード宛の通信データのそれぞれから１ビットずつ抽出したＫビットのデータを成分とするベクトルを受信ベクトルとして、予め設定されたＫ行Ｋ列の行列で表現される復号化関数を用いて前記受信ベクトルを復号化することで前記コンテンツデータを復元する利用側ノードと、
を備え、
前記提供側ノードは、
いずれか一つの成分が１となり他の成分が０となるベクトルを単位ベクトル、Ｋビットの成分で構成されるベクトルに関するＫ個の単位ベクトルを初期化ベクトルとして、前記利用側ノードからの要求に応じて、前記初期化ベクトルを前記送信ベクトルとした送信を行う初期化ベクトル送信手段を備え、
前記利用側ノードは、
前記提供側ノードに対して前記初期化ベクトルの送信を要求し、該要求に基づく自ノード宛の通信データを受信すると、該通信データから抽出されるＫ個の受信ベクトルに基づき、該受信ベクトルを列ベクトルとして並べてなるＫ行Ｋ列の行列で表現され、前記送信ベクトルから前記受信ベクトルへの変換特性を表す全体符号化関数を推定する関数推定手段と、
前記関数推定手段にて推定された符号化関数から求めた逆関数を、前記復号化関数として設定する復号化関数設定手段と、
を備えることを特徴とする通信システム。
【請求項２】
前記提供側ノードは、
前記利用側ノードからの要求に応じて、該利用側ノードから提供される打診ベクトルを前記送信ベクトルとした送信を行う打診ベクトル送信手段を備え、
前記利用側ノードは、
前記関数推定手段にて推定された全体符号化関数を作用させると、予め設定された単位ベクトルに変換されるベクトルを、前記打診ベクトルとして生成する打診ベクトル生成手段と、
前記提供側ノードに対して前記打診ベクトル生成手段にて生成された打診ベクトルを送信することで、前記提供側ノードに前記打診ベクトルの送信を要求し、該要求に基づく自ノード宛の通信データを受信すると、該通信データから抽出される受信ベクトルが、予期した単位ベクトルと不一致である場合に、該受信ベクトルの内容に従って、前記関数推定手段にて推定した全体符号化関数の列ベクトルを入れ替えることで、該全体符号化関数を修正する関数修正手段と、
を備えることを特徴とする請求項１に記載の通信システム。
【請求項３】
前記提供側ノード及び前記中継ノードは、
ネットワークのトポロジー情報を収集するトポロジー情報管理手段と、
前記トポロジー情報管理手段によって収集されたトポロジー情報に基づいて符号化関数を設定する符号化関数設定手段と、
を備えることを特徴とする請求項１又は請求項２に記載の通信システム。
【請求項４】
前記利用側ノードは、
ネットワークのトポロジー情報を収集するトポロジー情報管理手段を備え、
前記関数推定手段は、前記トポロジー情報管理手段によって収集されるトポロジー情報の内容に変化が生じた場合に起動することを特徴とする請求項１乃至請求項３のいずれか１項に記載の通信システム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ネットワークコーディングを実現する通信システムに関する。
【背景技術】
【０００２】
効率的な通信を実現する通信方法としてネットワークコーディングが知られている。
このネットワークコーディングは、各ノード間が個別の伝送路で接続された通信システムに適用される。そして、コンテンツデータを提供する提供側ノードと、コンテンツデータの提供を受ける利用側ノードとの間に存在する各ノード（中継ノード）では、一つ以上の隣接ノードから受信したデータを、予め設定された符号化関数を用いて符号化し、一つ以上の別の隣接ノードに転送する。また、利用側ノードでは、複数の隣接ノードから受信する互いに異なった符号化が施されたデータを復号化することによって、コンテンツデータを復元する。
【０００３】
そして、利用側ノードでは、データを復号化する際には、ネットワーク中でどのような経路が使用され、各中継ノードでどのような符号化関数が使用されたかに関する情報が必要となる。
【０００４】
これを実現する一つの手法として、以下のものが知られている。即ち、コンテンツデータの提供を開始するにあたって、提供側ノードが、利用側ノードまでの伝送経路を特定するための情報として経路ＩＤを各ノード（中継ノード及び利用側ノード）へ予め通知しておく。情報の通知を受けた各ノードは、通知された情報に基づいて伝送経路及び使用する符号化関数を決定して経路ＩＤと対応づけて記憶しておく。そして、提供側ノードは、コンテンツデータの送信に使用する通信データのヘッダに経路ＩＤを含ませ、利用側ノードは、ヘッダに示された経路ＩＤから伝送経路や各中継ノードで使用される符号化関数を特定し、その特定された伝送経路や符号化関数についての情報を利用してコンテンツデータを復元する（例えば、特許文献１参照）。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２００９−２９６２５１号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
しかし、特許文献１に記載の従来装置では、コンテンツデータの送信に使用する通信データのヘッダに、通信データの転送には不要な情報である経路ＩＤが含まれているため、この経路ＩＤの分だけコンテンツデータの伝送効率を低下させてしまい、通信の効率化を妨げる要因となっているという問題があった。
【０００７】
本発明は、上記問題点を解決するために、ネットワークコーディングを利用した通信システムにおいて通信効率をより向上させることを目的とする。
【課題を解決するための手段】
【０００８】
本発明の通信システムでは、提供側ノードが、コンテンツデータから切り出したＫ（Ｋは２以上の整数）ビットのデータを成分とするベクトルを送信ベクトルとして、予め設定されたＫ行Ｋ列の行列で表現される符号化関数を用いて送信ベクトルを順次符号化し、該符号化によって得られるＫ種類のデータ系列毎に通信データを生成し、該通信データを前記データ系列毎に別々の隣接ノードに送信する。
【０００９】
また、中継ノードは、Ｍ，Ｎをいずれも１以上の整数として、Ｍ個の隣接ノードから受信する他ノード宛の通信データのそれぞれから１ビットずつ抽出した合計Ｍビットのデータを成分とするベクトルを入力ベクトルとして、予め設定されたＭ行Ｎ列の行列で表現される符号化関数を用いて入力ベクトルを符号化し、該符号化によって得られるＮ種類のデータ系列毎に通信データを生成し、該通信データをデータ系列毎に別々の隣接ノードに転送する。
【００１０】
そして、利用側ノードは、Ｋ個の隣接ノードから受信する自ノード宛の通信データのそれぞれから１ビットずつ抽出したＫビットのデータを成分とするＫ次ベクトルを受信ベクトルとして、予め設定されたＫ行Ｋ列の行列で表現される復号化関数を用いて前記受信ベクトルを復号化することで前記コンテンツデータを復元する。
【００１１】
つまり、本発明の通信システムでは、所謂ネットワークコーディングを利用した通信を実現する。
そして、利用側ノードの関数推定手段が、提供側ノードに対して初期化ベクトルの送信を要求すると、提供側ノードの初期化ベクトル送信手段が、その要求に応じて、初期化ベクトルを、上述の送信ベクトルとして送信する。但し、初期化ベクトルは、Ｋビットのデータを成分とするベクトルに関するＫ個の単位ベクトル（いずれか一つの成分が１となり他の成分が０となるベクトル）からなる。
【００１２】
この初期化ベクトルは、提供側ノードで符号化され、中継ノードで再符号化されながら転送され、利用側ノードで受信される。
利用側ノードの関数推定手段は、自身の要求に基づく自ノード宛の通信データを受信すると、受信した通信データから抽出されるＫ個の受信ベクトルに基づき、該受信ベクトルを列ベクトルとして並べてなるＫ行Ｋ列の行列で表現され、送信ベクトルから受信ベクトルへの変換特性を表す全体符号化関数を推定する。
【００１３】
つまり、Ｋ行Ｋ列の行列に、ｉ行目が１に設定された単位ベクトル（列ベクトル）を作用させると、その出力として、行列のｉ列目の成分に等しい列ベクトルが得られる。また、利用側ノードが受信する受信ベクトルは、提供側ノードが提供する送信ベクトルに、全体符号化関数を作用させた結果であるといえる。このことから、提供側ノードから送信されたＫ種類の単位ベクトルに対して、利用側ノードで得られる受信ベクトルは、それぞれが、全体符号化関数を構成する列ベクトルのいずれかを表したものとなり、受信ベクトルを適切に並べることによって、全体符号化関数を推定することができるのである。
【００１４】
そして、利用側ノードでは、復号化関数設定手段が、関数推定手段によって推定された符号化関数から求めた逆関数を、復号化関数として設定する。
以後、利用側ノードは、この復号化関数を使用して、提供側ノードから送信されてくる符号化されたデータを復号化することで、コンテンツデータを復元する。
【００１５】
以上説明したように、本発明の通信システムでは、提供側ノードに初期化ベクトルを送信させ、利用側ノードで受信される符号化された初期化ベクトルから全体符号化関数、ひいては復号化関数を決定し、以後、その決定した復号化関数を使用して受信ベクトルからコンテンツデータを復元するようにされている。
【００１６】
このように、本発明の通信システムによれば、コンテンツデータを送信する前に、新たに考案した初期化ベクトルを使用して復号化関数を決定するため、コンテンツデータの送信時には、通信データ中に復号化関数を特定するための情報を含める必要がなく、従来技術では通信データ中に含まれていた経路ＩＤを省略することができる。
その結果、コンテンツデータの送信を効率よく行うことができ、しかも、その効果は、短いデータを頻繁に送る場合により顕著なものとなる。
【００１７】
また、請求項２に記載の通信システムでは、利用側ノードの打診ベクトル生成手段が、関数推定手段にて推定された全体符号化関数に基づいて生成した打診ベクトルを提供側ノードに対して送信することで、提供側ノードに打診ベクトルの送信を要求する。なお、打診ベクトルとは、全体符号化関数に作用させると、予め設定された単位ベクトルに変換されるベクトルのことをいう。
【００１８】
提供側ノードの打診ベクトル送信手段は、この利用側ノードからの要求に応じて、利用側ノードから提供される打診ベクトルを送信ベクトルとした送信を行う。
【００１９】
これにより、打診ベクトルは、初期化ベクトルの場合と同様に、提供側ノードで符号化され、中継ノードで再符号化されながら転送され、利用側ノードで受信される。
【００２０】
利用側ノードの関数修正手段は、自身の要求に基づく自ノード宛の通信データを受信すると、受信した通信データから抽出される受信ベクトルが、予期した単位ベクトルと不一致である場合に、該受信ベクトルの内容に従って、関数推定手段にて推定した全体符号化関数を構成する行ベクトルの並び順（つまり、列ベクトルを構成する成分の並び順）を入れ替えることで、全体符号化関数を修正する。
【００２１】
具体的には、ｉ行が１に設定された単位ベクトル（列ベクトル）に変換されることが期待される打診ベクトルを受信した結果、ｊ（ｉ≠ｊ）行が１に設定された単位ベクトルであった場合には、推定された全体符号化関数を構成するｊ行目の行ベクトルをｉ行目に移動させればよい。そして、この操作を、Ｋ−１種類の単位ベクトルに対応する打診ベクトルについて繰り返すことによって、誤って推定された全体符号化関数を訂正することができる。
【００２２】
従って、本発明の通信システムによれば、利用側ノードにおいて、受信ベクトルを構成する各成分の正しい並び順が不明であっても、新たに考案した打診ベクトルを使用することで正しい並び順を把握することができ、ひいては全体符号化関数を一意に決定することができる。
【図面の簡単な説明】
【００２３】
【図１】通信システムの全体構成図である。
【図２】ノード間で送受信されるメッセージの内容を示す説明図である。
【図３】ノードの内部構成を示すブロック図である。
【図４】提供側ノードの復号化関数決定部が実行する提供側処理の内容を示すフローチャートである。
【図５】利用側ノードの復号化関数決定部が実行する利用側処理の内容を示すフローチャートである。
【図６】利用側ノードが復号化関数を決定する際に実行される初期化手順を示すシーケンス図である。
【図７】全体符号化関数を推定する際の不確定要素についての説明図である。
【発明を実施するための形態】
【００２４】
以下に本発明の実施形態を図面と共に説明する。
［第１実施形態］
＜全体構成＞
通信システム１は、ネットワークコーディングを利用した通信を実行するものであり、
図１に示すように、複数の通信装置（ノード）２を、１対１の通信を行う伝送路（リンク）３で相互に接続した構成を有する。なお、各ノード２は、それぞれ一つ以上の伝送路に接続されている。
【００２５】
以下では、自ノード２に接続されたリンク３の他端に接続されたノードを隣接ノードともいう。また、ノード２のうち、コンテンツデータを提供するノードを提供側ノード、コンテンツデータの提供を受けて、そのコンテンツデータを利用するノードを利用側ノード、提供側ノードから利用側ノードに至るネットワークを構成し、コンテンツデータの中継を行うノードを中継ノードという。
【００２６】
また、提供側ノードは、Ｋ（Ｋは１以上の整数）個のリンクを介してＫ個の隣接ノードにデータを送信し、中継ノードは、Ｍ（Ｍは１以上の整数）個のリンク（入力リンク）を介して、Ｍ個の隣接ノードから入力されるデータを符号化して、入力リンクとは異なるＮ（Ｎは１以上の整数）個のリンク（出力リンク）を介してＮ個の隣接ノードに符号化したデータを出力する。そして、利用側ノードは、Ｋ個のリンクを介してＫ個の隣接ノードからデータを受信し、この受信したデータを復号化することによって、コンテンツデータを復元するように構成されている。
【００２７】
＜メッセージ＞
ここで、ノード２間で送受信される通信データ（以下「メッセージ」という）の内容について説明する。
【００２８】
メッセージには、コンテンツデータの送信に使用する符号化データメッセージ、及びネットワークコーディングによって符号化されたデータを復号化してコンテンツデータを復元する際に使用する復号化関数の決定に使用する制御メッセージが少なくとも存在する。
【００２９】
符号化データメッセージは、図２（ａ）に示すように、シーケンス番号を設定するシーケンス領域、送信元を示す送信ノードＩＤを設定する送信ＩＤ領域、受信先を示す受信ノードＩＤを設定する受信ＩＤ領域、データを設定するデータ領域からなる。
【００３０】
なお、シーケンス番号は、提供側ノードから並列に送信されるＫ個の符号化データメッセージについては、同じシーケンス番号が付与される。各中継ノードは、送信ノードＩＤ，受信ノードＩＤ，シーケンス番号がいずれも一致しているＭ個の符号化データメッセージを対象として、データ領域に設定されたデータを符号化する。この符号化されたデータがデータ領域に設定されるＮ個の符号化データメッセージには、符号化の対象となった符号化データメッセージに付与されていたものと同じ送信ノードＩＤ，受信ノードＩＤ，シーケンス番号が付与されて転送される。また、利用側ノードは、送信ノードＩＤ，受信ノードＩＤ，シーケンス番号がいずれも一致しているＫ個の符号化データメッセージを対象として、データ領域に設定されたデータの復号化を行い、コンテンツデータを復元する。
【００３１】
一方、制御メッセージは、図２（ｂ）〜（ｅ）に示すように、シーケンス領域の変わりに、制御の種類を指定するコマンド領域が設けられている以外は、符号化データメッセージと同様である。但し、データ領域については、コマンド領域の設定内容によって省略される場合もある。
【００３２】
図２（ｂ）は、初期化要求メッセージであり、利用側ノードにて使用される復号化関数を決定するための一連の処理を開始することを、利用側ノードから提供側ノードに要求する際に使用する。この初期化要求メッセージは、データ領域は必要がないため省略される。
【００３３】
図２（ｃ）は、初期化開始通知メッセージであり、初期化要求メッセージを受け付けて初期化処理を開始することを、提供側ノードから利用側ノードに通知する際に使用する。この初期化開始通知メッセージも、データ領域は必要がないため省略される。
【００３４】
図２（ｄ）は、初期化ベクトル送信メッセージであり、提供側ノードから利用側ノードに向けて送信され、そのデータ領域には、初期化ベクトル（後述する）を符号化したデータが設定される。
【００３５】
図２（ｅ）は、打診ベクトル通知メッセージであり、利用側ノードにて推定した全体符号化関数の検証に必要なデータを、利用側ノードから提供側ノードに通知する際に使用する。この打診ベクトル通知メッセージのデータ領域には、推定した全体符号化関数を用いて生成された打診ベクトル（後述する）が設定される。
【００３６】
図２（ｆ）は、打診ベクトル送信メッセージであり、打診ベクトル通知メッセージによって取得した打診ベクトルを使用して、提供側ノードから利用側ノードに送信される。この打診ベクトル送信メッセージのデータ領域には、打診ベクトルを符号化したデータが設定される。
【００３７】
なお、提供側ノードから利用側ノードに送信される制御メッセージ（ここでは初期化ベクトル送信メッセージ，打診ベクトル送信メッセージ）のデータ領域は、符号化データメッセージと同様に、提供側ノード及び中継ノードにおいて符号化（ネットワークコーディング）の対象となる。以下では、符号化データメッセージ、初期化ベクトル送信メッセージ、打診ベクトル送信メッセージを総称して、符号化対象メッセージともいう。
【００３８】
一方、符号化対象メッセージ以外の制御メッセージ（ここでは、初期化開始要求メッセージ、初期化開始通知メッセージ、打診ベクトル通知メッセージ）は、ネットワークコーディングを使用しない周知のルーティング技術に従って転送される。
【００３９】
＜ノード＞
ノード２は、図３に示すように、複数のリンク３に接続され、各リンク３を介して隣接ノード２との通信（メッセージの送受信）を個別に行う送受信部２１と、自ノード２が属するネットワーク（即ち、通信システム１）内のノードの配置状態（トポロジー）に関する情報（以下「トポロジー情報」という）を収集して記憶するトポロジー管理部２２とを備えている。
【００４０】
また、ノード２は、送受信部２１を介して所定の隣接ノード（入力側隣接ノード）から他ノード宛の符号化対象メッセージを受信した場合に、そのデータ領域に設定されたデータを予め設定された符号化関数を用いて符号化し、その符号化されたデータがデータ領域に設定された符号化対象メッセージを、送受信部２１を介して入力側隣接ノードとは異なる所定の隣接ノード（出力側隣接ノード）に転送することで中継ノードとしての機能を実現する中継処理部２３と、符号化対象メッセージを送信する際に、送信対象となるデータ（自身が保持するコンテンツデータや初期化ベクトル，打診ベクトル）を、Ｋビット単位（以下、このＫビット単位のデータを「送信ベクトル」ともいう）で切り出して符号化関数を用いて符号化し、符号化されたデータがデータ領域に設定された符号化対象メッセージを、送受信部２１を介して所定の隣接ノードに出力することで提供側ノードとしての機能を実現する送信処理部２４と、トポロジー管理部２２が収集したトポロジー情報に基づいて、中継処理部２３や送信処理部２４で使用する符号化関数（個別符号化関数ともいう）を決定する符号化関数決定部２５とを備えている。
【００４１】
また、ノード２は、送受信部２１を介して自ノード宛の符号化対象メッセージを受信し
た場合に、そのデータ領域に設定されたデータを予め設定された復号化関数を用いて復号化し、提供側ノードが提供するコンテンツデータを復元することで、利用側ノードとしての機能を実現する受信処理部２６と、トポロジー管理部２２が収集したトポロジー情報、及び提供側ノードとの間で一連の初期化手順（後述する）を実行することによって得られる情報によって復号化関数を決定する復号化関数決定部２７とを備えている。
【００４２】
更に、ノード２は、自発的に或いは他ノードからの要求に応じて、自ノード２が有するコンテンツデータを、符号化メッセージを使用して利用側ノードに提供するアプリケーションであるコンテンツデータ提供処理や、受信処理部２６にて復元されたコンテンツデータを利用するアプリケーションであるコンテンツデータ利用処理を少なくとも実行するアプリケーション処理部２８を備えている。
【００４３】
つまり、ノード２は、提供側ノード、利用側ノード、中継ノードのいずれとしても動作するように構成されている。
＜送信処理部＞
送信処理部２４は、符号化対象メッセージを送信する場合、そのデータ領域を使用して送信するデータを、符号化関数決定部２５で決定されるＫ行Ｋ列の行列で表現された符号化関数を用いて、送信ベクトル単位で順次符号化する。そして、その符号化によって得られるＫ種類のデータ系列毎に別々の符号化対象メッセージを生成し、その符号化対象メッセージを、データ系列毎に別々の隣接ノードに送受信部２１を介して送信する。
【００４４】
また、送信処理部２４は、符号化対象メッセージ以外の制御メッセージを送信する場合、データ領域が存在しても符号化関数による符号化を実行することなく、そのままの形で、予め指定されたいずれか一つの隣接ノードに送信する。
【００４５】
＜中継処理部＞
中継処理部２３は、Ｍ個の隣接ノードから送受信部２１を介して他ノード宛の符号化対象メッセージを受信した場合、その受信した他ノード宛の符号化対象メッセージのデータ領域から、それぞれ１ビットずつ抽出して所定順に並べることで、Ｍビットのデータで構成される入力ベクトルを生成する。つまり、各メッセージのデータ領域にそれぞれＰ個のデータが設定されていれば、Ｐ個の入力ベクトルが生成される。そして、符号化関数決定部２５で決定されるＭ行Ｎ列の行列で表現された符号化関数を用いて、入力ベクトルを順次符号化し、その符号化によって得られるＮ種類のデータ系列毎に別々の符号化対象メッセージを生成し、その符号化対象メッセージを、データ系列毎に別々の隣接ノードに送受信部２１を介して転送する。
【００４６】
また、中継処理部２３は、符号化対象メッセージ以外の制御メッセージを受信した場合、周知のルーティング処理によって決まるいずれか一つの隣接ノードに転送する。
【００４７】
＜受信処理部＞
受信処理部２６は、Ｋ個の隣接ノードから送受信部２１を介して自ノード宛の符号化対象メッセージを受信した場合、その受信した自ノード宛の符号化対象メッセージのデータ領域から、それぞれ１ビットずつ抽出して所定順に並べることで、Ｋビットのデータで構成される受信ベクトルを生成する。つまり、各メッセージのデータ領域にそれぞれＰ個のデータが設定されていれば、Ｐ個の受信ベクトルが生成される。そして、復号化関数決定部２７で決定されるＫ行Ｋ列の行列で表現された復号化関数を用いて、受信ベクトルを順次復号化することでコンテンツデータを復元する。
【００４８】
＜トポロジー管理部＞
トポロジー管理部２２は、トポロジー管理のために予め用意された制御メッセージ（図
示せず）を他ノードとの間で送受信することによって、トポロジー情報を収集して、収集した情報をトポロジー管理テーブルに記憶する。これにより、トポロジー管理部２２を有する全てのノード２が、共通のトポロジー情報を保持する。
【００４９】
なお、トポロジー情報の収集に使用するプロトコルは周知のものであり、本発明の主要部に直接関わるものではないため、ここでは説明を省略する。
また、トポロジー管理部２２は、通信システム１に新たなノード２が追加されたり、接続されていたノード２が除去されたりする等して、トポロジー情報に変化が生じたことを検知すると、トポロジー情報に基づいた処理を実行する符号化関数決定部２５，復号化関数決定部２７に対して、その旨を通知するトポロジー更新通知を出力するように構成されている。
【００５０】
＜符号化関数決定部＞
符号化関数決定部２５は、符号化関数が未算出である場合、又は、トポロジー管理部２２からトポロジー更新通知を受けた場合に作動して符号化関数（個別符号化関数）を決定する。
【００５１】
具体的には、トポロジー管理テーブルに記憶されたトポロジー情報に基づいて、ネットワークコーディングで使用する入力リンク及び出力リンクを決定する。そして、自ノード２が提供側ノードとして動作する場合に使用する出力リンク数をＫとして、送信側処理部２４で使用するＫ行Ｋ列の符号化関数を設定すると共に、自ノード２が中継ノードとして動作する場合に使用する入力リンク数をＭ、出力リンク数をＮとして、中継処理部２３で使用するＭ行Ｎ列の行列で表現される符号化関数を設定する。
【００５２】
これら符号化関数は、符号化関数を合成してなる全体符号化関数が逆行列を有し、全体符号化関数から復号化関数を求めることができるような特性を有するように、ノード２毎に任意に設定される。このような特性を有する符号化関数は、ネットワークコーディングにおいて周知のものである。
【００５３】
＜復号化関数決定部＞
復号化関数決定部２７は、自ノード２がコンテンツデータを提供する提供側ノードとなる場合には提供側処理、コンテンツデータを利用する利用側ノードとなる場合には利用側処理を実行する。なお、利用側ノードとなるノード２は、提供側ノードとなるノード２を特定するための情報であるノードＩＤを予め保持している。
【００５４】
以下、復号化関数決定部２７での処理を提供側処理と利用側処理とに分けて詳述する。
また、これら提供側処理及び利用側処理を実行することによって実現される手順を初期化手順という。
【００５５】
<<提供側処理>>
提供側処理は、トポロジー管理部２２によるトポロジー情報の収集が行われ、かつ、符号化関数決定部２５によって符号化関数が決定された後、利用側ノードから初期化開始要求メッセージを受信すると起動する。また、利用側ノードが複数存在する場合、各利用側ノードから個別に初期化開始要求メッセージが送信されるため、そのそれぞれについて同様の処理を実行する。
【００５６】
本処理が起動すると、図４，図６に示すように、まず、初期化開始要求メッセージの送信元となった利用側ノード（以下「要求元ノード」という）に対して、初期化開始通知メッセージを送信し（Ｓ１１０）、続けて、要求元ノードに対して初期化ベクトル通知メッセージを送信する（Ｓ１２０）。
【００５７】
なお、初期化ベクトル通知メッセージは、自ノードが有するＫ個の出力リンクのそれぞれから出力される。
ここで、初期化ベクトルとは、出力リンクの数と同じ数であるＫビットのデータを成分として構成され、かつ、いずれか一つの成分が１、他の全ての成分が０に設定されたＫ種類の単位ベクトルからなる。例えばＫ＝３の場合、初期化ベクトルはそれぞれ［１，０，０］［０，１，０］［０，０，１］で表される。
【００５８】
そして、これら初期化ベクトルを単位符号化関数に作用させることによって得られる符号化されたデータ（出力ベクトル）を［ｘ1 ，ｘ2 ，…ｘK ］で表すものとすると、出力ベクトルの成分ｘi （ｉ＝１，２，…Ｋ）が、ｉ番目の出力リンクから出力される初期化ベクトル通知メッセージのデータ領域に設定される。つまり、ここではＫ種類の初期化ベクトルが存在するため、各出力リンクから出力される初期化ベクトル通知メッセージのデータ領域には、それぞれＫ個のデータが設定されることになる。
【００５９】
その後、要求元ノードから打診ベクトル通知メッセージを受信するまで待機し（Ｓ１３０）、打診ベクトル通知メッセージを受信すると、そのメッセージに設定されている打診ベクトルに基づく打診ベクトル送信メッセージを送信して（Ｓ１４０）、本処理を終了する。
【００６０】
なお、打診ベクトル送信メッセージは、初期化ベクトル通知メッセージの場合と同様に、Ｋ個の出力リンクのそれぞれから出力される。即ち、初期化ベクトルを打診ベクトルに置き換えて、初期化ベクトル通知メッセージの送信時と同様の符号化、及びデータ領域へ符号化されたデータの設定が行われる。
【００６１】
この処理の後、要求元ノードからの要求に応じて又は周期的に、符号化データメッセージを使用したコンテンツデータの送信が開始される。コンテンツデータを送信する場合、コンテンツデータからＫビットずつ切り出したデータを送信ベクトルとして、以下、初期化ベクトル及び打診ベクトルの場合と同様の処理が行われる。但し、同じ送信ベクトルに基づく符号化データがデータ領域に設定されたＫ個の符号化データメッセージには、同じシーケンス番号が付与される。
【００６２】
<<利用側処理>>
利用側処理は、トポロジー管理部２２によって収集されたトポロジー情報に変化（トポロジー更新情報の入力）があり、かつ、自ノード２が、他ノードが提供するコンテンツデータを利用する利用側ノードである場合（例えば、所定の記憶領域に提供側ノードのノードＩＤが記憶されている場合）に起動する。なお、トポロジー情報に変化がある場合とは、過去に取得され記憶されているトポロジー情報が存在せず、トポロジー情報が始めて取得された場合も含む。
【００６３】
また、複数の提供側ノードからコンテンツデータを取得する必要がある場合、それぞれの提供側ノードに対して、本処理を個別に実行する。
本処理が起動すると、図５，図６に示すように、まず、提供側ノードに対して初期化開始要求メッセージを送信する（Ｓ２１０）。
【００６４】
その後、提供側ノードから初期化開始通知メッセージを受信するまで待機し（Ｓ２２０）、これを受信すると、引き続き初期化ベクトル通知メッセージを受信するまで待機する（Ｓ２３０）。
【００６５】
コンテンツデータの受信に使用するＫ個の入力リンクの全てから送信ノードＩＤ，受信
ノードＩＤ，シーケンス番号が全て一致する初期化ベクトル通知メッセージを受信すると、それらメッセージのデータ領域から受信ベクトルを抽出し、その抽出された受信ベクトルに基づいて、ネットワーク全体の符号化関数（提供側ノード及び全ての中継ノードで使用される符号化関数を合成した関数）である全体符号化関数を推定する（Ｓ２４０）。
【００６６】
ここでは、各初期化ベクトル通知メッセージのデータ領域には、それぞれＫ個のデータが設定されているため、各メッセージからｉ番目（ｉ＝１，２，…Ｋ）に設定されているデータを抽出したものをｉ番目の受信ベクトルとして抽出する。そして、ｉ番目の受信ベクトルを、Ｋ行Ｋ列の行列におけるｉ列の列ベクトルとして並べたものを全体符号化関数の推定値（以下「推定関数」という）としている。
【００６７】
次に、Ｓ２４０で求めた推定関数に基づいて打診ベクトルを算出し（Ｓ２５０）、その算出した打診ベクトルをデータ領域に設定した打診ベクトル通知メッセージを、提供側ノードに対して送信する（Ｓ２６０）。
【００６８】
なお、打診ベクトルは、推定関数に作用させると、Ｋビットの単位ベクトルに符号化されるＫビットのベクトルであり、Ｋ種類ある単位ベクトルのそれぞれに対応するＫ個のベクトルからなる。
【００６９】
その後、提供側ノードから打診ベクトル送信メッセージを受信するまで待機し（Ｓ２７０）、コンテンツデータの受信に使用するＫ個の入力リンクの全てから初期化ベクトル通知メッセージを受信すると、それらメッセージのデータ領域から受信ベクトルを抽出し、その抽出された受信ベクトルが、期待した単位ベクトルと一致しているか否かを判断することによって、推定関数の検証を行う（Ｓ２８０）。
【００７０】
受信ベクトルが一つでも期待した単位ベクトルと一致していなければ、その受信ベクトルの内容に従って、推定関数を構成する列ベクトルを適宜入れ替えることで推定関数を修正する（Ｓ２９０）。
【００７１】
そして、全ての受信ベクトルが期待した単位ベクトルと一致している場合には、推定関数をそのまま全体符号化関数として使用し、両者が一致していない場合には、Ｓ２９０にて修正された推定関数を全体符号化関数として使用し、その全体符号化関数の逆関数を復号化関数として求めて（Ｓ３００）、本処理を終了する。
【００７２】
以後、受信処理部２６は、送受信部２１を介して、送信ノードＩＤ，受信ノードＩＤシーケンス番号が全て一致した符号化データメッセージをＫ個ある入力リンクの全てから受信すると、それらのメッセージのデータ領域に設定されたデータから抽出した受信ベクトルを、復号化関数決定部２７によって決定された復号化関数を用いて復号化し、その復号化によって復元されたコンテンツデータをアプリケーション処理部２８に提供する。
【００７３】
＜動作例＞
通信システム１の動作例について説明する。
なお、図１において、ノードＮ１が提供側ノード、ノードＮ２，Ｎがを中継ノード、ノードＮ４が利用側ノードとして動作するものとする。
【００７４】
ここで、（１）〜（３）式に示すように、ノードＮ１〜Ｎ３で設定される符号化関数をＨ１〜Ｈ３で表すものとする。
【００７５】
【数１】
2014072660.tif 000003
【００７６】
また、提供側ノードＮ１が提供するコンテンツデータから切り出した２ビットのデータからなる送信ベクトルを［ｂ1 ，ｂ2 ］で表し、ノードＮｉから出力される符号化されたデータを［ＳiL，ＳiR］で表すものとして、各ノードＮ１〜Ｎ３で実行される符号化は、（４）〜（６）式で表される。
【００７７】
【数２】
2014072660.tif 000004
【００７８】
提供側ノードＮ１が提供する受信ベクトル［ｂ1 ，ｂ2 ］と、利用側ノードＮ４が受信する符号化データメッセージから抽出される受信ベクトル［Ｓ2R，Ｓ3L］とは、ネットワーク全体の符号化関数である全体符号化関数をＨとすると（７）式に示す関係を有し、更に、全体符号化関数Ｈは、（４）〜（７）から求めることができ、（８）式で表される。
【００７９】
【数３】
2014072660.tif 000005
【００８０】
（７）式からわかるように、全体符号化関数Ｈが逆行列を持つように個別符号化関数Ｈ１〜Ｈ３が設定されていれば、全体符号化関数Ｈの逆行列である復号化関数を用いて、受信ベクトル［Ｓ2R，Ｓ3L］から送信ベクトル［ｂ1 ，ｂ2 ］を求めることができ、ひいてはコンテンツデータを復元することができる。
【００８１】
また、（７）（８）式から明らかなように、提供側ノードＮ１から送信される送信ベクトルが初期化ベクトル［１，０］である場合、利用側ノードＮ４にて受信される受信ベクトルは、全体符号化関数Ｈの１列目の列ベクトルに等しくなり、また、送信ベクトルが初期化ベクトル［０，１］である場合、受信ベクトルは、全体符号化関数Ｈの２列目の列ベクトルに等しくなる。
【００８２】
従って、利用側ノードＮ４では、初期化ベクトル送信メッセージのデータ領域に設定された値から抽出される受信ベクトルを適宜並べることによって、全体符号化関数Ｈを推定することが可能となる。
【００８３】
但し、送信ベクトルを構成する各成分の並び順と、受信ベクトルを構成する各成分の並び順との対応関係は、Ｋ＝２の場合は、図７に示す二つのパタンに集約される。
【００８４】
つまり、受信ベクトルの並び順が正しい場合に、初期化ベクトルを使用して推定される正しい全体符号化関数をＨ、受信ベクトルの並び順が誤っている（入れ替わっている）場合に、初期化ベクトルを使用して推定される誤った全体符号化関数をＨｅｒｒとして、両関数は、（９）（１０）式で表され、両者の関係は、（１２）式で表される変換行列Ｔを使用して（１１）で表される。
【００８５】
【数４】
2014072660.tif 000006
【００８６】
２成分からなるベクトルの単位ベクトルＥ１，Ｅ２を（１３）（１４）式で表し、また、推定関数をＨｓ（＝Ｈ  or  Ｈｅｒｒ）で表すものとすると、推定関数Ｈｓから求めた単位ベクトルＥ１に変換される診断ベクトルＶｅｘは（１５）式で表される。
【００８７】
【数５】
2014072660.tif 000007
【００８８】
この診断ベクトルＶｅｘを、送信ベクトルとして提供側ノードＮ１から送信した場合、利用側ノードＮ４で得られる受信ベクトルは、Ｈ・Ｖｅｘで表される。そして、推定関数Ｈｓが正しく推定されている場合（Ｈｓ＝Ｈの場合）、受信ベクトルは（１６）式で表され、推定関数Ｈｓが誤って推定されている場合（Ｈｓ＝Ｈｅｒｒの場合）、受信ベクトルは（１７）式で表される。
【数６】
2014072660.tif 000008
【００８９】
つまり、診断ベクトルＶｅｘがネットワークコーディングされることで得られる受信ベクトルは、推定関数Ｈｓが正しければ、期待した値である単位ベクトルＥ１となり、推定関数Ｈｓが誤っていれば、期待した値とは一致しない単位ベクトルＥ２となることがわか
る。
【００９０】
このため、診断ベクトルＶｅｘに基づく受信ベクトルが期待した単位ベクトルと一致しない場合には、推定関数Ｈｓが誤っているものとして、推定関数Ｈｓを構成する行ベクトルを入れ替えることで、正しい全体符号化関数が得られることになる。
【００９１】
ここでは、Ｋ＝２の場合について説明したが、Ｋ＞３の場合は、次のような修正を行えばよい。
即ち、ｉ行目が１となる単位ベクトルを期待しているにも関わらず、受信ベクトルがｊ（ｉ≠ｊ）行目が１となる単位ベクトルである場合、推定関数Ｈｓを構成するｊ行目の行ベクトルをｉ行目に移動させる。これを、期待した値と一致しない全ての受信ベクトルについて行うことにより、正しい全体符号化関数が得られることになる。
【００９２】
＜効果＞
以上説明したように、通信システム１では、提供側ノードＮ１に初期化ベクトルや打診ベクトルを送信させ、利用側ノードＮ４で受信される符号化されたデータ（受信ベクトル）から全体符号化関数Ｈ、ひいては復号化関数を特定し、以後、その特定した復号化関数を使用して受信ベクトルからコンテンツデータを復元するようにされている。
【００９３】
このように通信システム１によれば、コンテンツデータの送信を開始する前に、ネットワークコーディングにおいて新規な概念である「初期化ベクトル」や「打診ベクトル」を使用して復号化関数を決定しているため、コンテンツデータの送信時には、符号化データメッセージに復号化関数を特定するための情報を含める必要がなく、従来技術ではメッセージ中に含まれていた経路ＩＤを省略することができる。
このため、コンテンツデータの送信を効率よく行うことができ、しかも、その効果は、短いデータを頻繁に送る場合により顕著なものとなる。
【００９４】
また、通信システム１では、ネットワークのトポロジー情報が変化した場合に、個別符号化関数を再設定し、全体符号化関数Ｈ（ひいては復号化関数）を特定し直すように構成されているため、ノード２が後付けされたり、除去されたりする可能性があるシステムでも好適に用いることができる。
【００９５】
＜他の実施形態＞
以上本発明の一実施形態について説明したが、本発明は上記実施形態に限定されるものではなく、本発明の要旨を逸脱しない範囲において様々な態様にて実施することが可能である。
【００９６】
例えば、上記実施形態では、各ノード２は、提供側ノード、利用側ノード、中継ノードのいずれとしても動作可能に構成されているが、いずれか専用に構成されていてもよい。具体的には、提供側ノード専用であれば、中継処理部２３、受信処理部２６、復号化関数決定部２７における利用側処理、アプリケーション処理部２８におけるコンテンツ利用処理を省略してもよい。また、利用側ノード専用であれば、中継処理部２３、送信処理部２４、符号化関数決定部２５、復号化関数決定部２７における提供側処理、アプリケーション処理部２８におけるコンテンツ提供処理を省略してもよい。また、中継ノード専用であれば、送信処理部２４、受信処理部２６、復号化関数決定部２７、アプリケーション処理部２８を省略してもよい。
【符号の説明】
【００９７】
１…通信システム  ２…ノード  ３…リンク  ２１…送受信部  ２２…トポロジー管理部  ２３…中継処理部  ２４…送信処理部  ２５…符号化関数決定部  ２６…受信処理部
２７…復号化関数決定部  ２８…アプリケーション処理部
【図１】
2014072660.tif 000009
【図２】
2014072660.tif 000010
【図３】
2014072660.tif 000011
【図４】
2014072660.tif 000012
【図５】
2014072660.tif 000013
【図６】
2014072660.tif 000014
【図７】
2014072660.tif 000015