(57)【要約】    【課題】送信側でデータを符号化して送ることにより、伝送途中でデータの消失が起きても受信側でエラー修正できるようにする。    【解決手段】転送元データをｍビットのデータ（ｂ0，ｂ1，ｂ2，ｂ3，…ｂm-1）とした場合、ｍビットのｎ系列のデータ列Ｋ＝（ｋn0，ｋn1，ｋn2，…ｋnm-1）をプール代数の連立方程式  ｂ0ｋn0＋ｂ1ｋn2＋……＋ｂm-1ｋnm-1＝Ｐnに代入してｎ個の解Ｐn＝（ｐ0，ｐ1，ｐ2，ｐ3，…ｐn-1）を求め、前記データ列Ｋと解Ｐnの組からなる符号化データをパケット転送し、  前記受信復号化ステップは、受信した前記符号化データから得られた前記データ列Ｋと解Ｐnを前記連立方程式に代入して前記転送元データとなるｍビットのデータを復号する。    【選択図】        図３２
2006271006.tif 000002
【特許請求の範囲】
【請求項１】
データをパケット伝送するデータ伝送方法に於いて、
符号化送信部により、元データを所定のデータ列と共にプール代数の連立方程式に代入して解を求め、前記データ列と解の組を符号化データとしてパケット送信する符号化送信ステップと、
受信復号化部により、受信した符号化データから得られた前記データ列と解を前記連立方程式に代入して元データを復号する受信復号化ステップと、
を備えたことを特徴とするデータ伝送方法。
【請求項２】
請求項１のデータ伝送方法に於いて、
前記符号化送信ステップは、
転送元データをｍビットのデータ（ｂ0，ｂ1，ｂ2，ｂ3，…ｂm-1）とした場合、ｍビットのｎ系列のデータ列Ｋ＝（ｋn0，ｋn1，ｋn2，…ｋnm-1）をプール代数の連立方程式
ｂ0ｋn0＋ｂ1ｋn2＋……＋ｂm-1ｋnm-1＝Ｐn
に代入してｎ個の解Ｐn＝（ｐ0，ｐ1，ｐ2，ｐ3，…ｐn-1）を求め、前記データ列Ｋと解Ｐnの組からなる符号化データをパケット転送し、
前記受信復号化ステップは、受信した前記符号化データから得られた前記データ列Ｋと解Ｐnを前記連立方程式に代入して前記転送元データとなるｍビットのデータを復号することを特徴とするデータ伝送方法。
【請求項３】
請求項２のデータ伝送方法に於いて、
前記受信復号化ステップは、受信した符号化データから得られたデータ列Ｋの部分が上三角形となるデータ列Ｋと解Ｐnの行列データ配置を生成するステップと、
前記行列データ配置のデータ列Ｋの部分につき単位行列化するステップと、
データ列Ｋを単位行列化した解Ｐnのデータ位置から転送元データを復元するステップと、
を備えたことを特徴とするデータ伝送方法。
【請求項４】
データをパケット伝送するデータ伝送方法に於いて、
符号化送信部により、転送元データをｍ個の分割データ（Ｄ0，Ｄ1，Ｄ2…Ｄm-1）に分割し、ｍビットでｎ系列のデータ列Ｋ（ｋn0，ｋn1，ｋn2，…ｋnm-1）のビット１の位置に対応する分割データを選択して排他論理和データを求め、前記データ列Ｋと前記排他論理和データの組からなる符号化データをパケット転送する送信ステップと、
受信復号化部により、受信された前記符号化データから得られたデータ列Ｋと排他論理和を行列データ配置した後に、前記データ列Ｋの部分を単位行列化し、該単位行列化後の排他論理和を前記分割データとして復号する受信ステップと、
を備えたことを特徴とするデータ伝送方法。
【請求項５】
請求項２又は４のデータ伝送方法に於いて、前記データ列Ｋの系列数ｎは、前記ビット数ｍ以上の値であることを特徴とするデータ伝送方法。
【請求項６】
請求項２又は４のデータ伝送方法に於いて、前記データ系列の系列数ｎは、前記ビット数ｍに伝送路のバケット消失率に基づく値αを加算した数（ｍ＋α）であることを特徴とするデータ伝送方法。
【請求項７】
請求項２又は４のデータ伝送方法に於いて、ｎ個のパケットで転送する符号化データの生成に使用する前記データ列Ｋは、最初から所定数までのパケットについて受信側で単位行列化が容易な特定の数値列とすることを特徴とするデータ伝送方法。
【請求項８】
請求項２又は４のデータ伝送方法に於いて、データ列Ｋの数値列を所定のテーブルもしくは所定の式により定め、前期テーブル又は式を送信側と受信側で共有することにより、前記データ列Ｋのパケット転送を不要としたことを特徴とするデータ伝送方法。
【請求項９】
請求項２は４のデータ伝送方法に於いて、
前記符号化送信ステップは、１ブロックの符号化データを複数パケットに分割して転送し、
前記受信復号化ステップは、１ブロック分のパケットを受信して元データの復号を完了した際に送信側に復号成功信号を送信し、復号に失敗した際には復号失敗信号を送信して再送させることを特徴とするデータ伝送方法。
【請求項１０】
請求項９のデータ伝送方法に於いて、前記受信側にバッファを設けてパケットデータを前記バッファに保持した後に復号を行い、復号失敗時に再送が開始されるまでに受信されたパケットデータを前記バッファに保存し、再送されるるブロックのパケット数を少なくすることを特徴とするデータ伝送方法。
【請求項１１】
コンピュータに、
元データを所定の定数データと共にプール代数の連立方程式に代入して解を求め、前記定数データと解の組を符号化データとしてパケット送信する符号化送信ステップと、
受信した符号化データから得られた前記定数データと解を前記連立方程式に代入して元データを復号する受信復号化ステップと、
を実行させることを特徴とするプログラム。
【請求項１２】
請求項１１のプログラムに於いて、
前記符号化送信ステップは、
転送元データをｍビットのデータ（ｂ0，ｂ1，ｂ2，ｂ3，…ｂm-1）とした場合、ｍビットのｎ系列のデータ列Ｋ＝（ｋn0，ｋn1，ｋn2，…ｋnm-1）をプール代数の連立方程式
ｂ0ｋn0＋ｂ1ｋn2＋……＋ｂm-1ｋnm-1＝Ｐn
に代入してｎ個の解Ｐn＝（ｐ0，ｐ1，ｐ2，…ｐn-1）求め、前記データ列Ｋと解Ｐnの組からなる符号化データをパケット転送し、
前記受信復号化ステップは、受信した前記符号化データから得られた前記データ列Ｋと解Ｐnを前記連立方程式に代入して前記転送元データとなるｍビットのデータを復号することを特徴とするプログラム。
【請求項１３】
請求項１２のプログラムに於いて、
前記受信復号化ステップは、受信した符号化データから得られたデータ列Ｋが上三角形となる行列データ配置を生成するステップと、
前記行列データ配置のデータ列Ｋの部分につき単位行列化するステップと、
データ列Ｋを単位行列化した解Ｐnのデータ位置から転送元データを復元するステップと、
を備えたことを特徴とするデータ伝送方法。
【請求項１４】
コンピュータに、
転送元データをｍ個の分割データ（Ｄ0，Ｄ1，Ｄ2…Ｄm-1）に分割し、ｍビットでｎ系列のデータ列Ｋ＝（ｋn0，ｋn1，ｋn2，…ｋnm-1）のビット１の位置に対応する分割データを選択して排他論理和データを求め、前記データ列Ｋと前記排他論理和データの組からなる符号化データをパケット転送する送信ステップと、
受信された前記符号化データから得られたデータ列Ｋと排他論理和を行列データ配置した後に前記データ列Ｋの部分を単位行列化し、該単位行列化後の排他論理和を前記分割データとして復号する受信ステップと、
を実行させることを特徴とするプログラム。
【請求項１５】
請求項１２又は１４のプログラムに於いて、前記データ列Ｋの系列数ｎは、前記ビット数ｍ以上の値であることを特徴とするプログラム。
【請求項１６】
請求項１２又は１４のプログラムに於いて、前記データ系列の系列数ｎは、前記ビット数ｍに伝送路のバケット消失率に基づく値αを加算した数（ｍ＋α）であることを特徴とするプログラム。
【請求項１７】
請求項１２又は１４のプログラムに於いて、ｎ個のパケットで転送する符号化データの生成に使用する前記データ列Ｋは、最初から所定数までのパケットについて受信側で単位行列化が容易な特定の数値列とすることを特徴とするプログラム。
【請求項１８】
請求項１２又は１４のプログラムに於いて、データ列Ｋの数値列を所定のテーブルもしくは所定の式により定め、前期テーブル又は式を送信側と受信側で共有することにより、前記データ列Ｋのパケット転送を不要としたことを特徴とするプログラム。
【請求項１９】
請求項１２又は１４のプログラムに於いて、
前記符号化送信ステップは、１ブロックの符号化データを複数パケットに分割して転送し、
前記受信復号化ステップは、１ブロック分のパケットを受信して元データの復号を完了した際に送信側に復号成功信号を送信し、復号に失敗した際には復号失敗信号を送信して再送させることを特徴とするプログラム。
【請求項２０】
請求項１９のプログラムに於いて、前記受信側にバッファを設けてパケットデータを前記バッファに保持した後に復号を行い、復号失敗時に再送が開始されるまでに受信されたパケットデータを前記バッファに保存し、再送されるブロックのパケット数を少なくすることを特徴とするプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ネットワークを介して相互に接続された複数のピアとの間で情報をやり取りしてコラボレーション等を行うピアツーピア型のデータ配信方法、システム、伝送方法及びプログラムに関し、特に、ピアが発信する情報を他のピアに効率よく配信するデータ配信方法、システム、伝送方法及びプログラムに関する。
【背景技術】
【０００２】
インターネットの普及により、遠隔地間で何らかのオブジェクトを共有するコラボレーションシステムが広範に使用されてきている。従来のコラボレーンョンシステムは、サーバ・クライアント型が主体である。サーバはコラボレーションの対象となるデータの管理と配信を司る。データの管理をサーバが一元的に行っているため、各クライアントが持つコラボレーション用データは同一に保たれる。
【０００３】
ところが、サーバ・クライアント型のコラボレーションシステムは、サーバに対する負荷が大きいことから、近年、ピアツーピア型のコラボレーションシステムが注目されてきている。ピアツーピア型は、ネットワークに参加している各ユーザが対等（Ｐｅｅｒ）であり、特定のサーバを持たない。ここでピアツーピア型のネットワークで使用するユーザ装置を、以下の説明では単にピアと呼ぶ。
【０００４】
しかしながら、このような従来のピアツーピア型のコラボレーションシステムでは、コラボレーション用のデータは各ピアに保持されるため、特定のピアがコラボレーションに参加してない状態で、残りのピアがデータを更新した場合などには、各ピアにおけるデータの一貫性を保てなくなる問題がある。また、サーバ・クライアント型の場合、データの配信元であるサーバは、一般にネットワーク環境に恵まれた所に設置することが可能であるが、ピアツーピア型の場合、データの配信元は各ピアであり、その環境は無線ＬＡＮ、電話回線など様々である。
【特許文献１】ＵＳ  ２００１／００２２７８９  Ａ１
【特許文献２】ＵＳＰ  ６３４０９０
【発明の開示】
【発明が解決しようとする課題】
【０００５】
そのため、発信ピアを起点に他の全てのピアに１：ｎでデータ配信したような場合、配信経路によっては効率的なデータ伝送ができず、通信時間がかかり、通信コストが高くなる問題がある。
【０００６】
本発明は、効率の良い配信経路の作成、ピア間のデータ一貫性及び効率的な高速データ伝送を可能とするピアツーピア型のデータ配信方法、システム、伝送方法及びプログラムを提供することを目的とする。
【課題を解決するための手段】
【０００７】
（グループ分けによるデータ配信）
本発明は、ネットワークを介して相互に接続された複数のピアとの間で情報をやり取りするピアツーピア型のデータ配信方法であって、ピアの各々は、
グループ情報作成部により、新たなピアの接続を受けた際に、自分、既存グループの代表ピア及び新たなピアの3者間のネットワーク上の距離の比較に基づいて、新たなピアをグループ分けしたグループ情報を作成するグループ情報作成ステップと、
データ発信部により、自分からデータを発信する際に、グループ情報に基づいてグループ分けしたグループ毎の宛先情報と自分を登録した経路情報を生成し、各グループの代表ピアに宛先情報、経路情報及びデータを配信情報として発信するデータ発信ステップと、
データ中継部により、他のピアから配信情報を受信した際に、宛先情報に自分が含まれる場合はデータを取り込んで自分を削除した後に、グループ情報に基づいてグループ分けしたグループ毎の宛先情報と自分を登録した配信情報を生成し、各グループの代表ピアに宛先情報、経路情報及びデータを配信情報として発信するデータ中継ステップと、
を備えたことを特徴とする。
【０００８】
このよう本発明の各ピアは、それぞれ自分から見た他のピアとのネットワーク上の距離に基づいてグループ分けを行い、自分からデータを発信する場合又は他のピアから配信されたデータを中継する場合、宛先ピアをグループ分けして、その中の代表ピアに対してのみデータを配信するだけでよく、１：ｎ通信に比べ配信先はグループ数に依存して十分に少なくでき、配信時間が短縮できる。
【０００９】
ここでグループ情報作成ステップは、既存グループの代表ピアの中から自分との距離が最小となる代表ピアを選択し、自分、既存グループの代表ピア及び新たなピアの三者間の距離の比較に基づいて新たなピアをグループ分けしたグループ情報を作成することを特徴とする。
【００１０】
このように各ピアから見たグループの代表ピアは、グループの中で最小距離にあるピアとなり、配信経路として最短経路が選択され、効率良くデータ配信できる。また新しいピアが出現した場合には、既存のグループとの関係を見てグループ分けする処理が行われ、ピアの参加状況に応じて動的に最適配信経路が形成される。
【００１１】
この動的なグループ分けのため、グループ情報作成ステップは、
自分、既存グループの代表ピア及び新たなピアの3者間の距離として、自分と新たなピアとの間を第１距離Ｌ、自分と代表ピアとの間を第２距離、代表ピアと新たなピアとの間を第３距離とした場合、
三者の間に、
（第１距離）＞（第２距離）＞（第３距離）
となる第１の距離関係がある時は、新たなピアを代表ピアのグループに所属させ、代表ピアをそのまま維持する。
【００１２】
また三者の間に、
（第２距離）＞（第１距離）＞（第３距離）
となる第２の距離関係がある時は、新たなピアを代表ピアのグループに所属させ、代表ピアを新たなピアに変更する。
【００１３】
更に、第１及び第２の距離関係以外のときは、新たなピアについて新グループを生成して代表ピアとする。
【００１４】
更に、グループ情報作成ステップは、複数の代表ピアが存在する場合は、その中から自分との最小距離となる代表ピアを選択して、自分、代表ピア及び新たなピアの三者間の距離の比較に基づく新たなピアのグループ分け処理を繰り返す。
【００１５】
本発明は、ネットワークを介して相互に接続された他のピアとの間で情報をやり取りするピアで実行されループログラムを提供する。このプログラムは、ピアを構成するコンピュータに、
新たなピアの接続を受けた際に、自分、既存グループの代表ピア及び新たなピアの三者間のネットワーク上の距離の比較に基づいて、新たなピアをグループ分けしたグループ情報を作成するグループ情報作成ステップと、
自分からデータを発信する際に、グループ情報に基づいてグループ分けしたグループ毎の宛先情報と自分を登録した経路情報を生成し、各グループの代表ピアに前記宛先情報、経路情報及びデータを配信情報として発信するデータ発信ステップと、
他のピアから配信情報を受信した際に、宛先情報に自分が含まれる場合は受信データを取り込んで自分を削除した後に、グループ情報に基づいてグループ分けしたグループ毎の宛先情報と自分を登録した配信情報を生成し、各グループの代表ピアに前記宛先情報、経路情報及びデータを配信情報として発信するデータ中継ステップと、
を実行させることを特徴とする。尚、本発明のプログラムの詳細は、データ配信方法と基本的に同じになる。
【００１６】
本発明は、ネットワークを介して相互に接続された他のピアとの間で情報をやり取りするピアを提供する。このピアは、新たなピアの接続を受けた際に、自分、既存グループの代表ピア及び新たなピアの三者間のネットワーク上の距離の比較に基づいて、新たなピアをグループ分けしたグループ情報を作成するグループ情報作成部と、自分からデータを発信する際に、グループ情報に基づいてグループ分けしたグループ毎の宛先情報と自分を登録した経路情報を生成し、各グループの代表ピアに前記宛先情報、経路情報及びデータを配信情報として発信するデータ発信部と、他のピアから配信情報を受信した際に、宛先情報に自分が含まれる場合は受信データを取り込んで自分を削除した後に、グループ情報に基づいてグループ分けしたグループ毎の宛先情報と自分を登録した配信情報を生成し、各グループの代表ピアに前記宛先情報、経路情報及びデータを配信情報として発信するデータ中継部とを備えたことを特徴とする。尚、本発明のピアの詳細は、データ配信方法と基本的に同じになる。
【００１７】
（代理ピア）
本発明は、ネットワークを介して相互に接続された複数のピアの間で相互にデータをやり取りするピアツーピア型のデータ配信システムであって、代理を依頼した依頼元ピアが動作していない間、依頼元ピア宛に配信された更新データを蓄え、依頼元ピアが動作を開始した際に、蓄えた更新データを渡す代理ピアを設けたことを特徴とする。
【００１８】
このようにネットワーク上に代理ピアを設けることで、任意のピアが電源断などで動作を停止した場合、代理ピアが他のピアから配信された更新データを蓄積しており、電源投入により動作を開始した際に、代理ピアに蓄積している更新データを復帰したピアに送ることで、ピア間のデータの一貫性を保証できる。
【００１９】
ここで代理ピアは、代理を依頼した依頼元ピアとデータを共有し、依頼元が動作していない間、前記依頼元ピア宛に配信されたデータで共有データを更新し、前記依頼元ピアが動作を開始した際に、更新済みの共有データを依頼元ピアピアの共有データに上書きするようにしても良い。この共有データによるバックアップは、代理ピアとのネットワーク上の距離が近い場合に適用できる。
【００２０】
また、複数のピアでグループを形成し、グループの代表ピアで受信した配信情報をグループ内の他のピアに配信する場合、代表ピアとして代理ピアを設定し、グループ内の１又は複数のピアが動作してない間、動作していないピア宛に配信された更新データを蓄え、ピアが動作した際に蓄えた更新データを渡す。これにより一台の代理ピアで複数のピアの動作停止中に配信されたデータ保持し、データの一貫性を保証する。
【００２１】
更に代理ピアを複数設け、特定の代理ピアに更新データを配信中に動作が停止した場合、動作している他の代理ピアに残りの更新データを配信することを特徴とする。これによりデータ配信を受けている代理ピアの停止に対し他の代理ピアが代替し、代理ピアによるデータ一貫性を確実に保証する。
【００２２】
（高速データ伝送）
本発明は、データをパケット伝送するデータ伝送方法を提供するものであり、このデータ伝送方法は、
符号化送信部により、元データを所定の定数データと共にプール代数の連立方程式に代入して解を求め、定数データと解の組を符号化データとしてパケット送信する符号化送信ステップと、
受信復号化部により、受信した符号化データから得られた前記定数データと解を前記連立方程式に代入して元データを復号する受信復号化ステップと、
を備えたことを特徴とする。
【００２３】
このデータ伝送方法は、送信パケットの受信に対し応答ＡＣＫを必要としないＵＤＰ通信が使用され、応答を必要とするＴＣＰ通信に比べ、通信時間を短縮して高速伝送できる。また伝送途中でのパケット消失や入換えが起きても、受信側でデータを修正した復元ができ、パケット受信毎に応答を返しているＴＣＰ通信と同等の信頼性が確保される。
【００２４】
この連立方程式の解法を利用したデータ伝送方法の詳細は、
符号化送信ステップとして、
転送元データをｍビットのデータ（ｂ0，ｂ1，ｂ2，ｂ3，…ｂm-1）とした場合、ｍビットのｎ系列のデータ列Ｋ＝（ｋn0，ｋn1，ｋn2，…ｋnm-1）をプール代数の連立方程式
ｂ0ｋn0＋ｂ1ｋn2＋……＋ｂm-1ｋnm-1＝Ｐn
に代入してｎ個の解Ｐn＝（ｐ0，ｐ1，ｐｋ2，…ｐn-1）を求め、データ列Ｋと解Ｐnの組からなる符号化データをパケット転送する。
【００２５】
また受信復号化ステップは、受信した符号化データから得られた前記データ列Ｋと解Ｐnを連立方程式に代入して転送元データとなるｍビットのデータを復号することを特徴とする。
【００２６】
更に受信復号化ステップの詳細は、受信した符号化データから得られたデータ列Ｋの部分が上三角形となるデータ列とＰnを行列データ配置を生成するステップと、
前記行列データ配置のデータ列Ｋの部分につき単位行列化するステップと、
データ列Ｋを単位行列化した解Ｐnのデータ位置から転送元データを復元するステップと、
を備える。
【００２７】
本発明のデータ伝送方法の別の形態にあっては、連立方程式の解法を利用しないデータ伝送方法を提供する。このデータ伝送方法は、
符号化送信部により、転送元データをｍ個の分割データ（Ｄ0，Ｄ1，Ｄ2…Ｄm-1）に分割し、ｍビットでｎ系列のデータ列Ｋ＝（ｋn0，ｋn1，ｋn2，…ｋnm-1）のビット１の位置に対応する分割データを選択して排他論理和データを求め、データ列Ｋと排他論理和データの組からなる符号化データをパケット転送する送信ステップと、
受信復号化部により、受信された符号化データから得られたデータ列Ｋと排他論理和データを行列配置した後にデータ列Ｋの部分を単位行列化し、この単位行列化後の排他論理和データを分割データとして復号する受信ステップと、
を備えたことを特徴とする。
【００２８】
この連立方程式の解法を利用しないデータ伝送方法によれば、符号化及び復号化の処理がその分簡単となる。
【００２９】
ここで本発明の符号化及び復号化におけるデータ列Ｋの系列数ｎは、ビット数ｍ以上の値である。例えばデータ系列の系列数ｎは、ビット数ｍに伝送路のバケット消失率に基づく値αを加算した数（ｍ＋α）である。これにより伝送途中でα個以内のパケット消失があっても、ｍ個のパケット受信で元データを復元できる。
【００３０】
また本発明のデータ伝送方法は、ｎ個のパケットで転送する符号化データの生成に使用するデータ列Ｋとして、最初から所定数までのパケットまでについて受信側で単位行列化が容易な特定の数値列とする。
【００３１】
また本発明は、データ列Ｋの数値列を所定のテーブルもしくは所定の式により定め、このテーブル又は式を送信側と受信側で共有することにより、データ列Ｋのパケット転送を不要とする。
【００３２】
本発明のデータ伝送方法の符号化送信ステップは、１ブロックの符号化データを複数パケットに分割して転送し、受信復号化ステップは１ブロック分のパケットを受信して元データの復号を完了した際に送信側に復号成功信号を送信し、復号に失敗した際には復号失敗信号を送信して再送させる。これにより受信応答がパケット単位ではなく、データ復号化に必要な複数パケットによる１ブロック単位となり、受信応答による信頼性と高速伝送を両立させる。
【００３３】
本発明のデータ伝送方法は、受信側にバッファを設けてパケットデータをバッファに保持した後に復号を行い、復号失敗時に再送が開始されるまでに受信されたパケットデータをバッファに保存し、再送されるるブロックのパケット数を少なくする。
【００３４】
本発明は、データ伝送用のプログラムを提供するものであり、コンピュータに、
元データを所定の定数データと共にプール代数の連立方程式に代入して解を求め、定数データと解の組を符号化データとしてパケット送信する符号化送信ステップと、
受信した符号化データから得られた前記定数データと解を前記連立方程式に
代入して元データを復号する受信復号化ステップと、
を実行させることを特徴とする。尚、本発明によるデータ伝送用のプログラムの詳細は、データ伝送方法と基本的に同じになる。
【発明の効果】
【００３５】
以上説明してきたように本発明によれば、ピアツーピアコミュニケーションにおいて効率の良いデータ配信を実現することができ、各ピアの位置や通信環境の変化に対し、ダイナミックに最適な配信ルートで対応できるため効率良いデータ配信を実現できる。
【００３６】
また代理ピアを設けたことで電源などによりピアが停止しても再び起動した際に、代理ピアから更新データを受けて、各ピアにおけるデータの一様性を保証することができる。
【００３７】
更に符号化送信とこれに対応した受信復号化により伝送路におけるパケット消失やパケット入換えなどのデータ修正が可能となり、受信応答を必要としないＵＤＰ通信における高信頼性を得ることができる。
【発明を実施するための最良の形態】
【００３８】
（グループ分けによるデータ配信）
図１は、本発明により構築されるピアツーピア型のコミュニケーションシステムの説明図である。図１において、ピア１０−１〜１０−５は、パーソナルコンピュータやＰＤＡなどの情報処理装置で構成されており、適当な入力装置、出力装置及び通信装置を備えている。またピア１０−１〜１０−４には、ピアツーピア型コミュニケーションの代表である例えばコラボレーションを行うためのアプリケーションがインストールされている。
【００３９】
いまピア１０−０がコラボレーションにおけるデータ変更例えばチャット文章の入力を行ったとすると、ピア１０−０から情報の発信が行われ、インターネットなどのネットワークの通信プロトコルに従って、その内容が配信される。このとき左側のピア１０−０，１０−１，１０−２のグループと右側のピア１０−３，１０−４，１０−５のグループの伝送経路が離れていた場合、ピア１０−０から発信した情報を直接ピア１０−１〜１０−５のそれぞれに配信するよりは、例えばピア１０−１からの転送１６によりピア１０−３に転送した後、ピア１０−４，１０−５に対する配信１８を行う方が、効率がよい。
【００４０】
そこで本発明のデータ配信方法にあっては、後の説明で明らかにするように、ピア１０−１〜１０−５のそれぞれが独立に、自分自身から見た他のピアとの間のネットワーク上の距離の比較に基づいてグループを形成し、グループの代表ピアに対し情報を発信する配信制御を行うようにしている。
【００４１】
また図２のピアツーピア型コミュニケーションシステム上には代理ピア１２が設けられており、例えばピア１０−５の電源が切れていたり動作プログラムが起動していないなどの停止状態にあるとき、ピア１０−５の代わりに代理ピア１２がピア１０−５を宛先とする情報を受信し、その後、ピア１０−５に電源が入って動作を開始したときに、代理ピア１２で保存していた情報をピア１０−５に送り、これによってピアの動作が停止しても、その後、起動した際にデータの一貫性（一意性）を保てるようにしている。
【００４２】
図２は、図１のピア１０−０を例にとって、機能構成を示した説明図である。図２において、ピア１０−０には、ピアアプリケーション２０、ファイル格納部２２、データ配信部２４、データ伝送部２６及びパケット伝送部２８が設けられる。ピアアプリケーション２０としては、例えばコラボレーション用のアプリケーションが用いられる。
【００４３】
この場合、ファイル格納部２２にはコラボレーションによる共有データが保存される。データ配信部２４には、グループ情報作成部３０、データ発信部３４及びデータ中継部３５の機能が設けられる。グループ情報作成部３０は、ネットワーク４０を介して新たなピアの接続を受けた際、即ちピア１０−０から見て新しいピアが出現した際に、ピア１０−０自身、既存グループの代表ピア及び新たなピアの三者間のネットワーク上の距離の比較に基づいて、新たなピアをグループ分けしたグループ情報３２を作成する。
【００４４】
データ発信部３４は、ピア１０−０自身がコラボレーションのデータを発信する際に、グループ情報作成部３０で作成されたグループ情報３２に基づいて、ピア１０−０自身から見たグループごとの宛先情報とピア１０−０自身を登録した経路情報を作成し、各グループの代表ピアに対し、宛先情報、経路情報及びデータを配信情報として発信する。データ中継部３５は、他のピアから受信した配信情報を中継する。
【００４５】
即ち、他のピアから配信情報を受信した際に、その宛先情報にピア１０−０自身が含まれている場合は、受信データを取り込んで宛先情報からピア１０−０自身を削除した後に、グループ情報３２に基づいてグループごとの宛先情報と自分を登録した配信情報を生成し、各グループの代表ピアに、宛先情報、経路情報及びデータを配信情報として発信する。データ伝送部２６には符号化送信部３６と受信復号化部３８が設けられる。
【００４６】
データ伝送部２６は、データ配信部２４より出力される配信情報を復号化して、パケット伝送部２８よりＵＤＰ通信によりネットワーク４０を介して宛先となるグループの代表ピアに送信する。受信復号化部３８は、パケット伝送部２８で受信した他のピアからの受信パケットから配信情報を復元する復号化を行い、復元した配信情報をデータ配信部２４に出力する。
【００４７】
ここで、パケット伝送部２８としてＵＤＰ通信を使用しているのは、ＴＣＰ通信がパケットごとにＡＣＫ受信応答を必要とするのに対し、ＵＤＰ通信ではパケットごとの受信応答を必要としない分、高速伝送ができるためである。
【００４８】
一方、ＵＤＰ通信にあっては受信応答がパケットごとに得られないため、伝送中におけるパケットの消失や入れ換わりによるエラーが発生することから、これを修正するため本発明にあっては、配信情報をデータ修正可能なように符号化して送信し、受信側でこれを復号化し、パケットの消失や入れ換えがあってもエラーを起こさないようにしている。
【００４９】
図２における本発明のピアは、例えば図３のようなコンピュータのハードウェア資源により実現される。図３のコンピュータにおいて、ＣＰＵ２００のバス２０１にはＲＡＭ２０２、ハードディスクドコントローラ（ソフト）２０４、フロッピィディスクドライバ（ソフト）２１０、ＣＤ−ＲＯＭドライバ（ソフト）２１４、マウスコントローラ２１８、キーボードコントローラ２２２、ディスプレイコントローラ２２６、通信用ボード２３０が接続される。
【００５０】
ハードディスクコントローラ２０４はハードディスクドライブ２０６を接続し、本発明によるコラボレーション用のピアツーピア型のデータ配信システムを実行するアプリケーションプログラムをローディングしており、コンピュータの起動時にハードディスクドライブ２０６から必要なプログラムを呼び出して、ＲＡＭ２０２上に展開し、ＣＰＵ２００により実行する。
【００５１】
フロッピィディスクドライバ２１０にはフロッピィディスクドライブ（ハード）２１２が接続され、フロッピィディスク（Ｒ）に対する読み書きができる。ＣＤ−ＲＯＭドライバ２１４に対しては、ＣＤドライブ（ハード）２１６が接続され、ＣＤに記憶されたデータやプログラムを読み込むことができる。マウスコントローラ２１８はマウス２２０の入力操作をＣＰＵ２００に伝える。
【００５２】
キーボードコントローラ２２２はキーボード２２４の入力操作をＣＰＵ２００に伝える。ディスプレイコントローラ２２６は表示部２２８に対して表示を行う。通信ボード２３０は無線を含む通信回線２３２を使用し、インターネット等のネットワークを介して他のピアとの間で通信を行う。
【００５３】
次に、本発明におけるピアのグループ分けによるデータ配信方法を説明する。図４（Ａ）は従来の１：ｎによるデータ配信方法であり、図４（Ｂ）に本発明のグループ分けによるデータ配信方法を示している。図４（Ａ）の従来の１：ｎのデータ配信方法は、ピアＰ０が他のピアＰ１〜Ｐ１０の全てに対し情報を発信する場合、ピアＰ０から他の全てのピアＰ１〜Ｐ１０のそれぞれに対し配信ルートを形成して情報を配信している。
【００５４】
これに対し図４（Ｂ）の本発明のデータ配信方法にあっては、ピアＰ０から情報を発信する場合、宛先となるピアＰ１〜Ｐ１０をいくつかのグループに分け、各グループの代表ピアに対してのみ情報を配信する配信ルートを形成する。
【００５５】
まず情報を発信するピアＰ０から他のピアＰ１〜Ｐ１０を見て作成されたグループ情報から、ピアＰ１〜Ｐ３でグループＧ１が形成され、ピアＰ４〜Ｐ７でグループＧ２が形成され、更にピアＰ８〜Ｐ１０でグループＧ３が形成されていたとする。そして、グループＧ１は代表ピアＰ１を持ち、グループＧ２は代表ピアＰ４を持ち、グループＧ３は代表ピアＰ８を持っていたとする。
【００５６】
この場合、ピアＰ０はグループＧ１，Ｇ２，Ｇ３の代表ピアＰ１，Ｐ４，Ｐ８に対し配信ルートを形成して情報を発信する。このため図４（Ａ）の従来のデータ配信方法にあって、発信元のピアＰ０は１：１０通信であったものが、図４（Ｂ）の本発明のデータ配信方法にあっては１：３通信となり、発信ピアＰ０から効率良く情報を発信することができる。
【００５７】
この場合、ピアＰ０から発信した情報を受けた代表ピアＰ１，Ｐ４，Ｐ８は、それぞれが独立に自分自身から他のピアを見てグループ分けしたグループ情報を持ち、このグループ情報に従ってグループの代表ピアに受信した情報を転送する中継を行うようになるが、結果的には図示のように、代表ピアＰ１，Ｐ４，Ｐ８から、ピアＰ０から見たグループ内の代表ピア以外のピアに対し情報が配信されることになる。
【００５８】
図５は、図４（Ｂ）のピアＰ０が保有しているグループ情報３２の説明図である。このグループ情報３２は、グループ名、代表ピア及び所属ピアで構成される。例えばグループＧ１の代表ピアはピアＰ１であり、このグループ内にはピアＰ２，Ｐ３が所属している。ピアＰ０がピアＰ１〜Ｐ１０の全てに対し情報を発信する場合には、図５のグループ情報３２を参照し、宛先となるピアをグループＧ１〜Ｇ３ごとに分けて宛先情報とし、更にグループの代表ピアを選んで、これを配信先として情報の発信を行うことになる。
【００５９】
図６は、ピアＰ０〜Ｐ５を例にとって、ピアＰ０から情報を残りのピアＰ１〜Ｐ５に発信したときのグループ情報に基づく配信ルートの決定方法の説明図である。図６（Ａ）は、ピアＰ０からピアＰ１〜Ｐ５を宛先としてデータを発信した場合である。
【００６０】
このときピアＰ０から見たグループ情報はグループＧ００のみであり、代表ピアはピアＰ１であったとすると、ピアＰ０はグループＧ００の代表ピアＰ１に対し宛先をピアＰ１〜Ｐ５としたデータを発信する。図６（Ｂ）は、ピアＰ１がピアＰ０からのデータを受信し、他のピアに発信する場合である。ここでピアＰ１から見たグループ情報は、ピアＰ０を含むグループＧ１０、ピアＰ２を含むグループＧ１１、ピアＰ３〜Ｐ５を含むグループＧ１２であり、グループＧ１０，Ｇ１１，Ｇ１２の代表ピアは、ピアＰ０，Ｐ２，Ｐ３であったとする。
【００６１】
このためピアＰ１は、グループＧ１１の代表ピアＰ２とグループＧ１２の代表ピアＰ３にデータを発信する。このとき代表ピアＰ２に対する宛先は代表ピアＰ２のみとなる。一方、代表ピアＰ３に対する宛先は、ピアＰ３〜Ｐ５の３つを含む。更にグループＧ１０のピアＰ０は宛先にないことから、データは発信しない。
【００６２】
図６（Ｃ）は、ピアＰ３から見たグループ情報であり、ピアＰ０〜Ｐ２を含むグループＧ３１と、ピアＰ３〜Ｐ４を含むグループＧ３０となっている。このためデータを受信したピアＰ３は、これ以上転送するグループがないことから、グループＧ３０内のピアＰ４，Ｐ５に対しデータを配信する。この図７（Ａ）（Ｂ）（Ｃ）の３段階の代表ピアを経由する配信ルートの形成により、ピアＰ０が発信したデータを他のピアＰ１〜Ｐ５に効率よく配信することができる。
【００６３】
次に、図２のグループ情報作成部３０によるグループ分けによるグループ情報の作成方法を説明する。本発明が対象とするピアツーピア型コミュニケーションシステムにあっては、新しく参加したピアは既存のピアに対し、同時に接続するのではなく、必ず時間差を持って接続される。図７は、新たなピアが接続された際の伝送経路を決定するためのグループ分けの方法を示している。
【００６４】
まずステップＳ１で、注目しているピアＰ０に対し既存のピアＰ１が接続されており、これによって既存のピアＰ１についてピアＰ０から見てグループＧ１が形成され、この場合、伝送経路は一通りのみである。次に、ステップＳ２のように新しいピアＰ２が接続されたとすると、注目ピアＰ０、既存ピアＰ１及び新しいピアＰ２の三者の間のネットワーク上の距離Ｌ01，Ｌ02，Ｌ12を求め、ステップＳ３でこれを比較する。
【００６５】
ここでネットワーク上の距離とは「ＰＩＮＧ」に対するレスポンス時間や回線速度のことであり、「距離が近い」とは高速にデータ送信できることを意味する。またＩＰ通信のブロードキャストが届く範囲を「距離が近い」と判断してもよい。なお「ＰＩＮＧ」はＴＣＰ／ＩＰネットワークの通信プロトコルで利用できるユーティリティプログラムであり、ＩＣＭＰ  ＥＣＯＨＯパケットを発信し、その応答を待つことで、パケット往復に要した時間を表示することができる。
【００６６】
ステップＳ３における比較の結果、
Ｌ02＞Ｌ01＞Ｌ12
であれば、ステップＳ４のように新しいピアＰ２は既存のピアＰ１のグループＧ１に属し、そのグループの代表ピアはピアＰ１を維持する。一方、
Ｌ01＞Ｌ02＞Ｌ12
ならば、ステップＳ５のように新しいピアＰ２は既存のピアＰ１のグループＧ１に属し、この場合、グループの代表ピアはピアＰ１からピアＰ２に交替する。
【００６７】
更にステップＳ４，Ｓ５以外の場合、即ち
Ｌ12＞Ｌ01  ａｎｄ  Ｌ02＞Ｌ12
には、ステップＳ６のように新しいピアＰ２はピアＰ１とは別の新しいグループＧ２を形成し、その代表ピアとなる。
【００６８】
図８、図９及び図１０は、ステップＳ１のように、注目ピアＰ０から見て代表ピアＰ１のグループＧ１と代表ピアＰ２のグループＧ２が既に作成され、この状態で新しいピアＰ３が出現した場合のグループ分けによる伝送経路の決定方法の説明図である。
【００６９】
ステップＳ１で新しいピアＰ３が出現した場合、グループＧ１，Ｇ２の代表ピアＰ１，Ｐ２のうち、注目ピアＰ０との距離Ｌ01と距離Ｌ02を比較し、注目ピアＰ０に近い方の代表ピア、この場合には代表ピアＰ１を選択する。そして、注目ピアＰ０、既存の代表ピアＰ１及び新しいピアＰ３との三者の間のネットワーク上の距離Ｌ01，Ｌ03，Ｌ13をステップＳ２で比較する。
【００７０】
この距離の比較により
Ｌ03＞Ｌ01＞Ｌ13
であれば、ステップＳ３のように新しいピアＰ３は既存のピアＰ１のグループＧ１に属し、代表ピアはピアＰ１を維持する。これに対し
Ｌ01＞Ｌ03＞Ｌ13
の場合には、ステップＳ４のように新しいピアＰ３は既存のピアＰ１と同じグループＧ１に属するが、代表ピアはピアＰ１から新しいピアＰ３に交替する。
【００７１】
更に、ステップＳ３，Ｓ４以外のとき、即ち
Ｌ13＞Ｌ03  ａｎｄ  Ｌ13＞Ｌ01
のときには図９に進み、新しいピアＰ３に対し次に近いグループＧ２の代表ピアＰ２と間でのグループ分けを行う。この場合にはステップＳ６のように、新しいピアＰ３、注目ピアＰ０及び代表ピアＰ２との間で三者の間の距離Ｌ02，Ｌ03，Ｌ23を求め、ステップＳ７で比較する。
【００７２】
このステップＳ７における距離の比較により
Ｌ03＞Ｌ02＞Ｌ23
であれば、図１０のステップＳ８のように新しいピアＰ３は既存のピアＰ２のグループＧ２に属し、代表ピアはピアＰ２を維持する。これに対し
Ｌ02＞Ｌ03＞Ｌ23
の場合には、ステップＳ９のように新しいピアＰ３は既存のピアＰ２と同じグループＧ２に属するが、代表ピアはピアＰ２から新しいピアＰ３に交替する。
【００７３】
更にステップＳ８，Ｓ９以外の場合、即ち
Ｌ23＞Ｌ03  ａｎｄ  Ｌ23＞Ｌ02
の場合には、ステップＳ１０のように新しいピアＰ３は別の新しいグループＧ３を形成し、その代表ピアとなる。
【００７４】
図１１及び図１２は、図２のグループ情報作成部３０によるグループ作成処理のフローチャートである。まずステップＳ１で自分自身となる注目ピアＰ０に対し最初のピアＰ１の接続があると、新グループを生成して代表ピアＰｉに設定する。続いてステップＳ２で新ピアＰｎの接続があると、ステップＳ３で自分自身となる注目ピアＰ０に対し最小距離となるグループの代表ピアＰｉを選択し、ステップＳ４で自分自身の注目ピアＰ０、代表ピアＰｉ、及び新ピアＰｎとの間の距離Ｌ0i、Ｌ0n、Ｌinを比較する。
【００７５】
そしてステップＳ５の距離の条件が成立すると、ステップＳ６で、新ピアＰｎは代表ピアＰｉのグループに属し、代表ピアはピアＰｉを維持する。ステップＳ５の距離条件が成立しなければ、ステップＳ７の距離条件をチェックし、この距離条件が成立すると、ステップＳ８で新ピアＰｎは代表ピアＰｉのグループに属し、代表ピアは新ピアＰｎに変更する。
【００７６】
一方、ステップＳ７の距離の条件が成立しない場合には、図１２のステップＳ９に進んで次に近いグループの代表ピアが存在するか否かチェックし、存在する場合にはステップＳ１０で代表ピアに選択してステップＳ４からの処理を繰り返す。存在しない場合にはステップＳ１１に進み、新ピアＰｎに新グループを生成し、代表ピアに設定し、再びステップＳ２に戻り、次の新ピアの接続を待つ。
【００７７】
図１３は、図１１及び図１２のフローチャートに従った動的なグループ作成で生ずる不具合に対し強制的にグループ分けの再計算を行わせるための説明図である。図１１及び図１２のグループ作成処理のように新たなピアが出現するごとにグループ作成処理を行って代表ピアを決めることで伝送経路を見つける方法は、高速に伝送経路を見つけることのできる利点を有するものの、ピアの接続順によっては必ずしも最適な経路とならない場合がある。
【００７８】
例えば図１３（Ａ）のように、自分自身となる注目ピアＰ０から見て代表ピアＰ１のグループＧ１と代表ピアＰ２のグループＧ２が作成された状態で新しいピアＰ３が出現した場合、この新しいピアＰ３は代表ピアＰ１，Ｐ２のうち自分自身である注目ピアＰ０に対し距離の短い代表ピアＰ１を既存ピアとしてグループ分けが開始されるため、グループＧ１に入ってしまう。
【００７９】
しかしながら、新しいピアＰ３は距離的にはグループＧ２に近く、グループＧ２に属した方が自然である。そこで図１３（Ｂ）のように、一度グループ分けが行われた後にＰ３を最適な経路を取ることのできるグループＧ１に移動させる処理が必要となる。そこで本発明にあっては、定期的に任意のピアに対し現在所属しているグループから離脱させて、もう一度、図１１及び図１２のフローチャートに従ったグループ分けの再処理を行わせる方法が必要となる。
【００８０】
このグループ分けの再処理における再処理の対象となるピアの選択は、例えば乱数を使って選択する方法や、自分自身が移動したことを検出したピアが全ピアに対し再処理を求める方法などが利用できる。
【００８１】
更に図１１及び図１２のフローチャートは、ピアがシステムに参加して接続された場合のグループ分けであったが、ピアはシステムから脱出して切断することもあり得る。このようにシステムに対し切断されたピアについては、グループ代表でなければ単にグループ情報から削除すればよい。
【００８２】
これに対し切断したピアがグループ代表であった場合には、グループ代表が消えてしまうことから、そのグループに属している全てのピアをグループから開放し、開放したピアを図１１及び図１２のグループ作成処理における新たに接続してきたピアとして、どのグループに属するかのグループ作成処理を行う。
【００８３】
また切断ピアが代表ピアであった場合の対応として、削除する代表ピアに対しネットワーク上の距離が近いグループ内のピアを新しい代表ピアに格上げするような方法を取ってもよい。
【００８４】
次に、図２のデータ発信部３４及びデータ中継部３５で使用する配信情報と、それに基づくデータ配信を説明する。図１４は、本発明による配信情報を用いたデータ配信方法の説明図である。図１４においては、ピアＰ０が情報の発信源であり、ピアＰ１〜Ｐ８の全てを宛先として情報を発信した場合である。このとき発信元となるピアＰ０の配信情報は図１５の配信情報４０−０のようになる。
【００８５】
この情報４０−０は、宛先情報４４、経路情報４６及びデータ４８で構成されている。宛先情報４４には宛先ピアＰ１〜Ｐ８が格納される。経路情報４６には、発信元であるピアＰ０が格納される。このピアＰ０からの配信情報４０−０が、図１４のようにピアＰ１，Ｐ２，Ｐ３にデータ配信が行われたとすると、ピアＰ３は配信情報４２−１を受信し、またピアＰ３がグループＧ１，Ｇ２の代表ピアＰ４，Ｐ７に配信するための配信情報４２−２，４２−３を作成する。
【００８６】
即ち、ピアＰ３が受信する配信情報４２−１は、宛先情報４４がＰ３〜Ｐ８となっており、経路情報４６は既に経由したピアＰ０〜Ｐ２となっている。またピアＰ３からグループＧ１の代表ピアＰ４に対する配信情報４２−２は、ピアＰ３の持つグループ情報に基づき、受信した宛先情報４２−１の中からピアＰ３自身を削除した宛先情報を対象に、ピアＰ４〜Ｐ６を取り出して設定する。
【００８７】
また経路情報４６は、それまで経由したＰ１〜Ｐ２に新たにピアＰ３を加えている。一方、グループＧ２の代表ピアＰ７に対する配信情報４２−３は、グループＧ２のピアＰ７，Ｐ８をセットすると共に、経路情報４６には、それまで経由したピアＰ０〜Ｐ２に新たにピアＰ３を加えている。
【００８８】
次に本発明の配信情報に含まれている経路情報の必要性を説明する。図１６は配信情報に経路情報を持たない場合の問題点を表わしている。図１６において、中央のネットワーク領域４５のように、ピアＰ１〜Ｐ５が存在し、ピアＰ１〜Ｐ４が配信ルート４５−１〜４５−４に示すようなグループ分けを行っていたとする。即ち、配信ルート４５−１によりピアＰ１はピアＰ３〜Ｐ５でグループＧ５を形成し、代表ピアＰ３にデータを配信する。また配信ルート４５−２によりピアＰ２はピアＰ３，Ｐ４，Ｐ５でグループＧ２を形成し、代表ピアＰ３にデータを配信する。また配信ルート４５−３によりピアＰ３はピアＰ１，Ｐ４，Ｐ５でグループＧ３を形成し、代表ピアＰ４にデータを配信する。
【００８９】
更に配信ルート４５−４によりピアＰ４はピアＰ１，Ｐ２，Ｐ５でグループＧ４を形成し、代表ピアＰ１にデータを配信する。このようなピアＰ１〜Ｐ４のそれぞれにおける転送ルート４５−１〜４５−４の形成により、もし経路情報を持っていない場合には、ピアＰ１，Ｐ２，Ｐ３，Ｐ４の間で情報を配信し合い、永久にピアＰ５に届かないことも考えられる。
【００９０】
この場合、ピアＰ５に情報が届かないことも問題であるが、更にピアＰ１，Ｐ２，Ｐ３，Ｐ４の間で永久にデータ配信を繰り返してしまうこととなり、ピアにかかる負荷が非常に大きくなってしまう。このような図１５における問題は、配信情報の中に経路情報を持たせることで解消できる。即ち、配信ルート４５−１〜４５−４の順番でピアＰ１，Ｐ２，Ｐ３，Ｐ４とデータ配信が行われた場合、転送ルート４５−４の段階で経路情報としてピアＰ１，Ｐ２，Ｐ３，Ｐ４が作られており、この状態で残っているのは宛先情報のピアＰ５のみであることから、最後に残った宛先Ｐ５へのデータ配信が可能となる。
【００９１】
図１７は、図１５と同じピアＰ０〜Ｐ８についての異なる宛先情報によるデータ配信方法である。この例では、ピアＰ３が受信した配信情報４２−１１の宛先情報はピアＰ３，Ｐ５，Ｐ６，Ｐ８であり、ピアＰ４，Ｐ７が抜けており、経路情報を見るとピアＰ７は既に配信が済んでいることが分かる。
【００９２】
このため、ピアＰ３から見たグループＧ２の代表ピアは代表ピアＰ７であるが、代表ピアＰ７へのデータ配信は既に済んでいることが経路情報４６から分かるため、配信情報４２−３１として宛先情報４４をピアＰ８とし、経路情報にピアＰ３を含めてピアＰ８に直接、情報を配信する。また代表ピアＰ４へのデータ配信は配信情報４２−２１として宛先情報４４をピアＰ５，Ｐ６とし、経路情報４６にピアＰ３を含めて代表ピアＰ４を経由してピアＰ５，Ｐ６に情報を配信する。
【００９３】
図１８は、図２のデータ発信部３４によるデータ発信処理のフローチャートである。このデータ発信処理は、ステップＳ１で宛先ピアを指定し、ステップＳ２で、自分のグループ情報に基づき、指定された宛先ピアをグループ分けしてグループごとの宛先情報を生成する。続いてステップＳ３で経路情報に自分自身を登録した後、ステップＳ４でグループの代表ピアにグループごとに作成した宛先情報、経路情報及びデータを加えた配信情報を配信する。
【００９４】
図１９は、図２のデータ中継部３５によるデータ中継処理のフローチャートである。このデータ中継処理は、ステップＳ１で他のピアから宛先情報、経路情報及びデータを受信すると、ステップＳ２で宛先情報に自分が存在するか否かチェックし、存在すれば、ステップＳ３で受信データを取り込んで宛先情報から自分を削除する。ステップＳ２で宛先情報に自分が存在しなければ、ステップＳ３の受信データの取込みは行わない。
【００９５】
次にステップＳ４で経路情報に自分自身を登録した後、ステップＳ５で自分の保有するグループ情報に基づき宛先ピアをグループ分けし、グループごとの宛先情報を作成する。そして、ステップＳ６でグループの代表ピアに宛先情報、経路情報及びデータを配信する。もちろん、ステップＳ６でグループの代表ピアが既に配信済みの場合には、そのグループの宛先となるピアに直接配信することになる。
【００９６】
(代理ピア)
次に、本発明が対象とするピアツーピア型コミュニケーションシステムで使用する代理ピアを説明する。図２０は、代理ピアが存在しない場合のコラボレーションにおけるデータ共有方法である。まず図２０（Ａ）のように、ピア１０−１とピア１０−２がテキストファイルなどから成る共有データ５２−１，５２−２をそれぞれ保有していたとする。
【００９７】
この状態で、ピア１０−１においてカーソルを共有データ５２−１の「Ｄ」に合わせ、図２０（Ｂ）のようにキー入力５４として「バックスペースキー（以下「ＢＳ」という）」を操作した後に、「Ｃ」のキーを操作し、共有データ５２−１のカーソルの前に「Ｃ」を挿入したとする。このようなピア１０−１における共有データ５２−１の更新操作が行われると、ピア１０−１から更新データ５５がピア１０−２に送られ、更新データ５５はキー入力５４として行ったＢＳキーとＣキーのキー制御データであり、これを受けてピア１０−２において共有データ５２−２のカーソルの前に「Ｃ」が挿入される操作が行われ、ピア１０−１，１０−２の共有データ５２−１，５２−２の一様性が保証される。
【００９８】
しかしながら、図２０（Ｃ）のように、ピア１０−１でBSキーに続いてＣキーを操作するキー入力５４が行われた際に、ピア１０−２が電源断により停止していた場合、ピア１０−１における共有データ５２−１の更新が行われても、停止しているピア１０−２の共有データ５２−２は更新されない。
【００９９】
そこで図２０（Ｄ）のように、ピア１０−２がその後起動してコラボレーションに参加した際に、ピア１０−１が保有している共有データ５２−１から共有データ５２−１を全て貰う共有データ転送５７を受けて共有データ５２−２を上書きすることで、一様性を保持する。
【０１００】
もちろん、図２０（Ｄ）でピア１０−２が起動した際にピア１０−１からキー入力５４の操作内容を示すキー制御データである更新データを受けてもよいが、ピアの数が多く且つ各ピアが接続や切断を繰り返すような場合、全ピアがどこまで更新データを受け取っているかを判断して処理することはネットワーク上の木距離が近い場合以外は現実的ではない。
【０１０１】
ここで図１９（Ｄ）のように、電源断により停止したピア１０−２が起動した際に、ピア１０−１からそのとき保有している共有データ５２−１を受け取って自分の共有データ５２−２に上書きする方法は、次の問題がある。
（１）コラボレーションのデータが大きくなってきた場合に、データを受信するのに時間      がかかる。
（２）ピア１０−２がコラボレーションに参加するとき、ピア１０−１がコラボレーショ      ンに参加していなければならない。
【０１０２】
そこで本発明にあっては、図１，図２のように、ピアツーピア型コミュニケーションシステムの中に代理ピア１２を設け、特定のピアが電源断により停止している間、代理ピア１２が他のピアからの転送情報を受信して蓄積し、電源断により停止したピアが電源投入により参加してきた際に、代理ピア１２から蓄積したデータを送って共有データを更新させる。
【０１０３】
図２１は、本発明における代理ピアの処理方法の説明図である。図２１（Ａ）において、ピア１０−１，ピア１０−２に対し代理ピア１２が設けられており、ピア１０−２が電源断となった状態で、ピア１０−１においてＢＳキーに続いてＣキーを押すキー入力５４が行われたとする。
【０１０４】
この場合、ピア１０−２に対するピア１０−１からの更新データ５５は代理ピア１２に配信され、そのファイル５６に更新データ５５がバッファリングされる。その後、図２１（Ｂ）のように、ピア１０−２に電源が入れられて起動し、コラボレーションに参加してきた場合には、代理ピア１２がファイル５６にバッファリングしているピア１０−１からの更新データ５５を、起動したピア１０−２に送り、更新データ５５により共有データ５２−２を更新する。
【０１０５】
これによって、ピア１０−１の共有データ５２−１と電源断により一時停止したピア１０−２の共有データ５２−２の一様性を保証することができる。
【０１０６】
図２２は、本発明で使用する代理ピア１２の機能構成のブロック図である。代理ピア１２は、代理処理部５０が設けられている点が図２のピア１０−０と相違しており、代理処理部５０には代理依頼元情報５１が設けられている。代理依頼元情報５１には代理を行うピアの登録が行われている。
【０１０７】
代理を行うピアは基本的には１つのピアであるが、後の説明で明らかにするように複数のピアを代理依頼元として登録することもできる。それ以外のデータ配信部２４、データ伝送部２６及びパケット伝送部２８の構成及び機能は、図２の実施形態と同じである。
【０１０８】
図２３は、図２２の代理ピア１２の代理処理のフローチャートである。まずステップＳ１で代理依頼元ピアを登録した後、ステップＳ２で代理依頼元ピアが動作していないか否かチェックしている。代理依頼元ピアが電源断などにより動作していないことを認識すると、ステップＳ３で他のピアからの配信情報を受信した際に、受信した宛先情報の中に代理依頼元が存在するか否かステップＳ４でチェックし、存在する場合にはステップＳ５で受信データを蓄積する。
【０１０９】
続いてステップＳ６で宛先情報から代理依頼元ピアを削除した後、ステップＳ７で宛先情報に宛先ピアが残っていれば、ステップＳ８で代理依頼元のグループ情報に従った配信処理を行う。宛先情報に宛先ピアがなければ、ステップＳ８のグループ情報に従った配信処理即ち他のグループの代表ピアに対する情報配信は行わない。
【０１１０】
続いてステップＳ９で代理依頼元ピアが動作を開始したか否かチェックし、動作を開始していなければ、ステップＳ３からの処理を繰り返している。ステップＳ９で代理依頼元ピアが動作を開始したことを判別すると、ステップＳ１０に進み、蓄積しているデータを代理依頼元ピアに転送して書き込む。
【０１１１】
図２４は、本発明における代理ピアによる処理方法の他の実施形態であり、この実施形態にあっては、代理ピアで共有データを保持し、この共有データを更新データにより更新し、代理依頼元に送るようにしたことを特徴とする。図２４（Ａ）は、ピア１０−１，１０−２に対し代理ピア１２が設けられ、ピア１０−２が電源断で停止している。
【０１１２】
この場合、代理ピア１２はピア１０−１の共有データ５２−１と同じ共有データ５６を持っており、ピア１０−１でキー入力などの操作が行われると、これに伴う更新データ５５が代理ピア１２に配信され、更新データ５５に基づいて共有データ５２−３の更新を行っている。
【０１１３】
その後、図２４（Ｂ）のように、ピア１０−２が起動してコラボレーションに参加してくると、代理ピア１２が自分の保有している共有データ５６を、起動したピア１０−２に送って、それまでの共有データ５２−２を上書きすることで、共有データの一様性を確保する。このときピア１０−１が電源断により停止しているが、このため、それ以降についてはピア１０−２における更新データを代理ピア１２が受けて共有データ５６を更新し、ピア１０−１が起動したときに、同様にして共有データ５６を送って上書きすることになる。
【０１１４】
この図２４における代理ピア１２が共有データを保有して電源断となった後に起動したピアに送って上書きするデータ共有方法は、ピア１０−１，１０−２に対し代理ピア１２がネットワーク上の距離から見て近い位置にある場合に適している。逆にネットワーク上の距離が遠い場合には、図２１に示したようなキー入力の内容を表わす更新データを代理ピアでバッファリングして、起動したピアに転送するデータ共有方法が適している。
【０１１５】
図２５は、本発明の代理ピアによるデータ共有方法の他の実施形態であり、この実施形態にあっては１台の代理ピアで複数のピアの代理を行うようにしたことを特徴とする。図２５（Ａ）にあっては、代理ピア１２はピア１０−１〜１０−５を代理しており、このうちピア１０−１のみが動作しており、ピア１０−２〜１０−５は電源断などにより停止している。
【０１１６】
このため、ピア１０−１における共有データの更新データ５５が代理ピア１２に送られ、バッファリングされている。図２５（Ｂ）は、停止していたピア１０−３が起動してコラボレーションに参加した状態であり、起動したピア１０−３に対し代理ピア１２がバッファリングしていた更新データ５５を送信し、ピア１０−３の共有データを更新する。
【０１１７】
ここで本発明の代理ピアとしては、グループ化によるデータ配信方法における各グループの代理ピアを意図的に代理ピアとしてもよい。この理由は、一般的に代理ピアとして使用するパーソナルコンピュータは古くなったものを再利用して使っており、他にすべき作業がないことが多く、更に代理ピアはネットワーク環境の良好なところに設置される可能性が高いためである。
【０１１８】
このため代理ピアを意図的にグループの代表ピアとすることにより、ピアツーピア型のデータ配信で負荷の集中が予想される代表ピアを代理ピアと兼ねることで、通常のピアにおける代表ピアとして選択されたことによる負担を軽減できる。代理ピアをグループの代表ピアにする方法としては、代理ピアを無条件でグループ代表にする方法、又は代理ピアのネットワーク上の距離にマイナスオフセットを付け、ネットワーク上の距離を測定する際にグループ代表として代理ピアが必然的に選ばれる方法などを取ることができる。
【０１１９】
この代理ピアの距離にオフセットを付ける方法は、例えばネットワーク環境の劣悪な位置に代理ピアが設置されていた場合には、この代理ピアについてはプラスのオフセットを付けることで、逆に代理ピアに選ばれないようにすることもできる。
【０１２０】
図２６は、ピアツーピア型コミュニケーションシステムに代理ピアを設けても各ピアの共有データの一様性が保証できない問題を示している。図２６（Ａ）は、ピア１０−１，１０−２に対し代理ピア１２が設けられ、ピア１０−２が電源断で停止している。この状態でピア１０−１にキー入力５４−１としてバックスペースキーの操作が行われると、更新データ５５−１が代理ピア１２に送られ、ファイル５６−１にバッファリングされる。
【０１２１】
次に図２６（Ｂ）のように、キー入力５４−２としてＣキーの操作が行われたタイミングで、代理ピア１２が電源断などにより停止し、キー入力５４−２に伴う更新データをファイル５６−１にバッファリングできなかったとする。このような代理ピア１２の停止は、ネットワークにおいてルータの故障などによる通信不能あるいは停電などにより生ずることがある。
【０１２２】
このような代理ピア１２が停止した後に、図２６（Ｃ）のように代理ピア１２及びピア１０−２が起動した場合、代理ピア１２のファイル５６−１からバッファリングしている更新データ５５−１のみ、即ち図２６（Ａ）のピア１０−１におけるキー入力５４−１に対応した更新データのみが、ピア１０−２に送られて共有データ５２−２を更新するが、図２６（Ｂ）のキー入力５４−２に伴う更新データが欠落しているため、ピア１０−１の共有データ５２−１とピア１０−２の共有データ５２−２は不一致となってしまう。このような代理ピアの通信不能や電源断による停止時の共有データの不一致を回避するため、本発明にあっては、図２７及び図２８のように複数の代理ピアを設ける。
【０１２３】
図２７（Ａ）は、ピア１０−１，１０−２に対し２台の代理ピア１２−１，１２−２を設けている。この場合、ピア１０−２は電源断により停止しており、ピア１０−２に対するピア１０−１からの更新データ５５−１はピア１２−１のファイル５６−１にバッファリングされている。この状態で図２７（Ｂ）のように代理ピア１２−１が電源断により停止したとすると、キー入力５４−２による更新データ５５−２は代理ピア１２−２に送られてファイル５６−２にバッファリングされる。
【０１２４】
その後、図２８（Ｃ）のように代理ピア１２−１，ピア１０−２が電源投入により起動したとすると、代理ピア１２−１からはキー入力５４−１に対応した更新データ５５−１がピア１０−２に送られ、また代理ピア１２−２からはキー入力５４−２に対応した更新データ５５−２がピア１０−２に送られ、ピア１０−２の共有データ５２−２は正常に更新され、ピア１０−１の共有データ５２−１と一致させることができる。これ以外に本発明における代理ピアによるデータ共有方法としては、以下に列挙するような方法を取ることができる。
【０１２５】
（１）図２７及び図２８の代理ピア１２−１，１２−２に送る更新データ５５−１，５５−２のそれぞれに更新時刻を付加することで、ピア１０−２におけるデータのマージを行い易くする。
【０１２６】
（２）複数の代理ピアを設けている場合に、全ての代理ピアに対し更新データを送る。
【０１２７】
（３）複数の代理ピアのうちの一部が停止して、その後、起動した際に、各代理ピアの間で通信を行って、お互いに更新データのやり取りを行い、全ての代理ピアが同一の更新データを持つようにする。
【０１２８】
（４）複数の代理ピアが更新データの代わりに共有データを持つようにする。
【０１２９】
図２９は、複数の代理ピアを設けることなく各ピア間の共有データの一貫性を維持するデータ共有方法の説明図である。図２９（Ａ）は、図２６（Ｃ）と同様に、それ以前に代理ピア１２が電源断となった後に起動した状態であり、代理ピア１２に保持されている更新データ５５−１をピア１０−２に送って共有データ５２−２を更新した状態である。
【０１３０】
しかしながら、このとき代理ピア１２は図２６（Ｂ）のキー入力５４−２の更新データを持っていないことから、ピア１０−１の共有データ５２−１とピア１０−２の共有データ５２−２は不一致となっている。そこで図２９（Ｂ）のように、ピア１０−１とピア１０−２の間で共有データ５２−１のチェックサム５８−１とピア１０−２の共有データ５２−２のチェックサム５８−２を比較するチェックサム比較処理６０を行い、チェックサムの不一致を認識し、図２９（Ｃ）のようにピア１０−１から共有データ５２−１をピア１０−２に送って共有データ５２−２に上書きする。
【０１３１】
ここでチェックサム５８−１，５８−２自体のデータは通常、数バイト〜数十バイトであり、共有データ自体の比較に比べると各段に小さく、共有データの一致、不一致を判別するための負荷は十分に少ない。このチェックサムの比較による共有データの検証により、代理ピアを複数設けることなく確実に各ピアにおける共有データの一様性を保証することができる。
【０１３２】
（高速データ伝送方法）
次に図２のピア１０−０に設けたデータ伝送部２６の符号化送信部３６と受信復号化部３８によるデータ高速通信の方法を説明する。図３０は、通常のネットワーク通信（ＩＰ通信）の概略であり、ピア１０−１からピア１０−２にデータ転送を行っている。このデータ転送において、データは、通常１５００バイト程度のパケット６２という小さな単位に小分けされて送信される。
【０１３３】
ところがネットワークの性質上、転送経路において、あるパケットが失われる消失６４がおきたり、パケットの順番が変わる入換え６６が起きることがありうる。ネットワーク通信（ＩＰ通信）にあっては、このようなパケットの消失や入換えを許容するＵＤＰ通信と、パケットに番号をつけパケットが届かなかった際には再送を行うＴＣＰ通信の２種類がある。
【０１３４】
データ転送などの高信頼性が要求される通信はＴＣＰ通信を行うのが一般的である。しかしながら、ＴＣＰ通信はデータの信頼性を確保しているため、ネットワーク上の距離が離れるとデータの往復時間であるＲＴＴ（Ｒｏｕｎｄ  Ｔｉｍｅ  Ｔｒｉｐ）が大きくなり、実効通信速度が小さくなるという問題がある。
【０１３５】
図３１（Ａ）は、ＴＣＰ通信であり、送信側からパケットを送信すると受信側はＡＣＫと呼ばれる受信確認信号を返す。送信側は受信確認信号ＡＣＫによりパケットが届いた事を確認すると、次のパケットを送信する。途中でパケットが消失した際には、受信確認信号ＡＣＫが返ってこないため一定期間に同じパケットを再送する。
【０１３６】
このためＴＣＰ通信では、図３１（Ｂ）のようにＲＴＴが大きくなると無駄時間が発生し、一定の回線速度に対し実効速度が落ち込み、回線のもつ本来の速度が充分に生かしきれない。このような問題を解決するためにＴＣＰ時間のＶｅｇａｓやＲｅｎｏと呼ばれループロトコルが検案されている。
【０１３７】
そこで本発明にあっては、図３２のようにＵＤＰ通信によるパケット転送を採用し、送信側でデータを符号化して送ることで受信側でエラー修正ができるようにしている。図３２にあっては、送信側ピア１０−１で元データ７２を符号化送信部３６により符号化して、伝送経路７０にパケット６２として転送する。
【０１３８】
受信側ピア１０−２にあっては、受信復号化部３８により伝送経路７０でパケットの消失６４や入換え６６があってもエラー修正により復元データ７４を得ることができる。これによってＵＤＰ通信による高速通信を行い且つパケット消失や入換えに対し送信側で符号化して受信側で復号化する事でエラー訂正によりデータの信頼性を保障する。
【０１３９】
図３３は、本発明による高速かつ高信頼性のデータ通信方法の原理をｍ＝４ビットデータの転送を例にとって示している。本発明のデータ伝送方法は、プール代数による連立方程式の解法をベースにしている。
【０１４０】
いま転送する元データ７２をｍビットデータ（ｂ0，ｂ1，ｂ2，ｂ3）とすると、適当なｍビットでｎ系列のデータ列Ｋnmとして（Ｋn0，Ｋn1，Ｋn2，Ｋn3）を用いて連立方程式
【０１４１】
【数１】
2006271006.tif 000003
の解ｐn＝ｐ0，ｐ1，ｐ2，ｐ3…ｐn-1を求める。但しｎ＝０，１，２・・・となるｍ以上の整数である。そしてデータ列Ｋnmと連立方程式の解ｐnをの組ををパケットＫｐとして連続送信する。即ち、ｎ個のパケットＫｐ＝（Ｋ0ｐ0，Ｋ1ｐ1，Ｋ2ｐ2…Ｋnｐ3）を送信する。
【０１４２】
受信側にあっては（１）式に受信されたパケットＫｐ＝（Ｋ0ｐ0，Ｋ1ｐ1，Ｋ2ｐ2…Ｋnｐ3）から得られたｍビットのデータ列Ｋnm＝（ｋn0，ｋn1，ｋn2，ｋn3）及び解ｐn＝（ｐ0，ｐ1，ｐ2，ｐ3）を連立方程式に代入して解くことで、ｍビットの元データ（ｂ0，ｂ1，ｂ2，ｂ3）を復元する。図３１の例では、元データ７２としてｍビットの２進数データ０１０１を伝送する場合である。この時データ列Ｋnとして
ｋ0＝１００１
ｋ1＝００１１
ｋ2＝１１００
ｋ3＝０１０１
ｋ4＝１０１１
を定めている。そして元データ７２及びデータ列Ｋnを（１）式の連立方程式に代入することで、符号化処理７５を実行する。この符号化処理７５は各項の論理席の加算により解ｐn＝（ｐ0，ｐ1，ｐ2，ｐ3，ｐ4）を求める。この連立方程式の解を求める符号化により伝送経路７０に示すようにデータ列Ｋnと符号化処理７５６で求めた解ｐnの組を、それぞれパケットＫ0ｐ0，Ｋ1ｐ1，Ｋ2ｐ2，Ｋ3ｐ3，Ｋ4ｐ4し、５つのパケットを受信側ピア１０−２に転送する。
【０１４３】
この伝送経路７０において例えば１番目と２番目のパケットに入換え６６が発生し、また４番目のパケットが消失６４となったとする。受信側ピア１０−２にあっては、受信パケットＫ0ｐ0，Ｋ1ｐ1，Ｋ2ｐ2，Ｋ3ｐ3，Ｋ4ｐ4のデータ列Ｋnのうちのビット１に対応するデータビットを有効とし、ビット０に対応するデータビットを消去した連立方程式を生成して解く復号化処理７６を行う。
【０１４４】
そして、この復号化処理７６で作り出された４つの連立方程式を解くことで、４ビットデータ（ｂ0，ｂ1，ｂ2，ｂ3）＝（０１０１）とする復元データ７４を得ることができる。ここで送信側ピア１０−１における符号化処理７５となる（１）式の連立方程式の計算はプール代数において各ビットｂｎとデータ列Ｋｎの論理積（ａｎｄ）を行った後、１の数を数えること、すなわちパリティビットを見るだけで済むため、コンピュータにより非常に早く解くことができる。
【０１４５】
また受信側ピア１０−２における連立方程式を解く処理も、排他的論理和（Ｘｏｒ）を用いることで高速に解くことができる。この本発明における符号化処理７５及び復号化処理７６はコンピュータのプログラム処理以外にも電子回路におけるハードウェアで容易に実現できる。
【０１４６】
ここまでの例は、説明をわかりやすくするため４ビットデータという少ないデータを例にとるものであったが、一般にコンピュータとして信頼性の高いビット数としては８ビット、１６ビット、３２ビット、６４ビットを用いており、ここではこれをｍビットとする。また転送パケットにおいてｍビットのデータ列Ｋnに対し１ビットの連立方程式の解ｐnを用いたが適当な整数ｊを使うことができる。
【０１４７】
この場合、転送できるデータ量は（ｊｍ）ビットとなる。この場合、（１）式は次式のように変形される。
【０１４８】
【数２】
2006271006.tif 000004
【０１４９】
図３４は、本発明のデータ伝送方法で送られるデータパケットの形式である。すなわち１つのデータパケットはデータ列Ｋnとこれを連立方程式に代入することにより求めた解Ｐnの組み合わせを持つ。
【０１５０】
図３５は、図２のデータ伝送部２６に設けた符号化送信部３６による符号化処理のフローチャートである。この符号化送信は、終了条件を満たすまで、Ｋを生成し、そのＫを元に符合化データを作り、相手に送付するものである。
【０１５１】
図３６は、符合化処理の概要である。まず元データを８ビット（１バイト）毎に区切り、生成したデータ列Ｋと論理積を取る。取った論理積の1の数が偶数なら0、奇数なら1を符合化列Ｐに順に並べ、それにＫを添えたものが送信データ（送信パケット）Ｋｐとなる。
【０１５２】
そこで図３５のフローチャートの符号化処理を、1６バイトのデータ
（００  ０１  ０２  ０３  ０４  ０５  ０６  ０７
０８  ０９  ０ａ  ０ｂ  ０ｃ  ０ｄ  ０ｅ  ０ｆ）
を符合化する場合を例にとって説明する。
【０１５３】
（１）まず処理開始直後のステップＳ１〜Ｓ３は初期化作業である。ここで説明のためデータ列Ｋが５５（２進数で０１０１０１０１）だったとする。
【０１５４】
（２）ステップＳ４も初期化作業の一部である。これはステップＳ７において１の数が偶数の場合、０を代入しなくても済むようにここで行っているだけである。
【０１５５】
（３）ステップＳ５はデータ量のチェックである。データ量は１６バイトであり、現在ｉもｌも０であるためステップＳ６に行く。
【０１５６】
（４）ステップＳ６はデータ列Ｋとデータとの論理積を取り、変数ａに代入している。現在、８ｉ＋１＝０であり、Ｄ［０］（データの０番目のデータ）は００なので、ａ＝５５  ａｎｄ  Ｄ［００］＝００になる。
【０１５７】
（５）ステップＳ７はａとの論理積の１の数を数える。現在ａとの論理積は００で１の数は０、すなわち偶数なのでステップＳ９に進む。
【０１５８】
（６）ステップＳ９、Ｓ１０はｌに１を加算して８未満か調べている。これにより、ｌは１になり、８未満なのでステップＳ５に戻る。
【０１５９】
（７）続くステップＳ６ではａ＝Ｋ  ａｎｄ  Ｄ［１］＝５５  ａｎｄ  ０１＝０１になる。これは２進数で０００００００１で１の数は奇数なのでステップＳ８に進む。
【０１６０】
（８）ステップＳ８における「＞＞」はＣ言語の表記で、右シフト命令である。具体的には、１６進数で８０（２進数で１０００００００）を右シフトする。現在ｌは１なので、１回右シフトして、２進数で０１００００００（１６進数で４０）になる。それをｐ［ｉ］に加算するが、現在ステップＳ１によりｉは０で、ステップＳ４によりｐ［０］も０なので、ｐ［０］＝４０になる。
【０１６１】
（９）このようなステップＳ５〜Ｓ１０のループを繰り返し、ｌ＝７になってステップＳ９まで来ているとする（現在ｐ［０］は２進数で０１０１１０１０、１６進数で５ａになっている）。ステップＳ９ではｌが８になるためステップＳ１１に進み、ｉが１になり、ステップＳ3に進む。
【０１６２】
（１０）ステップＳ3、Ｓ４でｌが０、ｐ［１］も０になる。
【０１６３】
（１１）現在、ｉ＝１、ｌ＝０であるため、ステップＳ５のデータ量のチェックもパスし、ステップＳ６でａ＝Ｋ  ａｎｄ  Ｄ〔８］＝５５  ａｎｄ  Ｄ［８］＝００となる。
【０１６４】
（１２）１の数は偶数なのでステップＳ８を通らず、ｐ［１］＝００のままになる。
【０１６５】
（１３）同様にステップＳ５〜Ｓ１０のループを繰り返すと、結局ｐ［１］＝５ａになる。
【０１６６】
（１４）この段階まで来ると、ステップＳ５のデータ量のチェックに引っかかり、前記（１）よりＫ＝５５、前記（９）よりｐ［０］＝５ａ、前記（１３）よりｐ［１］＝５ａなので、ステップＳ１２よりパケット「５５  ５ａ  ５ａ」を送付する。
【０１６７】
（１５）その後もステップＳ１３で終了条件に満たされなければ、ステップＳ１で初期化し、新しいデータ列Ｋを生成し、そのデータ列Ｋを使って符合化を行う。
【０１６８】
図３７は図２の受信復号化部３８による復号化処理の説明図である。図３７において復号化処理は、受信パケットを受信しながらＫの部分に対する上三角化処理７８−１と単位行列化処理７８−２を実行する。単位行列化処理７８−２は、上三角化処理した行列配置におけるＫの部分について対角線方向にビット１が並び、それ以外は全て０とする処理であるが、受信パケットの受信に伴う単位行列化処理７８−２にあってはパケット受信順となる方向の処理となるため、単位行列となるビット位置の配列に対し、左下幅を全て０とする単位行列化を実行する。
【０１６９】
この単位行列化処理７８−２が済むと、逆方向に単位行列化８０を行う。すなわち行列配置のデータ列Ｋの部分について右斜め上半分を全て０とするような逆方向の単位行列化処理を行う。ここで単位行列化処理７８−２及び逆方向の単位行列化処理８０は各位置のデータ列Ｋ0〜ｋ3の各々について注目行におけるビット位置となる単位行列化位置に対し、それよりも前のビットが０となるように下側に位置する列との交換に伴う排他論理和計算を行う。
【０１７０】
このデータ列Ｋの部分における交換や排他論理和計算に伴い、これに続く解Ｐの部分についても同様に交換や排他論理和の計算が行われる。このようにして単位行列化が完了するとデータ抽出処理８２を行う。このデータ抽出処理８２は単位行列化によりＰの部分にすでに復元されたデータビットが存在することから、単純にこれを解けばデータＤ「０」，Ｄ「１」として切出す抽出処理となる。
【０１７１】
図３８、図３９、図４０は、本発明の受信復号化処理のフローチャートである。本発明の復号は、図３８でパケットを受信しつつデータ列Ｋの上三角行列を得る処理、図３９のＸの単位行列を得る処理、図４０の復号データを得る処理の三つに分けられる。
【０１７２】
図４１は、パケットＫｐの受信側で得られる受信データＲ［ｎ］のデータ構造であり、現在４パケット分の受信データＲ［０］〜Ｒ［３］を受信している。ここで、ｘは1でも０でも構わないことを示している。このようパケットＫｐが入る受信データＲ［ｎ］を８つ用意する。
【０１７３】
図３８のフローチャートの処理にあっては、パケットを受信しながら、各受信データのＫの部分が、できるだけ上三角行列となるように、即ち図４１のように、Ｒ［０］のＫは７ビット目が１、Ｒ［１］のＫは７ビット目が０で６ビット目が１、Ｒ［２］のＫは７、６ビット目が０で５ビット目が０となるように処理する。
【０１７４】
この処理の概要を図４２に示す。図４２は、０〜３番目のパケットによる受信データＲ［０］〜Ｒ［３］が受信された後に、新たに５番目のパケットによる受信データＲ［５］が受信された状態である。
【０１７５】
まず図４２（Ａ）のように、過去に受信された受信データＲ［０］〜Ｒ［３］の中で１であるべきビットが０で、且つ新たな受信データＲ［４］の該当ビットが１の時は、両者を入れ換える。即ち、過去に受信された受信データＲ［０］〜Ｒ［３］の中で受信データＲ［１］は１であるべき６ビット目が０であり、且つ新たな受信データＲ［４］の６ビット目が１の時は、両者を入れ換える。
【０１７６】
また図４２（Ｂ）のように、新たな受信データＲ［４］のうち０であるべきビット、即ち５番目のパケットであることから７〜４ビット目が１であった場合、そこが１であるパケット、例えば７ビット目が１である受信データＲ［０］との排他的論理和（Ｘｏｒ）を取り、受信データＲ‘［４］のように１を消す。このような処理により最終的に図４３のようなＫが上三角行列となったデータ列を生成する。そこで図３８のフローチャートにおける処理を説明すると次のようになる。
【０１７７】
（１）処理開始直後、既に受信したデータ数を保持してある変数ｉをステップＳ１で初期化した後、受信パケットＫｐを受信する。ここでは、５５  ５ａ  ５ａを受信したとする。
【０１７８】
（２）ステップＳ3でｌを０にした後、ステップＳ４に進む。現在、ｌもｌ＝０なので、条件が満たされず、ステップＳ１１に進む。
【０１７９】
（３）ステップＳ１１，ステップＳ１２と進むことで、受信データＲ［０］に受信パケットが代入され、ｉがｉ＝１になる。ステップＳ１３ではｉは８以下なのでステップＳ２に戻る。現在のデータは図４４のようになっている。
【０１８０】
（４）続いてステップＳ２にてａａ  ３３  ｃｃを受信したとする。ステップＳ４にてｌ＝０はｉ＝１より小さいのでステップＳ５に進む。
【０１８１】
（５）ステップＳ５にてａは１６進数で８０（２進数で１０００００００）である。一方、Ｋは１６進数でａａ、２進数で１０１０１０１０なので、ステップＳ６による計算（ａ  ａｎｄ  Ｋ）は１０００００００となり０ではない。そこでステップＳ７に進む。
【０１８２】
（６）現段階で受信データＲ［０］は５５  ５ａ  ５ａであり、受信データＲ［０］のうちＫの要素Ｒ［０］．Ｋは５５であるため、ステップＳ７の計算（ａ  ａｎｄ  Ｒ［１］．Ｋ）は０になる。これによりステップＳ８に進み、受信データＲ［０］と新たな受信データＲ［１］は入れ換えを行う。
【０１８３】
（７）ステップＳ１０でｌがｌ＝１になり、ステップＳ４で条件を満たさなくなり、ステップＳ１１、Ｓ１３と進み、現在のデータは図４５のようになる。
【０１８４】
（８）続いてステップＳ２にて８９  ５５  ａａを受信したとする。ステップＳ４の条件はパスするためステップＳ５に行く。
【０１８５】
（９）現段階ではｌ＝０なのでステップＳ５におけるａは８０になる。
【０１８６】
（１０）受信パケットのＫは８９なのでステップＳ７に進む。現在ｌは０でＲ［０］はａａなのでステップＳ９に進む。
【０１８７】
（１１）ステップＳ９の演算では、現在、受信パケットＫｐは８９  ５５  ａａ、受信データＲ［０］はａａ  ３３  ｃｃなので、新しい受信パケットＫｐは７ビット目が消去された２３  ６６  ６６になる。
【０１８８】
（１２）続いてステップＳ１０、ステップＳ４と進み、ａは４０になる。Ｋは現在２3のためステップＳ６の演算結果は０になり、ステップＳ１０，Ｓ４，Ｓ１１，Ｓ１３と進み図４６のようなデータ構造になる。
【０１８９】
（１３）このようなループを繰り返し、現在データが図４７のようになっており、Ｓ２において、新しいパケット５６  3ｃ  3ｃが届いたとする。なお、現在ｉは７になっている。
【０１９０】
（１４）ステップＳ３〜Ｓ１０のループを繰り返し、ステップＳ１２に来た段階ではＫｐは００  ００  ００になり、図４８のようなデータ構造のままステップＳ１４に進む。
【０１９１】
（１５）ステップＳ１４以降では、Ｋが上三角行列かどうかチェックしている。即ち、ステップＳ１６でａを２進数で１０００００００から０００００００１まで１つずつシフトしながらループして、ステップＳ１７で該当するビットが１かどうかチェックしている。ここで該当するビットより左のビットは、全て０であることが、前処理で保証されている。現在の例ではＲ［７］の該当する０ビット目が１でないので、ステップＳ２に戻る。
【０１９２】
（１６）このようにしてＫが完全な上三角行列になると、図３８のフローチャートに進むことができる。この際のデータは図４９のようになる。
【０１９３】
図３９のフローチャートでは、図３８で得られた上三角行列を、単位行列に変換する単位行列化を行う。この単位行列化は、ある要素について本来０であるビットが１だった場合、そこが１であるべき他の要素との排他的論理和を取り、１を消去するものである。例えば、図５０（Ａ）における要素Ｒ［３］のように、本来０である２ビット目が１だった場合、そこが１であるべき要素Ｒ［６］との排他的論理和を取り、図５０（Ｂ）のように、１を消去する。そこで図３９の単位行列化の処理を説明すると次のようになる。
【０１９４】
（１）ステップＳ２０で下から上に向かって処理するためｉをｉ＝６にする。ｉは０以上なのでステップＳ２１を通り、ステップＳ２２に行く。ここで現在のデータは図５１のようなものだとする。
【０１９５】
（２）ステップＳ２２ではｉ+１＝７なのでａは１６進数で０１、２進数で０００００００１になる。
【０１９６】
（３）ステップＳ２３でｌもｌ＝６になり、０以上なのでステップＳ２４を通りステップＳ２６に進む。
【０１９７】
（４）現在、Ｒ［６］．Ｋは０３であり、ａは１であるため、ステップＳ２６の論理積は０とならず、そこでステップＳ２７に進む。
【０１９８】
（５）ステップＳ２７の排他論理和演算により、Ｒ［６］は０２  ３３  ３３になる。
【０１９９】
（６）ステップＳ２８でｌが１引かれｌ＝５になり、ステップＳ２４に戻り、ステップＳ２６、ステップＳ２７を通ることで、Ｒ［５］も０４  ０ｆ  ｆ０に変化する。
【０２００】
（７）ステップＳ２４〜Ｓ２８のループを繰り返し、ｌが−１になり、ステップＳ２５に行く時には、Ｒ［０］〜Ｒ［６］の全てのＫの０ビット目は０になり、図５２のようなデータになっている。
【０２０１】
（８）ステップＳ２５でｌが５になり、ステップＳ２２でａは０２になる。
【０２０２】
（９）同様にステップＳ２４〜ステップＳ２８のループでＲ［０］〜Ｒ［５］のＸ要素の１ビット目が１の場合、具体的にはＲ［０］、Ｒ［２］、Ｒ［3］、Ｒ［６］との排他的論理和を取り、該当ビットを０にする。具体的には図５３のようなデータになる。
【０２０３】
（１０）このような演算を繰り返すことでｉが０になった際は、図５４のようなＫが単位行列のデータを得る。
【０２０４】
図４０のフローチャートにあっては、図３９のＫの単位行列を得る段階で変換したｐの要素を並び変えて、データを復元する。ここで図３９の単位行列化によって現在のデータは図５５のようになっているとする。このｐの部分を２進数で表すと図５６のようになる。そこで図５６の要素ｐを例にとって図４０の処理を説明すると次のようになる。
【０２０５】
（１）ステップＳ３０でｉを初期化し、ステップＳ３１でＤ［０］も初期化する。ステップＳ３１で初期化するのは、ステップＳ３５の条件が成立した際に何もせずにステップＳ３７に行くためで、もしステップＳ３６とは逆に該当するビットをクリアするのであればこの処理は必要ない。
【０２０６】
（２）ステップＳ３２でａを８０にし、ステップＳ３３でｌをｌ＝０にする。
【０２０７】
（３）ステップＳ３４に示す「<<＝１」という演算は、１つ左へシフトする意味である。現在Ｄ［０］は０なので、シフトしても０のままである。
【０２０８】
（４）ステップＳ３５では、ｉ が７以下なのでｉ／８は０になる。このため、Ｒ［０］のＰ［０］の７ビット 目が１かどうか見ていることになる。この値は０なのでステップＳ３７に進む。
【０２０９】
（５）ステップＳ３７でｌに１を足して、ステップＳ３８で７以下かどうかを調べている。現在、ｌは１なのでステップＳ３４に戻る。
【０２１０】
（６）このようにステップＳ３４〜Ｓ３８では、Ｒ［０］〜Ｒ［７］のＰ［０］の７ビット目を見ている。現在のデータでは、Ｐ［０］の７ビット目はすべて０なので、一度もステップＳ３６を通らずステップＳ３９に進む。すなわち、Ｄ［０］はステップＳ３１で設定した０のままである。
【０２１１】
（７）ステップＳ３９でｉが１になり、ステップＳ４０でａが１つ右シフトして４０になり、ステップＳ３３に戻る。今度はＰ［０］の６ビット目を調査するループに入る。
【０２１２】
（８）今度のループ（ｉ＝１）では、ｌが７になった段階で、Ｒ［７］のＰ［０］の６ビット 目が1なので、Ｄ［１］にｌが代入される。
【０２１３】
（９）さらに次のループ（ｉ＝２）ではｌがｌ＝６になった段階で、Ｒ［６］のＰ［０］の５ビット 目が１なので、Ｄ［２］に１が代入される。
【０２１４】
（１０）このループではステップＳ３７でｌが加算され７になり、ステップＳ３８の条件を満たさないためステップＳ３４に戻る。ステップＳ３４で、Ｄ［２］が左にシフトされるので２になり、ステップＳ３５、Ｓ３７、Ｓ３８、Ｓ３９と進み（但し、ｌ＝７の時はステップＳ３６を通らない）、更にステップＳ４１、Ｓ４２、Ｓ３３と進む。
【０２１５】
（１１）このようにループを重ねてｉが８になる際、ａは１になっている。このため、ステップＳ3２に行き、ａが８０になった後、次のループになる。
【０２１６】
（１２）次からのループ（ｉ＝８〜１５）では、ステップＳ３５におけるｉ／８が１になるため、Ｒ［０］〜Ｒ［７］のＰ［１］要素の各ビットの１，０を見る。
【０２１７】
（１３）このようなループを繰り返し、ステップＳ４１で終了条件が満たされた段階では、Ｄ［０］、Ｄ［１］、Ｄ［２］、は００  ０１  ０２  ０3  ０４  ０５  ０６  ０７  ０８  ０９  ０ａ  ０ｂ  ０ｃ  ０Ｄ  ０ｅ  ０ｆというデータが復元されている。
【０２１８】
ここで本発明のデータ転送方法に使用するデータ列Ｋの生成を説明する。データ列Ｋの生成にはいくつかの方法が考えられるが、１番簡単な方法は、１〜２m−１までの数字を乱数を使って生成し、これをデータ列Ｋに使う方法である。
【０２１９】
しかしながら、この乱数によるデータ列Ｋの生成にあっては、受信側でｍ個のパケットを受け取っても単位行列化できない可能性がある。そこで初めのｍ個のパケットついてはＫ＝２n（但しｎは送信パケットの番号）を送る方法が考えられる。この場合にあっては全パケットを消失無しに受け取った場合、直ちに元データを復元することができる。
【０２２０】
またデータ列Ｋの中のビット１が立っている数が少ないため単位行列化が容易であり、高速に解くことができる。一方、パケット消失を考慮して、更にｍを超える数のパケットを送ることになるが、このｍ＋１番目以降のデータ列Ｋについてはすでに説明したように乱数を使えば良い。
【０２２１】
この場合、乱数のうちの最初のものついては単位行列化に変換しやすい数値を使用する。例えばｍ＝８の場合、
ｍ＋１番目は「１１１１１１１１」
ｍ＋２番目は「０１０１０１０１」
ｍ＋３番目は「１０１０１０１０」
ｍ＋４番目は「００００１１１１」
ｍ＋５番目は「１１１１００００」
を各々使う。
【０２２２】
また別のデータ伝送方法として送信側と受信側で同じデータ列Ｋのテーブル、または乱数生成ルーチンと代数の種を予め設定しておき、送信するパケットにデータ列Ｋの代わりにｎ番目のパケットというパケット情報をもたせることでデータ列の転送を不要にすることができる。ここで本発明のデータ伝送方法にあっては、ひとつのパケットの塊でｊｍビットのデータを送ることができる。この場合、図３４のデータパケットの形式を用いると個々のパケットの大きさが（ｊ＋ｍ）ビットとなる。この場合の符号化率はｊ／（ｊ＋ｍ）となる。通常のＩＰ通信におけるひとつのパケットの大きさは１５００バイト（＝１２０００ビット）という制限があるため余り大きなデータを送る場合には符号化率が落ちる危険性がある。
【０２２３】
そこで本発明にあって、図５７のように、送信側でひとつの大きな元データ７２を適当な大きさに分割した分割データ７２−１，７２−２，７２−３・・・として符号化することが考えられる。この時、転送するパケットの中にデータパケット系列Ｋと解ｐの他にブロック番号ｑを付加しブロックを区別する。
【０２２４】
このようなデータを分割してパケット転送する際に問題となるのは、パケット転送により受信された分割されたデータを復号化した時点で、どのようにして受信側から送信側にブロックデータの転送終了を通知して、次のブロックのデータを送信してもらうかである。
【０２２５】
この問題を解決するにあたって本発明によれば、例えば図５８の方法をとる。図５８にあっては、送信側がパケット消失率を考慮した数ｄ個のパケットを送信するパケット送信信８４を行う。受信側にあっては（ｎ＋α）個以上のパケット受信８６があった時に復号化８８を行う。送信側にあってはｄ個のパケットを送信すると次のブロックの送信に移動する。
【０２２６】
ここで受信側の復号化に用いるα個は、ｍ個のパケットを受信しただけでは単位行列が求められない可能性がある場合の安全率である。この図５８の方法は、伝送路のパケット消失率が既知で且つ変動が少ない時に有効であるが、安全率αを大きくすると無駄が大きくなる可能性が高い。そこでこの問題を解決する方法として、全データ分のパケットを送信した後に、受信側が復号化に失敗したブロック番号に送信側に伝え、再送を行う方法がある。
【０２２７】
図５９は、受信側で復号化９２が完了した段階で復号完了信号９４を送信側に送る本発明の方法である。この場合には、伝送経路のパケット消失率が変動しても実際に受信されたパケット数に基づく復号化ができ、確実にデータを送ることができる。しかしながら、この図５９の方法にあっては、送信側で符号化が完了するパケットを送付してから、復号完了信号９４が届くまでの間、受信側で破棄９６となる無駄なパケットを送信することになり、特にＲＴＴの大きい回線では効率が悪くなる。
【０２２８】
図６０は、図５８と図５９の両者を組み合わせた本発明の方法である。この方法にあっては、例えばブロックｑを受信して復号化９８を行った後に受信側で、次のブロックｑ＋１について復号失敗１００となった時には送信側に復号失敗信号１０２を転送し、送信側は送信に失敗したブロックからデータを再送する。しかし、図６０８の方法にあっては、受信側が復号失敗信号１０２を出してそのブロックのデータを再送するまでの間に受信したブロックは破棄１０４となり効率が悪い。
【０２２９】
この問題は図６１９の方法のようにデータを回線のＲＴＴとｎの値に応じた適当な大きさのブロック分だけバッファリングすることで改善できる。図６１にあっては、ブロックｑの復号化１０８−１に失敗して復号失敗信号１１０を送信している。ここで送信側にあってはブロックｑ，ｑ＋１，ｑ＋２のパケットの送信を終了し、ブロックｑ＋３のパケットを送信している途中で復号失敗信号１１０を受信している。
【０２３０】
このためブロックｑ＋１，ｑ＋２のパケットは受信側に復号に十分な量が既に届いている可能性が高いため、復号失敗信号１１０を受信した際に送信側はブロックｑ，ｑ＋１，ｑ＋２のパケット転送につき通常より少ないパケットを送信し、それまで受信したパケットはバッファ１０６にブロック毎に格納されていることから最初により転送された少ないパケットを格納し、全体として復号化に必要なパケットを受信することができる。
【０２３１】
またブロックｑ＋３にしても既に送ったパケットは受信側に到達している可能性があるため、既に送ったパケット数を送信側に記録しておき、次のブロックｑ＋３のパケットを送信する際に所定量であるｄ個から既に送ったパケット数を引いた数だけのパケットを送信し、この送信より受信したパケット１０４−４をバッファ１０６のブロックｑ＋３に格納すればよい。
【０２３２】
更に受信側からの復号失敗信号１１０の中に受信側における単位行列化の際にデータ列Ｋのうち、他の情報ビットがないことで単位行列が求められないことを転送することにより、再送時に必要な情報のみを伝えることで効率化を図ることもできる。
【０２３３】
更に図６０及び図６１にあっては、例えばブロックｑの復号に失敗してブロックｑ＋１のパケット受信中に判断されて、復号失敗信号を転送する場合を例にとっているが、ブロックｑの復号化が完了していない時点で次のブロックｑ＋１またはｑ＋２の高速ブロックについて所定量以上のパケットを受信した場合に復号失敗と判断して、復号失敗信号の転送により再送を行わせても良い。
【０２３４】
図６２は本発明のデータ伝送方法の他の実施形態であり、この実施形態にあっては連立方程式の解放を利用せずに符号化及び復号化を行うようにしたことを特徴とする。図６２においては、まず元データ１１２を所定長単位に分割してＤ０〜Ｄ３としている。例えば元データ１１２は１２バイトデータであり、これを３バイト単位に４バイトの分割データＤ０〜Ｄ３としている。
【０２３５】
このように元データ１１２の分割データＤ０〜Ｄ３について所定のデータ列Ｋｎとして（ｋ0，ｋ1，ｋ2，ｋ3，ｋ4）を準備している。このデータ列Ｋｎの（ｋ0〜ｋ4）のそれぞれにつき、データビット１の位置に対応する元データ１１２の分割データを取り出して、排他論理和Ｘｏｒを求める。例えばｋ0＝１０００にあってはビット１に対応した分割データＤ０をそのまま格納する。
【０２３６】
ｋ1，ｋ2，ｋ3についてもビット１がひとつしかないことからそれぞれに対応した分割データＤ０，Ｄ１，Ｄ２，Ｄ３を取り込む。最後のｋ4＝１００１にあってはビット１に対応した２つの分割データＤ０とＤ３を取り出して両者の排他論理和ＸＯＲを求める。これがこの実施形態における符号化１１４である。
【０２３７】
そしてこの符号化１１４によるデータ列Ｋｎと排他論理和ＸＯＲの組をｎ＝０〜４の各パケットＫｐとしてパケット伝送１１６を行う。受信側にあっては、復号化１１８によるパケットのうちひとつが消失して４つを受信したとすると、この４つの受信パケットからデータ列Ｋｎと排他論理和ＸＯＲの行列配置を作り出した後に、データ列Ｋｎの部分について単位行列化を行い、この単位行列化に伴う排他論理和ＸＯＲのデータが符号化１１４における分割データＤ０，Ｄ１，Ｄ２，Ｄ３として抽出される。
【０２３８】
この図６２のデータ伝送方法の処理は、連立方程式を使わない分、処理が簡単にできる。具体的には符号化１１４の処理において連立方程式の排他論理和の計算において１を数える必要がなく、また復号化１１８にあっては図４０のフローチャートに示したデータ抽出処理８２が不要となる。
【０２３９】
尚、上記の実施形態における本発明のデータ伝送方法としては、ピアツーピア型のデータ伝送、すなわち１対１で高速にデータ伝送を行う場合を例にとるものであったが、ブロードキャストやマルチキャストなどの技術を用いることで、１対ｎとして同時に多数の相手先に対しデータを伝送する場合にも適用可能である。
【０２４０】
このような１対ｎのデータ伝送にあっては図５９，図６０，図６１のような受信側から復号化完了や復号化失敗の応答を送信側に行う方法を用いることはできないが、図５８のように符号に十分な所定量のパケットを送信する方法で実現できる。
【０２４１】
また本発明のデータ伝送方法はＵＤＰ通信を対象としているが、標準のＵＤＰ通信以外の通信機能を付加しても良い。例えばより信頼性を高めるためにパケットにチェックサム（ＣＲＣ）をつけ、受信した直後にチェックサムをチェックし正しいパケットかどうかを調べ、正しく無い場合にはパケットを破棄するようなしくみを加えても良い。
【０２４２】
また本発明は上記の実施形態に限定されず、その目的と利点を損なうことのない適宜の変形を含む。また本発明は上記の実施形態に示した数値による限定は受けない。
【図面の簡単な説明】
【０２４３】
【図１】本発明によるピアツーピア型のデータ配信システムの説明図
【図２】本発明で使用するピアの機能構成のブロック図
【図３】図２のピアに使用されるコンピュータのハードウェア環境の説明図
【図４】従来の配信方法と対比して本発明のグループ分けによる配信方法を示した説明図
【図５】図４のピアＰ０で使用されるグループ情報の説明図
【図６】本発明による配信経路の各ピアから見たグループ分けと配信ルートの説明図
【図７】２つのピアが存在している状態で三つ目の新しいピアが出現した際のグループ分けの説明図
【図８】２つの既存グループが存在している状態で一方のグループに近い位置に新しいピアが出現した場合のグループ分けの説明図
【図９】図８に続いて次に近い位置と既存グループと新ピアとの間で行うグループ分けの説明図
【図１０】図９に続くグループ分けの説明図
【図１１】本発明によるグループ作成処理のフローチャート
【図１２】図１１に続くグループ作成処理のフローチャート
【図１３】本発明の動的なグループ作成の不具合に対し強制的にグループ分けの再計算を行わせる説明図
【図１４】本発明のデータ配信で使用する宛先情報と経路情報の説明図
【図１５】宛先情報、経路情報及びデータで構成される配信情報の説明図
【図１６】経路情報がない場合に起きる問題の説明図
【図１７】本発明のデータ配信で使用する宛先情報と経路情報の他の例の説明図
【図１８】本発明によるデータ発信処理のフローチャート
【図１９】本発明によるデータ中継処理のフローチャート
【図２０】データ配信先のピアが動作していない場合のデータ共有方法による問題の説明図
【図２１】本発明の代理ピアによるデータバッファリング方法の説明図
【図２２】本発明で使用する代理ピアの機能構成のブロック図
【図２３】本発明の代理ピアによる代理処理のフローチャート
【図２４】本発明の代理ピアによるデータ共有方法の説明図
【図２５】代理ピアで複数のピアを代理する場合の説明図
【図２６】データ配信中に代理ピアが動作を停止した場合の説明図
【図２７】代理ピアを複数配置したデータ配信方法の説明図
【図２８】図２７に続く代理ピアを複数配置したデータ配信方法の説明図
【図２９】代理ピアで更新されたデータを高信頼化する方法の説明図
【図３０】本発明のデータ伝送で起きるパケット消失と入換えの説明図
【図３１】ＴＣＰ通信の問題点の説明図
【図３２】本発明によるＵＤＰ通信とデータ修正によるデータ伝送方法の説明図
【図３３】プール代数による連立方程式の解法を利用した本発明のデータ伝送方法を４ビットデータの伝送を例にとって示した説明図
【図３４】本発明により送信される符号化データの一般形のフォーマット説明図
【図３５】８ビットデータを対象とした本発明の符号化処理のフローチャート
【図３６】本発明による復号化処理の概要の説明図
【図３７】図３５で送信された符号化データの受信に基づく復号化処理の基本的な概念の説明図
【図３８】図３７における受信パケットに基づく三角化処理と単位行列化処理のフローチャート
【図３９】図３７における逆方向単位行列化処理のフローチャート
【図４０】図３７におけるデータ抽出処理のフローチャート
【図４１】本発明により復号化される受信データ構造の説明図
【図４２】図３８における基本的な処理内容の説明図
【図４３】図３８の処理で得られたＫの上三角行列の説明図
【図４４】１番目のパケット受信で得られた受信データの説明図
【図４５】２番目のパケット受信で得られた受信データの説明図
【図４６】３番目のパケット受信で得られた受信データの説明図
【図４７】７番目のパケット受信で得られた受信データの説明図
【図４８】８番目のパケット受信で得られた受信データの説明図
【図４９】図３８の処理で得られた上三角行列の説明図
【図５０】図３９による単位行列の基本的な処理内容の説明図
【図５１】ｉ＝６とした際のデータの説明図
【図５２】ｉ＝６による処理終了時のデータの説明図
【図５３】ｉ＝５による処理終了時のデータの説明図
【図５４】ｉ＝０による処理終了時のデータの説明図
【図５５】図４０のデータ抽出処理の対象となる単位行列化済みのデータの説明図
【図５６】図５５のｐの部分を取出したデータの説明図
【図５７】本発明の符号化データを分割してパケット伝送する説明図
【図５８】パケット消失率を考慮した本発明のデータ伝送方法の説明図
【図５９】符号化データのブロック毎に復号完了信号を応答送信する本発明のデータ伝送方法の説明図
【図６０】復号失敗信号を応答送信してパケットを再送させる本発明のデータ伝送方法の説明図
【図６１】受信データをバッファして復号失敗信号の応答送信による再送パケット数を少なくする本発明のデータ伝送方法の説明図
【図６２】連立方程式の解法を使用せずにデータ修正可能な本発明のデータ伝送方法の説明図
【符号の説明】
【０２４４】
１０：ピア
１２：代理ピア
２０：ピアアプリケーション２０
２２：ファイル格納部
２４：データ配信部
２６：データ伝送部
２８：パケット伝送部
３０：グループ情報作成部
３２：グループ情報
３４：データ発信部
３５データ中継部
３６：符号化送信部
３８：受信復号化部
４０：ネットワーク
４２：配信情報
４４：宛先情報
４６：経路情報
５０：代理処理部
５１：代理依頼元情報
２００：ＣＰＵ
２０１：バス
２０２：ＲＡＭ
２０４：ハードディスクドコントローラ（ソフト）
２０６：ハードディスクドライブ
２１０：フロッピィディスクドライバ（ソフト）
２１４：ＣＤ−ＲＯＭドライバ（ソフト）
２１８：マウスコントローラ
２２２：キーボードコントローラ
２２６：ディスプレイコントローラ
２３０：通信用ボード
５９２：第２宛先指定フラグ
【図１】
2006271006.tif 000005
【図２】
2006271006.tif 000006
【図３】
2006271006.tif 000007
【図４】
2006271006.tif 000008
【図５】
2006271006.tif 000009
【図６】
2006271006.tif 000010
【図７】
2006271006.tif 000011
【図８】
2006271006.tif 000012
【図９】
2006271006.tif 000013
【図１０】
2006271006.tif 000014
【図１１】
2006271006.tif 000015
【図１２】
2006271006.tif 000016
【図１３】
2006271006.tif 000017
【図１４】
2006271006.tif 000018
【図１５】
2006271006.tif 000019
【図１６】
2006271006.tif 000020
【図１７】
2006271006.tif 000021
【図１８】
2006271006.tif 000022
【図１９】
2006271006.tif 000023
【図２０】
2006271006.tif 000024
【図２１】
2006271006.tif 000025
【図２２】
2006271006.tif 000026
【図２３】
2006271006.tif 000027
【図２４】
2006271006.tif 000028
【図２５】
2006271006.tif 000029
【図２６】
2006271006.tif 000030
【図２７】
2006271006.tif 000031
【図２８】
2006271006.tif 000032
【図２９】
2006271006.tif 000033
【図３０】
2006271006.tif 000034
【図３１】
2006271006.tif 000035
【図３２】
2006271006.tif 000036
【図３３】
2006271006.tif 000037
【図３４】
2006271006.tif 000038
【図３５】
2006271006.tif 000039
【図３６】
2006271006.tif 000040
【図３７】
2006271006.tif 000041
【図３８】
2006271006.tif 000042
【図３９】
2006271006.tif 000043
【図４０】
2006271006.tif 000044
【図４１】
2006271006.tif 000045
【図４２】
2006271006.tif 000046
【図４３】
2006271006.tif 000047
【図４４】
2006271006.tif 000048
【図４５】
2006271006.tif 000049
【図４６】
2006271006.tif 000050
【図４７】
2006271006.tif 000051
【図４８】
2006271006.tif 000052
【図４９】
2006271006.tif 000053
【図５０】
2006271006.tif 000054
【図５１】
2006271006.tif 000055
【図５２】
2006271006.tif 000056
【図５３】
2006271006.tif 000057
【図５４】
2006271006.tif 000058
【図５５】
2006271006.tif 000059
【図５６】
2006271006.tif 000060
【図５７】
2006271006.tif 000061
【図５８】
2006271006.tif 000062
【図５９】
2006271006.tif 000063
【図６０】
2006271006.tif 000064
【図６１】
2006271006.tif 000065
【図６２】
2006271006.tif 000066