(グループ分けによるデータ配信)
図1は、本発明により構築されるピアツーピア型のコミュニケーションシステムの説明図である。図1において、ピア10−1〜10−5は、パーソナルコンピュータやPDAなどの情報処理装置で構成されており、適当な入力装置、出力装置及び通信装置を備えている。またピア10−1〜10−4には、ピアツーピア型コミュニケーションの代表である例えばコラボレーションを行うためのアプリケーションがインストールされている。
いまピア10−0がコラボレーションにおけるデータ変更例えばチャット文章の入力を行ったとすると、ピア10−0から情報の発信が行われ、インターネットなどのネットワークの通信プロトコルに従って、その内容が配信される。
このとき左側のピア10−0,10−1,10−2のグループと右側のピア10−3,10−4,10−5のグループの伝送経路が離れていた場合、ピア10−0から発信した情報を直接ピア10−1〜10−5のそれぞれに配信するよりは、例えばピア10−1からの転送16によりピア10−3に転送した後、ピア10−4,10−5に対する配信18を行う方が、効率がよい。
そこで本発明のデータ配信方法にあっては、後の説明で明らかにするように、ピア10−1〜10−5のそれぞれが独立に、自分自身から見た他のピアとの間のネットワーク上の距離の比較に基づいてグループを形成し、グループの代表ピアに対し情報を発信する配信制御を行うようにしている。
また図2のピアツーピア型コミュニケーションシステム上には代理ピア12が設けられており、例えばピア10−5の電源が切れていたり動作プログラムが起動していないなどの停止状態にあるとき、ピア10−5の代わりに代理ピア12がピア10−5を宛先とする情報を受信し、その後、ピア10−5に電源が入って動作を開始したときに、代理ピア12で保存していた情報をピア10−5に送り、これによってピアの動作が停止しても、その後、起動した際にデータの一貫性(一意性)を保てるようにしている。
図2は、図1のピア10−0を例にとって、機能構成を示した説明図である。図2において、ピア10−0には、ピアアプリケーション20、ファイル格納部22、データ配信部24、データ伝送部26及びパケット伝送部28が設けられる。ピアアプリケーション20としては、例えばコラボレーション用のアプリケーションが用いられる。
この場合、ファイル格納部22にはコラボレーションによる共有データが保存される。データ配信部24には、グループ情報作成部30、データ発信部34及びデータ中継部35の機能が設けられる。
グループ情報作成部30は、ネットワーク40を介して新たなピアの接続を受けた際、即ちピア10−0から見て新しいピアが出現した際に、ピア10−0自身、既存グループの代表ピア及び新たなピアの三者間のネットワーク上の距離の比較に基づいて、新たなピアをグループ分けしたグループ情報32を作成する。
データ発信部34は、ピア10−0自身がコラボレーションのデータを発信する際に、グループ情報作成部30で作成されたグループ情報32に基づいて、ピア10−0自身から見たグループごとの宛先情報とピア10−0自身を登録した経路情報を作成し、各グループの代表ピアに対し、宛先情報、経路情報及びデータを配信情報として発信する。データ中継部35は、他のピアから受信した配信情報を中継する。
即ち、他のピアから配信情報を受信した際に、その宛先情報にピア10−0自身が含まれている場合は、受信データを取り込んで宛先情報からピア10−0自身を削除した後に、グループ情報32に基づいてグループごとの宛先情報と自分を登録した配信情報を生成し、各グループの代表ピアに、宛先情報、経路情報及びデータを配信情報として発信する。
データ伝送部26には符号化送信部36と受信復号化部38が設けられる。データ伝送部26は、データ配信部24より出力される配信情報を復号化して、パケット伝送部28よりUDP通信によりネットワーク40を介して宛先となるグループの代表ピアに送信する。受信復号化部38は、パケット伝送部28で受信した他のピアからの受信パケットから配信情報を復元する復号化を行い、復元した配信情報をデータ配信部24に出力する。
ここで、パケット伝送部28としてUDP通信を使用しているのは、TCP通信がパケットごとにACK受信応答を必要とするのに対し、UDP通信ではパケットごとの受信応答を必要としない分、高速伝送ができるためである。一方、UDP通信にあっては受信応答がパケットごとに得られないため、伝送中におけるパケットの消失や入れ換わりによるエラーが発生することから、これを修正するため本発明にあっては、配信情報をデータ修正可能なように符号化して送信し、受信側でこれを復号化し、パケットの消失や入れ換えがあってもエラーを起こさないようにしている。
図2における本発明のピアは、例えば図3のようなコンピュータのハードウェア資源により実現される。図3のコンピュータにおいて、CPU200のバス201にはRAM202、ハードディスクドコントローラ(ソフト)204、フロッピィディスクドライバ(ソフト)210、CD−ROMドライバ(ソフト)214、マウスコントローラ218、キーボードコントローラ222、ディスプレイコントローラ226、通信用ボード230が接続される。
ハードディスクコントローラ204はハードディスクドライブ206を接続し、本発明によるコラボレーション用のピアツーピア型のデータ配信システムを実行するアプリケーションプログラムをローディングしており、コンピュータの起動時にハードディスクドライブ206から必要なプログラムを呼び出して、RAM202上に展開し、CPU200により実行する。
フロッピィディスクドライバ210にはフロッピィディスクドライブ(ハード)212が接続され、フロッピィディスク(R)に対する読み書きができる。CD−ROMドライバ214に対しては、CDドライブ(ハード)216が接続され、CDに記憶されたデータやプログラムを読み込むことができる。マウスコントローラ218はマウス220の入力操作をCPU200に伝える。
キーボードコントローラ222はキーボード224の入力操作をCPU200に伝える。ディスプレイコントローラ226は表示部228に対して表示を行う。通信ボード230は無線を含む通信回線232を使用し、インターネット等のネットワークを介して他のピアとの間で通信を行う。
次に、本発明におけるピアのグループ分けによるデータ配信方法を説明する。図4(A)は従来の1:nによるデータ配信方法であり、図4(B)に本発明のグループ分けによるデータ配信方法を示している。図4(A)の従来の1:nのデータ配信方法は、ピアP0が他のピアP1〜P10の全てに対し情報を発信する場合、ピアP0から他の全てのピアP1〜P10のそれぞれに対し配信ルートを形成して情報を配信している。
これに対し図4(B)の本発明のデータ配信方法にあっては、ピアP0から情報を発信する場合、宛先となるピアP1〜P10をいくつかのグループに分け、各グループの代表ピアに対してのみ情報を配信する配信ルートを形成する。
まず情報を発信するピアP0から他のピアP1〜P10を見て作成されたグループ情報から、ピアP1〜P3でグループG1が形成され、ピアP4〜P7でグループG2が形成され、更にピアP8〜P10でグループG3が形成されていたとする。そして、グループG1は代表ピアP1を持ち、グループG2は代表ピアP4を持ち、グループG3は代表ピアP8を持っていたとする。
この場合、ピアP0はグループG1,G2,G3の代表ピアP1,P4,P8に対し配信ルートを形成して情報を発信する。このため図4(A)の従来のデータ配信方法にあって、発信元のピアP0は1:10通信であったものが、図4(B)の本発明のデータ配信方法にあっては1:3通信となり、発信ピアP0から効率良く情報を発信することができる。
この場合、ピアP0から発信した情報を受けた代表ピアP1,P4,P8は、それぞれが独立に自分自身から他のピアを見てグループ分けしたグループ情報を持ち、このグループ情報に従ってグループの代表ピアに受信した情報を転送する中継を行うようになるが、結果的には図示のように、代表ピアP1,P4,P8から、ピアP0から見たグループ内の代表ピア以外のピアに対し情報が配信されることになる。
図5は、図4(B)のピアP0が保有しているグループ情報32の説明図である。このグループ情報32は、グループ名、代表ピア及び所属ピアで構成される。例えばグループG1の代表ピアはピアP1であり、このグループ内にはピアP2,P3が所属している。ピアP0がピアP1〜P10の全てに対し情報を発信する場合には、図5のグループ情報32を参照し、宛先となるピアをグループG1〜G3ごとに分けて宛先情報とし、更にグループの代表ピアを選んで、これを配信先として情報の発信を行うことになる。
図6は、ピアP0〜P5を例にとって、ピアP0から情報を残りのピアP1〜P5に発信したときのグループ情報に基づく配信ルートの決定方法の説明図である。図6(A)は、ピアP0からピアP1〜P5を宛先としてデータを発信した場合である。このときピアP0から見たグループ情報はグループG00のみであり、代表ピアはピアP1であったとすると、ピアP0はグループG00の代表ピアP1に対し宛先をピアP1〜P5としたデータを発信する。
図6(B)は、ピアP1がピアP0からのデータを受信し、他のピアに発信する場合である。ここでピアP1から見たグループ情報は、ピアP0を含むグループG10、ピアP2を含むグループG11、ピアP3〜P5を含むグループG12であり、グループG10,G11,G12の代表ピアは、ピアP0,P2,P3であったとする。
このためピアP1は、グループG11の代表ピアP2とグループG12の代表ピアP3にデータを発信する。このとき代表ピアP2に対する宛先は代表ピアP2のみとなる。一方、代表ピアP3に対する宛先は、ピアP3〜P5の3つを含む。更にグループG10のピアP0は宛先にないことから、データは発信しない。
図6(C)は、ピアP3から見たグループ情報であり、ピアP0〜P2を含むグループG31と、ピアP3〜P4を含むグループG30となっている。このためデータを受信したピアP3は、これ以上転送するグループがないことから、グループG30内のピアP4,P5に対しデータを配信する。この図7(A)(B)(C)の3段階の代表ピアを経由する配信ルートの形成により、ピアP0が発信したデータを他のピアP1〜P5に効率よく配信することができる。
次に、図2のグループ情報作成部30によるグループ分けによるグループ情報の作成方法を説明する。本発明が対象とするピアツーピア型コミュニケーションシステムにあっては、新しく参加したピアは既存のピアに対し、同時に接続するのではなく、必ず時間差を持って接続される。図7は、新たなピアが接続された際の伝送経路を決定するためのグループ分けの方法を示している。
まずステップS1で、注目しているピアP0に対し既存のピアP1が接続されており、これによって既存のピアP1についてピアP0から見てグループG1が形成され、この場合、伝送経路は一通りのみである。次に、ステップS2のように新しいピアP2が接続されたとすると、注目ピアP0、既存ピアP1及び新しいピアP2の三者の間のネットワーク上の距離L01,L02,L12を求め、ステップS3でこれを比較する。
ここでネットワーク上の距離とは「PING」に対するレスポンス時間や回線速度のことであり、「距離が近い」とは高速にデータ送信できることを意味する。またIP通信のブロードキャストが届く範囲を「距離が近い」と判断してもよい。なお「PING」はTCP/IPネットワークの通信プロトコルで利用できるユーティリティプログラムであり、ICMP ECOHOパケットを発信し、その応答を待つことで、パケット往復に要した時間を表示することができる。
ステップS3における比較の結果、
L02>L01>L12
であれば、ステップS4のように新しいピアP2は既存のピアP1のグループG1に属し、そのグループの代表ピアはピアP1を維持する。
一方、
L01>L02>L12
ならば、ステップS5のように新しいピアP2は既存のピアP1のグループG1に属し、この場合、グループの代表ピアはピアP1からピアP2に交替する。
更にステップS4,S5以外の場合、即ち
L12>L01 and L02>L12
には、ステップS6のように新しいピアP2はピアP1とは別の新しいグループG2を形成し、その代表ピアとなる。
図8、図9及び図10は、ステップS1のように、注目ピアP0から見て代表ピアP1のグループG1と代表ピアP2のグループG2が既に作成され、この状態で新しいピアP3が出現した場合のグループ分けによる伝送経路の決定方法の説明図である。
ステップS1で新しいピアP3が出現した場合、グループG1,G2の代表ピアP1,P2のうち、注目ピアP0との距離L01と距離L02を比較し、注目ピアP0に近い方の代表ピア、この場合には代表ピアP1を選択する。そして、注目ピアP0、既存の代表ピアP1及び新しいピアP3との三者の間のネットワーク上の距離L01,L03,L13をステップS2で比較する。
この距離の比較により
L03>L01>L13
であれば、ステップS3のように新しいピアP3は既存のピアP1のグループG1に属し、代表ピアはピアP1を維持する。
これに対し
L01>L03>L13
の場合には、ステップS4のように新しいピアP3は既存のピアP1と同じグループG1に属するが、代表ピアはピアP1から新しいピアP3に交替する。更に、ステップS3,S4以外のとき、即ち
L13>L03 and L13>L01
のときには図9に進み、新しいピアP3に対し次に近いグループG2の代表ピアP2と間でのグループ分けを行う。
この場合にはステップS6のように、新しいピアP3、注目ピアP0及び代表ピアP2との間で三者の間の距離L02,L03,L23を求め、ステップS7で比較する。このステップS7における距離の比較により
L03>L02>L23
であれば、図10のステップS8のように新しいピアP3は既存のピアP2のグループG2に属し、代表ピアはピアP2を維持する。
これに対し
L02>L03>L23
の場合には、ステップS9のように新しいピアP3は既存のピアP2と同じグループG2に属するが、代表ピアはピアP2から新しいピアP3に交替する。更にステップS8,S9以外の場合、即ち
L23>L03 and L23>L02
の場合には、ステップS10のように新しいピアP3は別の新しいグループG3を形成し、その代表ピアとなる。
図11及び図12は、図2のグループ情報作成部30によるグループ作成処理のフローチャートである。まずステップS1で自分自身となる注目ピアP0に対し最初のピアP1の接続があると、新グループを生成して代表ピアPiに設定する。続いてステップS2で新ピアPnの接続があると、ステップS3で自分自身となる注目ピアP0に対し最小距離となるグループの代表ピアPiを選択し、ステップS4で自分自身の注目ピアP0、代表ピアPi、及び新ピアPnとの間の距離L0i、L0n、Linを比較する。
そしてステップS5の距離の条件が成立すると、ステップS6で、新ピアPnは代表ピアPiのグループに属し、代表ピアはピアPiを維持する。ステップS5の距離条件が成立しなければ、ステップS7の距離条件をチェックし、この距離条件が成立すると、ステップS8で新ピアPnは代表ピアPiのグループに属し、代表ピアは新ピアPnに変更する。
一方、ステップS7の距離の条件が成立しない場合には、図12のステップS9に進んで次に近いグループの代表ピアが存在するか否かチェックし、存在する場合にはステップS10で代表ピアに選択してステップS4からの処理を繰り返す。存在しない場合にはステップS11に進み、新ピアPnに新グループを生成し、代表ピアに設定し、再びステップS2に戻り、次の新ピアの接続を待つ。
図13は、図11及び図12のフローチャートに従った動的なグループ作成で生ずる不具合に対し強制的にグループ分けの再計算を行わせるための説明図である。図11及び図12のグループ作成処理のように新たなピアが出現するごとにグループ作成処理を行って代表ピアを決めることで伝送経路を見つける方法は、高速に伝送経路を見つけることのできる利点を有するものの、ピアの接続順によっては必ずしも最適な経路とならない場合がある。
例えば図13(A)のように、自分自身となる注目ピアP0から見て代表ピアP1のグループG1と代表ピアP2のグループG2が作成された状態で新しいピアP3が出現した場合、この新しいピアP3は代表ピアP1,P2のうち自分自身である注目ピアP0に対し距離の短い代表ピアP1を既存ピアとしてグループ分けが開始されるため、グループG1に入ってしまう。
しかしながら、新しいピアP3は距離的にはグループG2に近く、グループG2に属した方が自然である。そこで図13(B)のように、一度グループ分けが行われた後にP3を最適な経路を取ることのできるグループG1に移動させる処理が必要となる。
そこで本発明にあっては、定期的に任意のピアに対し現在所属しているグループから離脱させて、もう一度、図11及び図12のフローチャートに従ったグループ分けの再処理を行わせる方法が必要となる。このグループ分けの再処理における再処理の対象となるピアの選択は、例えば乱数を使って選択する方法や、自分自身が移動したことを検出したピアが全ピアに対し再処理を求める方法などが利用できる。
更に図11及び図12のフローチャートは、ピアがシステムに参加して接続された場合のグループ分けであったが、ピアはシステムから脱出して切断することもあり得る。このようにシステムに対し切断されたピアについては、グループ代表でなければ単にグループ情報から削除すればよい。
これに対し切断したピアがグループ代表であった場合には、グループ代表が消えてしまうことから、そのグループに属している全てのピアをグループから開放し、開放したピアを図11及び図12のグループ作成処理における新たに接続してきたピアとして、どのグループに属するかのグループ作成処理を行う。
また切断ピアが代表ピアであった場合の対応として、削除する代表ピアに対しネットワーク上の距離が近いグループ内のピアを新しい代表ピアに格上げするような方法を取ってもよい。
次に、図2のデータ発信部34及びデータ中継部35で使用する配信情報と、それに基づくデータ配信を説明する。図14は、本発明による配信情報を用いたデータ配信方法の説明図である。図14においては、ピアP0が情報の発信源であり、ピアP1〜P8の全てを宛先として情報を発信した場合である。
このとき発信元となるピアP0の配信情報は図15の配信情報40−0のようになる。この情報40−0は、宛先情報44、経路情報46及びデータ48で構成されている。宛先情報44には宛先ピアP1〜P8が格納される。経路情報46には、発信元であるピアP0が格納される。
このピアP0からの配信情報40−0が、図14のようにピアP1,P2,P3にデータ配信が行われたとすると、ピアP3は配信情報42−1を受信し、またピアP3がグループG1,G2の代表ピアP4,P7に配信するための配信情報42−2,42−3を作成する。
即ち、ピアP3が受信する配信情報42−1は、宛先情報44がP3〜P8となっており、経路情報46は既に経由したピアP0〜P2となっている。またピアP3からグループG1の代表ピアP4に対する配信情報42−2は、ピアP3の持つグループ情報に基づき、受信した宛先情報42−1の中からピアP3自身を削除した宛先情報を対象に、ピアP4〜P6を取り出して設定する。
また経路情報46は、それまで経由したP1〜P2に新たにピアP3を加えている。一方、グループG2の代表ピアP7に対する配信情報42−3は、グループG2のピアP7,P8をセットすると共に、経路情報46には、それまで経由したピアP0〜P2に新たにピアP3を加えている。
次に本発明の配信情報に含まれている経路情報の必要性を説明する。図16は配信情報に経路情報を持たない場合の問題点を表わしている。図16において、中央のネットワーク領域45のように、ピアP1〜P5が存在し、ピアP1〜P4が配信ルート45−1〜45−4に示すようなグループ分けを行っていたとする。
即ち、配信ルート45−1によりピアP1はピアP3〜P5でグループG5を形成し、代表ピアP3にデータを配信する。また配信ルート45−2によりピアP2はピアP3,P4,P5でグループG2を形成し、代表ピアP3にデータを配信する。
また配信ルート45−3によりピアP3はピアP1,P4,P5でグループG3を形成し、代表ピアP4にデータを配信する。更に配信ルート45−4によりピアP4はピアP1,P2,P5でグループG4を形成し、代表ピアP1にデータを配信する。このようなピアP1〜P4のそれぞれにおける転送ルート45−1〜45−4の形成により、もし経路情報を持っていない場合には、ピアP1,P2,P3,P4の間で情報を配信し合い、永久にピアP5に届かないことも考えられる。この場合、ピアP5に情報が届かないことも問題であるが、更にピアP1,P2,P3,P4の間で永久にデータ配信を繰り返してしまうこととなり、ピアにかかる負荷が非常に大きくなってしまう。このような図15における問題は、配信情報の中に経路情報を持たせることで解消できる。
即ち、配信ルート45−1〜45−4の順番でピアP1,P2,P3,P4とデータ配信が行われた場合、転送ルート45−4の段階で経路情報としてピアP1,P2,P3,P4が作られており、この状態で残っているのは宛先情報のピアP5のみであることから、最後に残った宛先P5へのデータ配信が可能となる。
図17は、図15と同じピアP0〜P8についての異なる宛先情報によるデータ配信方法である。この例では、ピアP3が受信した配信情報42−11の宛先情報はピアP3,P5,P6,P8であり、ピアP4,P7が抜けており、経路情報を見るとピアP7は既に配信が済んでいることが分かる。
このため、ピアP3から見たグループG2の代表ピアは代表ピアP7であるが、代表ピアP7へのデータ配信は既に済んでいることが経路情報46から分かるため、配信情報42−31として宛先情報44をピアP8とし、経路情報にピアP3を含めてピアP8に直接、情報を配信する。また代表ピアP4へのデータ配信は配信情報42−21として宛先情報44をピアP5,P6とし、経路情報46にピアP3を含めて代表ピアP4を経由してピアP5,P6に情報を配信する。
図18は、図2のデータ発信部34によるデータ発信処理のフローチャートである。このデータ発信処理は、ステップS1で宛先ピアを指定し、ステップS2で、自分のグループ情報に基づき、指定された宛先ピアをグループ分けしてグループごとの宛先情報を生成する。続いてステップS3で経路情報に自分自身を登録した後、ステップS4でグループの代表ピアにグループごとに作成した宛先情報、経路情報及びデータを加えた配信情報を配信する。
図19は、図2のデータ中継部35によるデータ中継処理のフローチャートである。このデータ中継処理は、ステップS1で他のピアから宛先情報、経路情報及びデータを受信すると、ステップS2で宛先情報に自分が存在するか否かチェックし、存在すれば、ステップS3で受信データを取り込んで宛先情報から自分を削除する。
ステップS2で宛先情報に自分が存在しなければ、ステップS3の受信データの取込みは行わない。次にステップS4で経路情報に自分自身を登録した後、ステップS5で自分の保有するグループ情報に基づき宛先ピアをグループ分けし、グループごとの宛先情報を作成する。そして、ステップS6でグループの代表ピアに宛先情報、経路情報及びデータを配信する。もちろん、ステップS6でグループの代表ピアが既に配信済みの場合には、そのグループの宛先となるピアに直接配信することになる。
(代理ピア)
次に、本発明が対象とするピアツーピア型コミュニケーションシステムで使用する代理ピアを説明する。図20は、代理ピアが存在しない場合のコラボレーションにおけるデータ共有方法である。まず図20(A)のように、ピア10−1とピア10−2がテキストファイルなどから成る共有データ52−1,52−2をそれぞれ保有していたとする。
この状態で、ピア10−1においてカーソルを共有データ52−1の「D」に合わせ、図20(B)のようにキー入力54として「バックスペースキー(以下「BS」という)」を操作した後に、「C」のキーを操作し、共有データ52−1のカーソルの前に「C」を挿入したとする。
このようなピア10−1における共有データ52−1の更新操作が行われると、ピア10−1から更新データ55がピア10−2に送られ、更新データ55はキー入力54として行ったBSキーとCキーのキー制御データであり、これを受けてピア10−2において共有データ52−2のカーソルの前に「C」が挿入される操作が行われ、ピア10−1,10−2の共有データ52−1,52−2の一様性が保証される。
しかしながら、図20(C)のように、ピア10−1でBSキーに続いてCキーを操作するキー入力54が行われた際に、ピア10−2が電源断により停止していた場合、ピア10−1における共有データ52−1の更新が行われても、停止しているピア10−2の共有データ52−2は更新されない。
そこで図20(D)のように、ピア10−2がその後起動してコラボレーションに参加した際に、ピア10−1が保有している共有データ52−1から共有データ52−1を全て貰う共有データ転送57を受けて共有データ52−2を上書きすることで、一様性を保持する。
もちろん、図20(D)でピア10−2が起動した際にピア10−1からキー入力54の操作内容を示すキー制御データである更新データを受けてもよいが、ピアの数が多く且つ各ピアが接続や切断を繰り返すような場合、全ピアがどこまで更新データを受け取っているかを判断して処理することはネットワーク上の木距離が近い場合以外は現実的ではない。
ここで図19(D)のように、電源断により停止したピア10−2が起動した際に、ピア10−1からそのとき保有している共有データ52−1を受け取って自分の共有データ52−2に上書きする方法は、次の問題がある。
(1)コラボレーションのデータが大きくなってきた場合に、データを受信するのに時間 がかかる。
(2)ピア10−2がコラボレーションに参加するとき、ピア10−1がコラボレーショ ンに参加していなければならない。
そこで本発明にあっては、図1,図2のように、ピアツーピア型コミュニケーションシステムの中に代理ピア12を設け、特定のピアが電源断により停止している間、代理ピア12が他のピアからの転送情報を受信して蓄積し、電源断により停止したピアが電源投入により参加してきた際に、代理ピア12から蓄積したデータを送って共有データを更新させる。
図21は、本発明における代理ピアの処理方法の説明図である。図21(A)において、ピア10−1,ピア10−2に対し代理ピア12が設けられており、ピア10−2が電源断となった状態で、ピア10−1においてBSキーに続いてCキーを押すキー入力54が行われたとする。
この場合、ピア10−2に対するピア10−1からの更新データ55は代理ピア12に配信され、そのファイル56に更新データ55がバッファリングされる。その後、図21(B)のように、ピア10−2に電源が入れられて起動し、コラボレーションに参加してきた場合には、代理ピア12がファイル56にバッファリングしているピア10−1からの更新データ55を、起動したピア10−2に送り、更新データ55により共有データ52−2を更新する。
これによって、ピア10−1の共有データ52−1と電源断により一時停止したピア10−2の共有データ52−2の一様性を保証することができる。
図22は、本発明で使用する代理ピア12の機能構成のブロック図である。代理ピア12は、代理処理部50が設けられている点が図2のピア10−0と相違しており、代理処理部50には代理依頼元情報51が設けられている。代理依頼元情報51には代理を行うピアの登録が行われている。
代理を行うピアは基本的には1つのピアであるが、後の説明で明らかにするように複数のピアを代理依頼元として登録することもできる。それ以外のデータ配信部24、データ伝送部26及びパケット伝送部28の構成及び機能は、図2の実施形態と同じである。
図23は、図22の代理ピア12の代理処理のフローチャートである。まずステップS1で代理依頼元ピアを登録した後、ステップS2で代理依頼元ピアが動作していないか否かチェックしている。代理依頼元ピアが電源断などにより動作していないことを認識すると、ステップS3で他のピアからの配信情報を受信した際に、受信した宛先情報の中に代理依頼元が存在するか否かステップS4でチェックし、存在する場合にはステップS5で受信データを蓄積する。
続いてステップS6で宛先情報から代理依頼元ピアを削除した後、ステップS7で宛先情報に宛先ピアが残っていれば、ステップS8で代理依頼元のグループ情報に従った配信処理を行う。宛先情報に宛先ピアがなければ、ステップS8のグループ情報に従った配信処理即ち他のグループの代表ピアに対する情報配信は行わない。
続いてステップS9で代理依頼元ピアが動作を開始したか否かチェックし、動作を開始していなければ、ステップS3からの処理を繰り返している。ステップS9で代理依頼元ピアが動作を開始したことを判別すると、ステップS10に進み、蓄積しているデータを代理依頼元ピアに転送して書き込む。
図24は、本発明における代理ピアによる処理方法の他の実施形態であり、この実施形態にあっては、代理ピアで共有データを保持し、この共有データを更新データにより更新し、代理依頼元に送るようにしたことを特徴とする。図24(A)は、ピア10−1,10−2に対し代理ピア12が設けられ、ピア10−2が電源断で停止している。
この場合、代理ピア12はピア10−1の共有データ52−1と同じ共有データ56を持っており、ピア10−1でキー入力などの操作が行われると、これに伴う更新データ55が代理ピア12に配信され、更新データ55に基づいて共有データ52−3の更新を行っている。
その後、図24(B)のように、ピア10−2が起動してコラボレーションに参加してくると、代理ピア12が自分の保有している共有データ56を、起動したピア10−2に送って、それまでの共有データ52−2を上書きすることで、共有データの一様性を確保する。このときピア10−1が電源断により停止しているが、このため、それ以降についてはピア10−2における更新データを代理ピア12が受けて共有データ56を更新し、ピア10−1が起動したときに、同様にして共有データ56を送って上書きすることになる。
この図24における代理ピア12が共有データを保有して電源断となった後に起動したピアに送って上書きするデータ共有方法は、ピア10−1,10−2に対し代理ピア12がネットワーク上の距離から見て近い位置にある場合に適している。逆にネットワーク上の距離が遠い場合には、図21に示したようなキー入力の内容を表わす更新データを代理ピアでバッファリングして、起動したピアに転送するデータ共有方法が適している。
図25は、本発明の代理ピアによるデータ共有方法の他の実施形態であり、この実施形態にあっては1台の代理ピアで複数のピアの代理を行うようにしたことを特徴とする。図25(A)にあっては、代理ピア12はピア10−1〜10−5を代理しており、このうちピア10−1のみが動作しており、ピア10−2〜10−5は電源断などにより停止している。
このため、ピア10−1における共有データの更新データ55が代理ピア12に送られ、バッファリングされている。図25(B)は、停止していたピア10−3が起動してコラボレーションに参加した状態であり、起動したピア10−3に対し代理ピア12がバッファリングしていた更新データ55を送信し、ピア10−3の共有データを更新する。
ここで本発明の代理ピアとしては、グループ化によるデータ配信方法における各グループの代理ピアを意図的に代理ピアとしてもよい。この理由は、一般的に代理ピアとして使用するパーソナルコンピュータは古くなったものを再利用して使っており、他にすべき作業がないことが多く、更に代理ピアはネットワーク環境の良好なところに設置される可能性が高いためである。
このため代理ピアを意図的にグループの代表ピアとすることにより、ピアツーピア型のデータ配信で負荷の集中が予想される代表ピアを代理ピアと兼ねることで、通常のピアにおける代表ピアとして選択されたことによる負担を軽減できる。代理ピアをグループの代表ピアにする方法としては、代理ピアを無条件でグループ代表にする方法、又は代理ピアのネットワーク上の距離にマイナスオフセットを付け、ネットワーク上の距離を測定する際にグループ代表として代理ピアが必然的に選ばれる方法などを取ることができる。
この代理ピアの距離にオフセットを付ける方法は、例えばネットワーク環境の劣悪な位置に代理ピアが設置されていた場合には、この代理ピアについてはプラスのオフセットを付けることで、逆に代理ピアに選ばれないようにすることもできる。
図26は、ピアツーピア型コミュニケーションシステムに代理ピアを設けても各ピアの共有データの一様性が保証できない問題を示している。図26(A)は、ピア10−1,10−2に対し代理ピア12が設けられ、ピア10−2が電源断で停止している。この状態でピア10−1にキー入力54−1としてバックスペースキーの操作が行われると、更新データ55−1が代理ピア12に送られ、ファイル56−1にバッファリングされる。
次に図26(B)のように、キー入力54−2としてCキーの操作が行われたタイミングで、代理ピア12が電源断などにより停止し、キー入力54−2に伴う更新データをファイル56−1にバッファリングできなかったとする。このような代理ピア12の停止は、ネットワークにおいてルータの故障などによる通信不能あるいは停電などにより生ずることがある。
このような代理ピア12が停止した後に、図26(C)のように代理ピア12及びピア10−2が起動した場合、代理ピア12のファイル56−1からバッファリングしている更新データ55−1のみ、即ち図26(A)のピア10−1におけるキー入力54−1に対応した更新データのみが、ピア10−2に送られて共有データ52−2を更新するが、図26(B)のキー入力54−2に伴う更新データが欠落しているため、ピア10−1の共有データ52−1とピア10−2の共有データ52−2は不一致となってしまう。このような代理ピアの通信不能や電源断による停止時の共有データの不一致を回避するため、本発明にあっては、図27及び図28のように複数の代理ピアを設ける。
図27(A)は、ピア10−1,10−2に対し2台の代理ピア12−1,12−2を設けている。この場合、ピア10−2は電源断により停止しており、ピア10−2に対するピア10−1からの更新データ55−1はピア12−1のファイル56−1にバッファリングされている。この状態で図27(B)のように代理ピア12−1が電源断により停止したとすると、キー入力54−2による更新データ55−2は代理ピア12−2に送られてファイル56−2にバッファリングされる。
その後、図28(C)のように代理ピア12−1,ピア10−2が電源投入により起動したとすると、代理ピア12−1からはキー入力54−1に対応した更新データ55−1がピア10−2に送られ、また代理ピア12−2からはキー入力54−2に対応した更新データ55−2がピア10−2に送られ、ピア10−2の共有データ52−2は正常に更新され、ピア10−1の共有データ52−1と一致させることができる。これ以外に本発明における代理ピアによるデータ共有方法としては、以下に列挙するような方法を取ることができる。
(1)図27及び図28の代理ピア12−1,12−2に送る更新データ55−1,55−2のそれぞれに更新時刻を付加することで、ピア10−2におけるデータのマージを行い易くする。
(2)複数の代理ピアを設けている場合に、全ての代理ピアに対し更新データを送る。
(3)複数の代理ピアのうちの一部が停止して、その後、起動した際に、各代理ピアの間で通信を行って、お互いに更新データのやり取りを行い、全ての代理ピアが同一の更新データを持つようにする。
(4)複数の代理ピアが更新データの代わりに共有データを持つようにする。
図29は、複数の代理ピアを設けることなく各ピア間の共有データの一貫性を維持するデータ共有方法の説明図である。図29(A)は、図26(C)と同様に、それ以前に代理ピア12が電源断となった後に起動した状態であり、代理ピア12に保持されている更新データ55−1をピア10−2に送って共有データ52−2を更新した状態である。
しかしながら、このとき代理ピア12は図26(B)のキー入力54−2の更新データを持っていないことから、ピア10−1の共有データ52−1とピア10−2の共有データ52−2は不一致となっている。そこで図29(B)のように、ピア10−1とピア10−2の間で共有データ52−1のチェックサム58−1とピア10−2の共有データ52−2のチェックサム58−2を比較するチェックサム比較処理60を行い、チェックサムの不一致を認識し、図29(C)のようにピア10−1から共有データ52−1をピア10−2に送って共有データ52−2に上書きする。
ここでチェックサム58−1,58−2自体のデータは通常、数バイト〜数十バイトであり、共有データ自体の比較に比べると各段に小さく、共有データの一致、不一致を判別するための負荷は十分に少ない。このチェックサムの比較による共有データの検証により、代理ピアを複数設けることなく確実に各ピアにおける共有データの一様性を保証することができる。
(高速データ伝送方法)
次に図2のピア10−0に設けたデータ伝送部26の符号化送信部36と受信復号化部38によるデータ高速通信の方法を説明する。図30は、通常のネットワーク通信(IP通信)の概略であり、ピア10−1からピア10−2にデータ転送を行っている。このデータ転送において、データは、通常1500バイト程度のパケット62という小さな単位に小分けされて送信される。
ところがネットワークの性質上、転送経路において、あるパケットが失われる消失64がおきたり、パケットの順番が変わる入換え66が起きることがありうる。ネットワーク通信(IP通信)にあっては、このようなパケットの消失や入換えを許容するUDP通信と、パケットに番号をつけパケットが届かなかった際には再送を行うTCP通信の2種類がある。データ転送などの高信頼性が要求される通信はTCP通信を行うのが一般的である。
しかしながら、TCP通信はデータの信頼性を確保しているため、ネットワーク上の距離が離れるとデータの往復時間であるRTT(Round Time Trip)が大きくなり、実効通信速度が小さくなるという問題がある。
図31(A)は、TCP通信であり、送信側からパケットを送信すると受信側はACKと呼ばれる受信確認信号を返す。送信側は受信確認信号ACKによりパケットが届いた事を確認すると、次のパケットを送信する。途中でパケットが消失した際には、受信確認信号ACKが返ってこないため一定期間に同じパケットを再送する。
このためTCP通信では、図31(B)のようにRTTが大きくなると無駄時間が発生し、一定の回線速度に対し実効速度が落ち込み、回線のもつ本来の速度が充分に生かしきれない。このような問題を解決するためにTCP時間のVegasやRenoと呼ばれループロトコルが検案されている。
そこで本発明にあっては、図32のようにUDP通信によるパケット転送を採用し、送信側でデータを符号化して送ることで受信側でエラー修正ができるようにしている。図32にあっては、送信側ピア10−1で元データ72を符号化送信部36により符号化して、伝送経路70にパケット62として転送する。受信側ピア10−2にあっては、受信復号化部38により伝送経路70でパケットの消失64や入換え66があってもエラー修正により復元データ74を得ることができる。
これによってUDP通信による高速通信を行い且つパケット消失や入換えに対し送信側で符号化して受信側で復号化する事でエラー訂正によりデータの信頼性を保障する。
図33は、本発明による高速かつ高信頼性のデータ通信方法の原理をm=4ビットデータの転送を例にとって示している。本発明のデータ伝送方法は、プール代数による連立方程式の解法をベースにしている。
いま転送する元データ72をmビットデータ(b0,b1,b2,b3)とすると、適当なmビットでn系列のデータ列Knmとして(Kn0,Kn1,Kn2,Kn3)を用いて連立方程式
の解p
n=p
0,p
1,p
2,p
3…p
n-1を求める。但しn=0,1,2・・・となるm以上の整数である。
そしてデータ列Knmと連立方程式の解pnの組をパケットKpとして連続送信する。即ち、n個のパケットKp=(K0p0,K1p1,K2p2…Knp3)を送信する。受信側にあっては(1)式に受信されたパケットKp=(K0p0,K1p1,K2p2…Knp3)から得られたmビットのデータ列Knm=(kn0,kn1,kn2,kn3)及び解pn=(p0,p1,p2,p3)を連立方程式に代入して解くことで、mビットの元データ(b0,b1,b2,b3)を復元する。
図31の例では、元データ72としてmビットの2進数データ0101を伝送する場合である。この時データ列Knとして
k0=1001
k1=0011
k2=1100
k3=0101
k4=1011
を定めている。
そして元データ72及びデータ列Knを(1)式の連立方程式に代入することで、符号化処理75を実行する。この符号化処理75は各項の論理席の加算により解pn=(p0,p1,p2,p3,p4)を求める。この連立方程式の解を求める符号化により伝送経路70に示すようにデータ列Knと符号化処理756で求めた解pnの組を、それぞれパケットK0p0,K1p1,K2p2,K3p3,K4p4し、5つのパケットを受信側ピア10−2に転送する。
この伝送経路70において例えば1番目と2番目のパケットに入換え66が発生し、また4番目のパケットが消失64となったとする。受信側ピア10−2にあっては、受信パケットK0p0,K1p1,K2p2,K3p3,K4p4のデータ列Knのうちのビット1に対応するデータビットを有効とし、ビット0に対応するデータビットを消去した連立方程式を生成して解く復号化処理76を行う。
そして、この復号化処理76で作り出された4つの連立方程式を解くことで、4ビットデータ(b0,b1,b2,b3)=(0101)とする復元データ74を得ることができる。ここで送信側ピア10−1における符号化処理75となる(1)式の連立方程式の計算はプール代数において各ビットbnとデータ列Knの論理積(and)を行った後、1の数を数えること、すなわちパリティビットを見るだけで済むため、コンピュータにより非常に早く解くことができる。
また受信側ピア10−2における連立方程式を解く処理も、排他的論理和(Xor)を用いることで高速に解くことができる。
この本発明における符号化処理75及び復号化処理76はコンピュータのプログラム処理以外にも電子回路におけるハードウェアで容易に実現できる。ここまでの例は、説明をわかりやすくするため4ビットデータという少ないデータを例にとるものであったが、一般にコンピュータとして信頼性の高いビット数としては8ビット、16ビット、32ビット、64ビットを用いており、ここではこれをmビットとする。
また転送パケットにおいてmビットのデータ列Knに対し1ビットの連立方程式の解pnを用いたが適当な整数jを使うことができる。この場合、転送できるデータ量は(jm)ビットとなる。この場合、(1)式は次式のように変形される。
図34は、本発明のデータ伝送方法で送られるデータパケットの形式である。すなわち1つのデータパケットはデータ列K
nとこれを連立方程式に代入することにより求めた解P
nの組み合わせを持つ。
図35は、図2のデータ伝送部26に設けた符号化送信部36による符号化処理のフローチャートである。この符号化送信は、終了条件を満たすまで、Kを生成し、そのKを元に符合化データを作り、相手に送付するものである。
図36は、符合化処理の概要である。まず元データを8ビット(1バイト)毎に区切り、生成したデータ列Kと論理積を取る。取った論理積の1の数が偶数なら0、奇数なら1を符合化列Pに順に並べ、それにKを添えたものが送信データ(送信パケット)Kpとなる。
そこで図35のフローチャートの符号化処理を、16バイトのデータ
(00 01 02 03 04 05 06 07
08 09 0a 0b 0c 0d 0e 0f)
を符合化する場合を例にとって説明する。
(1)まず処理開始直後のステップS1〜S3は初期化作業である。ここで説明のためデータ列Kが55(2進数で01010101)だったとする。
(2)ステップS4も初期化作業の一部である。これはステップS7において1の数が偶数の場合、0を代入しなくても済むようにここで行っているだけである。
(3)ステップS5はデータ量のチェックである。データ量は16バイトであり、現在iもlも0であるためステップS6に行く。
(4)ステップS6はデータ列Kとデータとの論理積を取り、変数aに代入している。現在、8i+1=0であり、D[0](データの0番目のデータ)は00なので、a=55 and D[00]=00になる。
(5)ステップS7はaとの論理積の1の数を数える。現在aとの論理積は00で1の数は0、すなわち偶数なのでステップS9に進む。
(6)ステップS9、S10はlに1を加算して8未満か調べている。これにより、lは1になり、8未満なのでステップS5に戻る。
(7)続くステップS6ではa=K and D[1]=55 and 01=01になる。これは2進数で00000001で1の数は奇数なのでステップS8に進む。
(8)ステップS8における「>>」はC言語の表記で、右シフト命令である。具体的には、16進数で80(2進数で10000000)を右シフトする。現在lは1なので、1回右シフトして、2進数で01000000(16進数で40)になる。それをp[i]に加算するが、現在ステップS1によりiは0で、ステップS4によりp[0]も0なので、p[0]=40になる。
(9)このようなステップS5〜S10のループを繰り返し、l=7になってステップS9まで来ているとする(現在p[0]は2進数で01011010、16進数で5aになっている)。ステップS9ではlが8になるためステップS11に進み、iが1になり、ステップS3に進む。
(10)ステップS3、S4でlが0、p[1]も0になる。
(11)現在、i=1、l=0であるため、ステップS5のデータ量のチェックもパスし、ステップS6でa=K and D〔8]=55 and D[8]=00となる。
(12)1の数は偶数なのでステップS8を通らず、p[1]=00のままになる。
(13)同様にステップS5〜S10のループを繰り返すと、結局p[1]=5aになる。
(14)この段階まで来ると、ステップS5のデータ量のチェックに引っかかり、前記(1)よりK=55、前記(9)よりp[0]=5a、前記(13)よりp[1]=5aなので、ステップS12よりパケット「55 5a 5a」を送付する。
(15)その後もステップS13で終了条件に満たされなければ、ステップS1で初期化し、新しいデータ列Kを生成し、そのデータ列Kを使って符合化を行う。
図37は図2の受信復号化部38による復号化処理の説明図である。図37において復号化処理は、受信パケットを受信しながらKの部分に対する上三角化処理78−1と単位行列化処理78−2を実行する。単位行列化処理78−2は、上三角化処理した行列配置におけるKの部分について対角線方向にビット1が並び、それ以外は全て0とする処理であるが、受信パケットの受信に伴う単位行列化処理78−2にあってはパケット受信順となる方向の処理となるため、単位行列となるビット位置の配列に対し、左下幅を全て0とする単位行列化を実行する。
この単位行列化処理78−2が済むと、逆方向に単位行列化80を行う。すなわち行列配置のデータ列Kの部分について右斜め上半分を全て0とするような逆方向の単位行列化処理を行う。ここで単位行列化処理78−2及び逆方向の単位行列化処理80は各位置のデータ列K0〜k3の各々について注目行におけるビット位置となる単位行列化位置に対し、それよりも前のビットが0となるように下側に位置する列との交換に伴う排他論理和計算を行う。このデータ列Kの部分における交換や排他論理和計算に伴い、これに続く解Pの部分についても同様に交換や排他論理和の計算が行われる。
このようにして単位行列化が完了するとデータ抽出処理82を行う。このデータ抽出処理82は単位行列化によりPの部分にすでに復元されたデータビットが存在することから、単純にこれを解けばデータD「0」,D「1」として切出す抽出処理となる。
図38、図39、図40は、本発明の受信復号化処理のフローチャートである。本発明の復号は、図38でパケットを受信しつつデータ列Kの上三角行列を得る処理、図39のXの単位行列を得る処理、図40の復号データを得る処理の三つに分けられる。
図41は、パケットKpの受信側で得られる受信データR[n]のデータ構造であり、現在4パケット分の受信データR[0]〜R[3]を受信している。ここで、xは1でも0でも構わないことを示している。このようパケットKpが入る受信データR[n]を8つ用意する。
図38のフローチャートの処理にあっては、パケットを受信しながら、各受信データのKの部分が、できるだけ上三角行列となるように、即ち図41のように、R[0]のKは7ビット目が1、R[1]のKは7ビット目が0で6ビット目が1、R[2]のKは7、6ビット目が0で5ビット目が0となるように処理する。
この処理の概要を図42に示す。図42は、0〜3番目のパケットによる受信データR[0]〜R[3]が受信された後に、新たに5番目のパケットによる受信データR[5]が受信された状態である。
まず図42(A)のように、過去に受信された受信データR[0]〜R[3]の中で1であるべきビットが0で、且つ新たな受信データR[4]の該当ビットが1の時は、両者を入れ換える。即ち、過去に受信された受信データR[0]〜R[3]の中で受信データR[1]は1であるべき6ビット目が0であり、且つ新たな受信データR[4]の6ビット目が1の時は、両者を入れ換える。
また図42(B)のように、新たな受信データR[4]のうち0であるべきビット、即ち5番目のパケットであることから7〜4ビット目が1であった場合、そこが1であるパケット、例えば7ビット目が1である受信データR[0]との排他的論理和(Xor)を取り、受信データR‘[4]のように1を消す。このような処理により最終的に図43のようなKが上三角行列となったデータ列を生成する。そこで図38のフローチャートにおける処理を説明すると次のようになる。
(1)処理開始直後、既に受信したデータ数を保持してある変数iをステップS1で初期化した後、受信パケットKpを受信する。ここでは、55 5a 5aを受信したとする。
(2)ステップS3でlを0にした後、ステップS4に進む。現在、lもl=0なので、条件が満たされず、ステップS11に進む。
(3)ステップS11,ステップS12と進むことで、受信データR[0]に受信パケットが代入され、iがi=1になる。ステップS13ではiは8以下なのでステップS2に戻る。現在のデータは図44のようになっている。
(4)続いてステップS2にてaa 33 ccを受信したとする。ステップS4にてl=0はi=1より小さいのでステップS5に進む。
(5)ステップS5にてaは16進数で80(2進数で10000000)である。一方、Kは16進数でaa、2進数で10101010なので、ステップS6による計算(a and K)は10000000となり0ではない。そこでステップS7に進む。
(6)現段階で受信データR[0]は55 5a 5aであり、受信データR[0]のうちKの要素R[0].Kは55であるため、ステップS7の計算(a and R[1].K)は0になる。これによりステップS8に進み、受信データR[0]と新たな受信データR[1]は入れ換えを行う。
(7)ステップS10でlがl=1になり、ステップS4で条件を満たさなくなり、ステップS11、S13と進み、現在のデータは図45のようになる。
(8)続いてステップS2にて89 55 aaを受信したとする。ステップS4の条件はパスするためステップS5に行く。
(9)現段階ではl=0なのでステップS5におけるaは80になる。
(10)受信パケットのKは89なのでステップS7に進む。現在lは0でR[0]はaaなのでステップS9に進む。
(11)ステップS9の演算では、現在、受信パケットKpは89 55 aa、受信データR[0]はaa 33 ccなので、新しい受信パケットKpは7ビット目が消去された23 66 66になる。
(12)続いてステップS10、ステップS4と進み、aは40になる。Kは現在23のためステップS6の演算結果は0になり、ステップS10,S4,S11,S13と進み図46のようなデータ構造になる。
(13)このようなループを繰り返し、現在データが図47のようになっており、S2において、新しいパケット56 3c 3cが届いたとする。なお、現在iは7になっている。
(14)ステップS3〜S10のループを繰り返し、ステップS12に来た段階ではKpは00 00 00になり、図48のようなデータ構造のままステップS14に進む。
(15)ステップS14以降では、Kが上三角行列かどうかチェックしている。即ち、ステップS16でaを2進数で10000000から00000001まで1つずつシフトしながらループして、ステップS17で該当するビットが1かどうかチェックしている。ここで該当するビットより左のビットは、全て0であることが、前処理で保証されている。現在の例ではR[7]の該当する0ビット目が1でないので、ステップS2に戻る。
(16)このようにしてKが完全な上三角行列になると、図38のフローチャートに進むことができる。この際のデータは図49のようになる。
図39のフローチャートでは、図38で得られた上三角行列を、単位行列に変換する単位行列化を行う。この単位行列化は、ある要素について本来0であるビットが1だった場合、そこが1であるべき他の要素との排他的論理和を取り、1を消去するものである。例えば、図50(A)における要素R[3]のように、本来0である2ビット目が1だった場合、そこが1であるべき要素R[6]との排他的論理和を取り、図50(B)のように、1を消去する。そこで図39の単位行列化の処理を説明すると次のようになる。
(1)ステップS20で下から上に向かって処理するためiをi=6にする。iは0以上なのでステップS21を通り、ステップS22に行く。ここで現在のデータは図51のようなものだとする。
(2)ステップS22ではi+1=7なのでaは16進数で01、2進数で00000001になる。
(3)ステップS23でlもl=6になり、0以上なのでステップS24を通りステップS26に進む。
(4)現在、R[6].Kは03であり、aは1であるため、ステップS26の論理積は0とならず、そこでステップS27に進む。
(5)ステップS27の排他論理和演算により、R[6]は02 33 33になる。
(6)ステップS28でlが1引かれl=5になり、ステップS24に戻り、ステップS26、ステップS27を通ることで、R[5]も04 0f f0に変化する。
(7)ステップS24〜S28のループを繰り返し、lが−1になり、ステップS25に行く時には、R[0]〜R[6]の全てのKの0ビット目は0になり、図52のようなデータになっている。
(8)ステップS25でlが5になり、ステップS22でaは02になる。
(9)同様にステップS24〜ステップS28のループでR[0]〜R[5]のX要素の1ビット目が1の場合、具体的にはR[0]、R[2]、R[3]、R[6]との排他的論理和を取り、該当ビットを0にする。具体的には図53のようなデータになる。
(10)このような演算を繰り返すことでiが0になった際は、図54のようなKが単位行列のデータを得る。
図40のフローチャートにあっては、図39のKの単位行列を得る段階で変換したpの要素を並び変えて、データを復元する。ここで図39の単位行列化によって現在のデータは図55のようになっているとする。このpの部分を2進数で表すと図56のようになる。そこで図56の要素pを例にとって図40の処理を説明すると次のようになる。
(1)ステップS30でiを初期化し、ステップS31でD[0]も初期化する。ステップS31で初期化するのは、ステップS35の条件が成立した際に何もせずにステップS37に行くためで、もしステップS36とは逆に該当するビットをクリアするのであればこの処理は必要ない。
(2)ステップS32でaを80にし、ステップS33でlをl=0にする。
(3)ステップS34に示す「<<=1」という演算は、1つ左へシフトする意味である。現在D[0]は0なので、シフトしても0のままである。
(4)ステップS35では、i が7以下なのでi/8は0になる。このため、R[0]のP[0]の7ビット 目が1かどうか見ていることになる。この値は0なのでステップS37に進む。
(5)ステップS37でlに1を足して、ステップS38で7以下かどうかを調べている。現在、lは1なのでステップS34に戻る。
(6)このようにステップS34〜S38では、R[0]〜R[7]のP[0]の7ビット目を見ている。現在のデータでは、P[0]の7ビット目はすべて0なので、一度もステップS36を通らずステップS39に進む。すなわち、D[0]はステップS31で設定した0のままである。
(7)ステップS39でiが1になり、ステップS40でaが1つ右シフトして40になり、ステップS33に戻る。今度はP[0]の6ビット目を調査するループに入る。
(8)今度のループ(i=1)では、lが7になった段階で、R[7]のP[0]の6ビット 目が1なので、D[1]にlが代入される。
(9)さらに次のループ(i=2)ではlがl=6になった段階で、R[6]のP[0]の5ビット 目が1なので、D[2]に1が代入される。
(10)このループではステップS37でlが加算され7になり、ステップS38の条件を満たさないためステップS34に戻る。ステップS34で、D[2]が左にシフトされるので2になり、ステップS35、S37、S38、S39と進み(但し、l=7の時はステップS36を通らない)、更にステップS41、S42、S33と進む。
(11)このようにループを重ねてiが8になる際、aは1になっている。このため、ステップS32に行き、aが80になった後、次のループになる。
(12)次からのループ(i=8〜15)では、ステップS35におけるi/8が1になるため、R[0]〜R[7]のP[1]要素の各ビットの1,0を見る。
(13)このようなループを繰り返し、ステップS41で終了条件が満たされた段階では、D[0]、D[1]、D[2]、は00 01 02 03 04 05 06 07 08 09 0a 0b 0c 0D 0e 0fというデータが復元されている。
ここで本発明のデータ転送方法に使用するデータ列Kの生成を説明する。データ列Kの生成にはいくつかの方法が考えられるが、1番簡単な方法は、1〜2m−1までの数字を乱数を使って生成し、これをデータ列Kに使う方法である。
しかしながら、この乱数によるデータ列Kの生成にあっては、受信側でm個のパケットを受け取っても単位行列化できない可能性がある。そこで初めのm個のパケットついてはK=2n(但しnは送信パケットの番号)を送る方法が考えられる。この場合にあっては全パケットを消失無しに受け取った場合、直ちに元データを復元することができる。
またデータ列Kの中のビット1が立っている数が少ないため単位行列化が容易であり、高速に解くことができる。一方、パケット消失を考慮して、更にmを超える数のパケットを送ることになるが、このm+1番目以降のデータ列Kについてはすでに説明したように乱数を使えば良い。この場合、乱数のうちの最初のものついては単位行列化に変換しやすい数値を使用する。
例えばm=8の場合、
m+1番目は「11111111」
m+2番目は「01010101」
m+3番目は「10101010」
m+4番目は「00001111」
m+5番目は「11110000」
を各々使う。
また別のデータ伝送方法として送信側と受信側で同じデータ列Kのテーブル、または乱数生成ルーチンと代数の種を予め設定しておき、送信するパケットにデータ列Kの代わりにn番目のパケットというパケット情報をもたせることでデータ列の転送を不要にすることができる。ここで本発明のデータ伝送方法にあっては、ひとつのパケットの塊でjmビットのデータを送ることができる。
この場合、図34のデータパケットの形式を用いると個々のパケットの大きさが(j+m)ビットとなる。この場合の符号化率はj/(j+m)となる。通常のIP通信におけるひとつのパケットの大きさは1500バイト(=12000ビット)という制限があるため余り大きなデータを送る場合には符号化率が落ちる危険性がある。
そこで本発明にあって、図57のように、送信側でひとつの大きな元データ72を適当な大きさに分割した分割データ72−1,72−2,72−3・・・として符号化することが考えられる。この時、転送するパケットの中にデータパケット系列Kと解pの他にブロック番号qを付加しブロックを区別する。
このようなデータを分割してパケット転送する際に問題となるのは、パケット転送により受信された分割されたデータを復号化した時点で、どのようにして受信側から送信側にブロックデータの転送終了を通知して、次のブロックのデータを送信してもらうかである。
この問題を解決するにあたって本発明によれば、例えば図58の方法をとる。図58にあっては、送信側がパケット消失率を考慮した数d個のパケットを送信するパケット送信信84を行う。受信側にあっては(n+α)個以上のパケット受信86があった時に復号化88を行う。送信側にあってはd個のパケットを送信すると次のブロックの送信に移動する。
ここで受信側の復号化に用いるα個は、m個のパケットを受信しただけでは単位行列が求められない可能性がある場合の安全率である。この図58の方法は、伝送路のパケット消失率が既知で且つ変動が少ない時に有効であるが、安全率αを大きくすると無駄が大きくなる可能性が高い。そこでこの問題を解決する方法として、全データ分のパケットを送信した後に、受信側が復号化に失敗したブロック番号に送信側に伝え、再送を行う方法がある。
図59は、受信側で復号化92が完了した段階で復号完了信号94を送信側に送る本発明の方法である。この場合には、伝送経路のパケット消失率が変動しても実際に受信されたパケット数に基づく復号化ができ、確実にデータを送ることができる。
しかしながら、この図59の方法にあっては、送信側で符号化が完了するパケットを送付してから、復号完了信号94が届くまでの間、受信側で破棄96となる無駄なパケットを送信することになり、特にRTTの大きい回線では効率が悪くなる。
図60は、図58と図59の両者を組み合わせた本発明の方法である。この方法にあっては、例えばブロックqを受信して復号化98を行った後に受信側で、次のブロックq+1について復号失敗100となった時には送信側に復号失敗信号102を転送し、送信側は送信に失敗したブロックからデータを再送する。しかし、図608の方法にあっては、受信側が復号失敗信号102を出してそのブロックのデータを再送するまでの間に受信したブロックは破棄104となり効率が悪い。
この問題は図619の方法のようにデータを回線のRTTとnの値に応じた適当な大きさのブロック分だけバッファリングすることで改善できる。図61にあっては、ブロックqの復号化108−1に失敗して復号失敗信号110を送信している。ここで送信側にあってはブロックq,q+1,q+2のパケットの送信を終了し、ブロックq+3のパケットを送信している途中で復号失敗信号110を受信している。
このためブロックq+1,q+2のパケットは受信側に復号に十分な量が既にに届いている可能性が高いため、復号失敗信号110を受信した際に送信側はブロックq,q+1,q+2のパケット転送につき通常より少ないパケットを送信し、それまで受信したパケットはバッファ106にブロック毎に格納されていることから最初により転送された少ないパケットを格納し、全体として復号化に必要なパケットを受信することができる。
またブロックq+3にしても既に送ったパケットは受信側に到達している可能性があるため、既に送ったパケット数を送信側に記録しておき、次のブロックq+3のパケットを送信する際に所定量であるd個から既に送ったパケット数を引いた数だけのパケットを送信し、この送信より受信したパケット104−4をバッファ106のブロックq+3に格納すればよい。
更に受信側からの復号失敗信号110の中に受信側における単位行列化の際にデータ列Kのうち、他の情報ビットがないことで単位行列が求められないことを転送することにより、再送時に必要な情報のみを伝えることで効率化を図ることもできる。
更に図60及び図61にあっては、例えばブロックqの復号に失敗してブロックq+1のパケット受信中に判断されて、復号失敗信号を転送する場合を例にとっているが、ブロックqの復号化が完了していない時点で次のブロックq+1またはq+2の高速ブロックについて所定量以上のパケットを受信した場合に復号失敗と判断して、復号失敗信号の転送により再送を行わせても良い。
図62は本発明のデータ伝送方法の他の実施形態であり、この実施形態にあっては連立方程式の解放を利用せずに符号化及び復号化を行うようにしたことを特徴とする。図62においては、まず元データ112を所定長単位に分割してD0〜D3としている。例えば元データ112は12バイトデータであり、これを3バイト単位に4バイトの分割データD0〜D3としている。
このように元データ112の分割データD0〜D3について所定のデータ列Knとして(k0,k1,k2,k3,k4)を準備している。このデータ列Knの(k0〜k4)のそれぞれにつき、データビット1の位置に対応する元データ112の分割データを取り出して、排他論理和Xorを求める。
例えばk0=1000にあってはビット1に対応した分割データD0をそのまま格納する。k1,k2,k3についてもビット1がひとつしかないことからそれぞれに対応した分割データD0,D1,D2,D3を取り込む。最後のk4=1001にあってはビット1に対応した2つの分割データD0とD3を取り出して両者の排他論理和XORを求める。
これがこの実施形態における符号化114である。そしてこの符号化114によるデータ列Knと排他論理和XORの組をn=0〜4の各パケットKpとしてパケット伝送116を行う。受信側にあっては、復号化118によるパケットのうちひとつが消失して4つを受信したとすると、この4つの受信パケットからデータ列Knと排他論理和XORの行列配置を作り出した後に、データ列Knの部分について単位行列化を行い、この単位行列化に伴う排他論理和XORのデータが符号化114における分割データD0,D1,D2,D3として抽出される。
この図62のデータ伝送方法の処理は、連立方程式を使わない分、処理が簡単にできる。具体的には符号化114の処理において連立方程式の排他論理和の計算において1を数える必要がなく、また復号化118にあっては図40のフローチャートに示したデータ抽出処理82が不要となる。
尚、上記の実施形態における本発明のデータ伝送方法としては、ピアツーピア型のデータ伝送、すなわち1対1で高速にデータ伝送を行う場合を例にとるものであったが、ブロードキャストやマルチキャストなどの技術を用いることで、1対nとして同時に多数の相手先に対しデータを伝送する場合にも適用可能である。
このような1対nのデータ伝送にあっては図59,図60,図61のような受信側から復号化完了や復号化失敗の応答を送信側に行う方法を用いることはできないが、図58のように符号に十分な所定量のパケットを送信する方法で実現できる。また本発明のデータ伝送方法はUDP通信を対象としているが、標準のUDP通信以外の通信機能を付加しても良い。
例えばより信頼性を高めるためにパケットにチェックサム(CRC)をつけ、受信した直後にチェックサムをチェックし正しいパケットかどうかを調べ、正しく無い場合にはパケットを破棄するようなしくみを加えても良い。
また本発明は上記の実施形態に限定されず、その目的と利点を損なうことのない適宜の変形を含む。また本発明は上記の実施形態に示した数値による限定は受けない。